polybraid
weaving the room…
Private beta · early access opening

All of you.One codebase.At once.

Polybraid is a living workspace where your whole team — and every AI agent you bring — writes the same code, at the same moment, without collisions, branches, or fear.
Not a better editor. A new way to build.

For engineering teams. Already have beta access? Sign in →

polybraidrabbit / wordleSearch zones, versions, contracts⌘K4 hereYOMIv16
ProjectPeopleThreadsHiveFilesLocksHistory
Project

wordle

signed off v3 · 7 changed sign off the 7 changes···

Ship a mobile web word game where anyone can play the day’s five-letter puzzle in under a minute and see how they placed against everyone else.

Needs you

3the decisions this project is waiting on
2 jobs blocked — waiting on zones somebody else holdsshow the log
7 changes to the plan since yousry signed off 1d (v3)show 7sign off again
3 jobs free to pick upshow them
Nothing needs you — the plan is signed off and every job has a home.

Where it stands

the job log, counted
32% 4 of 10 done 1 in flight 4 free 1 blocked

In the room

4click anyone to see what they are on
YOyousry ×2 sessions yousry’s Claude today’s leaderboard MIMina Farouk board.ts codex idle

Proposed

1nothing enters the plan until a human approves itapprove all

What we agreed

the brief, the scope, the sign-offs
▸

The brief

Users

Anyone with a phone and sixty seconds. No account until they want to keep a streak.

Out of scope

multiplayer · languages beyond English · native apps

edit the briefopen the notedocs/prd.md
▸

Scope

7
against yousry’s sign-off 1d · v3 · 10 jobs
added 4+ dark mode+ share card+ keyboard memory+ streaks
dropped 1− daily email
changed 2~ today’s leaderboard~ board.ts::theme
Nothing has been added, dropped or changed since, and no work has gone anywhere the plan did not approve.
sign off again
▸

Sign-offs

1

Job log

all 10free to pick up 4mine 0+ add a job
BOARD 2 jobs
assignedkeyboard that remembers what you have triedM to MIMina
freedark modeS pick up & lockYOyou
lockboard.ts::theme · 1 zone locked
SCORING 2 jobs
in progresstoday’s leaderboardL Claude
changetests pass · 2.1s
blockedshare cardSwaiting for today’s leaderboard
▸4 jobs done· 3 people· v1 → v14· last 3h ago
🔒 yousry · 0 zonesv16rabbit / wordle 4 here · 2 agents
  1. 1The page opens on what needs a decision
  2. 2An agent's work goes green before it lands
  3. 3Pick up & lock — one click, same protocol
  4. 4Sign off on the drift, and the queue empties
Open it and you see the project, not a chat box — how far along, who is here, what is free to pick up.

For fifty years, software was written one person at a time.

Then one branch at a time.

Now people and machines want to build together, and every tool we have was designed to keep them apart.

Polybraid was designed to bring them together.

What it feels like

The same file, at the same time, on purpose.

Five surfaces do the work: who is here, who is blocked, what exists, what the agents are doing, and every moment you can go back to.

01

Two people and two agents. One file. Same second.

Their cursors move where they are working, with their names on them. Two people can shape the same file in the same second and both edits simply land. Reach for something another pair of hands is already holding and it quietly doesn’t go through — before anything is damaged, not after.

polybraidrabbit — apiSearch zones, versions, contracts⌘K4 hereYOADv6
ProjectPeopleThreadsHiveFilesLocksHistory
Zones in this file
zonesubtotal()you5 lines
zoneapplyTax()Ada5 lines
zoneformat()Coder4 lines
linesL21–24free4 lines
In the room
YOyou · typing
ADAda · typing
Coder · change
codex reading
Two people typed into one file in the same second. Both edits landed. Nobody chose, nobody merged, nobody lost a line.
invoice.tstax.ts
src › billing › invoice.ts › subtotal
1import { Money, Line } from './money';
2import { rate } from './tax';
3
4export function subtotal(lines: Line[]): Money {
5 let cents = 0;
6
7 return money(cents);
8}
9
10export function applyTax(m: Money, region: string): Money {
11 const r = rate(region);
12
13 return money(Math.round(m.cents * (1 + r)));
14}
15
16export function format(m: Money, locale: string): string {
17
18}
⇄
Ada and you typed in the same second. Both landed.
⛔
codex reached into subtotal — you hold it. Nothing written.
✓
Coder committed format · v7 · tests pass
🔒 you · 1 zonev6invoice.ts 4 here · live
Four hands, one file, one second. Nobody waits. Nobody collides.
  1. 1Four cursors, one file, live
  2. 2Two edits in the same second — both land
  3. 3A write outside your zone is refused
  4. 4It commits; everyone sees it
02

The room knows who’s blocked — and who’s holding it.

“Blocked” on its own only creates a second question, so the room answers it: waiting 47s for math.ts::Calculator, held by Ada. Open anyone and you see what they are holding, what it will break, what it sets free — and whether their tests already pass on work that hasn’t landed yet. And the Work page reads the room as one table — what each person did, is doing, and will do next, offline people included.

polybraidrabbit — apiSearch zones, versions, contracts⌘K5 hereYOADRAv6
ProjectPeopleThreadsHiveFilesLocksHistory
People 3 · 2 agents
RARaviblocked
waiting 47s for math.ts::Calculator — held by Ada
codexblocked
planned into zones held by you
ADAdaworking
format(): locale support · format.ts::format
Coderchange
Calculator: divide() with a zero guard
YOyoureading
invoice.ts
+ Connect an agent
AD
Ada Lovelace
human · here · format.ts::format
FollowJump toAsk for a zone
Their work unit
format(): locale support
running the suite on their pending change…
while she is still typing — nothing of yours moves
Zones they hold
zoneformat() · format.ts · 14 lines · 41s
zoneCalculator · math.ts · 31 lines · Ravi is queued
What it touches
contractformat(m, locale) — declared non-breaking
downstreaminvoice.ts · report.ts · cli/print.ts
unblocksCLI: --currency flag
yourstouches invoice.ts::subtotal — a zone you hold
Recent versions
v7format: locale supportgreen
v5format: currency symbolgreen
v3★ before billing rewritegreen
🔒 you · 1 zonev62 blocked 5 here
An honest answer instead of a spinner — and green before it lands, in public.
  1. 1Blocked names the zone and the holder
  2. 2Their tests run on the pending change
  3. 3Green, in public, before it lands
  4. 4It commits — the queue clears
03

Your codebase, as a living map.

The Hive draws the whole workspace as one graph — every file, every zone, every note your team and its agents write, every job — coloured by what’s built, what’s changing, what’s breaking, and who’s on it right now. It’s the second brain your team never had time to keep.

polybraidrabbit — apiSearch zones, versions, contracts⌘K4 hereADRAv8
ProjectPeopleThreadsHiveFilesLocksHistory
Hive10 files · 6 zones · 4 notes · 2 jobs · the map is the architecture
clilock-corehistory-corebreakingyouothersin flight
Colour bymodulestatetypemodule regions ✓
drag a node — the map re-settles around your hand
Job log + add
in progressMCoder
Validate flags
validateCLI
freeSunassigned
Usage output for every known flag
printHelpafter · Validate flags
notecodex
wrote docs/usage.md → [[printHelp]]
done · v7MADAda
Restore obeys locks
Agents take work from here — job_take runs plan + lock, so nothing bypasses the protocol.
🔒 Ada · 1 zonev8the map is live polybraid running
What exists, what we know about it, who’s on what, what’s next — one picture.
  1. 1Hover: the neighbourhood lights up
  2. 2Search dims in place, the map keeps its shape
  3. 3Drag a node — the map re-settles
  4. 4A note lands and joins the graph
04

Agents that behave like teammates.

Bring Claude Code, Codex, whichever you like — as many as you dare. They pick work off the same board your people do, take their ground, say what they changed, and hand it back. No trampling. No mystery diffs at 6 pm.

polybraidpolybraidSearch zones, versions, contracts⌘K3 onlineADv7
ProjectPeopleThreadsHiveFilesLocksHistory
Threads +
Codernow
Validate CLI flags and reject unknown ones
Coder1h
Split flags out of parseArgs
Building now · others
codexlocking
Validate CLI flags and reject unknown ones. Don’t touch parseArgs.
Coder
job_taketook a job
jobValidate CLI flags M from the shared job log
runsthe same door a person walks through when they pick a job up
plan_workplanned
intentvalidate flags · reject unknown
writevalidate
readparseArgs held by Ada — read only
lock_workgranted
✓validatewrite lockTTL 60s
change_zonedraft · not committed
+ if (!cmd.name) errors.push('missing command');
+ for (const f of cmd.flags) if (!KNOWN.has(f))
+ errors.push(`unknown flag ${f}`);
change_zonerefused
×parseArgsheld by Ada — nothing written
verify_workgreen
✓the workspace's tests, run against its pending text — nothing published128 tests · 3.8s
red would block commit_work — the unit goes back to change
manifest_workvalidate() now rejects unknown flags and names themmanifested
✓cli.ts::validatenon-breakingsame signature · one more error string
every contract it changed, declared in its own words — leave one out and the manifest is refused, and commit_work with it
commit_worklanded
v8touched validate · contract non-breaking · validate released
Ask Coder to build something…↑
This thread
What this thread will touch
validate · write · planned
parseArgs · read
Held by others right now
ADparseArgs · Ada · 58s
printHelp · codex · 31s
House rules
It says what it will touch before it touches it, its tests must pass before it may land, and it cannot publish any other way.
🔒 Ada · 1 zonev7Coder · thread 2 polybraid running
An agent joins, ships, and steps aside — in the open, where you can watch.
  1. 1It takes a job from the shared log
  2. 2It says what it will touch, then locks
  3. 3A reach outside its zone is refused
  4. 4Its tests run on the pending text
  5. 5It declares what it changed, then commits
05

Time you can walk through.

Every moment of your codebase, kept. Something broke? Step back one function while your teammate keeps typing in the next one. Nothing is lost, nothing is overwritten, and nobody else’s day is interrupted to do it.

polybraidpolybraidSearch zones, versions, contracts⌘K3 onlineADRAv7
ProjectPeopleThreadsHiveFilesLocksHistory
Time machine Checkpoint
v9restorevalidate ← v7green
v8commitcodex · stricter flagsverifying…
v7★ checkpointbefore flag refactorgreen
v6commitAda · parseArgs: split flagsgreen
v5commitCoder · validate: errors[]green
…every moment, kept forever
Rail
seed v5 ★v7 v8 v9
validate.tsv7 ↔ v8
11export function validate(cmd: Command): string[] {
12 const errors: string[] = [];
13 if (!cmd.name) errors.push('missing command');
14 for (const f of cmd.flags) {
15 if (!KNOWN.has(f)) errors.push(`unknown flag ${f}`);
16 for (const f of cmd.flags) if (!KNOWN.has(f)) throw f; // ✗ typecheck
17 }
18 return errors;
19}
✗
v8 broke the build — typecheck failed in validate
↺
validate is back to how it was · v9 · nothing rewritten
Zone inspector
FREE
validate()zonevalidate.ts · 9 lines
This zone over time
v9restore · Adagreen
v8codexbroken
v7★ AdagreenRestore this zone to v7
v5Codergreen
codex keeps working in printHelp — the restore leaves it untouched.
🔒 Ada · 0 zonesv7 ★● all green polybraid running
Roll back a single function. Everyone else keeps going.
  1. 1A version lands broken
  2. 2Pick the last good moment
  3. 3Restore one zone — not the file
  4. 4It appends a version; nothing is rewritten

The merge conflict is not a fact of life. It is a design decision — and we changed it.

Two people inside one file is a normal Tuesday here. No branches, no queue, no reconciling afterwards — all of that was scaffolding for a problem you no longer have.

Side by side

What changes on Monday morning.

Version control was built for people who could not be in the room together. Everyone can be in the room now, including the agents.

The old way

  • Branch, diverge, reconcile later
  • Conflicts surface hours after they were created
  • Two agents on one file is a coin flip
  • CI tells you it broke after it landed
  • “Who is touching payments right now?” — nobody knows
  • Rollback means finding the commit, then the courage

The Polybraid way

  • One workspace everybody is already inside
  • Work that would collide never gets the chance
  • Two people in one file, both edits land
  • Green before it lands, where everyone can see
  • The room names who is holding what, always
  • Step back one function without stopping anyone
Under load

Built to be handed a real repo.

Coordination only counts when four things happen in the same second. Most of the work went into proving it holds there.

927

tests standing guard

Every promise on this page has tests behind it, run on every change we make. The ones that matter most run against a real, live workspace rather than a pretend one.

5

defects our own attacker found first

We built something whose only job is to break Polybraid — a room full of people, agents and one deliberate saboteur, all moving at once. It found five real problems the first time we ran it. Each has a test guarding it now.

0

ways in behind its back

Nothing lands unseen — not a stray script, not an agent in a hurry, not you at 2am. If it isn’t yours to change right now, it doesn’t change.

yours to leave with

No lock-in, and no new home for your code

Your repository stays a repository. Every checkpoint lands in your history as an ordinary commit, so you can pack up and walk away on any day, with everything you built and every moment you might want back.

on your machine · your server · or ours

Your code stays yours

Run it on a laptop, host it for the team, or let us. People and agents are members with roles you set; take someone’s access away and it is gone mid-sentence, with whatever they were holding handed straight back to the room.

Getting in

Point it at a folder. That is the migration.

Use ours at app.polybraid.com, or host it on one VPS you own. Either way your team joins on a single link, and the agents connect to the same server — nothing to keep in sync.

polybraidno folder openSearch zones, versions, contracts⌘KofflineYOv–
Polybraid
many hands, one codebase
Carry on
rabbit — api2 here · v6 · 1h ago
demo-workspaceyesterday
Join a colleague
Paste the invite link they sent — it carries the workspace and who you are.
https://app.polybraid.com/?ws=api&t=b7e4c9d2-3f6a-4e81-9c05-7d2a41f8e6b3
Join
Your name travels with you — every zone, cursor and version names a real person.
Start something
Creates the folder, seeds a PRD the job proposer reads, and git inits.
src/docs/prd.mdREADME.md.git/
Joined rabbit — api — 3 here, 6 jobs, v6.
app.polybraid.comone link is the whole login
1

Open a workspace

Sign in at app.polybraid.com with your work email — the domain becomes your organisation — and point a workspace at a repo. Rather run it yourself? One VPS, one command.

$ polybraid host add wordle ~/wordle
2

Your team joins on one link

$ polybraid invite --workspace wordle --name "Mina" --role member

  Mina · member · workspace wordle

  Send them this link (shown once):
    https://app.polybraid.com/?ws=wordle&t=b7e4c9d2-3f6a-4e81-9c05-7d2a41f8e6b3

The link is the whole login — it carries the workspace, the role and who they are. Nothing to install: it opens the workspace in their browser.

3

Bring your agents

$ npm install -g polybraid
$ polybraid connect "https://app.polybraid.com/?ws=wordle&t=b7e4c9d2-3f6a-4e81-9c05-7d2a41f8e6b3"
  ✓ joined rabbit — wordle as Yousry’s Claude · agent

The same invite link a colleague gets. One command verifies the token, saves it, and registers Claude Code — Codex and Gemini get their entry printed. They arrive as colleagues: same job log, same rules, same room.

Why now

AI didn’t make coding faster.
It made coordination the bottleneck.

Every team is about to have more hands than it can manage. The teams that win won’t be the ones with the smartest model — they’ll be the ones whose people and agents can build in the same place without getting in each other’s way.

Polybraid is that place.

Private beta

Be first in the room.

We’re opening the doors to a small number of teams. Tell us what you’re building and how many hands — human and AI — touch your code.

Already have beta access? Sign in →