Make cashew cream by blending the cashews with 3 tablespoons water until very smooth. Set aside.
Spray a skillet with cooking spray. Place the slices of tofu on the skillet in a single layer and cook both sides until lightly golden. When cool, cut into a ½-inch dice. Set aside
Heat the oil. Add the cloves, cardamom and cinnamon and, when they start to color, add the cumin seeds. As they start to darken, add the onions and the garlic. Saute for a few minutes until the onions become golden-brown.
Add the ginger-garlic paste, saute for a couple of minutes, then add the tomatoes. Add the turmeric, cayenne, cumin and coriander powders and mix well. Cover and let the tomatoes cook until they are very soft and pulpy.
Add the kasoori methi, if using, and mix well. Add the spinach puree, mix, and let the sauce come to a boil. Lower the heat and continue cooking the spinach for 10 minutes. Add some vegetable stock or water if it looks too thick, but don't add too much liquid at this point-- you want the spinach to cook thoroughly and lose any raw flavor.
Add the garam masala, cubes of tofu and salt. Mix well and let it all simmer another two minutes.
Turn off the heat and add the cashew paste, if using. The cashew paste adds a rich, luxurious finish, but if you want a nut-free recipe, it's completely optional.
Serve hot or warm with naan or roti.