Heat butter or ghee in a large pan over medium heat. Add chopped onion and sauté until softened and translucent, about 5 minutes.
Add minced garlic, grated ginger, and serrano chili. Cook for 1-2 minutes until fragrant.
Add garam masala, cumin coriander powder, turmeric, and Kashmiri red chili powder. Cook for 30 seconds until spices are fragrant.
Add tomato puree and tomato paste. Simmer for 15-20 minutes, stirring occasionally, until the mixture thickens and reduces.
Stir in heavy cream (or silken tofu for vegan option), kasuri methi, and honey if using. Simmer for 3-5 minutes.
Season with salt to taste and adjust consistency with additional cream if needed.
For a smoother gravy, blend the mixture using an immersion blender or transfer to a regular blender.
Garnish with fresh cilantro before serving.