Stir the yogurt, lemon juice, garlic, ginger, garam masala, cumin, paprika, and salt together in a large bowl.
Add the chicken and toss until evenly coated. Cover and refrigerate for at least 30 minutes or up to 24 hours.
Char the chicken:
Heat a large skillet over medium-high heat. Add half of the marinated chicken in a single layer and cook for 3 to 4 minutes per side, until browned and nearly cooked through.
Transfer the chicken to a plate and repeat with the remaining chicken. Do not worry if the skillet develops browned bits.
Make the masala and finish:
Melt the ghee in the same skillet over medium heat. Add the onion and cook for 5 to 6 minutes, until soft and golden.
Add the garlic, ginger, garam masala, cumin, and cayenne. Cook for 1 minute, stirring constantly.
Add the crushed tomatoes and salt. Simmer for 10 minutes, until slightly reduced and glossy.
Stir in the cream and return the chicken and its juices to the skillet. Simmer for 5 minutes, until the chicken is cooked through.
Fold in the cilantro. Serve with warm basmati rice and naan.
Notes
Marinate the chicken for at least 30 minutes for better flavor and tenderness.
The sauce can be made one day ahead and reheated gently before adding the chicken.
Use less cayenne for a milder curry or add a pinch more for extra heat.