In a bowl, combine yogurt, garlic, ginger, garam masala, paprika, and salt. Add chicken and toss to coat. Marinate at least 30 minutes.
Heat a large skillet over medium heat with oil. Cook marinated chicken until lightly browned and just cooked through. Remove and set aside.
In the same pan, melt butter. Add onion and cook until soft and lightly golden.
Stir in cumin, coriander, turmeric, and chili powder. Cook briefly until fragrant.
Add tomato purée and simmer 8–10 minutes until thickened and rich.
Reduce heat to low. Stir in cream gently until smooth.
Return chicken to the pan and simmer 5–10 minutes until tender and coated in sauce.
Taste and adjust seasoning. Rest briefly before serving. Garnish if desired.