Every agent.
One screen.
Leave them running.

A tmux for coding agents. KanBot owns a real terminal for every agent you run — Claude Code, Codex, Gemini, anything with a CLI — and shows them all in one terminal app or one web board. See who is working and who is stuck. Type into any of them, from a terminal or your phone. Hand them a queue and walk away.

$pipx install kanbot && kanbot

zero-install: uvx kanbot · MIT · Python 3.9+ · macOS & Linux

kanbot — laptop · gpu-box

    
Claude CodeCodexGemini CLIOpenCodeAiderCursor AgentGLM / Z.aiKimiHermesany shell

How it works

The runner owns the terminals. You just visit.

A background runner spawns each agent inside a PTY it controls. Close the tab, sleep the laptop, ssh in from somewhere else — the process is still there, the scrollback replays, and you pick up exactly where it was.

01

Panes that outlive you

Each agent gets a real pseudo-terminal held by the runner, not by your browser tab. Attach from the web board, from your phone, or with kanbot attach. Ctrl-] detaches; the agent keeps going.

02

Exact state, not spinners

Claude Code reports working / blocked / idle through its own lifecycle hooks — no guessing. Every other CLI is classified from what is on its screen.

03

Blocked comes to you

An agent waiting on a permission prompt jumps to the top of the board, flashes the tab, and pings you: a macOS banner by default, or any command you configure — Telegram, ntfy, Slack.

04

Two front doors

kanbot opens a terminal app: agents on the left, the live agent on the right, Enter to type into it, Ctrl-] back. kanbot up opens the web board with one-tap y n esc keys — for answering "Allow this command?" from a phone at dinner.

05

An API your agents can drive

The CLI and the local socket are one surface: agent.start, agent.wait --until idle, agent.read, agent.prompt. Scripts and other agents orchestrate agents without faking keystrokes.

06

Still a queue

Cards, multi-step workflows, review gates, and a 10-hour goal spree with a real shell stop condition. All of it runs inside panes now, so unattended runs are watchable and interruptible live.

working

Tokens flowing, tools running. Leave it alone.

blocked

Waiting on a human: a permission, a question, a trust prompt.

idle

Finished the turn, ready for the next prompt.

done

Process exited. Exit code and scrollback kept.

Compare

tmux keeps processes alive. KanBot knows what they're doing.

Terminal multiplexers solve persistence. Agent multiplexers add state. KanBot adds the part that lets you leave: a queue, a phone-friendly board, and a way to be told when an agent needs you.

tmuxHerdrKanBot
Processes survive disconnectyesyesyes
Agent state (working / blocked / idle)yesyes, hook-exact for Claude Code
Terminal app (sidebar + live agent)panes, no stateyesyes
Web board, works on a phoneyes
Notified when an agent is blockedin-appbanner, or any command (Telegram, ntfy…)
Socket API + CLI for scripts and agentssend-keysyesyes
Task queue, workflows, gates, long autonomous runsyes
Resume yesterday's session from diskyesyes
Split panes and layouts in one terminalyesyesnot yet — the board is the layout
Installbrew / aptcurl | sh (Rust)pipx install kanbot (Python)

Honest gaps: KanBot has no native TUI and no pane splitting. If you live in one terminal window, Herdr is excellent. If you leave agents running and check on them from elsewhere, KanBot is built for that.

Quickstart

Three commands. Then go do something else.

1

Install and open the terminal app. It starts the runner in the background on first run.

pipx install kanbot
kanbot
2

Give an agent a task — from the board (press n) or the CLI. It opens as a live pane.

kanbot agent start claude \
  "fix the flaky test" --cwd ~/repo
3

Leave. Come back from any terminal or any browser; answer a prompt; leave again.

kanbot ps
kanbot attach 3f2a
kanbot agent keys 3f2a y Enter

CLI

Herdr-shaped commands, so the muscle memory transfers.

kanbotthe terminal app · Enter focus · Ctrl-] back · n new · q quit
kanbot upserver + local runner in the foreground, opens the web board
kanbot runner --server http://host:8787add another machine
kanbot psevery agent here: state · agent · cwd · title
kanbot attach <id>your terminal becomes that pane · Ctrl-] detaches
kanbot agent start claude "…" --cwd ~/repoopen a live TUI (--headless for print mode)
kanbot agent start claude --resume <session>pick up a session from disk
kanbot agent wait <id> --until idleblock until it's ready · blocked · done
kanbot agent read <id> --lines 40the screen as plain text
kanbot agent prompt <id> "now add tests"type + Enter
kanbot agent keys <id> y Entertmux-style key names · C-c · Escape · Down
kanbot agent kill <id>HUP, TERM, then KILL
kanbot review --gatemulti-agent code review as a workflow gate

Same methods over the unix socket at ~/.kanbot/runner.sock and over HTTP from the board: GET /api/panes · POST /api/panes/start · POST /api/panes/{id}/input · GET /api/panes/{id}/read.