I just have it write a checklist file in /tmp (or a todo folder if I want to keep it), and check off items as it finishes them. Seems to work fine. Is this really needed?
No, I write design documentation to a docosaurus folder where it can actually be read as docs nicely.
Most of the time all you need is a throwaway md file to compensate for context loss and so you can loop on a spec across compaction. Once you have the spec implemented, there's usually no reason to keep it around. The code becomes the spec.
For hard constraints you have AGENTS.md, or put it in another md file. Why do I need additional software for this?
That's the entire point. Why would I want to keep these files around forever? If you're keeping these files you're just compounding drift onto drift and making it harder for the agent. For everything else, there is git history.