4.1 KiB
Status line (statusline.py)
The custom Claude Code status line, ordered work info (left) → system info (right),
segments joined by a light-gray │. It's responsive: always a single line — if the
rendered width would exceed the terminal ($COLUMNS, which Claude Code re-exports on
resize), trailing (lowest-priority) segments are dropped from the right until it fits.
Wide — everything:
📁 ~/.dots │ 🌿 .dots main* │ 🤖 Opus 4.8 (1M) · xhigh │ 📝 84% (843k) │ 📊 34% 2h54m │ 💰 $0.40 $12.00/h │ 💾 81%
Narrow — trailing segments trimmed:
📁 ~/.dots │ 🌿 .dots main* │ 🤖 Opus 4.8 (1M) · xhigh │ 📝 84% (843k) │ 📊 34% 2h54m │ 💰 $0.40 $12.00/h
Every segment is defensive: if its data is missing or a command fails, the segment is simply omitted (the bar never crashes the UI). Secondary detail (the parts in light gray) is supplementary to the main colored value.
Live segments
| Segment | Shows | Notes | |
|---|---|---|---|
| Vim mode | [I]/[N]/[V] editor mode |
only with editorMode: vim; pair with hideVimModeIndicator: true so the built-in one doesn't duplicate it |
|
| 📁 | Directory | Current working dir, with ~ for home |
cyan |
| 🌿 | Git | repo branch + * if dirty + ↑N/↓N ahead/behind upstream |
repo = magenta; branch = green when clean, yellow + red * when dirty; ↑ cyan, ↓ yellow. Omitted outside a repo |
| 🤖 | Model | Active model display name + · effort level (low/medium/high/xhigh) |
name = blue, effort = light gray; effort omitted for models without the param |
| 📝 | Context | % of context window used + (Nk) tokens |
window = 1M for [1m] models, else 200k. Adds a red ⚠compact at ≥80% |
| 📊 | 5h usage | % of the 5-hour rolling limit used + time until it resets |
from rate_limits.five_hour; Pro/Max only, and absent until the first API response of a session |
| 💰 | Cost | $ session cost so far + $/h burn rate |
burn rate shown once the session exceeds ~30s |
| 💾 | Disk | % used of the filesystem at the cwd |
from statvfs |
Colour legend
Most numbers are green / yellow / red by threshold — green = healthy, red = needs
attention. Light gray = secondary detail. Thresholds (green < … < yellow < … ≤ red):
| Segment | green | yellow | red |
|---|---|---|---|
| Context | < 50% |
50–80% |
≥ 80% (⚠compact) |
| 5h usage | < 50% |
50–80% |
≥ 80% |
| Disk | < 75% |
75–90% |
≥ 90% |
Light gray is
\033[37m; dimming (\033[2m) is disabled because it blended the gray detail text into dark terminal backgrounds. To go brighter, set"gray"to\033[97m(bright white) in theCtable near the top ofstatusline.py.
Optional segments (defined but not shown)
These functions exist in statusline.py but aren't in the output. Enable one by adding it
to the work or system list in main():
RAM/CPU/temp were retired 2026-07-26: the status line only refreshes on message
events, so system metrics sat visibly stale between turns — the tmux status bar
(tmux/scripts/) owns live system metrics now.
| Function | Shows | |
|---|---|---|
| 🧠 | ram_segment |
% used + used/totalG from /proc/meminfo (green <70% / yellow / red ≥85%) |
| 🖥️ | cpu_segment |
% busy (diffed /proc/stat snapshot) + loadavg + cores (green <60% / red ≥85%) |
| 🌡️ | temp_segment |
hottest CPU thermal zone °C (green <60 / red ≥80) |
| ✏️ | velocity_segment |
+added/-removed lines this session + lines/min |
| ♻️ | cache_segment |
prompt-cache hit % (higher is better) |
| ⚙️ | api_segment |
share of wall-clock time spent in API/inference |
version_segment |
Claude Code version (vX.Y.Z) |
|
| 🎨 | style_segment |
active output-style name |
Where it lives
statusline.py is tracked in this repo and symlinked to ~/.claude/statusline.py;
settings.json runs it via statusLine (/usr/bin/env python3 ~/.claude/statusline.py).
Edits take effect on the next status refresh.