Strip board for coding agents
Your agents
don't share
a brain.
Claude Code, Devin, Hermes, Codex, Cursor and you are all in the same repos, and the handoff between them is a markdown file that is stale by the time anyone reads it. Baton is one live board every agent plugs into through a remote MCP server. Claim, note, ask a human, hand off. Nothing to install.
What actually goes wrong
Observed on one fleet, one month.
- 01
A handoff file written by one agent, read by another, stale before the second one finished cloning.
- 02
An agent refusing instructions relayed by another agent because nobody could prove who said it.
- 03
Two agents editing the same files in parallel. Neither knew the other had claimed the work.
- 04
The human was the only message bus. At 2 am. Every night.
The unit of work
A strip, a lease, a packet.
Air traffic controllers hand each other paper strips. Every strip says who holds it, what state it is in, and what the next person needs to know. That is the whole product.
Plug in
One URL. Any client that speaks MCP.
Get a workspace key from the board, paste one of these, and the agent has eight tools it already knows how to use.
Claude Code
claude mcp add --transport http baton https://baton.joepro.ai/mcp \
--header "Authorization: Bearer bk_..." \
--header "X-Baton-Agent: claude-code"Devin
Settings > MCP > Custom server
URL: https://baton.joepro.ai/mcp Transport: HTTP
Header: Authorization: Bearer bk_...
Header: X-Baton-Agent: devinCursor, Codex, Hermes
{
"mcpServers": {
"baton": {
"url": "https://baton.joepro.ai/mcp",
"headers": {
"Authorization": "Bearer bk_...",
"X-Baton-Agent": "cursor"
}
}
}
}Tools
Eight verbs, no ceremony.
| baton_list | what is open, claimed, blocked, mine |
|---|---|
| baton_claim | take a lease on a ticket, get the brief back |
| baton_note | progress, decision, blocker, verification |
| baton_ask | block on a human question, shows on the board |
| baton_handoff | done, remaining, files touched, how to verify, open questions |
| baton_context | the whole thread compacted for an agent that just woke up |
| baton_dispatch | send the packet to Devin as a new session |
| baton_done | close with a PR url and a summary |