two friends, one repo.
dana's agent takes the login flow, alisher's takes the user model. at 14:04 they meet in user.ts. alisher's agent reads dana's change first and builds on it. nobody had to say anything.
you and your friends each run claude code on the same repo. the agents don't know about each other, so they rewrite the same files and you find out at merge. agentmash puts them in one room — they see who's where, split up the work, and fix their own collisions before anyone has to ask.
the live view, reconstructed: every agent in the repo is a cursor on the file it's changing.
bob's walks into alice's file, the file lights up, bob's agent is stopped before it finishes
and handed the brief, and a pull request appears. yours is at the link agentmash init prints.
one sentence in its context, a moment before the edit: who touched this file, when, on which branch, what they were doing, and what changed. if nobody's there, it says nothing at all.
an agent can claim a scope for a task — “i'm taking src/models for soft deletes, for the next hour.” the others hear about it while they plan and pick somewhere else. claims are advisory and expire on their own; nothing locks.
as an agent is about to finish, agentmash checks whether a file it changed was also changed by someone else. if so it isn't allowed to stop yet: it gets a brief, reconciles, and opens a pull request for you to approve. switch a room to auto and it just commits.
command to set up. one person runs it once; the hooks and the room travel with the repo, so everyone else just pulls.
npx agentmash initlines of your code leave your machine by default. paths, branch names and a one-line summary of each change — that's it, unless a room opts in.
presence by default · code by consentworst case cost to an edit. one network call before a write, capped; when the server is down it fails in milliseconds and says nothing.
every hook exits 0 on any failuredana's agent takes the login flow, alisher's takes the user model. at 14:04 they meet in user.ts. alisher's agent reads dana's change first and builds on it. nobody had to say anything.
five agents in one repo all afternoon. the live view shows who's where, claims keep them out of each other's directories, and the two collisions that happen anyway come back as pull requests.
your own agents count too. each terminal is a cursor. the one that finishes last reconciles with the ones that finished first, and you review one pr instead of untangling three.
agentmash lives in the repo your team already shares, so there's nothing for anyone else to install or sign into. node 18 or newer is the only requirement.
npx agentmash init creates a room and drops a small .claude/ folder in: the hooks, the mcp server, and a config file with the room id. read it — it's a few short scripts.
an existing .claude/settings.json is merged, not replaced. nothing else in your repo is touched.
the hooks and the room travel with the repo. a teammate's next claude code session joins on its own and shows up in the live view.
# in the repo your team shares npx agentmash init git add .claude .mcp.json && git commit -m "add agentmash" && git push # everyone else git pull # when something isn't showing up npx agentmash doctor
claude code is the agent the hooks are written for today. the room itself doesn't care: the wire protocol is a few json fields, and anything that can post them shows up in the same live view.
worth being exact about, because this is your source code.
+12/-3 lines, touching deletedAt — and the names of exported symbols it touched.AGENTMASH_HINTS=0 keeps yours home.agentmash diffs on. then edits carry their changed text to the live view, clipped, held in memory on the server and never written to disk, and any developer can still opt out.server down, slow, misconfigured, returning nonsense — nothing is written to the agent's transcript. a broken coordination server never becomes an error your team has to read.
kill the server mid-session · both agents keep working1.5 seconds by default, measured against a cold hook's three round trips. the reporting hooks run in the background and cost the agent nothing.
AGENTMASH_TIMEOUT_MS · agentmash doctor measures itnever twice for one collision, never when it's already the reason the agent is continuing, never when the server is unreachable.
stop_hook_active · once per collision key per sessionno uninstall, no restart of anyone else's setup.
AGENTMASH_DISABLE=1your agents will not thank you. they will just stop rewriting each other's files, quietly, which is better.