Optional step for added flavor. Marinate chicken pieces in some yogurt, a pinch of turmeric, chili powder, salt, and lemon juice. Let it sit for a few hours or overnight.
In a large skillet or pot, melt the ghee or butter over medium heat. Add the chopped onions and sauté until translucent. Add the minced garlic and grated ginger, sautéing for another 2 minutes until aromatic.
Stir in the turmeric, cumin, coriander, garam masala, and chili powder. Cook for about 1 minute until the spices are fragrant.
Add the chicken pieces to the skillet. Cook until they are browned on all sides.
Pour in the tomato puree, mixing well to ensure the chicken is coated with the tomatoes and spices. Let it simmer for about 10 minutes.
Pour in the heavy cream and stir well. Reduce the heat to low and let the butter chicken simmer for an additional 10-15 minutes. The sauce should become creamy and thick.
Taste the sauce and adjust with salt or additional spices if needed.
Once cooked, transfer the butter chicken to serving bowls. Garnish with fresh cilantro.