如何为 claude-code-templates 编写自定义 status line 脚本并在 settings 中启用?
【免费下载链接】claude-code-templatesCLI tool for configuring and monitoring Claude Code项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-templates
如果你的目标是在 Claude Code 界面底部显示一条自己定义的 status line——比如当前模型名、目录、git 分支——claude-code-templates 仓库的 STATUSLINE_GUIDE.md 给出了完整做法:写一个从 stdin 读取 JSON 会话数据、向 stdout 输出一行文本的脚本,然后在 settings 文件的statusLine字段里声明脚本路径。本文按“写脚本 → 启用配置 → 手动验证 → 界面确认”的路径展开。脚本可以用任意语言写,文档自带 bash、Python、Node.js 示例;bash 示例依赖jq(排查章节提醒检查jq、git等依赖是否已安装)。
先搞清脚本的输入输出约定
写脚本前先明确两点约定,这决定了脚本结构:
输入:Claude Code 通过 stdin 把会话数据以 JSON 传给脚本。文档给出的示例结构如下(文档示例,字段值为演示用占位内容):
{ "hook_event_name": "Status", "session_id": "abc123-def456-789", "transcript_path": "/Users/you/.claude/projects/my-project/transcript.jsonl", "cwd": "/Users/you/projects/my-project", "model": { "id": "claude-3-5-sonnet-20241022", "display_name": "Sonnet" }, "workspace": { "current_dir": "/Users/you/projects/my-project/src", "project_dir": "/Users/you/projects/my-project" }, "version": "1.0.80", "cost": { "total_cost_usd": 0.01234, "total_duration_ms": 45000, "total_api_duration_ms": 2300, "total_lines_added": 156, "total_lines_removed": 23 } }文档列出的常用字段:
model.display_name:模型可读名(Sonnet、Haiku、Opus)workspace.current_dir/workspace.project_dir:当前工作目录与项目根目录cost.total_cost_usd、cost.total_duration_ms、cost.total_lines_added、cost.total_lines_removed:会话成本与代码行数指标session_id、transcript_path、version、output_style.name:会话标识与环境信息
输出:脚本 stdout 的第一行被用作 status line 内容,支持 ANSI 颜色和 emoji。status line 会随会话消息变化自动刷新(文档说明刷新上限为每 300ms 一次),所以脚本本身要快。输出第二行及之后的内容不会显示,可以留给调试日志(用 stderr)。
编写脚本:一条最短主路径
文档“Minimal Clean Status”示例是一个可以直接落地的最小 bash 脚本,依赖jq和git。把它保存为~/.claude/statusline.sh:
#!/bin/bash # Minimal, clean status line input=$(cat) # Extract essentials MODEL=$(echo "$input" | jq -r '.model.display_name') DIR=$(echo "$input" | jq -r '.workspace.current_dir') DIR_NAME=$(basename "$DIR") # Simple git branch BRANCH="" if git rev-parse --git-dir > /dev/null 2>&1; then BRANCH_NAME=$(git branch --show-current 2>/dev/null) if [ -n "$BRANCH_NAME" ]; then BRANCH=" • $BRANCH_NAME" fi fi echo "$MODEL • $DIR_NAME$BRANCH"逻辑是:读完 stdin 后提取模型名和当前目录名;如果所在目录是 git 仓库且有当前分支,就追加• 分支名。在非 git 目录下脚本只会输出模型 • 目录名,不会报错。
如果不想依赖jq,文档还提供了 Python 示例(dev-statusline.py,含 git 状态计数、成本/时长格式化、Node/Python 版本探测)和 Node.js 示例(performance-statusline.js),输入输出约定相同,按需取用即可。
保存后给脚本加执行权限,这一步只修改该文件自身的执行位:
chmod +x ~/.claude/statusline.sh在 settings 中启用
文档列出三种 settings 文件位置,按作用范围选其一:
| 级别 | 位置 | 作用范围 | 用途 |
|---|---|---|---|
| 用户级 | ~/.claude/settings.json | 所有项目 | 跨项目的个人 status line |
| 项目级 | .claude/settings.json | 当前项目 | 可提交、团队共享 |
| 项目本地 | .claude/settings.local.json | 当前项目 | 个人项目级配置,不提交 |
在对应 JSON 文件中加入statusLine对象:
{ "statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 0 } }三个配置项的含义(以文档为准):
type:目前仅支持"command"一种类型;command:脚本路径,绝对路径或相对 home 目录的路径;padding:与屏幕边缘的间距,设为0时输出顶格显示。
两条可选替代路径:
交互式生成:在 Claude Code 里运行
/statusline,可用自然语言附加要求,例如/statusline show the model name in orange and git branch in green、/statusline make it minimal with just directory and model。文档说明它会引导创建 status line,默认往往复现你的终端提示符。适合先快速体验,再对照生成结果手写脚本。内联
bash -c命令:不单独建脚本文件,直接把逻辑写进command字段。仓库 settings/statusline 组件目录下有现成的 JSON 可抄。例如 minimal-statusline.json 只展示模型和目录:{ "statusLine": { "type": "command", "command": "bash -c 'input=$(cat); MODEL=$(echo \"$input\" | jq -r \".model.display_name\"); DIR=$(echo \"$input\" | jq -r \".workspace.current_dir\"); echo \"[$MODEL] ${DIR##*/}\"'" } }同目录的 git-branch-statusline.json 额外显示当前分支和未提交改动数量,time-statusline.json 附带当前时间。这些 JSON 同样只需要把
statusLine段合入你的 settings 文件。
验证脚本与配置
手动验证(先于界面):文档的测试章节给出用 mock JSON 通过管道喂给脚本的方式,其中current_dir等值是文档示例,替换为你本地真实存在的目录:
echo '{ "model": {"display_name": "Sonnet"}, "workspace": {"current_dir": "/test/project"}, "cost": {"total_cost_usd": 0.01, "total_duration_ms": 30000} }' | ~/.claude/statusline.sh能打印出一行包含模型名、目录名的文本,说明脚本本身可用。在 git 仓库目录下执行同一命令,还应能看到分支名。文档还给了最简单的冒烟命令echo 'test-json-here' | ~/.claude/statusline.sh,用于确认脚本能被调用且不会挂起。
性能验证:status line 刷新频繁,文档建议对脚本做计时:
time echo 'test-json' | ~/.claude/statusline.sh界面确认:重新进入或刷新 Claude Code 会话,底部应出现 status line,并在会话推进时自动更新。
出问题时按文档顺序排查
文档 Troubleshooting 章节列出的对应关系:
- status line 不显示:依次检查脚本是否有执行权限(
chmod +x)、settings.json 里的路径是否正确、再用 mock JSON 手动跑一遍脚本定位卡在哪一层。 - 颜色不显示:确认终端支持 ANSI 颜色,用
echo -e "\033[31mRed text\033[0m"做最简颜色测试。 - 脚本报错:检查
jq、git等依赖是否安装;先用最小功能跑通,再加复杂度。文档的“Error Handling”示例展示了给每个字段加回退值的写法(如jq -r '.model.display_name' 2>/dev/null || echo "Claude")。 - 性能问题:给昂贵的 git 操作加缓存(文档“Caching for Performance”一节有带缓存 TTL 的示例)、减少外部命令调用。
边界与限制
- 脚本 stdout 只有第一行会被显示,多余行不会出现在 status line 里,调试日志请写到 stderr;
- 脚本会被高频调用(刷新上限每 300ms 一次),git status 类昂贵操作建议加缓存;
type目前只有"command"可选,没有其他类型可用;- 文档示例中的路径(如
/Users/you/...)是演示占位内容,落地时替换为自己的真实目录,其余字段名和命令不要改动。
完整字段清单、六种语言各异的示例脚本和调试技巧都在 STATUSLINE_GUIDE.md 中,可继续查阅。
【免费下载链接】claude-code-templatesCLI tool for configuring and monitoring Claude Code项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-templates
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考