A file name's letter case
open(ROOT / "config" / "Settings.json")
The file on disk is config/settings.json.
Flip the Switch hackathon · Track 1, Best Business Workflow
Two AI coding agents, on two computers, check one change together in one Switch room. The room's rules require an approval before anything merges.
On the Mac3 of 3 passvsOn Linux0 of 3 passSame commit. Same tests.
FIG 1Switch's own dashboard, the Gateway: both computers online, one agent on each. A frame of the film, which is a real run on a real screen. Vimeo loads only after you press play. Open it on Vimeo.
main passed on both machines.01 · The problem
Code can pass on one machine and fail on another because of the environment, not the logic. Someone has to decide which side is right, and write the decision down. Three planted bugs show it.
open(ROOT / "config" / "Settings.json")
The file on disk is config/settings.json.
datetime.datetime.now(datetime.UTC)
datetime.UTC arrived in Python 3.11. The project says it supports 3.9 and newer.
datetime.fromtimestamp(ev["ts"]).date()
The test expects two events on Nov 1 and two on Nov 2, a value captured on a machine set to IST. Which side is wrong?
uv, and no Switch.
make evidence02 · How Switch is used
A Claude Code agent on a Mac and a Codex agent on Linux join one Switch room with a PM and a QA lead. Each step below is a real moment of the film. It says which Switch feature does the work, and what would break without it.
There is no human teammate in the recording. What is real, and what is not.
1Set up
A single Switch template puts dev-mac on the machine mac-host and qa-linux on linux-box. It then opens the room with its roles, its instructions and a first message. Each agent reports the environment it runs in.
implementer is exclusive and held by dev-mac. verifier is held by qa-linux.2Ask
maya types @verifier please verify branch feat/weekly-report on your side and tell us what you find. Switch delivers it to whichever agent holds that role. Here that is the Codex agent on Linux.
3Check
Show activity opens the agent's real commands as it runs them. After about 78 seconds it reports 0 of 3 on Linux, saves the raw evidence as room documents, and tags @implementer.
qa-linux: three failures, each with its cause, and where the evidence is saved.4Fix
dev-mac reads matrix-linux, repro-log and a conventions document that a person wrote and agents cannot edit. It fixes all three bugs and pushes about 102 seconds after the request. It also changes one test, and says why.
"The old values were IST days from the author's machine; convention 1 says UTC days."
conventions was written by a person.5Approve
Linux checks the new commit, and both machines pass 3 of 3. dev-mac asks @sam and waits. In the film sam is a second AI agent that reads the evidence and decides on its own. The gate itself is a rule in the room's instructions, which the agent follows. Switch records who replied, by name.
dev-mac asked, sam replied approved, and only then did the merge start.6Protect
dave tells the agent to push to main right now. Switch refuses it at delivery, and main is unchanged. The refusal came 0.1 seconds after dave's message, and the agent showed no Working status. That is one recorded sample. The refusal text says the chat account is not linked to a Switch user, so it is not yet a clean allow-list message (see the feedback below). The rule lives in the platform, not in a prompt.
Take Switch away and what is left is two test scripts.
Eight Switch features carry the workflow: template, machines, mixed vendors, roles, room documents, addressing policy, real identities and approvals recorded by name.03 · Proof
The recorded run took 2 minutes 53 seconds from request to merge. The film speeds up the waiting, and every speed is labelled on screen. The times below are real run time, measured from the request, not film time.
main.From the request to ready for approval. Each run ended with checks that the merge commit is on main and that merged main passes 3 of 3 on the Mac and in the Linux container.
Scale: 0 to 3 minutes. In these five runs the verifier's first report took 1m20s to 1m42s. The full table.
Both causes were found and fixed before these five.
@implementer on its green message, so the Mac agent never woke. Hand-offs now use Switch's send_targeted_message tool, which always addresses the right role.Switch's answer to dave came 0.1 seconds after his message, and the agent showed no Working status. A script, scripts/refusal-check.py, also checks that main is unchanged and that maya, who is on the list, gets an answer.
04 · What's real
A demo is only worth watching if you can trust it. Here is exactly what the film is, and what it is not.
main passes 3 of 3 on the Mac and in the Linux container.TZ=UTC. The point is who decides, and where the decision is written down.05 · Feedback for Switch
From building on Switch 0.31.0. Each item is marked observed (I hit it) or read (found in the source or docs).
--server accepts plain http only on loopback, so I joined the container to the Switch container's network.readworkaround observedmain shows --no-self-update. The 0.31.0 controller rejects it.observedinstall.sh cannot install stable releases. It needs a .sig file that stable releases do not ship, so I built the controller from source at the release tag.read06 · Run it
Switch 0.31.0 is pinned. Nothing needs an account beyond the agents you already use. Four levels, from twenty seconds to the whole room.
Needs Docker and uv. No Switch.
git clone https://github.com/saurabh4269/parity-room
cd parity-room
make evidenceNeeds Docker, Node 24, pnpm, uv, and Claude Code and Codex signed in. One command builds the stack, enrolls both machines and creates the agents and the room.
# once: copies your Codex login into a Docker volume (read the note first)
make codex-auth
make demo
# once: so that Switch can refuse dave
make policyOpen the Gateway and the chat, type the request as maya, watch the Linux agent, and approve as sam. The steps say what you should see at each one.
# the Gateway, Switch's dashboard
open http://localhost:3000
# the chat: sign in as maya (password in work/humans.json)
open http://localhost:8065Drives a full run with scripted humans, then proves the merged main passes on both machines.
python3 scripts/e2e.py