A status line for Claude Code: everything worth watching in two rows, in a rainbow box.
- Top row: BANGARANG (or your own word), then Claude's service status from status.claude.com
(
Claude operational, or✕ Claude Outage/✕ Claude Maintenancein amber, orange or red by severity), then bars for the context window, the refill of your 5-hour limit (it fills up as the refill nears, with the time left beside it), and how long the prompt cache stays warm (…until a session's first reply, when Claude Code starts tracking it;0%once it has lapsed). - Bottom row: model, effort, fast mode, your plan, what the session would cost at API prices (Claude Code's own estimate; a plan doesn't bill it) and the month's running total of the same, then bars for the 5-hour and weekly limits, plus per-model limits such as Fable's if you turn them on.
- Remote Control: while the session is connected to Remote Control (
/rc, orclaude --rc), the top edge of the box reads● Remote Control. If the connection ends (a lapsed login, say), it reads○ Remote Control offin amber until you reconnect. A session that never connected keeps a plain box, and the rows never move either way. - Limit numbers turn amber from 70% and red from 90%. The lighter cells on a limit bar show where your current pace lands by the time it resets.
- The rows line up as a table whatever the model, effort or status: BANGARANG grows or shrinks to take up the slack.
- macOS or Linux. The tests run on macOS, Ubuntu 22.04 and Ubuntu 24.04 on every push.
- Claude Code 2.1.278 or later, for the limit and cache numbers
jq(brew install jq, orsudo apt install jq)- A terminal with 24-bit colour on a dark background, about 125 columns wide. Made in Terminal.app with SF Mono; most Linux terminals do 24-bit colour too.
- python3, only for running the tests
git clone https://github.com/AdamMackey/bangarang.git ~/Bangarang
cd ~/Bangarang
./install.shThen add this to ~/.claude/settings.json:
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"refreshInterval": 60
}It shows up at Claude Code's next refresh. install.sh runs the tests first and keeps any status
line you already had as ~/.claude/statusline.sh.bak. Run it again after pulling updates.
Claude Code doesn't give status lines the per-model weekly limits (such as Fable's). Add --usage
to the command ("command": "~/.claude/statusline.sh --usage"), or set BANGARANG_USAGE=1, and
Bangarang runs Claude Code's own /usage headless every 10 minutes in the background to read them.
That makes no model call and costs nothing, but it does start a claude process, so it's off unless
you turn it on.
BANGARANG is the default. Swap in whatever word you like with --phrase:
"command": "~/.claude/statusline.sh --phrase LFG"or set BANGARANG_PHRASE=LFG. It gets the same letter-spacing, chevrons and rainbow, and still fits
the rows exactly. A short word in capitals looks best. Options go together, as in
~/.claude/statusline.sh --usage --phrase LFG.
The second dollar figure, in whole dollars after the session's own ($1,234), is the month so far: what all your
sessions would have cost at API prices. Bangarang keeps the total itself, so it counts from the day
you install it. Each session adds only what it spends while the status line runs, so refreshing or
resuming never counts the same dollars twice. Only the month shows on the line; for every month and
the lifetime total, run
~/.claude/statusline.sh --spendIt's on unless you add --no-monthly to the command (or set BANGARANG_MONTHLY=0), which takes the
figure off the line and stops the per-session files.
- The session JSON Claude Code pipes to status lines: model, effort, fast mode, context window, cost, rate limits and the prompt cache.
- Your plan tier (
oauthAccount.organizationRateLimitTier) from~/.claude.json, and nothing else from that file. - Whether the session is connected to Remote Control, from the small file Claude Code keeps for each
running session (
~/.claude/sessions/<pid>.json, or under$CLAUDE_CONFIG_DIR). Only whether its Remote Control id is set is read; the id itself is never shown or kept. - status.claude.com's public status, fetched with curl in the background at most every 2 minutes; a verdict counts for 20 minutes.
- With
--usage, Claude Code's/usageevery 10 minutes. - Its caches live in
~/Library/Caches/claude-statuslineon macOS and~/.cache/claude-statusline(or$XDG_CACHE_HOME) on Linux. - The running total is one small file per session (the session's id, its last cost and what it
added each month) in
~/Library/Application Support/Bangarang/spendon macOS and~/.local/share/bangarang/spend(or$XDG_DATA_HOME) on Linux. Nothing leaves your machine.
/color red(or blue, green, yellow, purple, orange, pink, cyan) colours the prompt bar and session name just above the status line. That's Claude Code's, and it's per session.- The line under the status line (
⏵⏵ auto mode on …) belongs to Claude Code and can't be changed.
tests/run.sh # the test suite (a throwaway HOME; your real cache is never touched)
# GitHub Actions runs it on macOS and Ubuntu for every push
tools/preview.sh # renders tools/sample-payload.json to preview.png and prints ittools/ansi2png.pydraws ANSI output to a PNG (SF Mono, hearts from Menlo) to check colours.tools/tui-harness.pyruns a throwawayclaude --barein a pseudo-terminal and prints the screen it draws, through pyte (python3 -m venv tools/venv && tools/venv/bin/pip install pyte). It setsCLAUDE_CODE_NO_FLICKER=1, which forces the full-screen renderer and skips its boot canary: otherwise killing a full-screen launch within 10 seconds of its first frame counts a strike in~/.claude.json, and two strikes turn full-screen off for that version.CLAUDE_CODE_SANDBOXED=1skips the trust prompt without saving trust.tools/*.swiftcheck font coverage and windows (swift tools/fontcheck.swift).
- Claude Code draws uncoloured status text as faint grey, so every piece has an explicit 24-bit colour. It repeats every colour code of the lines above at the start of each line, so long rows of codes (the box rules) end with a single reset.
- Claude Code only rewrites cells that changed, and Terminal.app can leave a row blank on screen after its window has been hidden, while its text buffer still holds it. A box that never changed would stay blank, so its colours step one unit of blue on odd minutes (invisible), and every refresh repaints it.
- SF Mono has the box-drawing glyphs, and its vertical line runs past the line height, so the sides join up.
Bangarang is free. If it saves you from a surprise limit or two, you can buy me a coffee.
Bangarang is one of the small apps from MackEye Apps: Mac utilities like Desktop Please and Hold Please, and tools for Claude like Meterous and Pulseous. See them all at mackeye.app.
MIT. Not affiliated with Anthropic.
