- Status Line Generator
- Generate a custom Claude Code status line script with your choice of columns and a color theme. Installs directly to
- ~/.claude/settings.json
- .
- How It Works
- Claude Code supports custom status lines via a shell script configured in
- ~/.claude/settings.json
- . The script receives session JSON on stdin (model, context window, workspace, vim, worktree, etc.) and prints formatted text to stdout.
- This skill generates a bash script tailored to your preferences and installs it automatically.
- Script Directory
- Important
- All scripts are located in the
scripts/
subdirectory of this skill.
Agent Execution Instructions
:
Determine this SKILL.md file's directory path as
SKILL_DIR
Script path =
${SKILL_DIR}/scripts/
.mjs Replace all ${SKILL_DIR} in this document with the actual path Script Reference : Script Purpose scripts/generate.mjs Generate and install status line script from chosen options Prerequisites jq — required by the generated status line script to parse JSON input from Claude Code. On Windows, the script auto-detects jq installed via WinGet or scoop; if jq is still not found, add its directory to your PATH manually. Bun — required to run the generator. Use npx -y bun if not installed globally. Usage
Preview generated script
npx -y bun ${SKILL_DIR} /scripts/generate.mjs --elements model,context,effort,git,dir --theme gruvbox
Generate and install
- npx
- -y
- bun
- ${SKILL_DIR}
- /scripts/generate.mjs
- --elements
- model,context,effort,git,dir
- --theme
- dracula
- --install
- Options
- Flag
- Default
- Description
- --elements
- model,context,cost,effort,style,git,dir
- Comma-separated columns to display
- --theme
- gruvbox
- Color theme — see table below
- --effort-icon
- arrow
- (
- ↯
- ) for iconic themes, none otherwise
- Override the effort prefix icon. Presets:
- arrow
- ,
- bolt
- ,
- flash
- ,
- reason
- ,
- dot
- ,
- none
- . A raw character is also accepted.
- --install
- off
- Write script to
- ~/.claude/scripts/statusline.sh
- and update
- settings.json
- Columns
- Column
- Description
- Data source
- model
- Active model name (e.g. "Opus 4.7")
- model.display_name
- context
- Progress bar + percentage —
- color changes with remaining capacity
- context_window.remaining_percentage
- cost
- Session API spend formatted as
- $X.XX
- in gold — hidden when rounds to
- $0.00
- cost.total_cost_usd
- from input JSON
- effort
- Reasoning effort level —
- color changes with level
- effortLevel
- in
- ~/.claude/settings.local.json
- →
- ~/.claude/settings.json
- style
- Output style name (e.g. Explanatory, Learning) — hidden when "default"
- output_style.name
- from input JSON
- git
- Git branch name (yellow when dirty)
- worktree.branch
- → git CLI
- dir
- Repo basename (original repo when in a worktree)
- worktree.original_repo_dir
- →
- workspace.current_dir
- worktree
- Bold
- worktree:
- label (hidden outside a worktree)
- worktree.name
- → parent-dir basename via git CLI
- vim
- Vim mode indicator (hidden when inactive)
- vim.mode
- Color-changing elements
- context
- — bar fill + percentage color scale with remaining capacity:
- Remaining
- Color
- Meaning
- > 50%
- green
- plenty of context
- 20–50%
- yellow
- watch out
- < 20%
- red
- nearly full — compact soon
- effort
- — value + optional prefix icon color by level:
- Level
- Color
- max
- ,
- xhigh
- ,
- high
- bold red
- medium
- yellow
- low
- ,
- xlow
- ,
- minimal
- green
- other / unset
- dim (or hidden when completely unset)
- Themes
- Theme
- Vibe
- Icons rendered in bar
- gruvbox
- Warm retro, muted
- ✦
- model ·
- ↯
- effort ·
- ❋
- style ·
- ⌂
- dir ·
- ⊕
- worktree ·
- ⎇
- git ·
- ⌨
- vim
- dracula
- Modern dark, high saturation
- ◈
- model ·
- ↯
- effort ·
- ❋
- style ·
- ⌂
- dir ·
- ⊕
- worktree ·
- ⎇
- git ·
- ⌨
- vim
- robbyrussell
- Classic oh-my-zsh
- no prefix icons — colors + labels only
- minimal
- Default terminal colors
- no prefix icons — plain text
- The
- context
- column intentionally skips a prefix icon — the colored progress bar is already visually rich. The
- effort
- prefix (
- ↯
- ) is baked into iconic themes and can be overridden with
- --effort-icon
- .
- Effort icons
- Pass
- --effort-icon
- to swap the glyph in front of the effort value. Presets:
- Preset
- Glyph
- Notes
- arrow
- ↯
- Electric arrow —
- default
- , narrow
- bolt
- ϟ
- Greek koppa — narrow lightning
- flash
- ⚡
- Classic lightning — wide in emoji-presentation fonts
- reason
- ∴
- Therefore
- dot
- ◉
- Filled circle
- none
- (hidden)
- Drop the icon entirely
- You can also pass any raw character as
- --effort-icon
- .
- Worktree behavior
-
- When inside a git worktree (detected via the input JSON's
- worktree.*
- fields or via
- git rev-parse --git-common-dir
- fallback), the
- worktree
- column shows a bold
- worktree:
- label using the parent dir name (e.g.
- ~/.codex/worktrees/46a6/clawmaster
- →
- worktree:46a6
- ). The
- git
- column prefers
- worktree.branch
- from the input JSON; the
- dir
- column prefers
- worktree.original_repo_dir
- so the repo identity stays stable across worktrees.
- Invocation
- This skill can be invoked with or without arguments:
- No args
- (
- /webup-statusline
- ): Interactive prompt via
- AskUserQuestion
- to pick columns and theme.
- With args
- (
- /webup-statusline dracula
- ): NLP parse for theme and column preferences.
- Arg parsing (natural language)
- The args string is free-form text. Use NLP to extract:
- theme
- — match against: gruvbox, robbyrussell, minimal, dracula. Recognize aliases (暗黑=dracula, 极简=minimal, 复古=gruvbox, レトロ=gruvbox).
- elements
- — look for mentions of: model, context/进度/コンテキスト, effort/推理强度/努力度, git/分支/ブランチ, dir/目录/ディレクトリ, worktree/工作树/ワークツリー, vim.
- Unspecified fields use defaults:
- model,context,effort,git,dir
- columns,
- gruvbox
- theme.
- Workflow
- If no args provided
-
- Use
- AskUserQuestion
- to ask 2 questions in a single prompt.
- AskUserQuestion
- caps each question at 4 options, so
- offer curated presets for columns
- rather than an exhaustive toggle list. If the user picks "Other", interpret their free text as a comma-separated column list (or a natural-language description that maps to one).
- Q1 — Column preset
- (single): Which columns to display? Offer these 3 curated presets —
- AskUserQuestion
- will auto-append an "Other" option that lets the user type a free-text column list or description.
- "Everything (Recommended)" —
- model,context,cost,effort,style,git,dir,worktree
- (all columns that have a useful signal today;
- vim
- is excluded because most users don't use vim keybindings)
- "Default" —
- model,context,effort,style,git,dir
- (balanced — drops cost and worktree; matches the skill's default flag value)
- "Essentials" —
- model,context,git,dir
- (lean; no effort, no style, no cost)
- If the user picks the auto-added "Other", treat their free text as a comma-separated column list, or as a natural-language description to map to columns. Fall back to
- Default
- if parsing is ambiguous.
- Q2 — Theme
- (single): Color theme?
- "Dracula" — modern dark, purple/pink/cyan (Recommended)
- "Gruvbox Dark" — warm retro palette, 24-bit true color
- "Robbyrussell" — classic oh-my-zsh style, no icons
- "Minimal" — no decoration, dim separators only
- If args provided
- Parse theme and columns from args. Skip the prompt.
Map user selections to script flags:
Column preset → expand to the preset's canonical
--elements
list:
Everything
→
model,context,cost,effort,style,git,dir,worktree
Default
→
model,context,effort,style,git,dir
Essentials
→
model,context,git,dir
Other
(auto-added by
AskUserQuestion
) → parse the user's free text; keep only recognized column names (
model,context,cost,effort,style,dir,worktree,git,vim
). If parsing is ambiguous, fall back to
Default
.
Theme →
--theme
value (one of
gruvbox
,
dracula
,
robbyrussell
,
minimal
)
Run the generator with
--install
:
npx
-y
bun
${SKILL_DIR}
/scripts/generate.mjs
--elements
<
list
--theme < theme
--install Tell user to restart Claude Code to see the new status line. Output Examples Dracula (all columns), remaining=49%, cost=$0.42, effort=high, output style=Explanatory, inside a worktree: ◈ Opus 4.7 | [■■■■■■■■■■□□□□□□□□□□] 51% | $0.42 | ↯ high | ❋ Explanatory | ⌂ clawmaster | ⊕ worktree:46a6 | ⎇ feat/xyz (bar yellow — 49% remaining; $0.42 gold session spend next to the bar; effort "high" bold red; purple ❋ Explanatory sits between effort and dir; context carries no prefix icon — the bar is already visual enough) Gruvbox Dark (model + context + effort + dir + git), remaining=88%, effort=medium: ✦ Opus 4.7 | [■■□□□□□□□□□□□□□□□□□□] 12% | ↯ medium | ⌂ skills-cc | ⎇ main (bar green — 88% remaining; effort "medium" yellow) Minimal (model + effort + dir + git), effort=low: Claude Opus 4.7 · low · skills-cc · main (no prefix icons in minimal; effort "low" green) Notes Generated script is saved to ~/.claude/scripts/statusline.sh Running the skill again overwrites the existing script — just re-run to change theme or columns The script uses jq to parse JSON input — make sure it's installed. On Windows, the script auto-detects WinGet and scoop jq paths; if jq is still not found, add it to PATH manually. Git dirty detection uses --no-optional-locks to avoid interfering with other git operations