1. 为什么你的 Claude Code 状态栏值得折腾Claude Code 状态栏statusLine是终端底部那一行常驻信息默认只显示最基础的内容。它本质上是一个「命令钩子」Claude Code 每次刷新界面时会把当前会话的 JSON 数据通过标准输入喂给你指定的脚本脚本输出什么字符串状态栏就显示什么。这意味着你能把当前目录、Git 分支、模型名称、上下文占用率、Token 成本估算全部塞进这一行一眼掌握会话状态。适合谁刚接触 Claude Code、还在用默认界面的开发者经常在多个 Git 仓库之间切换、需要随时确认分支的人以及想监控上下文用量、避免聊到一半被截断的人。你不需要会写复杂 Shell只要会复制粘贴、改几个字段就能跑起来。整条链路只有三个文件~/.claude/settings.json负责告诉 Claude Code「用哪个脚本」~/.claude/statusline-command.sh负责解析 JSON 并拼装输出jq负责把 JSON 拆成一个个字段。理解这三者的分工后面所有排障都会变得简单。我试过把这套配置从 macOS 搬到 Windows 的 Git Bash只要 jq 装好、脚本权限给对行为完全一致。下面从零开始一步步交付可直接复制的配置和脚本。2. 前置准备安装 jq 并确认 Claude Code 环境状态栏脚本依赖jq解析 JSON这是整条链路里唯一需要额外安装的工具。先确认 Claude Code 本身能正常启动再装 jq。2.1 各系统安装 jqWindows 用户建议在 Git Bash 里操作。先装 Chocolatey 包管理器以管理员身份打开 PowerShell 执行Set-ExecutionPolicy Bypass -Scope Process -Force [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 iex ((New-Object System.Net.WebClient).DownloadString(https://community.chocolatey.org/install.ps1))装完关闭并重新打开所有终端然后在 Git Bash 里执行choco install jq -ymacOS 用户先确认有 Homebrew没有就装/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) brew install jqLinuxUbuntu/Debian直接sudo apt update sudo apt install jq -y2.2 验证安装三个系统统一执行jq --version输出类似jq-1.7.1就说明成功。如果提示command not found说明 PATH 没生效重开终端再试。2.3 确认 Claude Code 配置目录Claude Code 的用户级配置放在~/.claude/下。先创建目录已存在也不会报错mkdir -p ~/.claude这里有个容易踩的坑Windows 上~在 Git Bash 里指向C:\Users\你的用户名但如果你在 PowerShell 里操作路径展开规则不同。统一在 Git Bash 里执行命令能避免大部分路径问题。2.4 关于模型接入的说明状态栏里会显示模型名称和 Token 成本这些数据来自 Claude Code 会话本身。如果你需要配置模型接入端点可以在 TaoToken 的 API Keys 页面生成密钥接入文档里有 Base URL、Key、Model ID 三件套的完整说明。状态栏脚本只负责展示不参与请求转发所以接入配置和状态栏配置是两件独立的事先跑通状态栏再调接入也不迟。3. 可复制配置settings.json 与 jq 脚本实战这一节是核心交付两个文件状态栏脚本和 settings.json。脚本用 jq 从标准输入读取 JSON拼装成带颜色的字符串输出。3.1 编写 statusline-command.sh创建并编辑脚本文件nano ~/.claude/statusline-command.sh把下面整段粘贴进去。注意read -r input只读一次标准输入这是 Claude Code 传数据的方式#!/bin/bash # Claude Code 自定义状态栏脚本 # 依赖jqJSON 解析工具 read -r input # 解析核心字段字段缺失时给默认值 current_dir$(echo $input | jq -r .workspace.current_dir // unknown) model_name$(echo $input | jq -r .model.display_name // unknown) ctx_used$(echo $input | jq -r .context_window.used_percentage // 0) input_tokens$(echo $input | jq -r .context_window.total_input_tokens // 0) output_tokens$(echo $input | jq -r .context_window.total_output_tokens // 0) # ANSI 颜色码 BLUE\033[34m PURPLE\033[35m YELLOW\033[33m GREEN\033[32m RED\033[31m CYAN\033[36m RESET\033[0m # 上下文使用率分档着色 ctx_color$GREEN if (( $(echo $ctx_used 50 | bc -l) )); then ctx_color$YELLOW; fi if (( $(echo $ctx_used 80 | bc -l) )); then ctx_color$RED; fi # 成本估算按输入 $3/1M、输出 $15/1M 计算可按实际费率改 cost$(echo scale5; ($input_tokens * 0.000003) ($output_tokens * 0.000015) | bc) # Git 分支非仓库时静默 git_branch$(git rev-parse --abbrev-ref HEAD 2/dev/null || echo ) if [ -n $git_branch ]; then git_display${PURPLE} ${git_branch} ${RESET}| else git_display fi output${BLUE} ${current_dir} ${RESET}| ${git_display}${YELLOW} ${model_name} ${RESET}| ${ctx_color} Ctx: ${ctx_used}% ${RESET}| ${CYAN} \$${cost} ${RESET} echo -e $output保存退出CtrlO回车再CtrlX。3.2 赋予执行权限chmod x ~/.claude/statusline-command.sh3.3 配置 settings.json编辑配置文件nano ~/.claude/settings.json粘贴以下 JSON。statusLine是顶层字段type固定为commandcommand指向脚本路径{ statusLine: { type: command, command: bash ~/.claude/statusline-command.sh } }如果settings.json里已有其他配置比如 permissions、env把statusLine作为同级字段合并进去不要整个覆盖。JSON 不允许尾随逗号合并时特别注意。3.4 字段对照表JSON 字段含义脚本变量workspace.current_dir当前工作目录current_dirmodel.display_name模型显示名model_namecontext_window.used_percentage上下文占用百分比ctx_usedcontext_window.total_input_tokens累计输入 Tokeninput_tokenscontext_window.total_output_tokens累计输出 Tokenoutput_tokens想加字段就照着这个表扩展用jq -r .路径 // 默认值取值再拼进output字符串即可。4. 验证请求手动喂 JSON 看输出配置写完别急着重启 Claude Code先用一段模拟 JSON 手动跑脚本确认输出符合预期。4.1 构造测试输入bash ~/.claude/statusline-command.sh { workspace: {current_dir: /Users/yourname/project}, model: {display_name: Claude Sonnet 4.6}, context_window: { used_percentage: 45.5, total_input_tokens: 1000, total_output_tokens: 500 } }正常输出类似/Users/yourname/project | main | Claude Sonnet 4.6 | Ctx: 45.5% | $0.01050颜色在终端里会正常渲染复制到纯文本环境会看到转义码这是正常的。4.2 分档颜色验证把used_percentage改成65再跑一次Ctx部分应变黄改成85应变红。这一步能确认bc比较逻辑生效。如果系统没装bcctx_color判断会报错Ubuntu 上执行sudo apt install bc -y补上。4.3 在真实会话中生效退出并重新启动 Claude Code。状态栏底部会显示脚本输出。如果没变化先确认settings.json是合法 JSONjq . ~/.claude/settings.json能正常格式化输出说明 JSON 合法。再确认脚本路径和command字段完全一致。4.4 验证 Git 分支显示cd进任意 Git 仓库再启动 Claude Code状态栏应出现分支名。非 Git 目录下分支段自动隐藏这是脚本里2/dev/null加空值判断的效果。5. 本篇常见错排查401、local proxy failed 与脚本报错状态栏本身不发起网络请求但接入配置出错时会话数据可能异常间接影响状态栏显示。下面按真实报错逐条排查。5.1 状态栏完全空白先手动执行脚本看有没有报错bash ~/.claude/statusline-command.sh {}如果报jq: command not found回到第 2 节装 jq。如果报bc: command not found装 bc。如果脚本无输出检查read -r input是否被误删——少了这行$input为空所有字段都取默认值输出会退化成unknown。5.2 报 401 或鉴权失败这类错误来自模型接入层不是状态栏脚本。检查你的 API Key 是否有效、Base URL 是否配对。TaoToken 的接入文档里写明了 Base URL、Key、Model ID 三件套的填法逐项核对。401 通常是 Key 过期或复制时带了空格。5.3 local proxy failed这个报错说明本地代理配置有问题。检查环境变量里是否残留了HTTP_PROXY、HTTPS_PROXY指向一个已关闭的本地端口env | grep -i proxy如果有unset HTTP_PROXY HTTPS_PROXY后重开会话。状态栏脚本不依赖代理但会话请求失败会导致上下文数据不更新状态栏看起来像「卡住」。5.4 reading choices 相关报错reading choices通常出现在响应体解析阶段说明返回的不是预期 JSON 结构。先确认 Model ID 拼写正确再确认 Base URL 末尾没有多余斜杠。这类问题与状态栏无关但会让context_window字段拿不到值状态栏显示Ctx: 0%。5.5 OAuth 相关报错如果你用的是 OAuth 登录方式token 过期会报鉴权错误。重新登录一次即可。状态栏脚本读取的是会话内数据OAuth 失效时整个会话不可用状态栏自然也不刷新。5.6 颜色不生效确认终端支持 ANSI 颜色。Git Bash、iTerm2、macOS Terminal、Windows Terminal 都支持。如果输出里出现字面的\033[34m说明echo -e没生效检查脚本里是不是写成了echo而不是echo -e。5.7 脚本权限问题ls -l ~/.claude/statusline-command.sh看有没有x权限。没有就chmod x补上。Windows 上 Git Bash 的权限模型和 Linux 不同通常不影响但加上更保险。6. 长期使用与接入建议状态栏跑通后日常维护成本很低。跨机器迁移只需复制statusline-command.sh和settings.json两个文件新机器装好 jq、给脚本加执行权限即可。打包备份可以这样mkdir -p /tmp/claude-status-backup cp ~/.claude/statusline-command.sh /tmp/claude-status-backup/ cp ~/.claude/settings.json /tmp/claude-status-backup/新机器上反向复制回去chmod x后重启 Claude Code。如果你打算长期用 Claude Code 做编码和 Agent 任务Coding Plan 的额度模型比按量计费更可控状态栏里的成本估算也能帮你判断什么时候该切换方案。需要生成新的 API Key 时API Keys 页面可以直接创建。想先验证模型对话效果模型对话页面能快速试跑。接入细节以接入文档为准Base URL、Key、Model ID 三件套填对401 和 reading choices 这类报错基本不会出现。脚本里的成本费率是按示例写的实际费率以你使用的模型为准改cost那行的系数即可。上下文占用率超过 80% 变红是个实用信号看到红色就该考虑开新会话或压缩历史避免聊到一半被截断。