Hi Jacopo,
Glad to hear that. If you get the TDVP code working well, please consider sharing it, like on Github, and we'd be happy to advertise it on the ITensor website (the "Codes" page). Just a thought but take your time. We're planning to make a TDVP of our own too, but it might take some months to complete with the other things we're doing simulatenously.
To answer your question, the LocalMPO class lets you retrieve the projections of the MPO H into the left- and right-hand MPS basis by calling the .L() and .R() methods. So if you call Heff.position(j), then Heff.L() should be all MPO tensor from 1 up to j-1 projected into the MPS tensors (bra and ket). And likewise Heff.R() should be the MPO tensors from j+2 to N projected.
The reason that .R() goes from j+2 is that it's set up for doing 2-site DMRG. You may want 1-site for TDVP so you may need to modify the logic of the LocalMPO class for your own purposes, or if you'd like it's something we can probably easily do (and should, since we want to add a 1-site DMRG to ITensor eventually).
To get the middle MPO tensors on site j and j+1 you can just get them from H directly, if you have access to H, or through the LocalMPO class's .H() method which gives you access to H. So like Heff.H().A(j) to get the jth tensor of the MPO inside the LocalMPO.
Also I think you might benefit from reading through the LocalMPO code to make sure you understand how it's working and to confirm everything I said is correct. And you can try the things above which I said and print out the .L() and .R() tensors to make sure they are what you expect in terms of their index structure.
Finally, you might want to consider making your own class that's based on LocalMPO but which is simplified and adapted for your own needs, just using LocalMPO as an starting point.
Best regards,
Miles