Turn the Claude Code status line into a live, aligned dashboard panel.
Context, weekly / Fable rate limits with reset countdowns, prompt-cache TTL, cost, speed and session ID — in one glance, animated while Claude works.
English · 简体中文
The default Claude Code status line is one long row of loosely spaced text. claude-code-panel draws it as a compact three-row panel: every label and value sits on a grid, related numbers are stacked in the same column, and the panel moves only when something is happening.
- One block, not a bar — an accent rail ties three aligned rows together.
- All your limits in one column —
WKandFABLEusage bars stacked, each with a↻reset countdown. - Your other subscriptions too — Codex (ChatGPT) weekly usage and reset credits, the X / Grok weekly pool, Google AI (Antigravity) limits and your DeepSeek balance, each on its own brand-colored row under the panel. Hide or show them with one hotkey.
- Warns before you hit the wall — bars turn amber at 70% and red at 90%.
- Prompt-cache TTL countdown — see how long the cache stays warm (green → amber → red →
cold), so you know when the next message will be expensive. - Alive while Claude works — the
✻spins and the rail breathes while the transcript is being written; still when idle. - Cheap — redraws every second in ~30 ms; the heavy computation runs only when the session state changes.
- One file — a single Python script, no Python dependencies.
curl -fsSL https://raw.githubusercontent.com/risingjerry/claude-code-panel/main/install.sh | shThe installer copies cc-panel to ~/.local/bin, installs ccstatusline if it is missing, backs up ~/.claude/settings.json and sets:
"statusLine": {
"type": "command",
"command": "~/.local/bin/cc-panel",
"refreshInterval": 1,
"padding": 0
}Preview without Claude Code: cc-panel --demo.
Manual install
npm install -g ccstatusline@2.2.32
curl -fsSL https://raw.githubusercontent.com/risingjerry/claude-code-panel/main/cc-panel -o ~/.local/bin/cc-panel
chmod +x ~/.local/bin/cc-panelThen add the statusLine block above to ~/.claude/settings.json (use the absolute path).
| Field | Meaning |
|---|---|
✻ Opus 5.5 high |
Model and reasoning effort |
$3.8217 42m |
Session cost (API-price estimate, same as /cost) and session wall time |
CTX |
Context used against the auto-compact window (autoCompactWindow or CLAUDE_CODE_AUTO_COMPACT_WINDOW, else the model window), with token count; 100% means compaction is due |
CACHE |
Prompt-cache hit rate |
TTL |
Time until the prompt cache expires |
WK / FABLE |
Weekly and Fable weekly usage, ↻ = time until reset |
GPT |
Codex weekly usage with ↻ reset countdown; RESET = rate-limit reset credits left (when you have one, when the first expires) |
Grok |
X subscription weekly pool, shared by Grok, Grok Build, Grok Bot and Cursor, split by product (Bot / Build / API) |
Argon |
Google AI subscription via Antigravity: the Gemini 4 Argon weekly cap with ↻ (it runs out before the shared Gemini pool), then the Gemini pool and the Opus·Sonnet pool (Claude and GPT models in Antigravity), each 5H / WK |
DeepSeek |
DeepSeek API balance (BAL) |
OUT |
Output speed (tokens/s) |
TTFT |
Average wait until the first response block (an upper bound on time-to-first-token) |
TOOL |
Total wall time spent in tool calls (parallel calls counted once) |
TOK |
Total tokens this session |
ID |
Session ID — pass it to claude --resume |
Rows for other subscriptions appear by themselves when their CLI is logged in on this machine:
-
GPT — needs the
codexCLI, signed in. Read from Codex's ownapp-server; spends no quota. -
Grok — needs the
grokCLI (Grok Build), signed in. Uses that login read-only; when it expires the row greys out untilgrokrenews it. -
Argon (Google AI) — needs the Antigravity CLI (
agy), signed in. Read withagy -p /usage; spends no quota. -
DeepSeek — opt-in. Create
~/.config/cc-panel/config.jsonwith a shell command that writes your API key to file descriptor 3, for example from a secret manager:{"deepseek_key_command": "my-secrets get --fd 3 DEEPSEEK_API_KEY"}
They refresh in the background — at most one refresher machine-wide, Codex every 5 min, Grok and Google every 10, DeepSeek every 15, doubling the wait (up to 1 h) after a failure — so many open sessions never cause rate limits. A stale value is shown grey.
cc-panel --toggle hides or shows the block (hidden also stops the background refresh). To bind it to a global hotkey with Raycast, add extras/raycast (or a copy of it) under Raycast Settings → Script Commands → Script Folders and record a hotkey for Toggle Claude Code Panel Subscriptions. Set CC_PANEL_QUOTAS=0 to turn the feature off.
Claude Code pipes a JSON snapshot of the session to the status-line command. cc-panel hands it to ccstatusline with a generated data-only config (no colors, values separated by ␟), reads TTFT and tool time from the session transcript incrementally, and lays everything out on a grid with true-color ANSI. ccstatusline's output is cached per session and recomputed only when the model, cost, tokens or rate limits change (or every 30 s), so the one-second refresh stays cheap.
On every refresh cc-panel also writes the current session's values to ~/.cache/cc-panel/live/<pid>.json, keyed by the claude process ID (the nearest ancestor named claude, up to 4 levels up). The file stays local (no network calls) and holds at, pid, cwd, busy, model, effort, cost, clock, ctx, ctxlen, cache, speed, tokens, sid, week, fable, ttft, tool, ttl_at (prompt-cache expiry, Unix seconds) and week_reset (weekly reset, Unix seconds).
If you show these numbers in an external UI instead of the terminal — for example, a custom mod in the Herdr desktop right sidebar that follows the active tab's claude PID and shows shared subscription quotas underneath — set "command": "~/.local/bin/cc-panel --quiet" in statusLine. --quiet prints nothing so Claude Code draws no status line in the terminal, while still writing live/<pid>.json every second and triggering the background refreshes for quotas.json and fable.json.
How do I customize the Claude Code status line?
Set statusLine.command in ~/.claude/settings.json to any script that reads JSON on stdin and prints text. cc-panel is such a script; refreshInterval: 1 makes Claude Code re-run it every second so countdowns and animation stay live.
Can the status line show my Claude rate limits and when they reset?
Yes. WK comes straight from the rate_limits field Claude Code sends; FABLE comes from ccstatusline's usage fetch (the same source as /usage). Each shows a ↻ countdown to its reset.
Why does the cache TTL matter?
Cached prompt tokens are much cheaper. When TTL turns red or cold, the next message rebuilds the cache at full price — a good moment to send it soon or to /compact first.
Can it show the permission mode (bypass / plan)?
No. The ▶▶ bypass permissions on row is drawn by Claude Code itself below the status line, and the permission mode is not part of the status-line JSON. The panel's text is indented to line up with that row so they read as one block.
Does it slow Claude Code down? A redraw takes ~30 ms. The ~1 s ccstatusline run only happens when the session state changes, and never blocks Claude itself.
Does it work on Linux / with other fonts?
It needs Python 3.10+, a true-color terminal and a font with ▰ ▱ ▌ ✻ ↻ (most modern monospace fonts). Tested on macOS with Claude Code 2.1.302 and ccstatusline 2.2.32.
Let Claude Code install and manage the panel for you. Add the bundled skill, then ask in plain language:
npx skills add risingjerry/claude-code-panel- "Install claude-code-panel for me."
- "Show me what the claude-code-panel status line looks like before you change anything."
- "Remove claude-code-panel and restore my old status line."
The skill backs up ~/.claude/settings.json first and only changes the statusLine key. See skills/claude-code-panel/SKILL.md.
Restore ~/.claude/settings.json.bak-cc-panel (or remove the statusLine block) and delete ~/.local/bin/cc-panel and ~/.cache/cc-panel.
python3 -m unittest discover -s tests # tests
python3 docs/render.py # regenerate docs/demo.gif and docs/screenshot.png (needs Chrome + ffmpeg)Built on ccstatusline by sirmalloc. Colors follow Claude Code's own palette.
If this made your terminal nicer, a ⭐ helps other Claude Code users find it.
