Marinate the chicken. In a bowl, mix yogurt, lemon juice, ginger, garlic, garam masala, cumin, paprika, turmeric, and salt. Add chicken and coat well.
Cover and refrigerate at least 30 minutes, ideally 2–4 hours.
Optional cashew prep. If using cashews, soak them in hot water for 15 minutes. Drain and set aside.
Sear the chicken. Heat a large skillet or Dutch oven over medium-high. Lightly oil the pan.
Add marinated chicken in a single layer and sear 2–3 minutes per side until lightly charred. Do this in batches to avoid steaming. The chicken does not need to be fully cooked yet.
Transfer to a plate.
Start the sauce base. Lower heat to medium. Add 2 tablespoons butter (plus the oil, if using). Add onion and a pinch of salt.
Cook, stirring, until soft and lightly golden, 6–8 minutes.
Add aromatics and spices. Stir in garlic and ginger. Cook 1 minute until fragrant. Add coriander, cumin, paprika, and garam masala.
Toast 30–45 seconds, stirring to coat the onions.
Build the tomato base. Pour in tomato puree. Simmer 8–10 minutes, stirring occasionally, until slightly thick and the raw tomato smell mellows.
Blend for a silky sauce. Transfer the tomato-onion mixture to a blender. Add soaked cashews and water/stock.
Blend until completely smooth. Be careful with hot liquids; vent the lid slightly. Alternatively, use an immersion blender directly in the pot once you add the liquid.
Simmer with chicken. Return the blended sauce to the pot.
Add the seared chicken and any juices. Simmer gently on low heat for 8–10 minutes, or until the chicken is cooked through and tender.
Finish creamy and buttery. Stir in heavy cream and the remaining 1 tablespoon butter. Add sugar or honey to balance, and salt to taste.
Simmer 2–3 minutes more. For more warmth, finish with a pinch of garam masala.
Serve. Spoon over rice or scoop with naan. Garnish with cilantro and a squeeze of lemon if you like.