Skip to content

Releases: patwalls/headroom

Headroom v0.3.4 — Context window %, model name, session cost in the dropdown

11 Jun 02:18

Choose a tag to compare

What's new

Three new rows in the dropdown — all reading data Claude Code was already writing to the hook file, but Headroom was ignoring until now:

  • Context window % — a third bar (calm/amber/red) showing how full your current context is. The question every deep-work session hits: "how full is my context before I lose coherence?" — now glanceable without opening a terminal.
  • Active model — shown next to the "Updated" timestamp: Sonnet 4.6 · Updated 10:39 PM
  • Session costSession cost: $X.XX in the dropdown, live per session. The first Claude Code menu bar tool to show real-time session spend.

All three hide themselves when Claude Code doesn't report the field (older versions), so the dropdown degrades gracefully.

How to update

brew upgrade --cask patwalls/tap/headroom

Or download from headroom.walls.sh.

Trust reminder

As always: zero network calls, no token, no Keychain, no analytics. The dropdown reads ~/.claude/headroom-usage.json — a local file Claude Code's own status line writes. Verify with nettop if you want.

Full changelog: context window % and model name added in Lap 25; session cost added in Lap 29. The complete build-in-public log is in VISION.md.

v0.3.2 — one display decision

10 Jun 20:15

Choose a tag to compare

What changed

  • One source of truth for the display. Render.decide(_:) now produces the single display decision — menu bar title, color tone, and the live session/week windows — consumed by both the GUI and the --print verification harness. What verification prints is by construction exactly what renders in your menu bar.
  • The rolled-over-window rule (a window whose reset has passed shows "—", never a stale number) now applies uniformly everywhere, including --print.

Download

Grab it from headroom.walls.sh (or brew install --cask patwalls/tap/headroom) — signed & notarized, ~260 KB, zero network calls.

v0.3.1 — zero network calls: reads Claude Code's own status line

10 Jun 15:20

Choose a tag to compare

Download: headroom.walls.sh/download (signed & notarized, universal) · or brew install --cask patwalls/tap/headroom

The architecture flip

Headroom no longer polls Anthropic's usage API — it reads the official rate-limit numbers Claude Code itself renders in its status line, captured to a local file by a tiny auto-installed hook.

  • Zero network calls. No token, no Keychain access, no OAuth, no 429s — the entire old data layer is deleted
  • Auto-wires on first launch — no dialogs, no permission, chains any existing status line non-destructively (and "Repair Live Data" in the menu re-wires it any time)
  • Honest staleness — a window that has rolled over shows "—", never a wrong number
  • Smaller and simpler: ~590 lines, no dependencies, MIT

The data surface is two small files: Hook.swift (writes) and Usage.swift (reads).

v0.2.5 — icon, cold-start resilience, sign-in spike

10 Jun 14:34

Choose a tag to compare

Download: headroom.walls.sh/download (signed & notarized, universal) · or brew install --cask patwalls/tap/headroom

Since v0.1.0

  • Real meters in the dropdown — color-coded bars (green/amber/red) for the 5h session and 7d week, reset countdowns, full-width layout
  • Rate-limit resilience — a failed refresh keeps the last good reading (up to 10 min) instead of showing ?%; HTTP 429 obeys Retry-After with a one-shot retry, cold starts show why they're waiting
  • First-run explainer — Headroom explains the one Keychain permission before macOS asks
  • App icon — the meter bars, on every consent dialog and Finder window
  • MIT licensed
  • Spike (CLI only): headroom --signin — own OAuth flow storing a token in Headroom's own Keychain item (the future no-dialog path)

The token goes to api.anthropic.com and nowhere else — no analytics, no auto-updater, no phoning home.