Heat the vegetable oil in a large, heavy-bottomed skillet over medium heat until shimmering.
Add the finely chopped yellow onions and the optional green cardamom pods, cinnamon stick, and bay leaf. Cook, stirring occasionally, for 8 to 10 minutes, until the onions are golden brown and softened.
Stir in the grated ginger and crushed garlic and cook, stirring constantly, for 1 minute, until fragrant.
Add the ground cumin, ground coriander, ground turmeric, and chili powder. Stir and cook for 30 to 60 seconds to lightly toast the spices.
Add the chicken and stir well to coat with the spices and onions. Cook, stirring occasionally, for 5 to 7 minutes, until the chicken is sealed and lightly browned on all sides.
Pour in the diced tomatoes and season with a generous pinch of salt. Stir to combine, bring to a gentle simmer, then reduce the heat to low, cover, and cook for 20 minutes.
Uncover, increase the heat to medium-high, and cook, stirring frequently, for 10 to 15 minutes, until the sauce thickens and the oil separates. If it becomes too dry, add a splash of hot water.
Stir in the garam masala and cook for 1 minute, then remove from heat.
Taste and adjust the seasoning if needed, then sprinkle with chopped cilantro.
Serve hot with fluffy basmati rice and warm naan or chapatis.