webup-statusline
Generate and install a custom Claude Code status line with selectable columns (model, context, effort level, git, dir, worktree, vim) and a color theme. Context and effort elements color-change based on level. Triggers on "status line", "statusline", "customize status", "status bar", "effort level d
By webup · 1,359 installs
npx skills add webup/skills-cc --skill webup-statusline
Source repository · Upstream listing
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 :
1. Determine this SKILL.md file's directory path as SKILL DIR
2. Script path = ${SKILL DIR}/scripts/<script name .mjs
3. 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
Options
Flag Default Description
elements <list model,context,cost,effort,style,git,dir Comma separated columns to display
theme <name gruvbox Color theme — see table below
effort icon <preset 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:<id 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 <preset 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 <char .
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:<id 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:
1. theme — match against: gruvbox, robbyrussell, minimal, dracula. Recognize aliases (暗黑=dracula, 极简=minimal, 复古=gruvbox, レトロ=gruvbox).
2. 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
1. 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.
2. 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 )
3. Run the generator with install :
4. 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:
(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:
(bar green — 88% remaining; effort "medium" yellow)
Minimal (model + effort + dir + git), effort=low:
(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