Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

65 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

statusline-bar

Customizable Claude Code statusline. Single bash file, no JavaScript, no network, no daemon.

The default preset rendered against a real Claude Code session:

default preset rendered in the terminal β€” two lines covering model, context, cost, rate limits, git status, line counters, and duration

Run --examples to see this and every other preset, theme, prefix style, separator, and bar rendered live in your terminal β€” the catalog below shows the same output as screenshots.

Text-only version (copy-pasteable)
πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’° $0.40 | πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 3h 25m 13s | πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 5d 2h 17m 0s
πŸ’­ true | πŸ’ͺ xhigh | πŸ“ example_dir | 🌳 main | 🌿 feat/wizard | πŸ“Š +3 ~5 ?2 | πŸ”€ ↑2 ↓1 | βž• +128 | βž– -42 | ⏳ 3m 50s

Why

The Claude Code ecosystem already has a dozen excellent statuslines, each great at one thing. We wanted one tool that:

  • ships every useful field β€” model, cost, context %, cache hit ratio, rate limits (5h + 7d) with countdowns, git branch + status + ahead/behind, vim mode, agent name, session id, plus zero-cost local readouts (clock, battery, memory, load average, hostname)
  • looks great out of the box (11 presets, 21 themes, 12 progress-bar styles, truecolor support)
  • is trivial to install β€” one bash file + jq, no Node, no Rust, no Python, no daemon
  • stays customizable down to the smallest detail (per-token prefix, format, bar style, and separator-after overrides)

Features

  • Single file, ~3,000 lines of bash 3.2+. Drop it anywhere on $PATH.
  • Up to 4 lines of statusline, each a freely-arranged token sequence.
  • 42 tokens: 29 from Claude Code's stdin JSON + 6 from git + 7 from local OS.
  • Many format variants per token β€” bars, percents, countdowns, combined views, compact model names, hourly cost projections, token-count combos, short-form durations, etc. Each token advertises only the formats that make sense for its data.
  • 11 presets: minimum, compact, focus, coder, default, modern, rates, claude, fancy, everything, maximum.
  • 21 themes: grouped by terminal compatibility β€” Auto / adaptive (3), Light terminals (6), Dark terminals (12).
  • 12 progress-bar styles: blocks, heavy, line, braille, dots, arrows, ascii, plus 5 sub-character precision variants β€” gradient, gradient_dots, gradient_fade, gradient_shade, gradient_braille.
  • 8 prefix styles: none, label, emoji, nerd, ascii + emoji+label, label+emoji, nerd+label.
  • 19 separators across 4 families: ASCII (3), Unicode (10), Decorative (3), Powerline / Nerd-Font (3).
  • Interactive TUI wizard with always-visible live preview pane and a dedicated Tokens & lines screen for add / change / delete / reorder, inline separator editing, and per-token overrides.
  • Auto-detected color depth (truecolor / 256 / 16 / none) with $NO_COLOR honored.
  • Threshold-based coloring with sane defaults β€” battery inverts (low % = critical), memory uses a relaxed table (80% is normal), context-remaining mirrors context-used in reverse.
  • Configurable empty-data handling (default: placeholder shows β€”; can switch to hide to drop empty tokens).
  • JSON Schema shipped at the repo root + $schema field in the auto-created config β€” VS Code, Cursor, JetBrains, and Neovim's LSP all give you autocomplete and inline docs while editing.
  • Project-level config at ./.statusline-bar.json overrides home-dir config.
  • No network calls. Ever.

Install

Clone the repo somewhere stable on your machine (anywhere works β€” ~/code, ~/.local/share, etc.) and point Claude Code at the script:

mkdir -p ~/.local/share
git clone https://github.com/Dworf/statusline-bar.git ~/.local/share/statusline-bar
chmod +x ~/.local/share/statusline-bar/statusline-bar.sh

To upgrade later, cd ~/.local/share/statusline-bar && git pull.

Wire it up in Claude Code

Claude Code reads its settings from ~/.claude/settings.json (your user-level config). If the file doesn't exist yet, create it. If it already has other settings β€” model defaults, MCP servers, permissions, hooks, etc. β€” don't overwrite it: add the statusLine key alongside whatever's already there. The whole file is a single JSON object.

Existing config with other top-level keys β€” your file already has things like model, permissions, hooks, etc. Add only the statusLine block as one more sibling:

{
  "statusLine": {
    "type": "command",
    "command": "/Users/YOUR_USERNAME/.local/share/statusline-bar/statusline-bar.sh"
  }
}

So your merged file ends up looking like this β€” statusLine is the new bit, everything else was already there:

{
  "model": "...",
  "permissions": { ... },
  "statusLine": {
    "type": "command",
    "command": "/Users/YOUR_USERNAME/.local/share/statusline-bar/statusline-bar.sh"
  }
}

Heads up on JSON's no-trailing-commas rule: if your previously-last key didn't have a comma after its closing } or ], you need to add one when you append statusLine after it. Most JSON-aware editors (VS Code, Cursor, etc.) flag this automatically.

The command path must be absolute β€” ~ and $HOME aren't expanded. Replace YOUR_USERNAME (or paste the full path from realpath ~/.local/share/statusline-bar/statusline-bar.sh). On Windows: use the WSL or Git Bash path.

Restart Claude Code (or open a new session) and the statusline appears at the bottom. If it doesn't, run the script manually against the bundled sample input to confirm it works:

~/.local/share/statusline-bar/statusline-bar.sh < ~/.local/share/statusline-bar/test/sample-input.json

You should see a populated two-line statusline (model, context, cost, rate limits, git info, …) β€” the same layout you'd see in a real Claude Code session.

Requirements

bash 3.2+ (ships everywhere) and jq. Install jq if you don't already have it:

OS Install
macOS brew install jq
Debian / Ubuntu / WSL sudo apt install jq
Fedora / RHEL sudo dnf install jq
Arch sudo pacman -S jq
Windows winget install jqlang.jq (or choco install jq / scoop install jq)

Check it's working: jq --version should print something like jq-1.7.1.

Optional: git (for git tokens), fc-list (for Nerd Font detection), pmset / /sys/class/power_supply (for the battery token).

Nerd Fonts (optional)

A few separators (chevron, slant, chevron_thin) and the nerd / nerd+label prefix styles use Nerd Font glyphs. The wizard detects whether you have one installed and labels those options accordingly. If you don't, the script still works β€” every other separator / prefix style renders fine without.

Install a Nerd Font:

  • macOS (Homebrew): brew install --cask font-jetbrains-mono-nerd-font (any of the Nerd Fonts casks works β€” pick the family you like)
  • Linux (Debian/Ubuntu): sudo apt install fonts-firacode for FiraCode-Nerd-equivalent, or download a release zip from github.com/ryanoasis/nerd-fonts/releases and extract to ~/.local/share/fonts/, then fc-cache -f
  • Arch: sudo pacman -S ttf-nerd-fonts-symbols for symbol-only, or any ttf-*-nerd package for a full family
  • Manual: download a .zip from nerdfonts.com and install via your OS's font manager

Then set your terminal's font to the Nerd Font variant (e.g. "JetBrainsMono Nerd Font" instead of "JetBrainsMono"). Restart the terminal and the wizard's hint will switch to Nerd Font βœ“ detected.

Quick configure

Launch the interactive wizard:

statusline-bar.sh -w        # or --wizard

The wizard opens on a main menu with rows for preset, theme, prefix style, separator, bar style, Tokens & lines (the full layout editor β€” see below), empty-data behavior, and color depth. Use:

  • ↑/↓ to navigate, ←/β†’ to switch where applicable, Enter to drill in
  • s save, r reset to defaults, q quit (prompts to save if unsaved changes)
  • Esc goes back one level

Wizard main menu showing preset, theme, prefix style, separator, bar style, Tokens & lines, empty data, and color depth rows; live preview pane at the bottom

The bottom pane is a live preview that re-renders as you change settings. The focused token / separator is underlined and wrapped in β–Ά β—€ markers so its real colors stay visible.

Picker screens for the single-choice settings (preset, theme, prefix, separator, bar) all follow the same pattern β€” list of options on the left, per-option sample on the right, full statusline preview at the bottom:

Preset picker β€” 11 presets each with a short description and token count Theme picker β€” 21 themes grouped by terminal compatibility, each with good/warn/crit color swatches
Prefix style picker β€” 8 styles each with a token render sample Separator picker β€” 19 separators each with a literal char preview
Bar style picker β€” 12 bar styles each with a 50% sample bar

The Tokens & lines screen is the layout editor β€” line tabs at the top, token list with inline separators in the middle, live full preview at the bottom:

Tokens & lines main screen showing line tabs, token list with inline separator rows, and live preview

Drill into any token to edit its per-token prefix / format / bar style overrides:

Token detail screen for model β€” prefix, format, bar style, reset rows Format picker for model token β€” value, compact, short, id, id_short each with a sample render
Prefix override picker for model β€” inherit global + 8 prefix styles Format picker for rl_5h β€” 12 formats from value through progressbar+percent+remaining_short

Hit a from any line to add a token β€” the picker shows all 42 grouped by source, each row with a live sample and a βœ“ mark next to tokens already used somewhere:

Token picker β€” 42 tokens grouped by Claude session / Git / Local OS, each row showing the rendered sample

Tune it live alongside Claude Code

You can keep the wizard open in one terminal and have a real Claude Code session running in another. Every time you press s save in the wizard, the new config lands on disk β€” and Claude Code picks it up on its next statusline refresh, using your actual live data (current cost, real rate-limit countdowns, real git status, etc.) instead of the wizard's synthetic preview.

Claude Code refreshes the statusline on each tick β€” basically anything that updates its UI. The easiest trigger is typing / in CC and selecting any slash command (e.g. /help, /status); CC re-reads the statusline config and re-runs the script immediately. Tweak in the wizard β†’ save β†’ tick CC β†’ see the change live.

Inside Tokens & lines you get:

  • A horizontal line tab strip ([1] 2 3 +) β€” ←/β†’ switches the active line, ↓ enters the token list, d deletes a line, Enter on + adds a new one (up to 4).
  • Token rows + always-visible inline separator rows (↓ pipe (global) / ↓ star (override)).
  • a add a token, c change it, d delete, m mark for cross-line move, p paste, Shift+↑/↓ move within the line.
  • Enter on a token opens its per-override detail screen; Enter on a separator row opens a separator picker scoped to that one position.

Browse

statusline-bar.sh -e                  # full catalog
statusline-bar.sh -e tokens           # just the tokens section
statusline-bar.sh -e themes           # just themes
statusline-bar.sh -e bars             # just bar styles
                  # presets | themes | prefixes | separators | bars | tokens

Prints a catalog with one row per option, rendered live against synthetic data. Uses your real terminal's color depth, so themes visibly differ β€” what you see is what you'd get if you picked it. Pipe through less -R if you want pagination with ANSI. See the Showcase below for the full output.

Reference

  • 42 tokens β€” 29 from Claude stdin (model, context, cost, rate limits, token counts, vim mode, agent name, session id, …) + 6 git + 7 OS (clock, battery, memory, load, …)
  • 11 presets β€” 1-line: minimum, compact, focus, coder Β· 2-line: default, modern, rates, claude Β· 3-line: fancy Β· 4-line: everything, maximum
  • 21 themes β€” Auto / adaptive: default, solarized, graphite Β· Light: light, solarized-light, catppuccin-latte, tokyo-day, ayu-light, garden Β· Dark: dark, dracula, nord, gruvbox, tokyo-night, catppuccin, one-dark, rose-pine, monokai, mocha, silver, ocean
  • 8 prefix styles β€” none, label, emoji, nerd, ascii + emoji+label, label+emoji, nerd+label
  • 19 separators β€” ASCII (3), Unicode (10), Decorative (3), Powerline (3)
  • 12 bar styles β€” solid: blocks, heavy, line, braille, dots, arrows, ascii Β· sub-character precision: gradient, gradient_dots, gradient_fade, gradient_shade, gradient_braille
  • Token-specific formats β€” base set (value, percent, progressbar, progressbar+percent, countdown, remaining, combined, flag) plus richer per-token formats: model compact/short/id/id_short, context tokens / tokens+size / percent+tokens / progressbar+percent+tokens, cost per_hour / with_rate, lines count, duration / api_duration short, rate-limit countdown_short / remaining_short and combined progressbar+percent+countdown_short / progressbar+percent+remaining_short.

Globals can be overridden per-token via tokens.<id>.prefix, .format, .bar_style, .separator_after.

Showcase

The same output you'd see from statusline-bar.sh --examples in your terminal, captured here as screenshots. Each <picture> element below auto-switches to a matching light or dark variant depending on your GitHub theme.

Presets

11 layouts, ranging from 3 tokens on one line to 42 on four. Individual close-ups first:

minimum
minimum preset
compact
compact preset
focus
focus preset
coder
coder preset
default
default preset
modern
modern preset
rates (dark theme)
rates preset, dark theme
fancy (dark theme)
fancy preset, dark theme

The full 11-preset catalog at a glance:

All 11 presets rendered: minimum, compact, focus, coder, default, modern, rates, claude, fancy, everything, maximum

Themes

21 palettes grouped by terminal compatibility β€” Auto/adaptive, Light, Dark. Each row shows the good/warn/crit/accent swatches, then a model + context render, then three threshold-colored bars at 25%/75%/95%:

All 21 themes rendered with color swatches and threshold bars

Prefix styles

8 ways to label a token β€” none, label, emoji, nerd, ascii, plus three combos. The same default preset rendered with three different prefix styles applied globally:

emoji (default) ascii nerd
default preset with emoji prefix default preset with ascii prefix default preset with nerd font prefix

Full prefix-style catalog (all 8 styles applied to model + context + cost):

All 8 prefix styles applied to model/context/cost

Separators

19 separators across 4 families β€” ASCII, Unicode, Decorative, Powerline:

All 19 separators rendered between three sample tokens

Bar styles

12 progress-bar styles β€” each row shows the same bar at 25 / 75 / 95% so good/warn/crit colors are all visible:

All 12 bar styles rendered at three threshold percentages

Tokens

All 42 tokens grouped by source β€” Claude session (29), Git (6), Local OS (7) β€” each with a live sample and an inline β“˜ description:

All 42 tokens rendered alone with inline descriptions
Text-only catalog (copy-pasteable)
## Presets  (factory layouts; switch via --preset NAME)

[ minimum    ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’° $0.40

[ compact    ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’° $0.40 | 🌿 feat/wizard | ⏳ 3m 50s | πŸ•” 5h 50%

[ focus      ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’­ true | πŸ’ͺ xhigh | πŸ’° $0.40

[ coder      ] πŸ€– Opus 4.7 (1M context) | 🌿 feat/wizard | πŸ“Š +3 ~5 ?2 | βž• +128 | βž– -42 | ⏳ 3m 50s

[ default    ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’° $0.40 | πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 3h 25m 13s | πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 5d 2h 17m 0s
[ default    ] πŸ’­ true | πŸ’ͺ xhigh | πŸ“ example_dir | 🌳 main | 🌿 feat/wizard | πŸ“Š +3 ~5 ?2 | πŸ”€ ↑2 ↓1 | βž• +128 | βž– -42 | ⏳ 3m 50s

[ modern     ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | 🌿 feat/wizard | βž• 3 | ✏️ 5 | πŸ’° $0.40
[ modern     ] πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% | πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% | ⏳ 3m 50s

[ rates      ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’° $0.40
[ rates      ] πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 3h 25m 13s | πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 5d 2h 17m 0s | πŸ’Ύ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 97% | πŸ“‘ 39s

[ claude     ] πŸ€– Opus 4.7 (1M context) | πŸ“ Browse | 🧠 50% (49k/100k) | πŸ’° $0.40 | ⏳ 3m 50s
[ claude     ] πŸ’­ true | πŸ’ͺ xhigh | 🎨 default | ⚑️ | 🏷️ 2.1.139

[ fancy      ] πŸ€– Opus 4.7 (1M context) | 🧠 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% | πŸ’° $0.40 | ⏳ 3m 50s
[ fancy      ] πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 3h 25m 13s | πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 5d 2h 17m 0s
[ fancy      ] πŸ“ example_dir | 🌿 feat/wizard | πŸ“Š +3 ~5 ?2 | πŸ’­ true | πŸ’ͺ xhigh | πŸ”‹ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘ 92% | πŸ•’ 18:03

[ everything ] πŸ€– Opus 4.7 (1M context) | πŸ“ Browse | πŸ”– browse00 | 🧠 50% (49k/100k) | πŸ“₯ 49k | πŸ“€ 50 | πŸͺŸ 100k | πŸ†“ 50%
[ everything ] πŸ’Ύ 97% | πŸ’° $0.40 | πŸ“‘ 39s | πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 3h 25m 13s | πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 5d 2h 17m 0s | πŸ’­ true | πŸ’ͺ xhigh | 🎨 default | 🏷️ 2.1.139 | 🀝 Explore | ⌨️ INSERT | ⚑️ | πŸ“ˆ
[ everything ] πŸ“ example_dir | 🌳 main | πŸ“‚ 0 | 🌲 /tmp/example_dir/feature | πŸ“œ browse001.jsonl | 🌿 feat/wizard | πŸ“Š +3 ~5 ?2 | βž• 3 | ✏️ 5 | ❓ 2 | πŸ”€ ↑2 ↓1 | βž• +128 | βž– -42
[ everything ] ⏳ 3m 50s | πŸ•’ 18:03 | πŸ“… 2026-05-11 | πŸ–₯️ mac | πŸ‘€ alice | πŸ”‹ 92% | 🧬 45% | πŸ“Š 1.2

[ maximum    ] πŸ€– Opus 4.7 (1M context) | πŸ“ Browse | πŸ”– browse00 | 🧠 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% (49k/100k) | πŸ“₯ 49k | πŸ“€ 50 | πŸͺŸ 100k | πŸ†“ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50%
[ maximum    ] πŸ’Ύ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 97% | πŸ’° $0.40 | πŸ“‘ 39s | πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 3h 25m 13s | πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 5d 2h 17m 0s | πŸ’­ true | πŸ’ͺ xhigh | 🎨 default | 🏷️ 2.1.139 | 🀝 Explore | ⌨️ INSERT | ⚑️ | πŸ“ˆ
[ maximum    ] πŸ“ example_dir | 🌳 main | πŸ“‚ 0 | 🌲 /tmp/example_dir/feature | πŸ“œ browse001.jsonl | 🌿 feat/wizard | πŸ“Š +3 ~5 ?2 | βž• 3 | ✏️ 5 | ❓ 2 | πŸ”€ ↑2 ↓1 | βž• +128 | βž– -42
[ maximum    ] ⏳ 3m 50s | πŸ•’ 18:03 | πŸ“… 2026-05-11 | πŸ–₯️ mac | πŸ‘€ alice | πŸ”‹ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘ 92% | 🧬 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 45% | πŸ“Š 1.2

## Themes  (color palettes; switch via --theme NAME β€” accent color on model + good/warn/crit bars)
                       good warn crit text
[ default          ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ solarized        ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–°β–°β–°β–±β–±β–±β–±β–±β–±β–± 25%   β–°β–°β–°β–°β–°β–°β–°β–°β–±β–± 75%   β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 95%
[ graphite         ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   ###....... 25%   ########.. 75%   ########## 95%
[ light            ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ solarized-light  ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–°β–°β–°β–±β–±β–±β–±β–±β–±β–± 25%   β–°β–°β–°β–°β–°β–°β–°β–°β–±β–± 75%   β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 95%
[ catppuccin-latte ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ tokyo-day        ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ ayu-light        ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ garden           ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ dark             ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ dracula          ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ nord             ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–°β–°β–°β–±β–±β–±β–±β–±β–±β–± 25%   β–°β–°β–°β–°β–°β–°β–°β–°β–±β–± 75%   β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 95%
[ gruvbox          ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–°β–°β–°β–±β–±β–±β–±β–±β–±β–± 25%   β–°β–°β–°β–°β–°β–°β–°β–°β–±β–± 75%   β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 95%
[ tokyo-night      ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ catppuccin       ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ one-dark         ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ rose-pine        ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ monokai          ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ mocha            ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–°β–°β–°β–±β–±β–±β–±β–±β–±β–± 25%   β–°β–°β–°β–°β–°β–°β–°β–°β–±β–± 75%   β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 95%
[ silver           ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   ━━━─────── 25%   ━━━━━━━━── 75%   ━━━━━━━━━━ 95%
[ ocean            ] ● ● ● Aa   πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k)   β–°β–°β–°β–±β–±β–±β–±β–±β–±β–± 25%   β–°β–°β–°β–°β–°β–°β–°β–°β–±β–± 75%   β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 95%

## Prefix styles  (how each token is labeled; tokens.<id>.prefix to override per token)
[ none         ] Opus 4.7 (1M context) | 50% (49k/100k) | $0.40
[ label        ] Model: Opus 4.7 (1M context) | Ctx: 50% (49k/100k) | Cost: $0.40
[ emoji        ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’° $0.40
[ nerd         ] Opus 4.7 (1M context) | 50% (49k/100k) | $0.40
[ ascii        ] [M] Opus 4.7 (1M context) | [C] 50% (49k/100k) | [$] $0.40
[ emoji+label  ] πŸ€– Model: Opus 4.7 (1M context) | 🧠 Ctx: 50% (49k/100k) | πŸ’° Cost: $0.40
[ label+emoji  ] Model πŸ€– Opus 4.7 (1M context) | Ctx 🧠 50% (49k/100k) | Cost πŸ’° $0.40
[ nerd+label   ]  Model: Opus 4.7 (1M context) |  Ctx: 50% (49k/100k) |  Cost: $0.40

## Separators  (string between tokens on the same line)
[ space        ] πŸ€– Opus 4.7 (1M context)  🧠 50% (49k/100k)  πŸ’° $0.40
[ pipe         ] πŸ€– Opus 4.7 (1M context) | 🧠 50% (49k/100k) | πŸ’° $0.40
[ slash        ] πŸ€– Opus 4.7 (1M context) / 🧠 50% (49k/100k) / πŸ’° $0.40
[ dot          ] πŸ€– Opus 4.7 (1M context) Β· 🧠 50% (49k/100k) Β· πŸ’° $0.40
[ vbar         ] πŸ€– Opus 4.7 (1M context) β”‚ 🧠 50% (49k/100k) β”‚ πŸ’° $0.40
[ dash         ] πŸ€– Opus 4.7 (1M context) ─ 🧠 50% (49k/100k) ─ πŸ’° $0.40
[ bullet       ] πŸ€– Opus 4.7 (1M context) β€’ 🧠 50% (49k/100k) β€’ πŸ’° $0.40
[ diamond      ] πŸ€– Opus 4.7 (1M context) β—† 🧠 50% (49k/100k) β—† πŸ’° $0.40
[ arrow        ] πŸ€– Opus 4.7 (1M context) β–Έ 🧠 50% (49k/100k) β–Έ πŸ’° $0.40
[ tri          ] πŸ€– Opus 4.7 (1M context) β–Ά 🧠 50% (49k/100k) β–Ά πŸ’° $0.40
[ star         ] πŸ€– Opus 4.7 (1M context) β˜… 🧠 50% (49k/100k) β˜… πŸ’° $0.40
[ sparkle      ] πŸ€– Opus 4.7 (1M context) ✦ 🧠 50% (49k/100k) ✦ πŸ’° $0.40
[ gear         ] πŸ€– Opus 4.7 (1M context) βš™ 🧠 50% (49k/100k) βš™ πŸ’° $0.40
[ check        ] πŸ€– Opus 4.7 (1M context) βœ“ 🧠 50% (49k/100k) βœ“ πŸ’° $0.40
[ heart        ] πŸ€– Opus 4.7 (1M context) β™₯ 🧠 50% (49k/100k) β™₯ πŸ’° $0.40
[ music        ] πŸ€– Opus 4.7 (1M context) β™ͺ 🧠 50% (49k/100k) β™ͺ πŸ’° $0.40
[ chevron      ] πŸ€– Opus 4.7 (1M context) ξ‚° 🧠 50% (49k/100k) ξ‚° πŸ’° $0.40
[ slant        ] πŸ€– Opus 4.7 (1M context) ξ‚Ό 🧠 50% (49k/100k) ξ‚Ό πŸ’° $0.40
[ chevron_thin ] πŸ€– Opus 4.7 (1M context) ξ‚± 🧠 50% (49k/100k) ξ‚± πŸ’° $0.40

## Bar styles  (each row: same bar at 25 / 75 / 95% β€” green good, yellow warn, red crit)
[ blocks           ] β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 95%
[ heavy            ] β–°β–°β–°β–±β–±β–±β–±β–±β–±β–± 25%   β–°β–°β–°β–°β–°β–°β–°β–°β–±β–± 75%   β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 95%
[ line             ] ━━━─────── 25%   ━━━━━━━━── 75%   ━━━━━━━━━━ 95%
[ braille          ] β£Ώβ£Ώβ£Ώβ£€β£€β£€β£€β£€β£€β£€ 25%   β£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£€β£€ 75%   β£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώβ£Ώ 95%
[ dots             ] ●●●○○○○○○○ 25%   ●●●●●●●●○○ 75%   ●●●●●●●●●● 95%
[ arrows           ] β–Άβ–Άβ–Άβ–·β–·β–·β–·β–·β–·β–· 25%   β–Άβ–Άβ–Άβ–Άβ–Άβ–Άβ–Άβ–Άβ–·β–· 75%   β–Άβ–Άβ–Άβ–Άβ–Άβ–Άβ–Άβ–Άβ–Άβ–Ά 95%
[ ascii            ] ###....... 25%   ########.. 75%   ########## 95%
[ gradient         ] β–ˆβ–ˆβ–Œ        25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ 95%
[ gradient_dots    ] β–ˆβ–ˆβ–ŒΒ·Β·Β·Β·Β·Β·Β· 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ŒΒ·Β· 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ 95%
[ gradient_fade    ] β–ˆβ–ˆβ–’β”„β”„β”„β”„β”„β”„β”„ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–’β”„β”„ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–’ 95%
[ gradient_shade   ] β–ˆβ–ˆβ–“β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“β–‘β–‘ 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“ 95%
[ gradient_braille ] β–ˆβ–ˆβ‘‡Β·Β·Β·Β·Β·Β·Β· 25%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ‘‡Β·Β· 75%   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ‘‡ 95%

## Tokens  (42 total β€” pick any combination via Tokens & lines wizard)

### Claude session (29 tokens, read from stdin JSON)
[ model              ] πŸ€– Opus 4.7 (1M context)           β“˜ Current Claude model display name
[ session_name       ] πŸ“ Browse                          β“˜ Custom session name set via --name or /rename
[ session_id         ] πŸ”– browse00                        β“˜ Session UUID (first 8 chars)
[ context            ] 🧠 50% (49k/100k)                  β“˜ % of context window used; rich formats include tokens used and window size
[ tokens_input       ] πŸ“₯ 49k                             β“˜ Total input tokens this session (e.g. 202k)
[ tokens_output      ] πŸ“€ 50                              β“˜ Total output tokens this session (e.g. 265)
[ context_size       ] πŸͺŸ 100k                            β“˜ Configured context window size (e.g. 1M)
[ context_remaining  ] πŸ†“ 50%                             β“˜ % of context window still available
[ cache_hit          ] πŸ’Ύ 97%                             β“˜ % of input tokens served from cache
[ cost               ] πŸ’° $0.40                           β“˜ Session cost in USD (formatted $0.40)
[ duration           ] ⏳ 3m 50s                           β“˜ Total wall-clock time since session start
[ api_duration       ] πŸ“‘ 39s                             β“˜ Time spent waiting for API responses
[ lines_added        ] βž• +128                             β“˜ Lines of code added in this session (+128)
[ lines_removed      ] βž– -42                              β“˜ Lines of code removed in this session (-42)
[ rl_5h              ] πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 3h 25m 13s    β“˜ 5-hour rate limit % + reset countdown
[ rl_7d              ] πŸ•– 7d β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 5d 2h 17m 0s    β“˜ 7-day rate limit % + reset countdown
[ thinking           ] πŸ’­ true                            β“˜ Whether extended thinking is enabled
[ effort             ] πŸ’ͺ xhigh                           β“˜ Current reasoning effort (low/medium/high/xhigh/max)
[ output_style       ] 🎨 default                         β“˜ Active output style name
[ version            ] 🏷️ 2.1.139                      β“˜ Claude Code version
[ fast_mode          ] ⚑️                               β“˜ Fast mode flag (shows only when true)
[ exceeds_200k       ] πŸ“ˆ                                 β“˜ Token-count-over-200k flag (shows only when true)
[ dir                ] πŸ“ example_dir                     β“˜ Workspace directory basename
[ worktree           ] 🌳 main                            β“˜ Worktree name (--worktree sessions only)
[ vim_mode           ] ⌨️ INSERT                        β“˜ Current vim mode (NORMAL/INSERT/VISUAL)
[ agent_name         ] 🀝 Explore                         β“˜ Name of the running --agent
[ added_dirs         ] πŸ“‚ 0                               β“˜ Count of dirs added via /add-dir
[ git_worktree       ] 🌲 /tmp/example_dir/feature        β“˜ Git worktree name (set for any linked worktree)
[ transcript         ] πŸ“œ browse001.jsonl                 β“˜ Basename of the transcript file

### Git (6 tokens, populated when cwd is inside a git repo)
[ git_branch         ] 🌿 feat/wizard                     β“˜ Current git branch name
[ git_status         ] πŸ“Š +3 ~5 ?2                        β“˜ Combined +staged ~modified ?untracked counts
[ git_staged         ] βž• 3                                β“˜ Count of staged files
[ git_modified       ] ✏️ 5                             β“˜ Count of modified-but-unstaged files
[ git_untracked      ] ❓ 2                                β“˜ Count of untracked files
[ git_ahead_behind   ] πŸ”€ ↑2 ↓1                       β“˜ Ahead/behind count vs upstream

### Local OS (7 tokens, from the machine running the statusline)
[ clock              ] πŸ•’ 18:03                           β“˜ Current time (HH:MM)
[ date               ] πŸ“… 2026-05-11                      β“˜ Current date (YYYY-MM-DD)
[ hostname           ] πŸ–₯️ mac                          β“˜ Short hostname
[ user               ] πŸ‘€ alice                           β“˜ Current user ($USER)
[ battery            ] πŸ”‹ 92%                             β“˜ Battery % (low % = critical color)
[ memory             ] 🧬 45%                             β“˜ Memory used % (relaxed thresholds; 80% is normal)
[ load               ] πŸ“Š 1.2                             β“˜ 1-minute load average

Configuration

Config lookup order (highest precedence first):

  1. --config PATH flag
  2. $STATUSLINE_BAR_CONFIG
  3. ./.statusline-bar.json (project-local β€” pin a per-project statusline)
  4. $XDG_CONFIG_HOME/statusline-bar/config.json
  5. ~/.config/statusline-bar/config.json
  6. Built-in defaults

The auto-created config includes a $schema field pointing at this repo's schema.json β€” VS Code, Cursor, JetBrains, and Neovim's LSP all give you autocomplete and inline docs while editing.

Validate any config with statusline-bar.sh -c --config PATH (or --check).

CLI

statusline-bar.sh [FLAGS]            render from stdin (Claude Code mode)
statusline-bar.sh -w | --wizard      interactive setup
statusline-bar.sh -e | --examples    print a catalog of presets/themes/etc
statusline-bar.sh -c | --check       validate config; exit 0/1

Flags:
  -h, --help                show help
  -V, --version             print version
  -w, --wizard              enter setup wizard
  -e, --examples            print the catalog
  -c, --check               validate config and exit
      --config PATH         use this config file instead of default
      --preset NAME         one-shot render with this preset
      --theme NAME          one-shot render with this theme
      --no-color            disable ANSI color output

statusline-bar.sh with no flags and no stdin prints the help (same as -h). When piped JSON arrives on stdin (i.e. Claude Code calls it), it renders the statusline.

Changelog

0.5.0 β€” 2026-05-13

First public release. Rolls up the v0.4.0 + v0.4.1 changes into a single tagged drop, with documentation tuned for new users.

Install / docs:

  • Switched from curl …/vX.Y.Z/statusline-bar.sh to git clone β€” clones to ~/.local/share/statusline-bar, upgrade via git pull, no version pinning to maintain.
  • Rewrote the Wire it up in Claude Code section to spell out the part new users trip on most: ~/.claude/settings.json is one JSON object β€” add the statusLine key alongside model / permissions / hooks / etc., don't overwrite the file. Includes minimal-config example, merged-with-existing example, the trailing-comma reminder, and a sanity-check command that pipes test/sample-input.json into the script so you see a real two-line render before fiddling with Claude.
  • New Tune it live alongside Claude Code subsection documenting the workflow: leave the wizard open in one terminal, run a real CC session in another, save in the wizard, type any / slash command in CC to force a statusline tick β€” see the new config rendered against your live data.
  • Full screenshots throughout the README: hero, wizard pickers, Tokens & lines editor, token-detail screens, plus a Showcase section with light/dark <picture> switching for every catalog dimension (presets, themes, prefix styles, separators, bar styles, tokens). 33 screenshots organized into tables + showrooms.

Nerd Font glyph mapping (was the v0.1.0-era follow-up):

  • Every one of the 42 tokens now has a Font Awesome glyph in its nerd prefix field, stored as \uXXXX JSON escapes so the source stays plain ASCII and grep-friendly. The nerd / nerd+label prefix styles render real icons in any Nerd-Font-patched terminal.

Carrying forward from v0.4.0 (see the entry below for the full list): +4 presets (focus, coder, rates, claude β†’ 11 total), +11 themes (segmented by terminal compat β†’ 21 total), +4 bar styles (gradient_dots / gradient_fade / gradient_shade / gradient_braille β†’ 12 total), context-token consolidation + 4 new companion tokens, ~15 new format variants (model compact/short/id/id_short, cost per_hour/with_rate, duration short, rate-limit countdown_short / remaining_short and combined, context tokens / tokens+size / percent+tokens / progressbar+percent+tokens, lines count), default empty_behavior β†’ placeholder, save-no-exit + per-screen reset, themes-picker segmentation, catalog redesign, sample-data refresh.

Tests: 118 e2e cases passing.

0.4.0 β€” 2026-05-12

A big content + UX pass: more variety in every catalog dimension, smarter defaults, and a redesigned --examples showcase.

More choices

  • +4 presets (focus, coder, rates, claude) bringing the total to 11. New 1-liners cover "activity glance" and "git focus"; new 2-liners cover "usage / rate limits" and "Claude session state". Presets are now grouped by line count in the picker.
  • +11 themes to 21 total, segmented in the picker by terminal compatibility (Auto / Light / Dark). Light additions: solarized-light, catppuccin-latte, tokyo-day, ayu-light, garden. Dark additions: one-dark, rose-pine, monokai, mocha, silver, ocean. Accent colors diversified β€” 12 of the 21 themes used to be some shade of blue; the new spread covers cyan / purple / pink / magenta / peach / orange / silver / brown / monochrome too.
  • +4 bar styles (gradient_dots, gradient_fade, gradient_shade, gradient_braille) joining gradient as the sub-character-precision family β€” each takes a different approach to showing the empty track + the partially-filled cell.

Tokens

  • Context tokens consolidated and expanded. context_pct + context_bar merge into a single context token; four companion tokens added β€” tokens_input (πŸ“₯), tokens_output (πŸ“€), context_size (πŸͺŸ), context_remaining (πŸ†“). New combined formats on context: tokens, tokens+size, percent+tokens, progressbar+percent+tokens.
  • Model gains compact (drops " context" from inside the parens), short (drops the whole paren group), id (raw model id), and id_short formats.
  • Cost gains per_hour ("$6.20/hr") and with_rate ("$0.40 ($6.20/hr)") β€” projected burn rate from session duration.
  • Lines added / removed gain count format (drops the leading +/-); now colored from the theme palette (good / crit).
  • Rate-limit rl_5h / rl_7d gain progressbar+percent+remaining, plus *_short variants of every countdown / remaining format (top-2-unit precision β€” "3h 25m" instead of "3h 25m 13s").
  • Duration / api_duration gain a short format.

Wizard polish

  • s save no longer exits the wizard β€” it flashes a βœ“ Saved to <path> confirmation and leaves you where you were. Use q to leave once saved.
  • r reset is now scoped to the current screen: per-field on token_field, per-token on token_detail, lines + per-token overrides on Tokens & lines, full reset elsewhere.
  • Save and reset hints surfaced in every submenu's keybinding footer.
  • Default empty_behavior changed from hide to placeholder so first-time users see β€” instead of tokens silently dropping out.
  • Default context format upgraded to percent+tokens so the new combined view shows by default.
  • context_remaining colored with inverse thresholds (high % = good, low % = crit) so it reads consistent with its context sibling.
  • Pressing ↑ on a Tokens & lines line tab now jumps to the last token of that line β€” symmetric with ↓ returning to the tab row at the bottom.

--examples catalog redesign

  • Each section focuses on the dimension it advertises: Themes shows accent + threshold bars (no cost), Bar styles shows the same bar at 25 / 75 / 95% with threshold colors, Tokens shows every token alone with an inline β“˜ description. Presets prints every line of multi-line layouts with the preset name as the row prefix.
  • New --examples MODE argument accepts presets / themes / prefixes / separators / bars / tokens to print just one section.
  • Sample data refreshed β€” rate-limit countdowns now show meaningful values (3h 25m 13s / 5d 2h 17m 0s) instead of 0s, all the optional Claude fields (vim mode, agent name, fast mode, exceeds-200k, git worktree, transcript path) are filled in with realistic examples, anchor date moved from year 2286 to 2026-05-11.

Other

  • Nerd Font glyph mapping complete. Every token now has a Font Awesome glyph for the nerd / nerd+label prefix styles β€” model (laptop/cpu), branch (code-fork), folder , clock , etc. Stored as \uXXXX JSON escapes inside TOKENS_JSON so they survive copy-paste and are easy to find. This was listed as a known v0.3.0 follow-up.
  • New MOCK_GIT_STATE=in_repo for catalog rendering so git tokens show realistic values in presets too.
  • Theme default's accent inherits the terminal foreground color (no explicit color), so terminal-themed users keep their custom text color while semantic threshold colors still apply.
  • Tests: 118 e2e cases passing.

0.3.0 β€” 2026-05-12

Tokens & lines β€” a full TUI for managing your statusline layout, plus a lot of preview-pane polish.

  • New "Tokens & lines" screen replaces the old Lines / Tokens placeholders on the main menu. Manage every line and every token from one place:
    • Horizontal line tabs ([1] [2] [3] +) at the top β€” ←/β†’ switches the active line, ↓ enters the token list, Enter on + adds a new line (up to 4), d deletes a line with confirmation if non-empty.
    • Token rows + inline separator rows (always visible, labeled ↓ pipe (global) or ↓ star (override)).
    • a add a token, c change the token at cursor, d delete, m mark for cross-line move, p paste, Shift+↑↓ move within a line, Enter on a token opens its detail screen, Enter on a separator row opens a separator picker scoped to that one position (with a (use global) row that clears the override).
    • ←/β†’ from inside the tokens zone also cycle through lines + the + tab (no need to climb back up).
  • Token picker: 42 tokens grouped by source (Claude stdin / git / OS), each row showing a live emoji+label sample rendered with synthetic data (e.g. πŸ€– Model: Opus 4.7 (1M context), πŸ•” 5h β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% πŸ”„ 0s). βœ“ marks tokens already used somewhere. Cursor on a row tooltips its one-line description. Used by both a add and c change.
  • Token detail screen for per-token overrides: prefix, format, bar_style, and Reset to defaults. Each sub-picker opens with the cursor on the currently-active value, and the right-side example column renders the actual token under that option so you can compare outputs directly. r resets just this token (screen-aware shortcut).
  • Preview highlighting redesigned. The focused token / separator no longer reverse-video-inverts colors (which lied about how it would actually render). Now the focused content is underlined and wrapped in bold-bright-yellow β–Ά β—€ markers β€” colors stay accurate.
  • Unsaved-changes prompt when you press q or Esc on the main menu with edits pending β€” choose s save+quit, d discard+quit, or any other key to cancel and keep editing. Previously the prompt wasn't reachable because of a subshell-captured-output bug.
  • Conditional "Reset to defaults" row appears at the bottom of the main menu when the config diverges from factory defaults, with a count of customizations.
  • CLI cleanup:
    • --examples now always prints the catalog; the interactive and all sub-modes (and the sub-picker prompt) are gone.
    • Catalog output now uses your real terminal color depth β€” 10 themes visibly differ instead of looking identical.
  • Prefix data cleanups for cleaner picker samples:
    • rl_5h / rl_7d emoji ⏱️ 5h / ⏱️ 7d β†’ πŸ•” / πŸ•– (removes the duplicated 5h 5h under emoji+label).
    • lines_added / lines_removed labels +: / -: β†’ Added: / Removed:.
    • version label v β†’ Version:.
    • VS-16 variation selectors added to 🏷️ / ⚑️ / ⌨️ / πŸ–₯️ so they render as wide emojis (consistent column count with other prefixes).
    • git_ahead_behind icon β‡… (math symbol) β†’ πŸ”€ (proper emoji).
  • git_run helper so git tokens work from a synthetic input (mock-on-PATH) even when the workspace dir doesn't exist on disk.
  • Lots of small wizard fixes from earlier in this cycle: cursor restoration on return from sub-menus, wrap-around navigation, per-item examples on every selection screen, theme menu columns (good warn crit text bar style), live Nerd-Font detection labels, breadcrumbs on every screen, dynamic Config: line in --help, -w/-c/-e short-flag remap.

Known follow-ups for v0.4.0: per-token + global colors (text, prefix, separator), full Nerd-Font glyph mapping for the nerd / nerd+label prefix styles.

Tests: 115 e2e cases passing.

0.2.0 β€” 2026-05-11

Wizard polish, CLI cleanup, and live Nerd-Font detection.

  • Wizard live preview updates every time you move the cursor in any sub-menu (preset / theme / prefix / separator / bar / empty / depth) β€” the bottom pane now reflects the focused option, not the current saved config.
  • Cursor memory β€” sub-menus open with the cursor on the currently-selected item, not row 0. Returning to a parent menu restores the cursor to the row you came from.
  • Wrap-around navigation β€” ↑ at the top jumps to the last item; ↓ at the bottom jumps to the first.
  • Per-item example previews on the right side of every sub-menu so you can compare all options at a glance: separator characters drawn literally (a β”‚ b β”‚ c), model token rendered in each prefix style, 10-char bars at 50% in each bar style, etc.
  • Theme menu columns β€” good / warn / crit / text / bar style header above the swatches, with Aa shown in the theme's accent color (= what regular non-threshold tokens look like) plus the suggested bar style each theme uses when global.bar_style is null.
  • Live Nerd-Font detection surfaced inline:
    • Separator menu (chevron / slant / chevron_thin): (Nerd Font βœ“ detected) / (Nerd Font βœ— β€” install: nerdfonts.com) / (Nerd Font: status unknown)
    • Prefix menu (nerd / nerd+label): same detection plus a note that the per-token glyph map is empty in v0.2.0 and ships in a follow-up.
  • Breadcrumbs on every screen β€” statusline-bar β–Έ Theme, statusline-bar β–Έ Separator, etc.
  • Theme colors actually differ in the wizard preview now β€” the preview uses the real terminal color depth instead of hardcoded none.
  • CLI flag remap: -w for wizard (was -c), -c for --check, -e for --examples.
  • Bare invocation prints help instead of prompting set up config? (y/n). Help text now includes the wizard hint and a dynamic Config: line showing which file is in use (or no config file found β€” using built-in defaults).
  • Bug fixes:
    • _wiz_next_key no longer hangs when a scripted input is exhausted (it now checks the parse-time OPT_TUI_SCRIPT instead of the consumed buffer).
    • bash 3.2 sparse-array trap in the cursor-stack pop path β€” arrays are now sliced rather than unset-ed.
    • Wizard's tui_cleanup survives non-TTY stty failures.

0.1.0 β€” 2026-05-11

  • Initial release. 39 tokens, 7 presets, 10 themes, 8 prefix styles, 19 separators, 8 bar styles, 9 formats, per-token overrides.
  • Interactive TUI wizard for preset / theme / prefix / separator / bar / empty / color-depth.
  • --examples catalog and --examples all modes.
  • Project-level config (./.statusline-bar.json) and schema.json for editor autocomplete.
  • 114 end-to-end test cases.
  • Known follow-ups for v0.1.1: TUI line-editor (add / reorder / remove lines), TUI per-token overrides (prefix/format/bar/separator-after), --examples interactive mode, full Nerd-font glyph mapping for the nerd prefix style.

Contributing

Issues and PRs welcome at https://github.com/Dworf/statusline-bar.

Run the test suite before submitting:

./test/run-tests.sh

License

MIT β€” see LICENSE.

Acknowledgements

  • Anthropic for Claude Code and the open statusline interface that makes this possible.
  • The broader Claude Code statusline community β€” the many open-source statusline projects whose presets, layouts, themes, progress-bar styles, and rendering ideas inspired this one.

About

Modern, fully customizable Claude Code statusline. Single-file bash + jq, no plugin runtime, no network calls. presets, themes, 42+ data tokens, transcript-aware burn rate & cache hit metrics.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages