About Tandem

This page has a ticket.

Tandem's roadmap is a Tandem canvas. Not a demo of one — the real board this project is planned and built on, since the first commit. The page you're reading was a row on it, and it moved through the same four states as everything else here.

TDM-50E7.2 About page rework aligned to charterDone
proposed
Drafted by an agent session while planning the epic — as a proposal, not as work.
approved
By Jaxon, in the browser. Until then no session could see it in the queue.
claimed
By one Claude Code session over MCP. The claim is atomic, so the other sessions running at the time moved on to different tasks.
done
Handed back with a result and a commit. You're reading it.

TDM-50 lives on canvas TEGLQFXR — and its commit is in the public history, like every ticket before and after it.

What it is

The coordination plane for agent fleets.

A fleet stops being one session's problem the moment it has two — a second terminal, a worktree on another branch, a subagent with a fresh context, each unable to see what the others hold. Tandem is the one place outside all of them where the coordination state lives: one local queue they claim work from, one live briefing they all read, and one approval gate you hold.

Not an agent runner
Tandem never launches or executes anything. Your agents keep running wherever they already run — your terminals, your worktrees, your orchestrator.
Not another chat app
No threads, no inbox, no agents talking to each other. They read state and write results.
Not a service
It rides MCP and a file on your disk. There's nothing hosted, nothing to sign up for, and nothing for a vendor to switch off.
Principles

Four decisions everything else follows from.

Each of these closes a door on purpose. They're the reason some obvious-looking features aren't here.

State, not messaging
A handoff is a task result and a document, not a message someone has to notice. There is no agent inbox — an inbox is a thing that can be missed, and a fleet that misses one message drifts for the rest of the run.
Human approval is the gate
Tasks land as proposed. Only approved work is pullable, so an agent literally cannot reach what you haven't read. The gate sits on the batch, not on every step: you approve an epic once instead of answering a prompt per call.
Vendor freedom
Any MCP client works — Claude Code, Codex, Cursor, a script with an MCP library. Same queue, same tools, same canvas code. Nothing on the server knows or cares which model is calling.
Freshness is visible, not faked
Shared context carries its own age: freshagingstale Tandem would rather tell an agent the briefing is a week old than serve it as if it were current. Confident staleness is the expensive failure.
Who built it

One person and a fleet of agents.

I'm Jaxon. I build tools I actually want to use, and this is the one I use every day. I run several agent sessions at once, and I got tired of being the traffic controller between them — reconciling a TODO.md three sessions had edited, re-explaining the same context, catching work I never asked for after it was already written.

So Tandem is built the way it's meant to be used: I write the specs and approve the queue; sessions claim tasks, do the work, and hand back results with commits attached. That's not a growth-hack origin story — it's the honest reason the approval gate and the atomic claim exist, and why the board looks the way it does. One person can direct a fleet, but only if the fleet reports back somewhere the person can actually read.

Tandem is open source and runs on your machine: a single Go binary with the real-time hub over WebSockets and a SQLite file for state, a React frontend embedded in it, and a stdio MCP server that lets agents work the same board you're looking at. The split is the whole design — intent stays in git, and the churn (claims, statuses, results) moves into a queue every session and every person can reach.

You don't have to take any of this on faith.

The source is public, every commit carries its ticket, and the whole thing installs in one line.