Prep the chicken: Pat the chicken dry and cut into bite-size pieces. Season with 1 teaspoon salt and 1/2 teaspoon pepper.
Set aside while you chop the aromatics.
Warm the pan: Heat oil or ghee in a large skillet or Dutch oven over medium heat. If using whole spices, add them now and let them sizzle for 30–60 seconds until fragrant.
Sweat the aromatics: Add the chopped onion with a pinch of salt. Cook 7–9 minutes, stirring often, until soft and lightly golden.
Stir in the garlic and ginger, and cook 1–2 minutes more.
Bloom the spices: Add curry powder and optional ground spices. Stir for 30–60 seconds to coat the onions and release the aromas. If the pan looks dry, add a splash of oil to prevent burning.
Add tomatoes: Pour in the crushed tomatoes.
Simmer 3–4 minutes to thicken slightly and mellow the acidity.
Cook the chicken: Add the chicken pieces and toss to coat in the sauce. Cook 4–5 minutes, stirring occasionally, until the exterior is opaque.
Add the creaminess: Stir in coconut milk or heavy cream. Bring to a gentle simmer, then reduce heat to low.
Cover and cook 10–12 minutes, or until the chicken is cooked through and tender.
Adjust and finish: Taste and season with salt, pepper, and a pinch of sugar or honey to balance the tomatoes. Add a squeeze of lemon or lime for brightness. If you used whole spices, fish them out.
Rest and serve: Let the curry sit off the heat for 5 minutes to settle.
Garnish with chopped cilantro. Serve with rice or warm flatbread.