My repo took 66 commits in the last seven days. Seventeen distinct agent branches merged in the last thirty. I wrote maybe a third of it by hand.
The agents are Claude Code instances, coordinated through Multica, a task board built for teams of humans and coding agents. There is no shortage of posts about running one coding agent. This is about what happens when you run several against the same codebase at the same time, which is a different problem with a different failure list. Almost none of it is the failure people warn you about. The agents write fine code. What breaks is everything around the code.
The setup
Agents get assigned issues in Multica and work them independently, each opening its own pull request. One of them, Scout, does nothing but find AI tools worth adding to the directory, verify them against their own sources, and prepare a reviewed migration. Its brief ends with a line I put there deliberately: never add anything without explicit approval.

Its last thirty days: 33 runs, 94% succeeded, 18 minutes 44 seconds average duration, concurrency 6. Two failed with agent execution errors. Every run is on Claude Code with Opus.
Others build features. Looking at merged pull requests from the last month, the branch names tell you how varied it gets: feat/tool-screenshot-carousel, fix/carousel-arrow-styling, feat/dark-logo-guard, chore/retire-applied-2026-08-30-batch, feature/tool-comparison, blog/what-happened-to-codeium.
All of them run on one machine, against one checkout.
The working tree is the shared resource nobody warns you about
Git branches are cheap. The working directory is not, and there is exactly one of it.
In a single afternoon my tree was on feat/dark-logo-guard, then fix/tool-og-image-own-domain, then back on main. I did not do any of that. Another agent checked out its branch to do its work, which is the correct thing for it to do, and my uncommitted changes came along for the ride because that is how git works.
The first time it bit me, I had staged a set of file deletions, run the gate, and was about to commit. The tree had moved to someone else's feature branch with their unpushed commit on it. Committing there would have buried my cleanup inside their pull request.
The fix is unglamorous and works completely:
git worktree add /tmp/wt-cleanup main
cp <my files> /tmp/wt-cleanup/
cd /tmp/wt-cleanup && git commit && git push origin main
git worktree remove /tmp/wt-cleanup --force
A second working directory on main, used for the commit, then thrown away. The other agent's checkout is never touched. It costs about thirty seconds and it is now the only way I push from this repo.
The habit that matters more than the technique: check git branch --show-current and git fetch before every single commit. Not once per session. Every time. The branch that was correct when you started the task is regularly not the branch you are on when you finish it.
Another agent shipped my unfinished work
I built a pricing index page over an afternoon and left it uncommitted while waiting on feedback about the design.
While I was doing something else, another agent found those untracked files, decided the page needed the same header treatment as the rest of the site, wrote a wrapper component for it, generalised that wrapper to serve a second route as well, and merged the whole thing in pull request #22.
Nothing about that is wrong. The work was better for it. But it is a genuinely strange experience to go looking for your uncommitted changes and find them already in production with a component you did not write.
The lesson is that "uncommitted" is not a signal any agent can read. If work is not ready to ship, it needs to be on its own branch, not sitting in the tree as an implicit do not touch.
Tools collide in ways a single agent never shows you
Some of this is embarrassingly mundane and cost me more time than any of the interesting problems.

That is three Claude Code sessions in one window, each on its own task, all pointed at the same checkout. It looks productive. It is also the exact condition in which the next two problems happen.
npm run verify kills npm run dev. Both own the .next directory. The gate's build wipes the manifest the dev server is reading, and the dev server dies on a missing _buildManifest.js.tmp. Worse, it sometimes survives as a process still bound to the port while serving 500s on every route, so the next thing you check looks catastrophically broken when it is just a corpse holding a socket.
The tell is that every route fails, including ones nobody touched. When / is throwing 500s and you only changed one component, stop debugging your change:
lsof -ti:3100 | xargs -r kill -9; pkill -9 -f "next dev"; rm -rf .next
With one agent you notice this once and remember. With several, one agent runs the gate while another is reading localhost, and the second agent starts debugging a fault that does not exist.





































