Config
Configure the status bar layout and widgets interactively, or apply a preset. Use when: customizing which widgets appear, changing the layout mode, applying presets, toggling individual widgets. Triggers: "customize statusbar", "statusbar config", "change layout", "enable widgets", "statusbar developer", "statusbar minimal", "statusbar full", "statusbar preset".From its SKILL.md
npx -y skills add SYM1000/claude-statusbar --skill configAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
13.3 KB, as published. Nobody here has run it
Statusbar — Interactive Configuration
You are helping the user configure their statusbar plugin. You will present a visual, interactive configuration experience using Claude Code's native selection UI, then save their choices.
Check for preset argument
If the user provided a preset name as an argument (e.g., /statusbar:config developer), skip the interactive UI and jump directly to Apply Preset below.
Available presets and their widget mappings:
| Preset | Layout | Enabled widgets |
|---|---|---|
minimal | compact | compact-warn, model, effort, context |
default | compact | compact-warn, model, effort, context, cost, duration, git |
developer | standard | compact-warn, model, effort, context, cost, duration, git, lines, rate-5h, rate-7d, tokens, cache, latency, context-size |
full | mascot | ALL widgets enabled |
tracker | standard | compact-warn, model, effort, context, cost, duration, messages, total-tokens, tools-used |
Step 1: Read current configuration
Read the current config file to know the user's existing setup:
- Try
${CLAUDE_PLUGIN_DATA}/statusbar-config.json - Then try
${CLAUDE_PLUGIN_ROOT}/defaults/statusbar-config.json - Fall back to: layout=compact, widgets=compact-warn+model+context+cost+duration+git
Note the current layout and which widgets are enabled/disabled. You MUST use this to mark current state in the UI (see Step 2).
Step 2: Present the interactive configuration UI
Use a SINGLE AskUserQuestion call with exactly 4 questions (shown as navigable tabs). The user browses tabs with arrow keys, selects options with enter/space.
IMPORTANT: Show current state in options
The AskUserQuestion tool does not support pre-selecting options. To show the user what's currently enabled, you MUST dynamically modify the options based on the config you read in Step 1:
For multi-select questions (Q2, Q3, Q4):
- Append
[ON]to the label of each option whose widgets are currently enabled in the config - Append
[OFF]to the label of each option whose widgets are currently disabled - Add a note in the question text: "Options marked [ON] are currently enabled."
Example: if model, context, cost, and duration are enabled but git is disabled:
"Model & Context [ON]""Cost & Duration [ON]""Git Branch [OFF]""Compact Alert [ON]"
For a group like "Lines & Tokens" that maps to multiple widgets (lines + tokens), mark it [ON] if ANY of its widgets are enabled, [OFF] if ALL are disabled.
For the Preset question (Q1):
- Check if the current config matches any preset exactly. If so, add
(current)to that preset's label. - If no preset matches, the user has a custom config — add to the question text: "Your current config is custom (doesn't match a preset)."
Question 1 — "Preset" (single-select WITH previews)
This question lets the user pick a preset theme. Each option has a preview showing exactly what the status bar will look like. The user arrows through options and sees the preview update on the right side.
question: "Start from a preset? Pick one to see a preview, or select Other to build your own."
header: "Preset"
multiSelect: false
options:
- label: "Minimal"
description: "Just the essentials — model name and context bar (1 line)"
preview: |
╭─ Minimal (compact, 1 line) ────────────────╮
│ │
│ Opus 4.6 │ high │ ████░░░░ 42% │
│ │
╰─────────────────────────────────────────────╯
Widgets: model, effort, context bar
Layout: compact (single line)
- label: "Default (Recommended)"
description: "Model, context, cost, duration, and git branch (1 line)"
preview: |
╭─ Default (compact, 1 line) ────────────────────╮
│ │
│ Opus 4.6 │ high │ ████░░░░ 42% │ main* │ $1 │
│ │
╰────────────────────────────────────────────────╯
Widgets: model, effort, context, cost, duration, git
Layout: compact (single line)
- label: "Developer"
description: "All metrics a power user needs — rate limits, tokens, cache (2 lines)"
preview: |
╭─ Developer (standard, 2 lines) ─────────────────╮
│ │
│ Opus 4.6 │ high │ ████░░░░ 42% │ $1.23 │ main* │
│ +156 -23 │ 5h:34% │ 7d:12% │ 84k/21k │
│ │
╰──────────────────────────────────────────────────╯
Widgets: model, effort, context, cost, duration, git,
lines, rate limits, tokens, cache, latency
Layout: standard (2 lines)
- label: "Full + Mascot"
description: "Everything enabled with pixel art alien (3 lines)"
preview: |
╭─ Full + Mascot (3 lines) ─────────────────────╮
│ │
│ ▐▛███▜▌ Opus 4.6 │ high │ ████░░░░ 42% │
│ ▝▜█████▛▘ main* │ $1.23 │ 14m 22s │
│ ▘▘ ▝▝ +42 -7 │ 5h:34% │ cache:67% │
│ │
╰────────────────────────────────────────────────╯
Widgets: ALL widgets enabled
Layout: mascot (3 lines with pixel art)
Question 2 — "Core" (multi-select)
Core widgets that most users want. The user checks/unchecks each.
question: "Which core widgets do you want? (select all that apply)"
header: "Core"
multiSelect: true
options:
- label: "Model & Context"
description: "Model name, effort level, and visual context bar (e.g., Opus 4.6 │ high │ ████░░░░ 42%)"
- label: "Cost & Duration"
description: "Session cost + elapsed time (e.g., $1.23 │ 12m 34s) — color-coded by spend"
- label: "Git Branch"
description: "Current branch + dirty indicator (e.g., main*) — cyan with red * for uncommitted changes"
- label: "Compact Alert"
description: "Shows ⚠ COMPACT in red when context exceeds 200k tokens and auto-compaction is imminent"
Question 3 — "Dev" (multi-select)
Developer-focused metrics.
question: "Which developer widgets do you want? (select all that apply)"
header: "Dev"
multiSelect: true
options:
- label: "Lines & Tokens"
description: "Code lines changed + token counts (e.g., +156 -23 │ 84k/21k) — green/red for add/remove"
- label: "Rate Limits"
description: "5-hour and 7-day rate limit usage (e.g., 5h:34% │ 7d:12%) — color-coded green→red"
- label: "Cache & Latency"
description: "Cache hit rate + API response time (e.g., cache:67% │ api:18.5s)"
- label: "Size & Session"
description: "Context window size + session ID (e.g., 1M │ a1b2c3)"
Question 4 — "Extras" (multi-select)
Tracking, niche widgets, and the mascot.
question: "Any extras? (select all that apply)"
header: "Extras"
multiSelect: true
options:
- label: "Tracking"
description: "Message counts, tool calls, total tokens (e.g., ✉ 12/11 │ ⚒ 47 │ Σ 84kin 21kout)"
- label: "Vim & Agent"
description: "Vim mode, agent name, output style (e.g., NORMAL │ planner │ concise)"
- label: "Worktree & MCP"
description: "Active worktree name + MCP server count (e.g., wt:feature-x │ MCP:3)"
- label: "Mascot"
description: "Pixel art alien — forces 3-line mascot layout with Claude's orange Clawd character"
Step 3: Process the user's selections
Mapping options to widget IDs
Question 2 (Core) mappings:
| Option | Widget IDs |
|---|---|
| "Model & Context" | model, effort, context |
| "Cost & Duration" | cost, duration |
| "Git Branch" | git |
| "Compact Alert" | compact-warn |
Question 3 (Dev) mappings:
| Option | Widget IDs |
|---|---|
| "Lines & Tokens" | lines, tokens |
| "Rate Limits" | rate-5h, rate-7d |
| "Cache & Latency" | cache, latency |
| "Size & Session" | context-size, session |
Question 4 (Extras) mappings:
| Option | Widget IDs |
|---|---|
| "Tracking" | messages, total-tokens, tools-used |
| "Vim & Agent" | vim, agent, style |
| "Worktree & MCP" | worktree, mcp |
| "Mascot" | mascot |
Merge logic
Key principle: selections REPLACE the category, non-interaction PRESERVES current config.
When processing multi-select answers (Q2, Q3, Q4), ignore the [ON]/[OFF] suffixes in labels — they were only visual indicators. Match by the base label text (e.g., "Model & Context" regardless of whether it said "[ON]" or "[OFF]").
-
If a preset was selected in Q1 (not "Other"):
- Start with that preset's layout and widgets as the baseline
- If any options were selected in Q2, Q3, or Q4, those selections override the preset for that category
- If a multi-select question has NO selections at all, use the preset's defaults for that category
-
If "Other" was selected in Q1 (or user typed custom text):
- Start from the CURRENT config (what you read in Step 1) as the baseline
- For each multi-select question (Q2, Q3, Q4):
- If the user selected any options → enable those widgets, disable the rest in that category
- If the user made no selections → keep the current config for that category (do NOT disable everything)
- If they typed a preset name in the "Other" field, apply that preset instead
- If they typed a layout name ("compact", "standard", "mascot"), change the layout but preserve widgets
-
compact-warndefaults to enabled in all presets, but the user can disable it by not selecting "Compact Alert" in the Core tab (when they do select other Core options) -
If
mascotis enabled, force the layout tomascot -
Layout determination:
- Minimal/Default preset → compact
- Developer/Tracker preset → standard
- Full preset or mascot widget selected → mascot
- If user only answered Q2-Q4 (no preset), keep the current layout unless widget count suggests otherwise:
- mascot widget selected → mascot
- Otherwise preserve current layout
Step 4: Write the configuration
Build the complete JSON config with ALL widget IDs (enabled or disabled):
{
"layout": "<compact|standard|mascot>",
"widgets": {
"compact-warn": true,
"model": <true|false>,
"effort": <true|false>,
"context": <true|false>,
"cost": <true|false>,
"duration": <true|false>,
"git": <true|false>,
"session": <true|false>,
"lines": <true|false>,
"rate-5h": <true|false>,
"rate-7d": <true|false>,
"tokens": <true|false>,
"cache": <true|false>,
"context-size": <true|false>,
"latency": <true|false>,
"messages": <true|false>,
"total-tokens": <true|false>,
"tools-used": <true|false>,
"vim": <true|false>,
"mcp": <true|false>,
"worktree": <true|false>,
"agent": <true|false>,
"style": <true|false>,
"mascot": <true|false>
},
"contextBarWidth": 8,
"separator": " │ "
}
Preserve contextBarWidth and separator from the existing config if they were customized.
Write to ${CLAUDE_PLUGIN_DATA}/statusbar-config.json. If that variable is not available, write to the project root statusbar-config.json.
Step 5: Show preview and confirm
After saving, show the user a preview of their configured status bar. Build a text mockup showing only their enabled widgets with example data:
Widget example values for preview:
- model:
Opus 4.6 - effort:
high - context:
████░░░░ 42% - cost:
$1.23 - duration:
12m 34s - git:
main* - session:
a1b2c3 - lines:
+156 -23 - rate-5h:
5h:34% - rate-7d:
7d:12% - tokens:
84k/21k - cache:
cache:67% - context-size:
1M - latency:
api:18.5s - messages:
✉ 12/11 - total-tokens:
Σ 84kin 21kout - tools-used:
⚒ 47 - vim:
NORMAL - agent:
planner - style:
concise - worktree:
wt:feature-x - mcp:
MCP:3
Join enabled widgets with │ separator. For standard layout, split across 2 lines. For mascot, show the mascot art on the left.
Tell the user:
- Configuration saved
- Changes take effect on the next Claude response (status bar auto-refreshes)
- Run
/statusbar:configagain anytime to reconfigure - Apply presets directly:
/statusbar:config developer