# Claude Code status line for worktree, branch, context and quota

> Source: <https://github.com/arturlimaaa/terminito>
> Published: 2026-08-22 19:40:41+00:00

A Claude Code status line that tells you, at a glance, **which worktree and
branch this session is on**, and **how much context and quota you have left**.

```
  ⎇ northwind-service-roster  feat/source-roster-cursor  ◆ Opus
  ctx ██████▌░░░ 68%    5h ████░░░░░░ 41% 2h13m    wk ██░░░░░░░░ 23% 4d
```

One bash file, no dependencies, and the render path spawns nothing.

```
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
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
and tells you, rather than overwriting; `install --force`

replaces it, and
`install --print`

gives you the snippet to paste yourself.

Nothing appearing? `terminito doctor`

. If everything there is green but the row
is still missing, `terminito doctor --trace on`

answers the one question the
checks cannot: whether Claude Code is really invoking it.

**Row 1 — where you are.** `⎇`

for a linked worktree, `◉`

plus an amber name
for the main checkout, because the main checkout is where an accidental commit
costs most. The label is the directory basename; the repo name is added only
when the directory doesn't already imply it. In the branch, the namespace
recedes and the leaf keeps full weight — `feat/`

grey, `source-roster-cursor`

lit.

**Row 2 — what you have left.** Coloured area is what you have *spent*, so a
fresh session is quiet grey rather than thirty saturated cells announcing that
nothing has happened. Half cells (`▌`

) double the resolution inside ten
columns, so 95% and 100% are not the same picture at the end of the scale where
you actually act.

The countdown is what makes the quota bar mean anything: `91% 4m`

is fine, wait
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.

| Command | Purpose |
|---|---|
`terminito` |
The status line. Reads the payload JSON on stdin. |
`terminito install` |
Write the `statusLine` key into `settings.json` (`--print` , `--force` ) |
`terminito doctor` |
Diagnose a status line that isn't appearing |
`terminito doctor --trace on|off` |
Record real renders, to prove Claude Code is invoking it |
`terminito ls` |
Every session with its worktree, branch and status (`--verify` checks each PID is alive) |
`terminito demo` |
The full colour ramp and every degradation state |

| Variable | Effect |
|---|---|
`TERMINITO_COLOR` |
`truecolor` | `256` | `none` |
`TERMINITO_NOW` |
epoch seconds; freezes the reset countdowns |
`TERMINITO_CEILING` |
stop the upward `.git` walk at this directory |
`TERMINITO_CLOCK` |
pin a rung of the clock ladder (`date` , `printf` ) |
`TERMINITO_MAX_WIDTH` |
row 1 column budget; `0` disables truncation (default 78) |
`TERMINITO_NO_TRACE` |
never write the invocation trace |
`NO_COLOR` |
any non-empty value disables colour |
`CLAUDE_CONFIG_DIR` |
overrides `~/.claude` |

`bash`

3.2+. That is the whole list — no `jq`

, no Node, no Python, and `git`

is
never invoked (it reads `.git/HEAD`

itself).

Runs on Windows Git Bash, macOS (both stock `/bin/bash`

3.2.57 and Homebrew
bash 5), and Linux. CI runs the same golden files on all three, and asserts
that bash 3.2 and bash 5 emit byte-identical output.

On Windows, use forward slashes or

`~`

in the settings path. Git Bash treats unquoted backslashes as escape characters, so`C:\Users\…`

arrives with its separators stripped and fails with no visible error at all.

```
bash tests/run.sh          # goldens, and every command's contract
bash tests/portability.sh  # bash 3.2 scan, BASH_COMPAT=32, the clock ladder
bash tests/perf.sh         # the 300ms debounce budget
```

Every non-obvious decision here — the spawn-free render path, the baked colour
ramp, the CP437 glyph subset, the locked lane widths, the 78-column budget —
has a measurement or a failure behind it. Those are in
[DESIGN.md](/arturlimaaa/terminito/blob/main/DESIGN.md), with the benchmarks in [ bench/](/arturlimaaa/terminito/blob/main/bench).

MIT.
