claude-code-statusline — a meter for your Claude Code plan

435 tests · jq + curl · no daemon · no telemetry
№ 0000
the line is built for a 90-column terminal — swipe the register to pan
connect curl -fsSL https://raw.githubusercontent.com/thevibeworks/claude-code-statusline/main/install.sh | bash

Read the meter

Every reading answers twice: the left column states the number, the right column says what to do about it. The № cites the register frame above where it appears.

+131/-16 6m $7.53№ 0002
Session activity and cost. Lines added and removed, API time, dollars — the cost flashes its increment (+.37) for a minute after each jump, so a spike is seen, not discovered.
fabl5[1m]xh[█░░░░░12%]№ 0002
Model and context pressure. Abbreviated model, 1M-window tag, effort badge, context bar. Yellow means think about compacting; on 1M models the bar also carries the premium-pricing band the calm percentage hides.
fb[67%]№ 0006
The model's own weekly cap. Shown only for the model you are running — when it outruns the account, the pin below says so and names the way out: spread the bulk to a cooler model.
5h[38%@14:00]№ 0000
The 5-hour window. Wall-clock reset, deliberately not a countdown: the line only re-renders on activity, and @14:00 stays true in a frozen frame where @1h38m would decay into a lie.
7d[55%@2d]№ 0000
The 7-day window, forecast-colored. A learned per-weekday burn profile projects whether the pool outlasts the window — your heavy Tuesday counts more than a generic average. Red answers: at your pace, dry before the reset.
5h ▂▅█ 0.8✕№ 0001
The 5h ledger — this sitting, five hour cells, always all five. Height is what each hour cost; now, an hour still to come, ˍ ran-but-negligible, no sample. The hollow run is how long you have got; a fixed axis also means the row never reflows as the window drains. What it will not draw is a forecast — no × wall: when the window closes is the badge's job, whether it caps is the notice's. Ends with its pace: above 1✕ you cap before the reset.
7d ▃▅ˍ▃▅ ▃▃▁▂▁▯▯...▯(✕14) 0.7✕№ 0001
The week ledger — history in full, the future folded. Each cell one 5h window, day-gapped; after the now-marker the empty run folds to a counted tail: ...▯(✕14) answers "14 windows after this one" — the window you are in is , not something you have left, and 14 is the same number the budget line prices — and × red answers "the tail runs dry"; is the operator, × is a reading.
! 7d dry ~Tue 04:00 · hard stop№ 0008
The projection letter, before the bill. The learned forecast can warn on a calm Friday about your heavy Tuesday. The pin stays while the condition holds; row 3 explains once, then fades.
+ fb 91% vs 7d 55% · go op№ 0006
The pin. One notice, compacted to the room line 1 leaves, cut at its weakest joint. The number you act on is bold; the hue is the stance — cyan opportunity, yellow and red pressure, dim budget.
≡!419k ≡~ !net№ 0010
Truth badges. A prompt-cache break on resume (≡!419k — a full-prefix rewrite at 20× the read rate), a rebuild in progress, a fetch that failed and why. Silent while healthy: zero width spent on a warm cache.

Built like a meter should be

An advisor, not a dashboard

Row 2 interprets the badges: ! 5h caps ~05:18, 42m before reset when you will hit a wall, + 7d resets @07:00, 56% unused · spend it when paid capacity is about to expire. Quiet means no row at all.

Numbers that don't lie

Wall-clock resets instead of decaying countdowns. A visible [░░░░░░0%] after /compact instead of a hidden bar. Stale data is badged, never passed off as fresh. Burn is a monotone envelope, never a re-earned dip.

Nothing running in the background

No daemon, no telemetry, no npm. It runs when Claude Code renders the prompt, reads stdin plus one shared cached API call, prints its rows, exits. 435 bats tests on the one file.

What it is not