In a pot, heat oil on medium flame and fry the onions until light golden brown. Remove them and place on a paper towel, and set aside.
In the same oil, add bay leaves, cloves, black peppercorns, cumin seeds, mace, green cardamom, and black cardamom. Temper for about a minute, then add garlic-ginger paste and fry for another minute.
Add the Meat and fry until it changes its colour.
Add salt, red chilli powder, Kashmiri red chilli powder, turmeric, cumin powder and coriander powder. Fry the meat for around 5-7 minutes. Add a dash of water if spices are sticking to the pan.
Once you see oil separating, add 3/4 cup of water, cover and cook for around 30 minutes if using a normal pot. If you are using pressure cooker or Instant pot cook it for 15 minutes.
Blend the yoghurt and fried onions together using stick blender. Alternatively crush fried onions with hands and mix them in the yoghurt.
Remove the pot from heat and add yoghurt to the meat. Stir in until well combined.
Return it back to the heat and cook on medium flame until water from yoghurt evaporates and oil starts to separate. This step is crucial, keep stirring around to prevent the meat from sticking to the pot.
You can add a little water to adjust the consistency of gravy. Cover and cook on low flame for 10 minutes.
Sprinkle garam masala over the top and garnish with fresh cilantro (coriander). Serve hot with naan or roti.