I got super stuck with this exact problem on very large projects. So I built a central API with DB to store all my plans, tickets, and decision making as different 'ticket' types in this project
https://github.com/evanjt/docket with a CLI application that claude can query and find related information to build better context around each task. You can see progress on it or the UI of the API. Having this dependency graph between work also helps to build some better documentation and build on past features.
It's still a big mess, and I'm refining it, but I'm finding the output quality has improved a lot. I can send out ultracode investigation tasks to find bugs, then report them all as work tickets: investigation (requires more in-depth research), bugs, and duplicate or dead code, all linked to each other, creating dependent tasks that don't start until another finishes etc. It gives me questions that I can work through later on that unblock tickets, and I can assign release versions to stage bugs for the future.
Then, when I'm ready to work on something, I can use the /lead skill that will manage and dispatch other agents that will work on each item in its own worktree.
I can't guarantee it helps you at all, as it's a bit opinionated. I'm still finding a lot of problems with this method and modifying it a lot -- for example, working in so many worktrees create an obscene amount of merge conflicts and commits. I would recommend that you send an agent to the repo to get a better understanding of how it works and see if it can work for you.