$ cockpit watch

Run a fleet of Claude Code agents. Fly them from one cockpit.

Claude Code made it cheap to run several coding agents at once — one git worktree per task, each with its own cmux terminal running claude, each ending in a PR. That scales the work, not the tracking. Cockpit is the missing glue: it re-derives the whole fleet every cycle and renders one live table you drive by keystroke.

View on GitHub →InstallMIT · zero stored state
Cockpit's terminal UI — every worktree, workspace, and PR in one table with CI, review, and comment state
every worktree, workspace, and PR in one table — CI, reviews, comments, dirty state

$ cat WHY.md

N terminals, N PRs, N tickets — and nothing tying them together.

After a few parallel tasks you're tabbing through terminals and refreshing browser tabs to answer three questions: which agent is idle and waiting on you, which PR just went red on CI, which one has a review comment nobody answered. Cockpit computes every row from the real state of git, cmux, and GitHub each cycle — no stored inventory to drift out of sync. From that one table you focus a session, open its PR or ticket, nudge an idle agent, or close a finished worktree, without leaving the terminal.

what it does

One live table

git worktree list + cmux tree + your open PRs + linked tickets, re-derived every cycle. Each row is computed, never cached — so it can't lie to you.

Spawn & tear down

/cockpit:new builds a worktree + cmux session + PR-tracking row from a PR number, Slack thread, ticket, or bare branch — and reaps the whole thing when the PR merges.

Ticket glue

Links each PR to Linear, GitHub Issues, Jira, or Trello via a footer in the PR body, and can transition the ticket on merge. One keystroke opens it.

Driven by keystroke

Most keys act on the highlighted row and the footer hints adapt to its state. Focus, nudge, close, or open a PR — no mouse, no leaving the terminal.

the verbs

f
Focus the row's session — spawn one if it has none
p
Open the PR in a browser
t
Open the linked ticket (Linear / GitHub / Jira / Trello)
N
Nudge an idle agent now
c
Close — tear down workspace + worktree when a PR is done
n
New workspace from a branch, PR, URL, ticket, or Slack thread
s
Sync — full reconcile now
q
Quit

$ install

Three steps, no shell after the first.

install.sh
# 1 · add + install the plugin (inside Claude Code) > /plugin marketplace add github.com/khivi/cockpit > /plugin install cockpit@khivi-cockpit # 2 · one-time installer (bootstraps uv, wires statusline) $ bash ~/.claude/plugins/cache/khivi-cockpit/cockpit/*/bin/update.sh # 3 · run it (the daemon is the TUI) $ cockpit watch

requirements

uv, git ≥ 2.30, Python ≥ 3.12, an authenticated gh, and Claude Code — plus a workspace backend on PATH: cmux on macOS or limux on Linux. Without a backend, cockpit still runs the statusline in cache-only mode.

it also writes your Claude Code statusline

statusline
🤖 Opus 4.7 🧠 7%/1M ⌛ 4%/5h khivi/fix-login ✓ clean TICKET-123 APPROVED #9999 Add login flow

Open source. MIT. Built by khivi.

I wrote Cockpit to run my own multi-agent workflow — it's the platform behind the AI work on the rest of this site. Issues and PRs welcome.