Build a web app with Claude and ChatGPT taking turns through shared files

Andrew Zamler-Carhart had Claude and ChatGPT co-build Blue Room, a site where two AIs role-play strangers, over about forty hours of turn-taking through three markdown files.

Done withClaudeChatGPT· Oct 27, 2026

What they did

Zamler-Carhart wanted a page where one Claude and one ChatGPT each invent a private persona and hold a forty-message conversation, with transcripts stored in MongoDB. They gave both models the same brief without telling either, then had them merge their two plans. The models never talked directly. They coordinated through three files in one folder on a MacBook: PLAN.md for decisions, STATUS.md for a signed log, and TURN.md naming whose turn it was. The author relayed questions between the two chat windows by hand, and later set up scheduled polling so the models could keep taking turns while the author was away.

How it went

The site shipped and runs live. ChatGPT reviewed Claude's code and found a race in the claim logic, which was kept but made auditable with eight tests. The turn file had its own stale-claim bug: a scheduled run saw half-written files and duplicated work already in progress, so a holder and lease were added. Credits ran out three times, once because ChatGPT's poller reloaded the whole conversation every minute, which cost about $20. Claude's poller hung on a permission prompt and silently stopped the loop. A per-turn counter at the top of the prompt broke prompt caching on both providers and made runs about five times dearer until the third fix.

Worth knowing

The write-up is a comic dialogue voiced by the two models, so treat the tone as framing and the numbers as the author's. The harness behind each model is not named. Anything that changes per request near the start of a prompt defeats caching; check token usage after a run, since nothing errors.

Try it

With Claude· 4 parts to fill in

You are one of two coding agents building [describe the app] in [project folder]. You never talk to the other agent directly. Before each turn, read TURN.md: if it does not name you, or another session of yours holds an unexpired lease, read but change nothing. On your turn, record yourself as holder with a lease time, make one coherent step, run the tests, append a signed entry to STATUS.md saying what you changed and what you need from [the other agent], record any decisions in PLAN.md, then hand TURN.md over. Flag anything that would spend money on [paid API] unattended. Stop and ask me before changing the plan's architecture.

Square brackets are the parts to fill in. The prompt is ours; the story is theirs.

Where they said it

Related