In a Dutch oven or enameled cast-iron casserole, heat the oil, then add the onion and cook until nicely browned around the edges, about 7 minutes. Add the garlic and ginger and cook for 1 minute. Add the coriander, cumin, turmeric, cayenne and black pepper and stir for 1 minute. Add the salt, tomato and water and cook over medium-low heat, stirring constantly, until the tomato is softened. Add the chicken and simmer, uncovered, stirring occasionally, for 15 minutes.
Add the coconut milk and simmer, partially covered, for another 15 minutes, or until the gravy thickens and the chicken is cooked. Add the cinnamon and cloves and simmer another minute.
Remove the chicken from the heat and garnish with the cilantro. Serve with steamed basmati rice.