ccvitals

The vital signs of your Claude Code session — usage quota, context window, cost, git status and more, right in your terminal. Pure bash, zero Node, never blocks your prompt.

Why ccvitals
| ccvitals | Node-based statuslines |
|---|
| Runtime | pure bash + jq | Node.js ≥ 14–18 |
| Render blocking | never — stale-while-revalidate cache, background refresh | varies |
| Rate-limit data | stdin first (zero-latency), OAuth API fallback | usually API calls |
| 1M context tier | detected — context % stays accurate past 200k | mostly assumes 200k |
| Two-line layout | yes | rare |
| Install | plugin marketplace or git clone + symlink (git pull = update) | npx / npm |
Install
Install ccvitals as a Claude Code plugin — no cloning or manual config required:
/plugin marketplace add educlopez/ccvitals
/plugin install ccvitals@ccvitals
/ccvitals:setup
/ccvitals:setup asks which modules you want, writes the config, and wires up settings.json automatically. Then restart Claude Code.
To reconfigure modules or switch to a two-line layout later:
/ccvitals:configure
Homebrew
brew install educlopez/tap/ccvitals
ccvitals # interactive installer (or: ccvitals --all)
After brew upgrade ccvitals, run ccvitals --force once to relink. Remove with ccvitals uninstall.
Manual install (alternative)
If you prefer a git-clone workflow (symlinked install, instant git pull updates):
git clone https://github.com/educlopez/ccvitals.git
cd ccvitals
./install.sh
The installer shows an interactive menu where you pick which modules to enable:
ccvitals — Choose your modules:
[x] 1) Directory my-project
[x] 2) Model Opus 4.6
[x] 3) Context ░░░░░░░░░░░░░░░ 12%
[x] 4) Usage quota Max ██████░░░░ 58% 3h42m
[x] 5) Git status (main | 3 files +42 -8)
Toggle: enter number (e.g. 4). Accept: Enter. All: a
Then restart Claude Code.
Install options
# Force reinstall (relink script + overwrite settings.json statusLine key)
./install.sh --force
# Skip menu — install all modules
./install.sh --all
# Skip menu — pick specific modules
./install.sh --modules=model,context,usage
# Two-line layout (these modules drop to row 2)
./install.sh --all --line2=context,usage,rtk,mode,lines
# Combine flags
./install.sh --force --modules=context,usage,git
The interactive installer also asks, after you pick your modules, which of
them should drop to a second line (enter their numbers, or press Enter for a
single line).
Update
cd ccvitals && git pull
Because the script is symlinked, git pull updates the statusline instantly —
no reinstall needed. Restart Claude Code to see the new version.
Change modules later
Run /ccvitals:configure (plugin install) or re-run the installer with --force. You can also edit ~/.claude/.statusline-config.json directly:
{
"modules": ["directory", "model", "context", "usage", "git", "rtk", "codegraph", "lines", "mode", "cost", "duration", "speed", "vim", "agent", "pr", "weekly"]
}
Remove any module from the array to hide it.
Two-line layout
Add an optional modules_line2 array to render those modules on a second row. Modules stay in modules for line 1; anything in modules_line2 drops to line 2. Omit modules_line2 entirely for a single line.
{
"modules": ["directory", "model", "git", "codegraph"],
"modules_line2": ["context", "usage", "rtk", "mode", "lines"]
}
Renders as:
my-project | Opus 4.6 | (main | 3 files +42 -8) | ⬡ 11.7k
███░░ 21% ⚠ | Max 58% 3h42m | rtk 86.8%↓ | ⚡ xhigh | +264 -195
Module order
Add an optional module_order array to control the left-to-right display order of modules. Any enabled module not listed is appended after the listed ones in the default order — so you can pin just the modules you care about without listing everything.
{
"modules": ["directory", "model", "context", "git", "cost"],
"module_order": ["cost", "git", "context", "model", "directory"]
}
Rules:
- Unknown names in
module_order are silently ignored (forward-compatible with future modules).
modules_line2 assignment is independent — module_order controls sequence, not which line a module lands on.
- Works with powerline mode.
- When
module_order is absent the default order is preserved byte-for-byte.