cctop
An htop for your AI coding agents. One screen for every Claude Code, Codex, Cursor, Devin, Gemini CLI, OpenCode, Pi and Windsurf session on your machine: what each is doing, what it has spent, and which one needs you.

A real recording. Play it in a terminal with
asciinema play docs/assets/demo.cast.
It reads what the agents leave on disk, so it sees sessions it did not start, including ones that ended weeks ago. Nothing to configure, nothing to run alongside it.
Features
- Cost. Tokens times published rates, per session, hour, day and model.
- Context.
CTX%tells you when a window is 68% full. The Context panel shows what is in it, including an Unaccounted bar that never claims to be smaller than it is. - Waiting on you. The status dot goes amber when an agent needs a reply, and
turns to a
✓when a turn ended while you looked elsewhere. - Stuck work.
ERR%is the share of a session's tool calls that failed. A quarter of them means an agent is retrying something that will not work, and paying for every attempt. - Collisions. Two agents in one checkout do not cause a merge conflict. They
cause one agent to overwrite a file the other still holds. The
!column warns you first. - Terminals. A tab is a real terminal you can type into, split and drag.
Alt+bjumps to whichever agent is waiting on you. Its agent runs in cctop's own rmux, built in, so it keeps running after you quit and is back in its tab next time.
Installation
[!IMPORTANT] cctop runs on Linux, including WSL. It reads Linux process tables and drives agents over ptys and unix sockets. There is no macOS or Windows build.
|
It offers to install sshfs as well, for cctop sandbox; append
-s -- --with-sshfs to sh to say yes in advance.
By hand, from a statically linked release archive. Swap in the aarch64 name on that architecture.
d=
|
&&
# released with; needs Rust 1.88 or newer
From source: git clone, cd cctop, cargo build --release. The binary lands
in target/release/cctop.
Checksums and cctop --update are in Installing cctop.
Usage
Run it:
That is the whole first run. It finds your sessions, prices them, and draws the table you saw above.
Six keys are worth knowing before anything else:
| Key | |
|---|---|
↑ ↓ |
move between sessions |
← → |
move between the panels underneath |
/ |
filter, on anything a row is |
R |
reopen the selected session in a tab of its own |
F12 or Alt+1 |
back to the dashboard, leaving the tab running |
q |
quit |
[!TIP] Run
cctop --install-hooksonce. The agents then report their own state live instead of cctop inferring it from disk. Runcctop doctorwhen something looks wrong and it will tell you what.
Beyond the dashboard
cctop can answer an agent (s), hand a session's context to a different
harness (O), read the sessions on another machine over ssh (--host), and
stream the table to a browser. On a phone that last one earns its place, since
the sessions waiting on you can find you.
It can also tell you what the money bought.
cctop optimizefinds the reads intonode_modules, the files fetched again after a compaction, and the tool calls that failed and were billed anyway. Each finding carries its cost and says whether that figure was measured or estimated.cctop compareputs your models side by side on your own work: how often each got a file right first time, what a changed file cost, how long it took.--rate 60prices that time too.cctop yieldasks the repository what became of the spend: which sessions' work reached the default branch, which sits on a side branch, which was never committed.cctop recall "why is the cache sharded"returns the passages of past sessions that discussed it.cctop --install-mcpgives the same to the agents themselves.
[!NOTE] Most costs are estimates: tokens multiplied by published per-token rates. Subscription plans (Claude Max, Pro, Team) charge a flat rate or bundle a fixed allowance, so these numbers will not match your invoice. Treat the
$column as a measure of resource consumption rather than billing.--plan maxshows bundled usage asincl. What the cost figures mean is honest about which providers report real figures and which get inferred.
Reference
| Agent | Cost | Tokens | Context | Tools | Live process |
|---|---|---|---|---|---|
| Claude Code | estimated | ✓ | ✓ full breakdown | ✓ | ✓ |
| Codex | estimated | ✓ | ✓ | ✓ | ✓ |
| OpenCode | reported | ✓ | ✓ | ✓ | ✓ |
| Pi | reported | ✓ | ─ | ✓ | ✓ |
| Gemini CLI | estimated | ✓ | ─ | ✓ | ─ |
| Devin | ─ | ✓ | ✓ | ✓ | ✓ |
| Cursor | ─ | ─ | ─ | ✓ | inferred |
| Windsurf | ─ | ─ | ─ | ✓ | ─ |
A ─ marks something the harness does not record, which is a different thing
from something cctop cannot show. Each provider's page has the
detail. Devin records tokens, context, tools and a live process, and no money at
all.
cctop --help has the rest.
Documentation
- Reading the table - every column, the status dot, filtering, and the full key list
- Driving agents - typing into sessions, resuming, tabs and splits, notifications
- In a browser -
cctop serve, the session report, and reaching it from a phone - The bottom panels - Tool Activity and the context breakdown
Then, if you want the detail: what it cost you for · did the spend ship · what the subscription bought · what the cost figures mean · provider by provider · integrations · troubleshooting