Marinate the chicken. In a bowl, combine yogurt, lemon juice, half the garlic and ginger, 1 teaspoon garam masala, 1/2 teaspoon cumin, 1/2 teaspoon coriander, 1/2 teaspoon turmeric, 1/2 teaspoon Kashmiri chili or paprika, and 1 teaspoon salt. Add chicken and coat well.
Cover and chill at least 30 minutes, preferably 2–4 hours. Overnight is great.
Sear the chicken. Heat 1 tablespoon oil or ghee in a large skillet over medium-high. Shake excess marinade off the chicken.
Sear in batches until lightly charred and just cooked through, about 3–4 minutes per side. Transfer to a plate. Don’t overcrowd the pan.
Sauté the aromatics. In the same pan, lower heat to medium.
Add 1 tablespoon butter and the chopped onion. Cook, stirring, until soft and golden, 6–8 minutes. Add remaining garlic and ginger; cook 1 minute until fragrant.
Build the spice base. Stir in remaining cumin, coriander, turmeric, and a pinch of cayenne if using.
Toast 30 seconds to awaken the spices.
Add tomatoes and simmer. Pour in tomato puree and add 1/2 teaspoon salt, a few cracks of black pepper, and the bay leaf if using. Simmer gently for 10–12 minutes, stirring occasionally, until slightly thickened and the raw tomato smell mellows.
Blend for a silky sauce. Fish out the bay leaf. Carefully blend the sauce until smooth using an immersion blender right in the pan, or transfer to a blender and return to the skillet.
This step gives that signature creamy texture.
Finish with cream and butter. Reduce heat to low. Stir in the cream, 1 teaspoon sugar or honey, remaining 1 tablespoon butter, and 1 teaspoon garam masala. Simmer 3–5 minutes until glossy and rich.
Taste and adjust salt, sweetness, or heat.
Combine and warm through. Add the seared chicken and any juices. Simmer on low for 5 minutes so flavors mingle and chicken stays tender. If sauce is too thick, splash in water or a bit more cream.
Garnish and serve. Swirl in a tiny knob of butter for shine, sprinkle with chopped cilantro, and serve hot with basmati rice or warm naan.