Themeable status line provider for Claude Code.
Requires Bun.
Two-row layout with model, session, project directory, git status, and context usage:
Single-row powerline-style segments with muted dark backgrounds and arrow separators:
Wraps to multiple lines when segments exceed terminal width. Select with --theme powerline.
bunx @nutthead/cc-statusline installThen add to ~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline"
}
}Use --overwrite to replace an existing installation.
Built-in themes: default (two-row), powerline (single-row with powerline arrows).
Use --theme powerline to select a built-in theme.
Create a JS file that default-exports an async theme function (e.g. ~/.config/cc-statusline/theme.js):
export default async function theme(input) {
if (!input) return "";
const status = JSON.parse(input);
return `${status.model.display_name} | ${status.workspace.current_dir}`;
}Then point to it in ~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline --theme-file ~/.config/cc-statusline/theme.js"
}
}The JSON object passed to your theme function contains these fields:
| Field | Example |
|---|---|
session_id |
"f9abcdef-1a2b-..." |
transcript_path |
"/home/user/.claude/transcript" |
cwd |
"/home/user/project" |
model.id |
"claude-opus-4-6" |
model.display_name |
"Claude Opus 4.6" |
workspace.current_dir |
"/home/user/project" |
workspace.project_dir |
"/home/user/project" |
version |
"2.1.39" |
output_style.name |
"Explanatory" |
context_window.total_input_tokens |
12345 |
context_window.total_output_tokens |
6789 |
context_window.context_window_size |
200000 |
context_window.current_usage |
{ ... } or null |
context_window.current_usage.input_tokens |
1024 |
context_window.current_usage.output_tokens |
512 |
context_window.current_usage.cache_creation_input_tokens |
256 |
context_window.current_usage.cache_read_input_tokens |
128 |
context_window.used_percentage |
42.5 or null |
context_window.remaining_percentage |
57.5 or null |
context_window.vim.mode |
"INSERT" or "NORMAL" |
context_window.agent.name |
"claude-code" |
context_window.agent.type |
"main" |
See src/schema/statusLine.ts for the full schema.
Execution logs are stored in ~/.local/state/statusline/app.log.
MIT

