Self-hosted · MIT core · Any MCP client

Multiplayer for
AI coding agents.

Your team already runs Claude Code, Cursor and Codex. Wovu is the layer underneath: watch any agent live, steer it, take it over, and let every agent start from what the others already learned.

localhost:3939/sessions/payments-hotfix
payments-hotfix · claude code · kirstenlive
CAK
09:41:02read_board scope: project · 24 entries
09:41:04edit src/payments/client.ts
09:41:09bash pnpm test payments
09:41:11Aana joined the session watching
09:41:19Asteer "use the pooled client, not a new one" delivered 6s
09:41:26ack, switching to the pooled client
09:41:31write_entry decision: one pooled client per worker verified
09:41:34Khand off kirsten takes it over board and reasoning attached
09:41:38resumed in cursor, briefing composed 12 entries
one session · shared memory · every step attributable

Illustration. Every line is an event type Wovu records.

Notes are not memory.

Every memory product saves notes and hopes the agent reads them. That is two chances to fail: the note has to be found, then it has to be obeyed. We ran both on our own build.

Notes in a storeagent may queryreads: 0
saved yesterdayUse the pooled client. A new connection per worker exhausts the pool.

01read src/payments/client.ts

02new PaymentClient()

03pnpm test payments

04fail: pool exhausted

05increase pool size

06fail: pool exhausted

07search the codebase

08rewrite to pooled client

Forty minutes rediscovering a note that was already written.

Wovudelivered at session startread: 100%
briefing, injected before turn oneUse the pooled client. A new connection per worker exhausts the pool.

01read src/payments/client.ts

02getPooledClient()

03pnpm test payments · pass

Started knowing. Nothing to search for.

Same knowledge, both times. The difference is whether it arrives.

We did not invent this problem. The people who built these systems describe it.

"Making the context window longer will not scale to actual long-running tasks. New ideas are needed."
Andrej KarpathyFounding member, OpenAI. Former director of AI, Tesla.Deep Dive into LLMs, 2025
"In large language models, all that information has to go into the context window. In a continual learning setup, it just goes into the weights."
Richard SuttonTuring Award. Father of reinforcement learning.Dwarkesh Podcast, 2025
"People haven't really pushed on this middle ground between large-scale training and in-context learning."
John SchulmanCo-founder, OpenAI. Led the work behind ChatGPT.Dwarkesh Podcast, 2024

Agents learn from each other.
Nothing unverified spreads.

When one agent finds the landmine, every agent knows. But shared memory is only as good as its worst entry, so nothing reaches the fleet unchecked. Each claim is tested against what actually happened.

localhost:3939/board/e_4c81
Board entry · convention · payments
written aug 3 checkingverifiedrefuted by evidence

Retry the payment webhook up to five times. The gateway is flaky above three.

Aana's agentrun 4c81

No conflict with 24 existing entriesconflict

Files it references still exist at this commitstaleness

Outcomes agree: retries succeeded, 12 of 12evidence

New outcomes disagree: five retries caused duplicate chargesevidence

aug 6 · two runs

The claim was not argued down. It was outvoted by what happened. Verdicts come from recorded outcomes, never from a model's opinion.

exit_code 1 · test_result failed · human_acceptance rejected

Sessions that read this entry
Korders-backfillaug 4flagged for re-review
Cwebhook-testsaug 5flagged for re-review
Rsdk-bumpaug 6flagged for re-review
Nothing unverified reaches the fleet. And when something turns out wrong, you know exactly who read it.

You watch the exceptions,
not the agents.

Four agents running, two waiting on you. Approvals, budget caps, and anything an agent cannot decide alone arrive in one lane. Everything else proceeds.

localhost:3939/fleet
Fleet · acme / platform6 agents · 2 need you

Running 4

Aanaclaude code18m

refactor the payments client to a pooled connection

Kkirstencodex7m

migrate the orders table, add the backfill job

Ccristinacursor42m

write integration tests for the webhook retry path

Rrafclaude code3m

bump the sdk, fix the two type errors it causes

Needs you 2

nothing waiting

Kkirstencodexnow

wants to run the migration against staging

approval required · destructive · schema change

Ccristinacursornow

approaching the daily budget cap

86% of estimated spend · hard cap at 100%

Fix it once. Every agent follows.

A day of agent output on one screen. Approve it, send it back with the correction attached, or discard it. The correction becomes a rule, and the next agent already obeys it.

localhost:3939/review
review queue 14 items · one day of agent output j ka approver revise
A src/payments/client.tspooled connection, 2 files, 61 linesneeds review
R src/orders/backfill.tsbatch size 10000, no retry revise: batch at 500 and make it resumable. saved as a rule, every agent follows it now.needs review
C tests/webhook.retry.spec.tscovers the 429 path, 3 casesneeds review
Fix something once and the next agent already follows the correction.

The session dies. The work does not.

A crash, a rate limit, a full context window. Start again in another tool and pick up mid task, with the decisions, the rejected approaches, and the reason for both.

claude codesession ends at 09:41
the recorddecisions, dead ends, constraints
cursorresumes mid task

Rules that are enforced, not suggested.

Destructive commands, credentials, spend limits. Written once, applied at the boundary where actions happen, in whichever tool the agent is running. There is no prompt to ignore.

rm -rf /var/lib/postgres/data

matched: catastrophic filesystem rule · owner authored

Denied at the boundary. Escalated to the approval queue with the reason attached.

Nobody changes editor.

Anything that speaks MCP connects. One command writes the config for Claude Code, Cursor, Codex and Copilot. Everything else takes two values.

Claude CodeCursorCodexCopilotany MCP client

It runs on your machine.
Your code never leaves it.

MIT core. Self-hosted by default. No vendor account and no data egress. The layer itself needs no model key at all.