A task board you share with your coding agents.

Tasks are Markdown files in your repo. Agents claim and finish them over MCP. You review.

Operating system

Tandem is a desktop app.

No stable release yet
Unsigned build: opening it the first time

Tandem isn't signed or notarized yet, so macOS can't verify it. Drag Tandem to Applications and open it. When macOS says it can't verify the app, close the message, open System Settings → Privacy & Security, and under Security choose Open Anyway for Tandem, then confirm. You only do this once.

On Apple silicon, macOS may instead say Tandem "is damaged and can't be opened". The app is fine; macOS says this about unsigned apps downloaded from the internet. Clear the download quarantine in Terminal, then open Tandem again:

xattr -dr com.apple.quarantine /Applications/Tandem.app
No stable release yet
Unsigned build: opening it the first time

Tandem isn't signed yet. Run the installer. If SmartScreen shows "Windows protected your PC", choose More info, then Run anyway.

No stable release yet
Installing on Linux

Install the .deb (sudo apt install ./Tandem_*.deb) or the .rpm, or make the .AppImage executable (chmod +x Tandem_*.AppImage) and run it.

View on GitHub

Free and MIT licensed · macOS, Windows, Linux

The Tandem board: Backlog, Todo, In progress, Review and Done columns, with two cards held by live agents.

How it works

  1. 1

    Tasks are files

    Each task is a Markdown file in your repo's .tandem/ folder, committed with the code that works on it. The file is the card: when an agent starts the task, one line changes.

    .tandem/m2ex9rd.md

    ---
    id: m2ex9rd
    title: Add a --units flag
    status: in_progress
    priority: high
    labels: [cli]
    created: 2026-10-20
    ---
    
    ## Description
    Let people pick metric or imperial output.
    
    ## Acceptance criteria
    - [ ] `--units` accepts metric and imperial
    - [ ] The default follows the system locale
    - [ ] `--help` documents the flag
    
    ## Changelog
    
    ### 2026-10-20 · You · created
    
    ### 2026-10-21 · claude-code-4537 · started

    git diff

    - status: todo
    + status: in_progress
  2. 2

    Agents use MCP

    Tandem runs an MCP server on your machine. Add it to your agent once; it claims a task, logs progress and finishes it through MCP tools, safely alongside other agents.

    claude mcp add --transport http tandem http://127.0.0.1:4317/p/<project-id>/mcp
    1. start_taskm2ex9rd → in progress
    2. log_progress"Parsing --units with clap"
    3. log_progress"Locale default done, adding tests"
    4. finish_taskmet 1, 2, 3 → Review
  3. 3

    You review

    Finished work waits in Review with the agent's summary and its ticked criteria. Mark it reviewed, or reopen it with feedback for the next attempt. Only you can tick it off.

Built for working alongside agents

  • Git is the history

    A task file changes only when something worth reading happens, and its changelog only grows. Commit review commits that one file and nothing else.

  • Claims are leases

    start_task claims a task for 15 minutes, renewed by every tool call that carries its agent id. If an agent crashes, its lease runs out and another agent can take the task over.

  • Agents propose, you approve

    Tasks an agent creates wait in Backlog until you approve them. Agents only start tasks in Todo, and only you can mark finished work reviewed.

  • Local only

    The MCP server listens on 127.0.0.1, with one endpoint per project, and only while the app runs. There is no account to create.

  • The files are the truth

    Leases and working logs live in a SQLite database in the app’s data folder, never in the repo. Delete it, and the board rebuilds from the files.

  • Keyboard first

    N new task, / search, Enter opens a card, R marks it reviewed, A approves. Or drag cards between columns.

Works with your agent

Each project gets one MCP endpoint over HTTP. The app's Setup panel shows its URL with copy buttons for each of these.

Claude Code

Add the server once from your terminal:

claude mcp add --transport http tandem http://127.0.0.1:4317/p/<project-id>/mcp

.mcp.json

Or commit this at the repo root, so every Claude Code session in the repo gets the server:

{
  "mcpServers": {
    "tandem": { "type": "http", "url": "http://127.0.0.1:4317/p/<project-id>/mcp" }
  }
}

Codex, Cursor and others

Any MCP client that supports Streamable HTTP can use the same URL, in its own config format. See your client's docs.

AGENTS.md

Add the workflow snippet to AGENTS.md or CLAUDE.md, so agents claim tasks before working, commit the task file with their work, and never mark their own work reviewed.

Tandem is built with Tandem

Its own tasks live in the repo's .tandem/ folder, worked on by agents and reviewed by hand, like the ones on your board will be. Tandem is open source under the MIT license.

Operating system

Tandem is a desktop app.

No stable release yet
Unsigned build: opening it the first time

Tandem isn't signed or notarized yet, so macOS can't verify it. Drag Tandem to Applications and open it. When macOS says it can't verify the app, close the message, open System Settings → Privacy & Security, and under Security choose Open Anyway for Tandem, then confirm. You only do this once.

On Apple silicon, macOS may instead say Tandem "is damaged and can't be opened". The app is fine; macOS says this about unsigned apps downloaded from the internet. Clear the download quarantine in Terminal, then open Tandem again:

xattr -dr com.apple.quarantine /Applications/Tandem.app
No stable release yet
Unsigned build: opening it the first time

Tandem isn't signed yet. Run the installer. If SmartScreen shows "Windows protected your PC", choose More info, then Run anyway.

No stable release yet
Installing on Linux

Install the .deb (sudo apt install ./Tandem_*.deb) or the .rpm, or make the .AppImage executable (chmod +x Tandem_*.AppImage) and run it.

View on GitHub