A Deno-powered status line for Claude Code CLI.
Shows model info, context usage, rate limits, git status, session duration, and more — right in your terminal.
Downloads a precompiled binary from GitHub Releases. No runtime dependencies needed.
# curl
curl -fsSL https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.sh | bash
# npx
npx @babarot/c-c-statusline
# deno
deno run -A https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.tsRequires Deno.
git clone https://github.com/babarot/c-c-statusline.git
cd c-c-statusline
make installThis compiles the binary and installs it to ~/.claude/c-c-statusline.
Generate ~/.claude/statusline.yaml with defaults:
# After install
~/.claude/c-c-statusline --init-configOr during install:
# curl
curl -fsSL https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.sh | bash -s -- --init-config
# npx
npx @babarot/c-c-statusline --init-config
# deno
deno run -A https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.ts --init-configThen edit to your liking:
# ~/.claude/statusline.yaml
theme: tokyo-night-storm
# Layout: controls which items appear on each line and their order.
# Items not listed here are hidden. Remove an item to hide it.
lines:
- [model, context, git, duration, effort, vim, update]
- [usage]
# Per-item options
items:
context:
format: 'ctx {used}/{total} ({pct}%)'
git:
path-style: short
# symbols:
# stash: "-"
# untracked: "?"
vim:
mode: auto
usage:
bar-style: block
time-style: relativesettings.json stays clean — no flags in the command:
CLI flags override config file values. Pass flags during install to bake them into settings.json:
# curl
curl -fsSL https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.sh \
| bash -s -- --bar-style block --path-style short --theme tokyo-night
# npx
npx @babarot/c-c-statusline --bar-style block --path-style short --theme tokyo-night
# deno
deno run -A https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.ts \
--bar-style block --path-style short --theme tokyo-nightThis writes the flags directly into the command:
// ~/.claude/settings.json
{
"statusLine": {
"type": "command",
"command": "\"$HOME/.claude/c-c-statusline\" --bar-style block --path-style short --theme tokyo-night"
}
}The lines config controls which items appear and in what order. Each array is a display line:
lines:
- [model, context, git, duration, effort, vim, update] # line 1
- [usage] # line 2+Available items: model, context, git, duration, effort, vim, update, usage
- Items are rendered left-to-right within each line, separated by
│ - Remove an item from
linesto hide it - Reorder items to change display order
- If
linesis omitted, the default layout above is used
Examples:
# Minimal: only git and usage
lines:
- [git, effort]
- [usage]
# Everything on one line (no rate limit bars)
lines:
- [model, context, git, duration, effort, vim, update, usage]
# Custom order
lines:
- [git, context, model]
- [usage]Options are organized per-item under the items section, plus a global theme:
| Scope | Option | Values | Default | Description |
|---|---|---|---|---|
| global | theme |
See Themes | default |
Color theme |
items.usage |
bar-style |
dot, block, fill |
dot |
Progress bar style |
items.usage |
time-style |
absolute, relative |
absolute |
Reset time format |
items.git |
path-style |
parent, full, short, basename |
parent |
Directory display style |
items.git |
symbols |
Map | See below | Override git status symbols |
items.git |
link |
Map | See below | Make branch name a clickable link (OSC 8) |
items.context |
format |
Format string | ctx {used}/{total} ({pct}%) |
Context display format |
items.vim |
mode |
auto, always |
auto |
Vim mode indicator behavior |
Legacy support: The flat
optionsformat (e.g.options.bar-style) still works for backward compatibility. CLI flags (e.g.--bar-style) also continue to work and override config file values.
| Input | Output |
|---|---|
--bar-style dot |
●●●●○○○○○○ |
--bar-style block |
▰▰▰▰▱▱▱▱▱▱ |
--bar-style fill |
████░░░░░░ |
For /Users/you/src/github.com/you/project:
| Input | Output |
|---|---|
--path-style parent |
you/project |
--path-style full |
~/src/github.com/you/project |
--path-style short |
~/s/g/you/project |
--path-style basename |
project |
| Input | Output |
|---|---|
--time-style absolute |
8:00pm, Mar 12, 2:00pm |
--time-style relative |
1h 30m left, 2d 5h left |
Use {used}, {total}, {pct}, {compact} placeholders.
| Placeholder | Description |
|---|---|
{used} |
Tokens used (e.g. 28k) |
{total} |
Context window size (e.g. 200k) |
{pct} |
Usage percentage (e.g. 14) |
{compact} |
Remaining % until auto-compact (based on 80% usable threshold) |
| Input | Output |
|---|---|
--ctx-format 'ctx {used}/{total} ({pct}%)' |
ctx 28k/200k (14%) |
--ctx-format '{pct}% ({used}/{total})' |
14% (28k/200k) |
--ctx-format '{pct}% compact:{compact}%' |
14% compact:83% |
--ctx-format '{used} of {total}' |
28k of 200k |
To hide the model name, remove model from lines:
lines:
- [context, git, duration, effort, vim, update] # no "model"
- [usage]Legacy:
--model-name offandoptions.model-name: "off"still work.
Shows the current Vim mode when Claude Code's Vim keybinding is enabled.
| Value | Behavior |
|---|---|
auto |
Show only in NORMAL mode (hides in INSERT to reduce noise) |
always |
Show in all modes (NORMAL, INSERT, etc.) |
To hide the vim indicator entirely, remove vim from lines. To control its behavior:
# ~/.claude/statusline.yaml
items:
vim:
mode: autoMode colors: NORMAL uses the theme's primary color, INSERT uses success (green).
Legacy:
--vim-mode offandoptions.vim-mode: "off"still work.
Built-in color themes using 24-bit True Color (RGB). Each theme defines 8 semantic color roles (primary, secondary, success, warning, caution, danger, muted, accent).
| Theme | Description |
|---|---|
default |
Original palette |
tokyo-night |
Tokyo Night Dark |
tokyo-night-storm |
Tokyo Night Storm |
tokyo-night-light |
Tokyo Night Light |
catppuccin-mocha |
Catppuccin Mocha |
dracula |
Dracula |
solarized-dark |
Solarized Dark |
gruvbox-dark |
Gruvbox Dark |
nord |
Nord |
one-dark |
One Dark |
github-dark |
GitHub Dark |
kanagawa |
Kanagawa |
rose-pine |
Rosé Pine |
Override any git status symbol. In the config file, use a map; with CLI flags, use key=val,... format.
| Key | Default | Description |
|---|---|---|
unstaged |
* |
Unstaged changes |
staged |
+ |
Staged changes |
stash |
$ |
Stash entries exist |
untracked |
% |
Untracked files |
ahead |
↑ |
Ahead of upstream |
behind |
↓ |
Behind upstream |
| Input | Output |
|---|---|
--git-symbols "stash=-,untracked=?" |
(main *+ -?) |
--git-symbols "unstaged=~,staged=+,stash=-,untracked=?,ahead=+,behind=-" |
(main ~+ -? +1-2) |
Config file:
items:
git:
symbols:
stash: "-"
untracked: "?"Legacy:
options.git-symbolsalso still works.
Turn the branch name into a clickable hyperlink (via OSC 8 terminal escape sequences). When enabled, clicking the branch name in a supported terminal (iTerm2, WezTerm, Alacritty, kitty, Ghostty, etc.) opens the remote's branch page in your browser.
items:
git:
link:
enabled: trueDefaults (fine for github.com / GitHub Enterprise):
| Key | Default | Description |
|---|---|---|
enabled |
false |
Opt-in. Set to true to enable |
template |
https://{host}/{owner}/{repo}/tree/{branch} |
URL template with placeholders |
remote |
origin |
Remote whose URL is parsed to derive {host}/{owner}/{repo} |
Placeholders: {host}, {owner}, {repo}, {branch}.
No link is generated (branch renders as plain text) when: the repo has no configured remote with the given name, the remote URL can't be parsed, HEAD is detached, or a template placeholder stays unresolved.
For GitLab, point the template at /-/tree/:
items:
git:
link:
enabled: true
template: "https://{host}/{owner}/{repo}/-/tree/{branch}"Line 1 (default): Model name, context usage (tokens + %), directory, git status, session duration, effort level, vim mode, update notification
Lines 2+ (default): Rate limit usage (current 5-hour window, weekly, extra credits when active)
All items can be reordered, shown, or hidden via the lines config.
Inspired by git-prompt.sh. Displays branch name and rich status indicators:
(main *+$% ↑1↓2|REBASE 3/5)
| Symbol | Meaning |
|---|---|
* |
Unstaged changes |
+ |
Staged changes |
$ |
Stash entries exist |
% |
Untracked files |
↑N |
N commits ahead of upstream |
↓N |
N commits behind upstream |
|REBASE |
Rebase in progress (with step/total) |
|MERGING |
Merge in progress |
|CHERRY-PICKING |
Cherry-pick in progress |
|REVERTING |
Revert in progress |
|BISECTING |
Bisect in progress |
|AM |
git am in progress |
Detached HEAD is shown in red with a tag or short SHA.
# curl
curl -fsSL https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.sh | bash -s -- --uninstall
# npx
npx @babarot/c-c-statusline --uninstall
# deno
deno run -A https://raw.githubusercontent.com/babarot/c-c-statusline/main/bin/install.ts --uninstallMIT
