Updated 2026-07-10: these rules, first written after one week with a 20-agent swarm in August 2025, are revised here against a year of daily practice.
Last August I spent a week managing a swarm of 20 AI agents and shipped a working product: roughly 800 commits and 100+ pull requests in seven days. I wrote down the 8 rules that made it work, and that post traveled further than anything else I'd written. I've now run AI agent swarms nearly every working day since, across multiple projects in parallel, and a year of evidence deserves an honest revision.
Most of the original held. The rules about state, isolation, and verification survived daily use; the rules about babysitting got absorbed by better tooling and a management structure that scales past one week of adrenaline; and the one I'd take back is the rule that called a long-running agent a bug.
One idea runs under all eight of them: you manage a swarm through what survives the session: the ticket, the branch, the brief. Never the context window.
Here is what a year did to each of the 2025 rules:
| 2025 rule | Verdict after a year |
|---|---|
| 1. Align on the plan, not just the goal | Held. The plan grew into a ticket a stranger could execute (rule 1) |
| 2. A long-running agent is a bug | Retired. The real problem is context rot (rule 2) |
| 3. Actively manage the AI's memory | Absorbed. Durable state outside the session replaced checkpoint babysitting (rule 2) |
| 4. Manage context with sub-agents | Held. Now native to every serious harness (rule 4) |
| 5. Trust the autonomous loop | Held, with a verification contract bolted onto the exit (rule 6) |
| 6. Automate the system, not just the code | Held best of all. It grew into skills (rule 7) |
| 7. Be ruthless about restarting | Held. Restarts are now near-free and partly automated (rule 5) |
| 8. Commit early and often | Absorbed into worktree isolation (rule 3) |
That merging frees a slot, and the year filled it with the rule one week couldn't teach: the swarm amplifies your scope creep (rule 8).
%%{init: {"look": "handDrawn"}}%%
graph TD
H["You"] --> O1["Orchestrator thread, project A<br/>(long-lived, holds the epic's context)"]
H --> O2["Orchestrator thread, project B"]
H --> O3["Orchestrator thread, project C"]
subgraph ISO["Isolation boundary: one worktree, own ports, own data per worker"]
W1["Worker<br/>(fresh context)"]
W2["Worker<br/>(fresh context)"]
W3["Worker<br/>(fresh context)"]
W4["Worker<br/>(fresh context)"]
end
O1 --> W1
O1 --> W2
O2 --> W3
O3 --> W4
W1 --> G["One merge gate into main"]
W2 --> G
W3 --> G
W4 --> G
The shape that survived a year: a few long-lived orchestrators manage disposable workers, with isolation on the way out and one gate on the way back in.
Rule 1: Align on the plan, not the goal
This one held without amendment, so it stays first. The cheapest place to fix agent work is still the plan. Iterate with an agent on what you're building before anything gets dispatched, and only hand off once the plan reads like a ticket a stranger could execute: scope, acceptance criteria, what not to touch.
What changed is where the plan lives. In 2025 it lived in the chat. Now it's a durable artifact, because the agent that executes it is usually not the agent that wrote it. One agent produces the written plan; a fresh-context agent picks it up hours later with the instruction to treat the plan as the source of user intent. One of those handoffs ran about six and a half hours and ended in a verified open PR, with the planning agent long gone.
I still dictate most briefs by voice, which the original post recommended and I'd recommend harder now. Speech carries the why, and the why is what keeps a worker from satisfying the letter of a ticket while missing its point.
Rule 2: Manage state, not context
The 2025 post called a long-running agent a bug and prescribed babysitting: checkpoint progress to a markdown file, clear the context, resume. I got that diagnosis half right. What rots is context: a session that has been compacting its memory for hours slowly forgets the intent it started with, and a resumed context loses to a fresh one.
So the rule inverted. My sessions now run long, sometimes overnight, and that's fine, because nothing important lives inside them. State lives in the tracker, the worktree, and the brief. Fresh, self-contained briefs beat resumed contexts every time I've tested the trade.
One hung implementer session got killed and its identical brief re-dispatched into a fresh session, and nothing was lost, because the dead session was never the system of record. Apply that test to every dispatch: if this session dies, does any work die with it? If yes, your state is in the wrong place.
%%{init: {"look": "handDrawn"}}%%
graph TD
S[Session dies] --> Q{Where did state live?}
Q -- "in the context window" --> L[Work dies with it]
Q -- "tracker + worktree + brief" --> R[Re-dispatch the same brief, nothing lost]
The rule 2 test in one picture: kill any session and ask what dies with it.
Rule 3: Isolated worktrees are survival, and the merge is where swarms fail
Commit early and often was 2025's safety net. It survived as the junior clause of a bigger rule: every worker gets its own git worktree outside the repo directory, its own ports, its own database, and commits early inside that isolation. Two agents sharing a checkout will flip branches and git-clean each other's untracked files; that mistake has cost me hours of an agent's in-progress work, once, which was enough.
Isolation covers the way out. The way back in, everything merging into one main, is where parallel work actually breaks. Anything globally sequential is a merge hazard: two of my lanes once claimed the same ADR numbers and needed an explicit renumber commit to untangle. Reserve shared counters and shared files before dispatch, not after the collision.
The part I didn't predict is how much of this the agents now handle themselves. Two of my sessions collided on the same epic, detected it, and coordinated merge windows between themselves. And before any agent closes a duplicate PR, make it prove the surviving PR is a strict superset of the one being retired. Never close concurrent work on an assumption.
Rule 4: Manage orchestrators, not agents
The original post described me watching four terminals in a state of constant situational awareness, and admitted three hours of it left me burnt. That mode does not survive a year. What replaced it is one long-lived orchestrator thread per project: it holds the epic's context, decomposes the work, dispatches the workers, and takes my feedback the way a lead engineer would. Is this done? I have notes on that one. Redo this. It redispatches with the context intact.
So I talk to three or four orchestrators, not to twenty workers. A normal day is 3-4 projects with a handful of workers each, somewhere around 12 to 16 top-level agents, more counting the subagents they spawn. From the outside that sounds like a swarm. From the inside it's really just like managing four people, and my ceiling stopped being attention and became hardware; the machine taps out before I do.
If you run Claude Code and want the mechanics of the worker layer, I keep a separate guide: how to use Claude Code subagents to parallelize development.
Rule 5: Health-check the workers, and restart without mercy
Be ruthless about restarting survived word for word. It just got cheaper, and it now starts before the work does. Before dispatching anything real, ping every worker session with an instruction to reply with exactly MODEL_OK. It feels beneath the technology. It once caught two dead sessions out of three in about a minute each, instead of letting them surface as multi-hour silent failures.
Mid-run, a quiet worker gets a forced-choice ping: researching, blocked, or about to edit? A healthy agent answers instantly; a wedged one can't, and gets killed and re-dispatched. Put a watchdog on your dispatches so hung ones get detected without you noticing first.
%%{init: {"look": "handDrawn"}}%%
graph TD
P["Quiet worker gets the ping:<br>researching, blocked, or about to edit?"] --> A{Answers instantly?}
A -- yes --> C[Healthy. Leave it alone]
A -- no --> K[Kill it, fix the brief,<br>re-dispatch fresh]
The forced-choice ping sorts a busy worker from a wedged one in seconds.
None of this is fire and forget, and it never has been. In an early coordinator experiment of mine, about a third of the workers needed an interrupt at some point. The 2025 instinct to let a wandering agent finish its thought is still pure waste: kill it, fix the brief, restart. Restarts cost nothing once rule 2 holds.
Rule 6: Trust the loop, verify the exit
The autonomous loop kept the trust the 2025 post gave it. Agents iterating against tests, a browser, or a live API until the thing works is where the throughput comes from. But a loop's exit condition can lie. An implementation once passed all 41 of its own tests while rendering against real data showed two visual defects; a second agent doing review caught what the green checkmarks missed. Tests green is not the same as looks right.
Supervision at swarm scale mostly collapses into two words: show me. Show me the screenshot, the token counts, the diff. When I doubted a polished demo was making real model calls, the agent proved it with the returned token counts, then proved the calculation engine was real by perturbing an input and checking the output moved by exactly the expected amount. Cheap, decisive, and much better than trust.
I've since pushed this all the way into the PR contract, with evidence attached to every acceptance criterion, but that's its own post.
Rule 7: Automate the system, not just the code
Of the original eight, this aged best, and the ecosystem gave it a name: skills. The self-updating CLAUDE.md and self-refining commands from 2025 grew into markdown files that encode whole workflows, one that turns a rambling idea into a spec and ticket, one that builds a feature with proof attached, one that drains a backlog. Agents execute the process; the process itself is versioned, reviewable text.
When an agent misses, the correction goes into the skill instead of the chat, so it applies to every future run instead of once. And skills are portable: the same markdown files have moved between agent harnesses in minutes. Harnesses are swappable. The encoded process is the thing you own.
Rule 8: The swarm amplifies your scope creep
Agents pattern-match to enterprise checklists by default: hand one a prototype-stage ticket and it will spec encryption-at-rest and an automated mechanism to siphon off a data holdout, for a system whose honest requirements are a directory and a hand-kept manifest. One agent doing that is a code review comment. Twenty doing it in parallel is a codebase you don't recognize by Friday.
So deciding what not to build became a daily job, maybe the highest-value one I do inside a swarm. Every plan gets the same question before dispatch: what is the simpler version of this? None of the twenty will tell you a ticket is too ambitious for the stage the product is in. That call stays human, and at swarm throughput it compounds faster than any other call you make.
The 2025 toolkit is mostly table stakes now
The original post ended with a toolkit: a semantic code-editing layer, a browser-automation MCP, branched databases, a forced-planning tool. A year later I'd send you shopping for almost none of it, because the harnesses absorbed the list. Isolated environments, browser control, and planning modes come standard now, and the custom parallelization tool I built for that week has native equivalents everywhere.
The durable layer is the process: the rules above and the skill files that encode them. The tools rotate underneath.
What this does to the job
The 2025 post predicted that engineering value would shift from implementation to direction. A year of daily practice moved that from prediction to job description. If you're shipping software with agents, your day trends toward scheduler and reviewer, and an agent swarm is really just a team you staff, brief, and audit.
If you'd rather test these rules than take them, start small: one project, one orchestrator thread, two workers in isolated worktrees, briefs written so a fresh session could execute them cold. Run that for a week. The rules you'd revise will find you, which is how this post got written.
Discover more from zach wills
Subscribe to get the latest posts sent to your email.
Cool! So, what did they build and how good was it?
It’s an analytics platform built for engineering organizations to ingest GitHub data and measure the real-world impact of AI coding tools on developer velocity and team efficiency. We’re using it internally and iterating. We might just end up buying an off the shelf solution (there are many tools like this); but it was a great focusing effort for my heads-down greenfield experiment!
I answered in some of the other comments. tldr is it’s a full-stack engineering analytics platform that analyzes AI tool adoption patterns across organization codebases.
Yes that is the question. In some world where the author could have been split in two, one of him doing it himself and the other on this LLM adventure, one could then definitively compare both the quality and maintainability of the output.
If code passes unit tests (or even integration tests) doesn’t mean it isn’t bloated, obtuse, or otherwise suboptimal. LLMs do not understand or conceptualize; you are doing that for them … if it can be done with truly sustainable productive gains, what Zach is describing would likely be The Way. I am not convinced yet, but am willing to be. Also if this *is* The Way, Zach ought to productize it before someone else does.
where is the product?
It’s being used internally — for more info about it check the other comment but tldr is it’s an engineering insights tool that hooks to GitHub, Gemini, has user auth, etc.
Hi,
Thanks for sharing your takeaways — I found the article interesting! I’d love to dive a bit deeper and was curious if you could share a few more details:
– What ended up being the final scope of the production-ready application?
– Is there a demo, video walkthrough, or case study showcasing the final product?
– How many features were fully completed and tested?
– Were any performance benchmarks or quality metrics collected?
– Could you share a sample of the self-updating CLAUDE.md file?
Thanks again for putting this together — looking forward to learning more!
1. The final scope ended up being a fully functional analytics platform for our own engineering teams. It connects to GitHub and tracks the actual impact of AI tools on things like developer velocity and team efficiency. It’s not a commercial product, but it’s a complete internal tool that we’re actively using to figure out what metrics actually matter.
2. Not right now since it’s an internal tool. There appears to be a lot of interest in this, though, so maybe it’s something I can make happen.
3. It covers everything from the core GitHub data sync and AI detection engine to the analytics dashboards, LLM insights, etc. I took the engineering seriously, included ~800 tests, incorporated CI/CD, etc. to ensure it felt as “production ready” as possible.
4. Yes — I actually did a number of refactors throughout the week to improve bad queries and parallelize things like the automated test pipeline.
5. It might seem silly, but literally just “make sure you update the project’s README.md with any relevant changes to the project useful for developers and CLAUDE.md with any relevant changes to the project useful for Claude Code (also a developer)” in the CLAUDE.local.md (or you could put it in the CLAUDE.md file) gets Claude to do this reliably!
This is really insightful and generally how I’ve been thinking about genetic AI lately. Though I’m still only in the mode of one agent that I work with, I’d like to start moving down a more orchestrated process.
Would love to see the project you built like this.
Very curious about the end product 🙂
If possible it would be cool to check out the GitHub repo as well!
I’ll talk to the team. This particular build is an internally used product.. but maybe we could open source it. We’ll see!
gNice write up! And Good luck voicing the prompts to get it to beta stage 😉
Zack! Brilliant Post! But there’s a plot twist: you’ve accidentally solved a problem that goes way beyond coding.
That “multitasking flow state” managing 20 agents? Replace “agents” with “research threads,” “story ideas,” or “strategic insights” and you’ve just described what every knowledge worker is starting to face when AI amplifies their thinking. The cognitive architecture is identical.
I feel your “completely burnt after 3 hours” daily. When you can compress weeks of intellectual work into hours, our stone-age brains weren’t designed for that kind of compression. The bottleneck isn’t the AI. It’s our human cognitive bandwidth trying to orchestrate intelligence abundance. And what’s crazy is that we’re just getting started!
You shifted from writing code to conducting minds. That’s not a coding breakthrough. That’s the fundamental skill of the AI era, whether you’re managing agent swarms or managing your own thoughts with AI partners.
Your 8 rules? They’re not coding rules. They’re thinking rules for anyone working with artificial *intelligence* (not just artificial automation or artificial tools). The writer managing multiple narrative threads, the strategist juggling complex scenarios. Same cognitive challenge, same solutions.
We’ve been exploring this as the “intelligence overload problem.” The future belongs to those who can think fluidly with AI across any domain, not just at it.
Again, brilliant!
Sounds awesome, can you give more insights into your work, maybe put together your setup in a git repo or something similar? Working with a proprietary coding language, which is poorly supported by most AI models, it’s hard to comprehend the extensiveness your work.
And yes, as another comment said: Where’s the product? 🙂
I have been experimenting with a similar workflow but at a smaller scale (2-3 agents in parallel max), and over the course of a week I am actually quite skeptical of the productivity improvements. It might just be that I need more practice, but doing this for more than an hour is just so mentally exhausting that I need to take a long break afterwards. Versus doing tasks sequentially, I can go much longer without feeling so tired.
That’s just qualitative, but looking at the data I compared my PR output for the weeks I have been trying this over vs regular workflow of sequential tasks, it seems to be actually quite similar. I need to try this out for longer but I don’t think it’s obvious that this will lead to higher productivity over the long run.
I’m mostly curious about cost for this endeavor?
~$6k for the week in Claude Code credits (mostly Opus).
This is awesome! It makes me excited about the future of software engineering/architecting!
I have 2 questions:
How many tokens did you use during this week?
How much did it cost to develop this way per day?
I don’t know the exact token count — it was ~$6k for the tokens. Sonnet in the beginning days then Opus for the latter half.
Recounting this post to a developer friend when I’m a SysAdmin led to quite a heated debate on my use of the phrase “getting left behind”. I’m not an early adopter or driven by FOMO, but I can recognize the benefit of an HOV lane on the freeway even when my state doesn’t have them.
Do you agree that this is the path to a revolutionary dev experience, even if it’s unrefined at this point?
Dear Zach,
Thank you for you article this is very interesting.
I am wondering about how exactly you did articulate all the MCP and Claude. I did install all the MCP (and initizalize them in my project folder). Tried to build something from the CLI but my feeling was that the agents were still lacking autonomy (and really parallel flow). I guess that I am missing something but I am a bit stuck. Do you have a guide or a recommendation?
Fantastic write-up, Zach — one of the clearest, most actionable field reports on agentic development I’ve read. Your emphasis on aligning on the plan first (loved the /spike vs /tech plan distinction), actively managing memory with a self-updating CLAUDE.md, and being ruthless about restarts/early commits really resonates.
zach wills
I tried a similar “many parallel streams” approach and hit the same wall you described: multitasking fatigue after a few hours of orchestration. I ended up reverting to a more linear rhythm with AI — tight plan → short execution burst → checkpoint → reset — which kept velocity high without the cognitive tax. Your rules make me want to revisit parallelization more deliberately.
zach wills
Would you be open to sharing the slash commands you use for planning and for posting PR comments/updates (even a gist)? And if possible, any reusable workflow prompts you lean on for “quick fixes” vs. “bigger features” while preserving context across sub-agents/restarts — especially around hand-offs from plan → implement → test → release notes.
Thanks again for pushing this thinking forward — excited for your follow-up on applying this to legacy codebases.
Some great insights here Zach. Some similar to what we’re seeing as we develop our own understanding of hives & swarms with Claude code & flow. Thanks for sharing.
Great thoughts! I am going to experiment with this concept on a project I am working on.
You mentioned the voice-to-text, which makes me think maybe you are using Claude desktop, but then you also mentioned multiple terminal windows which would imply Claude Code. Can you clarify how you are prompting with voice and how that is passed back to a sub-agent?
Hey! I use Wispr Flow for dictation and yes, this whole process is with Claude Code. The dictation is as straightforward as dictating and instructing Claude Code to either use a given subagent or, depending on their definitions, Claude Code will automatically trigger a subagent.
Gotcha – I was thinking you were doing it in app somehow with Claude Desktop.
Thank you!
Hey you should try using a proxy to tunnel your requests to another LLM provider like gpt-5 for hard tasks (cheaper and smarter than opus) and gpt-120-oss for easy tasks (basically free on groq). $6k is a lot to burn in one week. And if you are ok with spending $6k, you could probably get 10x more runs by switching providers (or at least more threads to check work).
Managing a swarm of 20 AI agents to build a product in a single week is a heroic feat! Your 8 rules for developer velocity and team efficiency are incredibly practical—especially the emphasis on tracking the actual impact of AI tools on output. For developers who are looking to scale these types of agentic workflows and need reliable, direct API access for visual tasks like image generation and automated editing, exploring a unified visual AI API like Pixapi could be a great asset. Pixapi provides a single endpoint for various visual AI operations, which can help keep the agentic logic cleaner and more efficient. I’m curious, which rule was the most difficult for your swarm to “obey” consistently throughout the week? Thanks for sharing such a detailed look into the future of autonomous development!
I’ve been thinking about this exact problem—managing multiple development threads without losing my mind. I tried spinning up parallel agents on a couple of projects and kept hitting the wall where context just fragments. The eight rules framing is solid; I’m curious whether your self-improving CLAUDE.md approach actually stuck with consistency or if it drifted after a few iterations. Either way, this is the kind of workflow shift that makes sense once you stop treating the AI as a code-writing machine and more like a task multiplier. By the way, Your AI Slop Bores Me is a viral interactive game where players choose to be human or roleplay as AI, answering prompts to fool other players—part satire on AI-generated content. No sign-up needed, feel free to check it out.