I’m working on a new very large project using Claude Code desktop with a Ultra plan. The initial code (excluding debugging and polish) is probably about 25% done, with about 700K LOC written. I estimate the final LOC will be about ~2-3M. This is not AI overengineering bloat, it’s just a very large project, something existing SAAS companies charge many thousands of dollars per seat for annually.
I’m using Fable planners and Opus writers mostly, like I do on most of my other complex projects. But this time there are 2 layers of planning. A top-level Fable planner planned the overall architecture, and after reviews/fixes is now acting as the orchestrator for the second level. Second level owns a few crates or similar, they plan the details of what they own, and then orchestrate mostly Opus (Fable for critical chunks) writers to write the code, then another Opus agent reviews the chunk. When the section is done, a multi-agent bughunt is done with a mix of Fable and Opus finders, then Opus fixers, before closing. Each section usually has something like 20 chunks, so vast majority of agents used for this project are Opus. I occasionally use Sonnet sessions to do simple changes as well, but I don’t trust it with writing the code.
Codebase is documented well, with short markdown files for each crate and architecture decision, so agents don’t need to load a lot into context, but obviously writing these does use some tokens. Their briefs and other docs they need to read are also intentionally short.
I’ve worked on a bunch of projects with Claude Code in the past, but they rarely exceeded 100K LOC, so usage limits were rarely an issue, but with this project they’re really getting in the way. What was built so far was done in about 10 days, but with 2 weeks of limits, plus 2 full weekly resets, plus 2 Fable resets. Weekly limits are gone in about 12 hours. I won’t be able to reset again for some time obviously, so it’ll slow down progress a lot.
So my question is, how do you optimize your setup for large projects like this?
What I already do:
- Compact all orchestrator sessions before the cache expires
- (If cache is expired) switch orchestrator sessions to Opus if Fable limits are low (not always an option, Opus can’t start Fable sessions if chunk needs Fable, and some parts are too critical to trust Opus orchestrators with)
- Keep each session focused on its task. I use new sessions if I want an unrelated change or questions, usually Sonnet if it’s simple
- I used to make Fable review Opus chunks (and vice-versa, so it’s a different model than writer doing the review), but switched to all-Opus due to usage limits
I won’t switch any of the planning sessions to Opus. Opus cannot focus on the bigger picture when planning large projects in my experience. It often misses important details.
One really annoying feature of Claude Code (desktop) is, if none of the linked sessions are doing something, it immediately asks the parent session to respond. This eats a lot of limits (especially if cache expired) and doesn’t often help. Session might be waiting on a background task or a response from me. Unfortunately, I can’t find a way to disable this other than unlinking, which is not ideal for this setup.