ccdeck

See Claude Code subagents and tool calls live

In ccdeck, every Claude Code subagent is a card of its own, joined to the session that started it, with its last four tool calls beside it as they run; double-click a card to list its tool calls, and click one for its input and response.

Claude Code and Codex Checked against ccdeck 3.81.3 on

You will

Before you start

Steps

  1. Read the cards and the lines

    Each card is one agent: a session, or a subagent that a Claude Code session started. Subagents stand in one column beside their session, joined to it by a line each: dashed and moving while running, solid once finished.

    The web-api session on the canvas. On its left, a note tied to its card reads now, 14m ago, Add rate limiting to the public API, and under that Plan 2/5: Move the counters to Redis and Document the new headers ticked, Reviewing the middleware marked now, then Add a 429 test and Open the pull request. Its card is marked LIVE, with a context ring reading 14 at its top right, a second row reading session, an arrow and 4, an Opus 5 chip and 14m 09s, and under its title a row reading 2/5 Reviewing the middleware. Lines join it to four subagent cards in one column: migrator, docs and general-purpose marked DONE on solid lines, and reviewer marked LIVE on a dashed line. Tool bubbles sit to the right of every card: web-api's are four Agent calls. Two calls still run and have a dot where the others have a tick: web-api's last Agent call, and reviewer's last one, Bash npm. Open the full-size picture
    Demo data One session with four subagents, of which only reviewer is still running.

    Each card's state pill reads LIVE, DONE or ERR. The bubbles to the right are its last four tool calls: a pulsing dot while one runs, ✓ once finished, × if it failed. A note tied to a session's card says what it is doing, and its plan once it keeps one.

    Codex cards show less. A Codex card has no title; its note gives the prompt's first line while a turn runs. A child session Codex starts gets its own card, joined to its parent.

    More about what a card shows
    • Top row: the state and the name, a session's folder or a subagent's type.
    • Second row: session, child session, or subagent and its folder; → 4 for four subagents started; the model chip, with the effort once stated (Opus 5 · high); then the agent's run time.
    • Then a Claude Code session's title; once the agent keeps a to-do list, its steps done of all and the one under way; and a chart of the last 60 seconds.
    • Last row: the tool calls (tools), those still running (in-flight) and, once one fails, how many failed. A session adds its tokens (tok) and spend.
    • The ring at a session card's top right: the share of the context window in use (Codex's own figure, the deck's estimate for Claude Code). Click it for the breakdown.
    • Beside a Bash call, a second bubble names the program, such as npm; beside a file call, the file.
  2. Fit the board and move around it

    Press F to fit every agent on screen. Drag the empty canvas, or scroll, to pan. Hold Ctrl (Cmd on macOS) and scroll to zoom, or pinch on a trackpad.

    The bottom left of an empty stretch of canvas: a column of seven symbol buttons (plus, minus, a crosshair, pause, a tree, a bin and a question mark), and further right a chip reading Auto-fit off with a Resume button.
    Demo data The canvas controls, and the chip that appears once you move the view.

    Once you move the view or click a card, the deck stops bringing new sessions into view and shows Auto-fit off. Click Resume to turn auto-fit back on.

    More about the keys and zooming out
    • J and K: the next and the previous agent, opening its detail panel.
    • Tab reaches the cards, and Enter opens the focused card's detail panel.
    • F: fit once; auto-fit stays off.
    • Z: zoom to the selected agent and its session.
    • W: the session waiting on you, oldest first; press again for the next. Claude Code only.
    • L: the session list. D: the detail panel.
    • Esc: close what is open, deselect, release focus.

    Hover over a canvas control for its tooltip. ? opens the full list. The arrow keys do not pan the canvas. Zoomed far out, cards become small faces: hover over one for its name, state and numbers. A running session's face then shows its plan's progress, such as 2/5 done, and so does the label above its frame: plan 2/5.

    A new session lines up with the column it joins, and nothing already on the board moves.

  3. Open the session list

    Press L, or click the session list icon on the stripe on the left. Sessions waiting on you come first, then running ones, then finished ones.

    The stripe on the window's left edge, with icons for Accounts, Account capacity and Reset calendar above a rule and the session list icon below it, marked as open, and the session list beside it, headed Sessions 3 and 2 LIVE, with rows for infra (GPT-5.5, 3 tools, 53 cents, 14m), web-api (Opus 5, 19 tools, $4.28, 14m) and data-pipeline (Sonnet 5, 7 tools, 46 cents, 7s). Under infra a line reads now, Rotate the deploy keys; under web-api, 2/5 Reviewing the middleware, then now, Add rate limiting to the public API. The canvas beside it is zoomed out. The label above web-api's frame reads WEB-API, plan 2/5, an arrow and 4, 1 live, and the session's title. Its card is a small face reading web-api, 2/5 done; its note shows the plan's first two steps, ticked; and its four subagents are faces in one column: migrator, docs and general-purpose ticked, reviewer with a dot. Open the full-size picture
    Demo data A row counts its subagents' tool calls too, so web-api reads 19 here.

    Click a row to frame that session and open its detail panel. Cmd + K, or Ctrl + K, finds a session by name. L or ‹ closes the list; Esc does not.

    Claude Code only. The deck cannot see when Codex asks you something, so Codex sessions never sort to the top. Watch their terminals.

  4. Open one agent's detail panel

    Double-click a card.

    The detail panel for the web-api session: LIVE, session, 14 minutes, Opus 5, then $4.28 spend over a coloured bar, and Export JSON and Remove from board. Below: Now, 14m ago, Add rate limiting to the public API; Plan 2/5, with Move the counters to Redis and Document the new headers ticked, Reviewing the middleware marked now, and Add a 429 test and Open the pull request still to do; Activity with 8 calls, 1 live, 4 agent, 3 file and 1 task; Tokens with in 41.2k, out 96.8k, cache r 1.84M and cache c 118.0k; Identity with cwd /demo/web-api and the session id; one prompt reading Add rate limiting to the public API; and eight tool calls, newest first: four Agent calls, the first still running, then TodoWrite, Read, Grep and Read.
    Demo data A session's panel, whose newest tool call is still running and shows … instead of a duration.

    Its last section, Tool calls, lists each call, newest first. Close the panel with ×, D or Esc.

    More about the panel and a session's usage
    • Plan: the agent's to-do list once it keeps one, with now on the step under way.
    • Activity: how many calls, how many are running or failed, and the calls by kind.
    • Tokens: in, out, cache r (read) and cache c (created).
    • Identity: the folder (cwd), the session id and, for a subagent, its parent.
    • Prompts: what was typed into the session, newest first.
    • Tool calls: each with how long it took.

    Tokens and spend belong to the session; a Claude Code session's include its subagents'.

    For a whole session's usage from this computer's logs, open Usage (U) and its By session, and click the session's row. Session usage lists its total tokens, a token breakdown with Cached input reuse, the models and an estimated cost; for Codex, Estimate using reprices it as Standard, Fast or Flex.

    Below 641 px wide, the panel covers the canvas; × gives it back.

  5. Open one tool call

    Click a row under Tool calls in the detail panel. A dialog shows the call's Input and Response.

    A dialog whose header reads Bash, its call id cut short, and 2.31s, with Input showing the command npm test -- store and Response showing its output: PASS test/store.test.ts, two passing tests, and Tests: 2 passed, 2 total. Each section has a copy button. Open the full-size picture
    Demo data A finished Bash call from the migrator subagent.

    A long block ends in show all. Clicking a bubble on the canvas opens the same dialog.

    More about the dialog

    For Bash it shows the command and its output, for Edit the file and the change, for Read the file.

    The panel keeps the last 200 calls of each agent, and the full input and response of the newest 25 only. For an older call, the dialog says its full payloads were released, and shows a short preview.

    The bubbles cannot be reached from the keyboard; the Tool calls list can. Esc or × closes the dialog.

  6. Know what a restart brings back

    The deck logs every event, and reads back up to the newest 2,000 when it starts. A restart, even after an upgrade or reboot, redraws what was there. Nothing is recorded while the deck is stopped.

    A session working when the deck starts can come back marked restored, without its earlier tool calls. A card with ? beside its name and ≥ before its clock is a session the deck joined late.

    Clearing the canvas empties the log too. C, or the bin in the canvas controls, asks first. A restart cannot bring back what it cleared.

    More about the log

    It is events.jsonl, in ~/Library/Logs/ccdeck on macOS, %LOCALAPPDATA%\ccdeck\Log on Windows, and $XDG_STATE_HOME/ccdeck or ~/.local/state/ccdeck on Linux. CCDECK_HOME moves it; with CLAUDE_CONFIG_DIR set, it is in agent-dag inside that directory. npx ccdeck --status names each running deck's log.

    • The replay holds fewer events when they are large. A deck started with --workspace or --scope replays only that folder.
    • --history uses a file of your choosing, and --no-persist writes nothing and replays nothing.
    • Restore unfinished sessions, in Settings › General, is on for Codex and Claude Code; a change applies at the next start. Claude Code's need macOS or Linux and a verified busy process; Codex's come from recent logs with no ending, process unconfirmed.
    • A late-joined card's clock starts when the deck first saw it.
    • Dragged card positions live in this browser, not the log. R drops them; Undo, or Ctrl + Z (Cmd + Z on macOS), soon after puts them back.

If something goes wrong

Clicking a card does not open its details

A click only frames the card's session. Double-click the card, or press D.

A letter key does nothing

Turn on Single-key shortcuts in Settings › Keyboard. If it is on, an open dialog or a control you reached with the keyboard is keeping the keys: press Esc first.

The text is too small, or too large

Pick another size in Settings › Text & density; the cards follow it.

Nothing came back after a restart

The deck ran with --no-persist or another --history file, or the canvas was cleared. Start it without --no-persist, with the same --history as before.

A finished session is gone from the canvas and the session list

The board keeps six finished sessions; an older one goes two minutes after it finishes. One taken off by Remove from board or Hide finished sessions after (Settings › General) keeps its row in the list: click the row to bring it back. A hidden one returns to its place once it works again.

Something else? See Troubleshoot ccdeck: status, logs, port and hooks.

Next

All guides Troubleshoot Options in the README