Prep the cashews. Cover cashews with hot water and soak for 15–20 minutes. Drain before blending.
Roast the cauliflower. Heat oven to 425°F (220°C).
Toss florets with 1–2 tablespoons oil, a big pinch of salt, and pepper. Spread on a sheet pan and roast 18–22 minutes, flipping once, until browned on the edges and tender.
Start the base. In a large skillet or Dutch oven, heat 2 tablespoons oil over medium. Add onion and a pinch of salt.
Cook 6–8 minutes, stirring, until soft and lightly golden.
Add aromatics. Stir in garlic, ginger, and chopped chiles. Cook 1–2 minutes until fragrant.
Bloom the spices. Add garam masala, coriander, cumin, paprika, turmeric, and cayenne if using. Stir for 30–45 seconds to toast the spices.
Build the sauce. Add tomato paste and cook 1 minute.
Stir in crushed tomatoes, 1/2 cup water or broth, sugar, and 1/2 teaspoon salt. Bring to a gentle simmer for 5 minutes.
Blend the cashews. Blend soaked cashews with 1/4–1/2 cup water until completely smooth. Add to the pan.
Stir well and simmer 5–7 minutes to thicken.
Add chickpeas and cauliflower. Stir in chickpeas and roasted cauliflower. If sauce seems too thick, add a splash more water or broth. Simmer 5 minutes so flavors meld.
Finish and adjust. Stir in coconut milk or yogurt if using, then the lemon juice.
Taste and adjust salt, pepper, and heat. It should be creamy, bright, and lightly spicy.
Serve. Garnish with cilantro and serve hot over rice or with naan.