GitHub - arturlimaaa/terminito: A zero-spawn Claude Code status line: worktree, branch, context and quota — rendered in ~83ms on Windows, where a slow status line never renders at all. · GitHub
/" data-turbo-transient="true" />
Skip to content
Search/
Sign in<br>Sign upAppearance settings
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
arturlimaaa
terminito
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Latest commit
History<br>10 Commits<br>10 Commits
Folders and files<br>NameNameLast commit message<br>Last commit date<br>.github/workflows
.github/workflows
Formula
Formula
bench
bench
tests
tests
tools
tools
.gitattributes
.gitattributes
.gitignore
.gitignore
DESIGN.md
DESIGN.md
LICENSE
LICENSE
README.md
README.md
terminito
terminito
View all files
Repository files navigation
terminito
A Claude Code status line that tells you, at a glance, which worktree and<br>branch this session is on , and how much context and quota you have left .
⎇ northwind-service-roster feat/source-roster-cursor ◆ Opus<br>ctx ██████▌░░░ 68% 5h ████░░░░░░ 41% 2h13m wk ██░░░░░░░░ 23% 4d
One bash file, no dependencies, and the render path spawns nothing.
Install
brew install arturlimaaa/tap/terminito && terminito install
Without Homebrew — and on Windows, where Git Bash is the target:
git clone https://github.com/arturlimaaa/terminito ~/terminito && ~/terminito/terminito install
install writes the statusLine key into ~/.claude/settings.json and keeps<br>a .bak beside it. Claude Code picks it up on its next message — no restart.
Re-running it is a no-op. If you already have a different status line it stops<br>and tells you, rather than overwriting; install --force replaces it, and<br>install --print gives you the snippet to paste yourself.
Nothing appearing? terminito doctor. If everything there is green but the row<br>is still missing, terminito doctor --trace on answers the one question the<br>checks cannot: whether Claude Code is really invoking it.
What the rows mean
Row 1 — where you are. ⎇ for a linked worktree, ◉ plus an amber name<br>for the main checkout, because the main checkout is where an accidental commit<br>costs most. The label is the directory basename; the repo name is added only<br>when the directory doesn't already imply it. In the branch, the namespace<br>recedes and the leaf keeps full weight — feat/ grey, source-roster-cursor<br>lit.
Row 2 — what you have left. Coloured area is what you have spent, so a<br>fresh session is quiet grey rather than thirty saturated cells announcing that<br>nothing has happened. Half cells (▌) double the resolution inside ten<br>columns, so 95% and 100% are not the same picture at the end of the scale where<br>you actually act.
The countdown is what makes the quota bar mean anything: 91% 4m is fine, wait<br>it out — 91% 4h51m means stop and switch model. Same bar, opposite decisions.
The two rows join into one when the terminal is wide enough to hold them.
Commands
Command<br>Purpose
terminito<br>The status line. Reads the payload JSON on stdin.
terminito install<br>Write the statusLine key into settings.json (--print, --force)
terminito doctor<br>Diagnose a status line that isn't appearing
terminito doctor --trace on|off<br>Record real renders, to prove Claude Code is invoking it
terminito ls<br>Every session with its worktree, branch and status (--verify checks each PID is alive)
terminito demo<br>The full colour ramp and every degradation state
Environment overrides
Variable<br>Effect
TERMINITO_COLOR<br>truecolor | 256 | none
TERMINITO_NOW<br>epoch seconds; freezes the reset countdowns
TERMINITO_CEILING<br>stop the upward .git walk at this directory
TERMINITO_CLOCK<br>pin a rung of the clock ladder (date, printf)
TERMINITO_MAX_WIDTH<br>row 1 column budget; 0 disables truncation (default 78)
TERMINITO_NO_TRACE<br>never write the invocation trace
NO_COLOR<br>any non-empty value disables colour
CLAUDE_CONFIG_DIR<br>overrides ~/.claude
Requires
bash 3.2+. That is the whole list — no jq, no Node, no Python, and git is<br>never invoked (it reads .git/HEAD itself).
Runs on Windows Git Bash, macOS (both stock /bin/bash 3.2.57 and Homebrew<br>bash 5), and Linux. CI runs the same golden files on all three, and asserts<br>that bash 3.2 and bash 5 emit byte-identical output.
On Windows, use forward slashes or ~ in the settings path. Git Bash treats<br>unquoted backslashes as escape characters, so C:\Users\… arrives with its<br>separators stripped and fails with no visible error at all.
Tests
bash tests/run.sh # goldens, and every command's contract<br>bash tests/portability.sh # bash 3.2 scan, BASH_COMPAT=32, the clock ladder<br>bash tests/perf.sh # the 300ms debounce budget
Why it looks the way it does
Every non-obvious decision here — the...