关于 statusline-config
statusline-config 是用于配置 Claude Code `statusline-command.sh` 的技能,可选择状态栏信息段和主题,并生成、验证脚本。
主要功能
- 01启用或关闭状态栏信息段
- 02选择颜色主题
- 03显示模型与上下文信息
- 04显示费用与速率限制
- 05生成并验证 Shell 脚本
适用场景
- 01在状态栏中添加 Token 用量
- 02更改状态栏配色
- 03在状态栏显示 worktree 信息
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sd0xdev/ sd0x-harness --skill statusline-config安装后在 Claude Code 中输入/statusline-config确认已加载。
附带文件references/json-schema.mdreferences/themes.md
详细介绍
StatusLine 配置
自定义 ~/.claude/statusline-command.sh — 分段、主题和颜色。
何时不应使用
| 场景 | 改用 |
|---|---|
| 首次设置状态行(无需自定义) | 内置的 statusline-setup Agent(Claude Code Agent 类型)——自动应用默认设置 |
直接编辑 settings.json | 手动编辑 — 此技能管理的是 statusline-command.sh,而不是 settings.json |
| 调试 Claude Code 启动问题 | /claude-health — 配置健康检查 |
分段
| 分段 | JSON 字段 | 默认值 | 备注 |
|---|---|---|---|
| 目录 | workspace.current_dir | 开启 | 截断过深的路径:~/.../last-dir |
| Git 分支 | shell git | 开启 | --no-optional-locks,缓存 5 秒 |
| Agent | agent.name | 开启(有条件) | 存在时显示;颜色:C_MODEL |
| 模型 | model.display_name + context_window.context_window_size | 开启 | 智能档位后缀:Opus 4.6 (1M) — 如果 display_name 已包含上下文信息,则自动跳过 |
| 上下文 % | context_window.remaining_percentage + context_window_size | 开启 | ctx 60% left (600k/1M) — 绿色 >40%,黄色 20-40%,红色 <=20% |
| Token 用量 | context_window.total_input_tokens + total_output_tokens | 开启(有条件) | {in}k/{out}k 会话累计;颜色:C_COST |
| 费用 | cost.total_cost_usd | 开启 | 达到 $0.005 时显示,est $X.XX |
| 速率限制 | rate_limits.five_hour.used_percentage + seven_day.used_percentage | 开启(有条件) | 5h: 85% left · 7d: 82% left — 显示剩余比例(100 - 已用);颜色阈值与上下文 % 相同:绿色 >40%,黄色 20-40%,红色 <=20%;仅 OAuth 用户适用 |
| Worktree | worktree.name + worktree.branch | 开启(有条件) | [WT:{name}] {branch},若分支不存在则显示 [WT:{name}];存在时替代目录 + Git 分支;颜色:C_BRANCH |
完整的 JSON 架构请参见 json-schema.md。
主题
| 主题 | 类型 | 默认 | 备注 |
|---|---|---|---|
ansi-default | ANSI 16 | ✅ | 安全回退,适用于所有环境 |
catppuccin-mocha | TrueColor | — | 推荐 — 柔和色调,WCAG AA >=4.5:1 |
dracula | TrueColor | — | 鲜艳的紫色/粉色点缀 |
nord | TrueColor | — | 北极蓝色,柔和色调 |
none | — | — | 无颜色(自动触发 NO_COLOR) |
切换方式:export CLAUDE_STATUSLINE_THEME=catppuccin-mocha
完整的 token→十六进制颜色映射请参见 themes.md。
语义令牌
脚本使用语义令牌,而非硬编码颜色:
| 令牌 | 用途 | 示例 |
|---|---|---|
C_CWD | 目录路径 | 蓝色 / 蓝宝石色 |
C_BRANCH | Git 分支名称 | 洋红色 / 淡紫色 |
C_MODEL | 模型显示名称 | 青色 / 蓝绿色 |
C_CTX_OK | 上下文 >= 41% | 绿色 |
C_CTX_WARN | 上下文 21-40% | 黄色 |
C_CTX_BAD | 上下文 <= 20% | 红色 |
C_COST | 费用显示 | 柔和文字 |
C_ALERT | >200k Token 警告(旧版,已移除该分段) | 橙色/蜜桃色 + 粗体 |
C_SEP | 管道分隔符 | | 暗淡/叠加 |
C_MUTED | 次要信息 | 次级文本 |
C_TEXT | 常规文本 | 前景色 |
C_RESET | 重置所有格式 | \033[0m |
工作流
无参数 → 应用最佳实践默认设置(所有片段均启用 + ansi-default 主题)。转到第 4 步。
更改主题(例如“使用 catppuccin-mocha”“切换到 dracula”)→ 阅读 themes.md,应用所请求的主题。转到第 4 步。别名:catppuccin → catppuccin-mocha。
自定义请求(例如“添加成本”“移除 git”“不要颜色”)→ 交互流程:
- 读取当前脚本:
cat ~/.claude/statusline-command.sh - 询问要启用/禁用的片段(AskUserQuestion 多选)
- 询问主题偏好(AskUserQuestion,提供主题选项)
- 遵循 Script Rules + 从 themes.md 中选择的主题生成脚本
- 写入
~/.claude/statusline-command.sh - 验证:
echo '{"model":{"display_name":"Opus 4.6"},"workspace":{"current_dir":"/tmp/test"},"context_window":{"remaining_percentage":55},"cost":{"total_cost_usd":0.42},"exceeds_200k_tokens":false}' | ~/.claude/statusline-command.sh
脚本规则
- Shebang:
#!/bin/sh(POSIX) - 读取 stdin:
input=$(cat) - 解析 JSON:
jq -r '.field // fallback' - 从环境变量读取主题:
theme="${CLAUDE_STATUSLINE_THEME:-ansi-default}" - NO_COLOR:
[ -n "${NO_COLOR:-}" ] && theme="none" - 主题别名:
catppuccin→catppuccin-mocha - 无效主题:回退到
ansi-default - 颜色输出:ANSI/TrueColor 使用
printf "%b",none 使用printf "%s" - TrueColor 格式:
\033[38;2;R;G;Bm(24 位前景色) - Git:
git --no-optional-locks -C "$dir" - Git 缓存:
/tmp/claude-statusline-git-cache-$(id -u),5 秒 TTL,macOS 使用stat -f %m/ Linux 使用stat -c %Y - CWD 截断:深度 >2 时 →
~/.../basename - 成本:仅当
>= 0.005时显示,格式为est $X.XX - 警报样式:
C_ALERT+ 粗体(\033[1m),以区别于C_CTX_BAD - Token 格式:通过 awk 使用
%.1fk(例如,8500 →8.5k);小于 1000 的值显示原始数字 - 层级格式:
>=1M → (1M),>=1000 → ({N}k),否则显示原始值;用于模型后缀 + 上下文绝对值 - 模型层级后缀:根据
context_window_size附加(1M)或(200k);如果display_name已包含context、1M或200k,则跳过 - 上下文绝对值:
ctx 60% left (600k/1M)— 剩余 Token 数根据remaining_percentage * context_window_size / 100计算 - 清理自由文本:剔除控制字符(
tr -d '[:cntrl:]')+ 将agent.name、worktree.name、worktree.branch截断至 30 个字符 - Worktree 替换:存在
worktree.name时,将 Directory + Git 分支替换为[WT:{name}] {branch}(若worktree.branch不存在,则显示[WT:{name}]— 基于 hook 的 worktree) - 速率限制:存在
rate_limits时显示;显示剩余百分比(100 - used_percentage)并添加 "left" 后缀;格式为5h: {rem}% left · 7d: {rem}% left;根据最差剩余值着色 — 绿色 >40%(C_CTX_OK)、黄色 20-40%(C_CTX_WARN)、红色 <=20%(C_CTX_BAD);阈值与上下文百分比一致;仅适用于 OAuth 用户 - 速率限制
resets_at:已提取,但 v1 中不显示(对于状态栏来说过于冗长) - 渲染顺序(普通):
Directory | Git branch | Agent? | Model (tier) | Context % (abs) · Token Usage? · Cost? · Rate Limits? - 渲染顺序(worktree):
[WT:name] branch | Agent? | Model (tier) | Context % (abs) · Token Usage? · Cost? · Rate Limits?
脚本结构
#!/bin/sh
input=$(cat)
# ... extract JSON fields ...
theme="${CLAUDE_STATUSLINE_THEME:-ansi-default}"
[ -n "${NO_COLOR:-}" ] && theme="none"
case "$theme" in
catppuccin|catppuccin-mocha) # set C_* tokens with TrueColor values ;;
dracula) # ... ;;
nord) # ... ;;
none) # all C_* = "" ;;
*) # ansi-default: ANSI 16 colors ;;
esac
# ... build output using C_* tokens ...
if [ "$theme" = "none" ]; then
printf "%s" "$out"
else
printf "%b" "$out"
fi
输出示例
Normal mode (1M context):
~/.../my-project | feat/auth | Opus 4.6 (1M) | ctx 60% left (600k/1M) · 85.0k/12.0k · est $18.12
Normal mode (200k context):
~/.../my-project | main | Sonnet 4.6 (200k) | ctx 30% left (60k/200k) · 120.0k/8.0k · est $3.50
With agent:
~/.../my-project | feat/auth | security-reviewer | Opus 4.6 (1M) | ctx 48% left (480k/1M) · est $0.12
Worktree mode:
[WT:fix-123] bugfix/issue-123 | Opus 4.6 (1M) | ctx 22% left (220k/1M) · 42.0k/8.0k · est $1.23
With rate limits (OAuth user, green):
~/.../my-project | feat/auth | Opus 4.6 (1M) | ctx 60% left (600k/1M) · 85.0k/12.0k · est $18.12 · 5h: 58% left · 7d: 82% left
Rate limits warning (yellow):
~/.../my-project | main | Opus 4.6 (1M) | ctx 30% left (300k/1M) · 5h: 25% left · 7d: 35% left
Rate limits critical (red):
~/.../my-project | main | Opus 4.6 (1M) | ctx 30% left (300k/1M) · 5h: 8% left · 7d: 55% left
display_name already has context info (no duplicate suffix):
~/.../my-project | main | Opus 4.6 (1M context) | ctx 60% left (600k/1M) · est $18.12
输出
| 项目 | 路径 | 描述 |
|---|---|---|
| StatusLine 脚本 | ~/.claude/statusline-command.sh | 从 JSON stdin 接收输入的 POSIX shell 脚本 |
验证
生成脚本后,请验证:
-
~/.claude/statusline-command.sh存在且可执行(chmod +x) - v2 测试通过:
echo '{"model":{"display_name":"Opus 4.6"},"cwd":"/tmp/test","workspace":{"current_dir":"/tmp/test","project_dir":"/tmp/test"},"context_window":{"remaining_percentage":55,"used_percentage":45,"context_window_size":200000,"total_input_tokens":85000,"total_output_tokens":12000,"current_usage":{"input_tokens":8500,"output_tokens":1200,"cache_creation_input_tokens":5000,"cache_read_input_tokens":2000}},"cost":{"total_cost_usd":0.42},"exceeds_200k_tokens":false,"session_id":"test","version":"2.1.80","output_style":{"name":"default"},"rate_limits":{"five_hour":{"used_percentage":42.5,"resets_at":"2026-03-21T14:30:00Z"},"seven_day":{"used_percentage":18.2,"resets_at":"2026-03-25T00:00:00Z"}}}' | ~/.claude/statusline-command.sh - 输出包含预期片段(目录、模型、上下文百分比、令牌用量
8.5k/1.2k) - Agent 测试:
echo '{"model":{"display_name":"Opus 4.6"},"workspace":{"current_dir":"/tmp/test"},"context_window":{"remaining_percentage":55},"cost":{"total_cost_usd":0.42},"exceeds_200k_tokens":false,"agent":{"name":"security-reviewer"}}' | ~/.claude/statusline-command.sh会显示security-reviewer片段 - Worktree 测试:
echo '{"model":{"display_name":"Opus 4.6"},"worktree":{"name":"fix-123","branch":"bugfix/issue-123"},"context_window":{"remaining_percentage":55},"cost":{"total_cost_usd":0.42},"exceeds_200k_tokens":false}' | ~/.claude/statusline-command.sh会显示[WT:fix-123] bugfix/issue-123,替代目录/分支 - 速率限制测试:输出包含绿色的
5h: 58% left · 7d: 82% left - 缺少速率限制时:
echo '{"model":{"display_name":"Opus 4.6"},"workspace":{"current_dir":"/tmp/test"},"context_window":{"remaining_percentage":55},"cost":{"total_cost_usd":0.42},"exceeds_200k_tokens":false}' | ~/.claude/statusline-command.sh会生成不含速率限制片段的有效输出(无错误) - v1 向后兼容:
echo '{"model":{"display_name":"Opus 4.6"},"workspace":{"current_dir":"/tmp/test"},"context_window":{"remaining_percentage":55},"cost":{"total_cost_usd":0.42},"exceeds_200k_tokens":false}' | ~/.claude/statusline-command.sh会生成有效输出且无错误 - 主题与用户选择一致(检查脚本中的颜色代码)
- 设置
NO_COLOR=1后会生成无颜色输出
评论
支持 Markdown