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.
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.
zero-install: uvx kanbot · MIT · Python 3.9+ · macOS & Linux
How it works
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.
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.
Claude Code reports working / blocked / idle through its own lifecycle hooks — no guessing. Every other CLI is classified from what is on its screen.
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.
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.
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.
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.
Tokens flowing, tools running. Leave it alone.
Waiting on a human: a permission, a question, a trust prompt.
Finished the turn, ready for the next prompt.
Process exited. Exit code and scrollback kept.
Compare
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.
| tmux | Herdr | KanBot | |
|---|---|---|---|
| Processes survive disconnect | yes | yes | yes |
| Agent state (working / blocked / idle) | — | yes | yes, hook-exact for Claude Code |
| Terminal app (sidebar + live agent) | panes, no state | yes | yes |
| Web board, works on a phone | — | — | yes |
| Notified when an agent is blocked | — | in-app | banner, or any command (Telegram, ntfy…) |
| Socket API + CLI for scripts and agents | send-keys | yes | yes |
| Task queue, workflows, gates, long autonomous runs | — | — | yes |
| Resume yesterday's session from disk | — | yes | yes |
| Split panes and layouts in one terminal | yes | yes | not yet — the board is the layout |
| Install | brew / apt | curl | 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
Install and open the terminal app. It starts the runner in the background on first run.
pipx install kanbot kanbot
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
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
kanbotthe terminal app · Enter focus · Ctrl-] back · n new · q quitkanbot upserver + local runner in the foreground, opens the web boardkanbot runner --server http://host:8787add another machinekanbot psevery agent here: state · agent · cwd · titlekanbot attach <id>your terminal becomes that pane · Ctrl-] detacheskanbot agent start claude "…" --cwd ~/repoopen a live TUI (--headless for print mode)kanbot agent start claude --resume <session>pick up a session from diskkanbot agent wait <id> --until idleblock until it's ready · blocked · donekanbot agent read <id> --lines 40the screen as plain textkanbot agent prompt <id> "now add tests"type + Enterkanbot agent keys <id> y Entertmux-style key names · C-c · Escape · Downkanbot agent kill <id>HUP, TERM, then KILLkanbot review --gatemulti-agent code review as a workflow gateSame 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.