Cut chicken into 1.5-inch chunks and pat dry. Finely dice the onion, mince the garlic, and grate the ginger. Combine all spices (garam masala, cumin, coriander, curry powder, turmeric, cayenne, salt, black pepper) in a small bowl.
Heat oil in a large Dutch oven or skillet over medium-high heat. Working in batches, sear chicken pieces 2–3 minutes per side until golden brown. Remove and set aside — the chicken will finish cooking in the sauce.
Reduce heat to medium and add the diced onion to the same pan, scraping up any browned bits. Cook 8–10 minutes, stirring occasionally, until soft, translucent, and lightly golden.
Stir in the minced garlic and grated ginger and cook for 1–2 minutes until fragrant, being careful not to let them burn.
Add the tomato paste and cook for 1 minute, then pour in the entire spice blend. Stir vigorously for 1–2 minutes until the spices are fragrant and toasted in the oil.
Pour in the crushed tomatoes, stir to combine, and simmer uncovered for 5–7 minutes until the sauce thickens slightly and oil begins to separate at the edges.
Stir in the coconut milk, then return the seared chicken (with any accumulated juices) to the pan. Add the sugar if using, and stir to coat everything in the sauce.
Reduce to a gentle simmer over medium-low heat and cook uncovered for 15–20 minutes, stirring occasionally, until the chicken reaches 165°F (74°C) and the sauce coats a spoon.
Taste the curry and adjust salt, cayenne, or a squeeze of lemon or lime juice to balance the flavors to your liking.
Ladle over basmati rice or alongside warm naan. Top with fresh cilantro and serve with lemon or lime wedges.