Puree the spinach with ½ cup water. Set aside.
Make cashew cream by blending the cashews with 3 tablespoons water until very smooth. Set aside.
Heat oil in a large skillet over medium heat. Add the cloves, cardamom and cinnamon and, when they start to color, add the cumin seeds. Toast until the cumin seeds become aromatic, about 30 seconds.
Add onions and garlic to the spinach. Add a pinch of salt. Saute for a few minutes until the onions start to turn golden-brown.
Add the ginger-garlic paste, saute for a couple of minutes, then add the tomatoes.
Also add the turmeric, cayenne, cumin and coriander powders to the skillet 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 and stir it in.
Finally stir in the tofu cubes. Let the sauce simmer a couple of minutes.
Add the cashew cream, add salt, stir in, and turn off heat.