如何为 claude-code-templates 编写自定义 status line 脚本并在 settings 中启用?
如何为 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、Opusworkspace.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 21; 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),仅供参考