Season the chicken with garam masala, cumin, paprika, chili powder, turmeric, salt, and pepper. Toss to coat evenly.
Heat butter and oil in a skillet over medium-high heat. Add chicken and sear until browned on the outside. Don’t worry about cooking it through yet; you’ll finish it later.
Remove chicken and set aside. In the same pan, add onion and sauté until soft and translucent, about 4–5 minutes.
Stir in garlic and ginger and cook until fragrant, 30–60 seconds. Don’t burn them or you’ll invite bitterness to the party.
Pour in tomato puree and simmer for 5–7 minutes until it thickens slightly. Scrape up any browned bits from the bottom for extra flavor.
Lower heat to medium. Return the chicken to the pan. Stir in heavy cream (and yogurt if using). Simmer gently for 8–10 minutes, until the chicken is cooked through and the sauce is silky.
Lower heat to medium. Return the chicken to the pan. Stir in heavy cream (and yogurt if using). Simmer gently for 8–10 minutes, until the chicken is cooked through and the sauce is silky.
Taste and adjust salt if needed. Garnish with chopped cilantro and serve hot.