In a small bowl, combine coriander, cumin, cayenne, and salt. Sprinkle both sides of chicken with spice mix, pressing to adhere. Place chicken in a shallow pan, cover with plastic film, and refrigerate for at least 30 minutes. Meanwhile, whisk together yogurt, ghee, garlic, and ginger in a large bowl. Cover and set aside so the flavors have a chance to blend.
Heat the ghee in a large Dutch oven or heavy bottom saucepan set over medium heat until shimmering. Add onion and cook, stirring frequently, until lightly caramelized, 8-10 minutes. Add the garlic, ginger, pepper, tomato paste, and garam masala; cook, stirring frequently, until fragrant, 1-3 minutes. Add tomatoes, sugar, and salt, then bring to a boil. Reduce heat to medium-low, cover, and simmer for 12-15 minutes, stirring occasionally. Stir in cream and remove pan from heat, covering to keep warm.
While the sauce is simmering, adjust an oven rack to the upper-middle position, and preheat the broiler. Line a baking sheet with foil. Using tongs, dip each piece of chicken into the yogurt mixture, then arrange in a single layer on the prepared baking sheet. The chicken should be coated with a thick layer of yogurt. Discard any excess yogurt mixture. Broil until the thickest parts of the chicken register 165 degrees F on an instant-read thermometer and exterior is lightly charred in spots, 10-18 minutes, flipping the chicken halfway through cooking.
Wait 5 minutes, then cut the chicken into 1-inch chunks and stir into sauce. Stir in cilantro. Serve over basmati rice.
Leftovers will keep in an airtight container the refrigerator for up to 5 days, or can be frozen for up to 3 months. (I add a bit of extra cream when reheating leftovers; the sauce thickens up slightly).
For more heat, add some of the seeds and ribs from the serrano pepper. The sauce can be prepared up to 4 days ahead of time, then reheated before adding the freshly broiled chicken. Adapted from Cook’s Illustrated.