AgentRoom: Concurrent Multi-Agent Coding in a CRDT-Backed Shared Workspace
Seonglae Cho, Donghyun Lee
cs.AI, cs.SE
2026-08-25
File-level claim plus broadcast on a CRDT workspace cuts 1-file abandonment from 31% to 5% at matched compute; naive parallel-merge scores below Solo.
Concurrent multi-agent coding is sold as division of labor, redundancy, and parallel exploration at file granularity. Most published systems still queue: design, then implement, then review. The other common pattern is independent samples merged after the fact. A lone agent on a hard task often emits a one-file stub and exits. CodeCRDT tried implicit coordination through a CRDT and reported a bimodal 21% speedup / 39% slowdown. The question this paper actually asks: at matched compute, does explicit coordination on a CRDT-merged workspace beat both the sequential pipeline and "share the files, say nothing"?
AgentRoom is a state-management room. The substrate is a shared filesystem merged by pycrdt (the Yrs port of Y.js), with character-level merges inside a 2-second window plus a brace-balance check. Strong eventual consistency keeps bytes; it does not keep intent. Two agents inserting incompatible signatures at the same offset both survive in the file, and compilation still fails.
The coordination layer is a small MCP tool surface:
Claims are Chubby-style advisory locks, enforced in the prompt, not in the kernel. An agent that writes without claiming still has its bytes preserved; the room log surfaces the violation so a teammate can patch. The six-step workflow is advice: read state, claim, pick another file on conflict, write, poll, broadcast done.
Matched-compute baselines: Solo; Shared-only (CRDT, no prompt, no MCP); Parallel-merge (separate workspaces, later-timestamp file union); a ChatDev-style three-phase sequential pipeline; Shared plus a collab prompt without MCP tools. The main suite is four Express.js/TypeScript backends (JWT auth, marketplace API, double-entry ledger, trading platform). Quality is an LLM-judge composite (spec coverage 0.35, correctness signals 0.30, code quality 0.20, test rigor 0.15), cross-checked with regex and TypeScript AST scorers. Agents write their own vitest suites; there is no held-out correctness oracle.
Abandonment is a deterministic binary label, independent of the quality composite. Across 12 model-by-task strata, Solo abandons 40/131 runs (31%) versus AgentRoom 5/94 (5%). The CMH common odds ratio is 13.7 (95% CI [3.9, 48], p < 10^{-5}). On T4, Haiku drops from 12/35 to 1/17, Codex from 9/17 to 2/21, Sonnet from 6/33 to 0/17. Score standard deviation among in-budget non-failing runs shrinks about 30–45%: T4 Sonnet 0.23 to 0.14, Haiku 0.25 to 0.17, Codex 0.27 to 0.15.
On T4 Sonnet at a 600 s budget, the six-condition LLM-judge ordering is monotonic:
| Condition | Mean | n |
| ChatDev three-phase sequential | 0.333 | 6 |
| Parallel-merge | 0.456 | 12 |
| Solo | 0.544 | 32 |
| Shared-only | 0.575 | 11 |
| Shared + prompt, no MCP | 0.588 | 7 |
| AgentRoom | 0.669 | 14 |
AgentRoom leads parallel-merge by 0.213 (Welch p=0.003). Uncoordinated dual agents overwrite each other's server.ts and land below Solo. Agent count peaks at two on T4 Sonnet: 0.544 / 0.669 / 0.553 / 0.489 for N=1/2/3/4, with broadcast traffic rising super-linearly past three. Two Haiku agents average 0.662 against one Sonnet at 0.544, at roughly half the dollar cost. Rust+axum and Python DevBench point the same way on small samples.
The load-bearing piece is explicit coordination (file claim plus broadcast), not extra agents and not the CRDT. Sharing a folder without claims sits between Solo and full AgentRoom. N=2 is the operating point in this setup; N=3 and N=4 spend linearly more compute for a falling mean. Cursor, Claude Code agent teams, and JetBrains Multi-Agent already ship file-claim. This paper's delta is a matched-compute split of the coordination layer from parallelism and from the merge substrate, on a failure mode those systems do not report.
Quality here is a judge composite, not an execution oracle. Headline cells sit on Express.js/TypeScript.
Per-cell n is about 7–35; Gemini is 5+5. The ChatDev contrast keeps 6 genuine runs after dropping 7 orchestrator crashes. The MCP-chat versus CRDT-state comparison is 2 versus 7. The bundle probe that peels MCP off CRDT+prompt has an interval that spans zero at n=7, so the paper reports an ordering, not a percentage split. Tasks have no held-out test suite. Rust and Python are mechanism-portability checks, not a runtime-general magnitude. Hosted models are not bit-for-bit reproducible. GPT-5.4-mini crashed under concurrent MCP and is excluded from every cell.