Add the onion, chiles, ginger and garlic to a food processor or blender and process until smooth. Add a little water if necessary.
Heat the oil or ghee in a large pot or wok over medium flame. Add the onion puree, curry powder and cumin and sauté, stirring frequently, for 5 to 8 minutes, or until cooked down. Stir in the tomatoes and simmer for 3 to 4 minutes.
Then add the chicken, coconut milk, salt and pepper. Reduce heat to low and simmer, covered, until the chicken is cooked through and tender, anywhere from 30 minutes to an hour. Add more water as needed.
Adjust salt and pepper, to taste.
Stir in the cilantro. Serve with with rice or chapatti.
Variations: For authentic flavor, grill the chicken pieces before stirring them into the simmering sauce. If you like, you can also use boneless, skinless chicken breasts or thighs.
Some recipes add potatoes or hard-boiled eggs to the curry. The potatoes can be cooked ahead, cut into chunks and stirred into the curry toward the end.
Eliminate the hot chiles for a milder dish. Or substitute a chopped sweet bell pepper.
Reserve some of the coconut cream that gathers at the top of the can and stir it into the sauce at the very end for extra silky results.