A powerline statusline for Claude Code: segments, themes, and a live TUI configurator in a single native binary.
Note
Powerline glyphs need a Nerd Font, or switch to the ascii style.
On macOS: brew install --cask font-hack-nerd-font (the font used in the screenshots).
# verifies SHA256, plus build provenance when gh is available
curl -fsSL https://raw.githubusercontent.com/micschr0/claudebar/main/install.sh | bashHomebrew
# verifies SHA256
brew install micschr0/tap/claudebarmise
# verifies SHA256 and build provenance automatically
mise use -g github:micschr0/claudebarpnpm
# same per-platform package, installable with any npm-registry package manager
pnpm add -g @micschr0/claudebarThen wire it into Claude Code. It shows a diff, asks before writing, and backs up the old file:
claudebar setupWhat each install method verifies
Every method checks the SHA256 of the downloaded archive. Only some also verify build provenance, which proves that this repo's release.yml built the binary. A matching hash on its own does not.
| Method | SHA256 | Build provenance |
|---|---|---|
install.sh |
✓ fatal on mismatch | ~ needs gh, authenticated |
| Homebrew | ✓ | ✗ |
mise |
✓ | ✓ automatic |
| npm / pnpm | ✓ (ships verified binary) | ✗ |
claudebar-installer.sh (hosted) |
✓ | ✗ |
✓ verified, ~ conditional, ✗ not checked
[!NOTE] The npm/pnpm packages ship the already-attested release binaries (built and provenance-signed by
release.yml, then repackaged unchanged). The package itself carries no npm registry provenance, since that would attest the repackaging workflow rather than the build. Whatinstall.shchecks is therelease.ymlprovenance on the binaries themselves.
install.sh treats a checksum mismatch as fatal; a provenance error only warns. It scopes trust to release.yml via gh attestation verify --signer-workflow. To verify a download by hand:
gh attestation verify claudebar-x86_64-unknown-linux-musl.tar.gz \
--repo micschr0/claudebar \
--signer-workflow micschr0/claudebar/.github/workflows/release.ymlReview the script first
curl -fsSL https://raw.githubusercontent.com/micschr0/claudebar/main/install.sh -o install.sh
claude -p "Audit this script for anything unsafe, then summarize what it does" < install.sh
bash install.shBeta channel
Prereleases (tagged e.g. 2026.7.6-beta.1) ship to a separate Homebrew formula, so brew upgrade keeps stable users on stable:
brew install micschr0/tap/claudebar-betaOr via the script:
curl -fsSL https://raw.githubusercontent.com/micschr0/claudebar/main/install.sh | CLAUDEBAR_CHANNEL=beta bashmicschr0/tap/claudebar always tracks stable; claudebar-beta follows the latest prerelease. Back to stable:
brew uninstall micschr0/tap/claudebar-beta && brew install micschr0/tap/claudebarColors shift as usage crosses 50% and 80%:
All segments. Four are off by default (dev-context, burn, clock, update-notice):
claudebar configFull-screen TUI: live preview, theme and style pickers, threshold sliders. ? for keys, s saves, q quits.
Or edit the TOML at ~/.config/claudebar/config.toml directly (claudebar edit):
theme = "tokyo-night"
style = "powerline"
segments = ["directory", "git", "model", "context", "lines", "rate-limits", "cost", "duration"]
[thresholds]
warn = 50 # bar turns yellow
crit = 80 # bar turns red| Command | Action |
|---|---|
claudebar / claudebar render |
Read session JSON from stdin, write ANSI statusline to stdout |
claudebar config |
Launch the TUI configurator |
claudebar setup |
Wire claudebar into Claude Code's settings.json |
claudebar list |
List built-in themes and styles |
claudebar doctor |
Diagnose font, git, config, and PATH issues |
claudebar update |
Check for a newer claudebar release (manual; never runs during rendering) |
More commands and flags: claudebar --help.
claudebar update compares your installed version against the newest GitHub
release. You run it yourself, and the render path never blocks on the network,
so the statusline cannot stall on it.
It compares against the newest stable release. Pass --channel beta to
include prereleases.
claudebar update
# claudebar 2026.8.15 (stable channel)
# Update available: 2026.8.16 (stable)
# Install/update: https://github.com/micschr0/claudebar#installationAdd the update-notice segment to see the result inline, as an "↑ 2026.8.20"
badge on the statusline. It is off by default and stays that way — claudebar sync, which adds segments introduced by newer versions, deliberately skips this
one and only tells you it exists. Add it to segments yourself to enable it.
Enabling it opts into a background check, started at most once every 24 hours by
a detached child process that writes a small cache next to your config file. The
statusline itself only reads that cache and never waits for the check. With the
segment disabled the render path does no network or cache I/O at all; an
explicit claudebar update still writes the cache, since that is you asking for
a check.
Exit codes: 0 = up to date, 1 = check failed (e.g. no network), 2 = update
available. In set -e shells or &&-chains, where exit 2 reads as an error,
add --check: it still prints the result but exits 0 on success.
brew uninstall claudebar
# or: rm ~/.claude/claudebar # script install
# or: pnpm remove -g @micschr0/claudebar # npm / pnpm installThen remove the statusLine entry from ~/.claude/settings.json, and ~/.config/claudebar/ if you want the config gone too.
More: documentation & live demo · build from source · contributing · contributing a theme · internals wiki · changelog · verifying releases · report an issue






