Pat 2 pounds chicken thighs dry with paper towels; season lightly with salt. Heat 1½ tablespoons ghee in wide pot or deep skillet over medium-high heat.
Brown chicken in batches until just golden on outside — not cooked through. Remove and set aside.
Add remaining 1½ tablespoons ghee to same pot. Add 1 teaspoon mustard seeds; let pop, about 30 seconds.
Add onion and pinch of salt. Cook 8–10 minutes, stirring often, until deeply softened and lightly golden. Do not rush this step.
Add garlic and ginger; cook 30–60 seconds until fragrant.
Add tomatoes, serrano chiles, 1½ tablespoons curry powder, 1 teaspoon coriander, 1 teaspoon cumin, ½ teaspoon turmeric, and pinch of cinnamon. Cook 5–7 minutes, stirring frequently, until mixture darkens and looks jammy. If mixture sticks, add splash of water and continue cooking.
Return browned chicken to pot; stir to coat in spiced base. Add 1½ cups water or chicken stock, scraping up browned bits from bottom of pot.
Bring to simmer, then reduce heat. Simmer uncovered 15–20 minutes, stirring occasionally, until sauce is loose and glossy.
Reduce heat to low. Slowly stir in ½ cup plain yogurt, a little at a time. Add ¼ cup coconut milk if using. Simmer gently 3–5 minutes.
Turn off heat. Stir in ½ teaspoon garam masala. Adjust salt. Rest 10 minutes before serving.
Serve over steamed basmati rice; top with fresh chopped cilantro if desired.