The Swarm — Run Parallel Coding Agents in Git Worktrees
Vibe Coding Nights #49 — The Swarm, a Wednesday-evening build sprint at Frontier Tower's 10th Floor Annex, hosted by Rayyan Zahid, Michalis Vasileiadis, Eric Mockler and Devinder Sodhi. One agent is a queue: five independent tasks against one agent means four of them wait on nothing. The fix is not a faster agent, it is N agents, and the deck's organising claim is that the unit of parallelism is a git worktree — many branches in many trees rather than many branches taking turns in one. The room's first instinct, ten agents pointed at the same checkout, is killed on slide 3 before the lab can waste an hour on it: same files, same index, same HEAD, same lockfile, and it half-works, which is what makes it dangerous, because the failure arrives as erased work rather than as an error. The conductor pattern names the three moves — SPLIT, DISPATCH, MERGE — and is honest that only the first is a judgement call. The section that earns the session is slide 6, added after the lab was run end to end on a scratch repo the morning of delivery: a worktree is not a sandbox. What IS isolated is the working tree, the index, HEAD and the branch. What is NOT is .git/config, refs, hooks and the object store — so three agents that each set their identity the obvious way (git config user.email) race on the shared .git/config, two print a non-fatal lock error, all three commit anyway, and every commit comes out authored by the race winner. The messages stay correct, so the log looks fine at a glance and is wrong in the one field you would audit. The lab therefore hands out env-scoped GIT_AUTHOR_* / GIT_COMMITTER_* per process instead, which is correct per-agent authorship with zero lock contention. A second silent failure came out of the same dry run and is on its own slide: git worktree remove --force follows an NTFS junction out of the worktree, deletes the target's contents, and exits 0 with nothing printed — reproduced deliberately after that exact sequence cost a real .venv in the maestro fleet at 13:44 the same day. Linking a shared venv into each tree is precisely what makes N trees cheap, so the pattern and the hazard arrive together; unlink the reparse point first, then remove. Fan-out is parallel and fan-in is serial, deliberately: merge one tree at a time, and resolve conflicts by intent rather than by line. The closing slide is the counterweight — when NOT to fan out, since work that shares a file is not independent work and the split is the hard gate, not the commands. 18 slides, a five-step hands-on hour that stands up three trees and drives three agents through them, a measured three-agent replay with real git worktree list and git log --graph output, agent-readable /setup.txt and .well-known/ai-agent.json + agent-card.json, and an on-slide changelog recording the three edits the dry run forced, so the room sees the method rather than only the result.