
1. 为什么要在 Claude Code 里加一条 statusLineClaude Code 用久了会遇到一个很具体的困扰一个 session 里聊到几十轮之后模型开始记不住前面说过的约束明明第一轮就交代过的命名规范、目录结构到后面又给你改回去。这时候要么执行/compact压缩上下文要么干脆重开一个 session 重新交代需求。问题是——你根本不知道现在到底该不该压缩因为界面上看不到当前上下文用了多少、token 涨到哪了。statusLine就是解决这个看不见的功能。它允许你在 Claude Code 界面底部固定一行自定义输出把当前模型名、工作目录、git 分支、上下文占用百分比、输入输出 token 数全部实时显示出来。这样你一眼就能判断现在 19% 还很宽裕继续聊涨到 80% 以上就该/compact或者开新 session 了。这篇聚焦的是~/.claude/settings.json里的statusLine配置给出可直接复制的 JSON 片段和一段 Python 状态栏脚本然后演示重启会话后逐项核对状态栏是否随模型切换、token 消耗实时刷新。适合已经在用 Claude Code、想把它调得更顺手的人。核心检索词就是 Claude Code statusLine 配置、token 用量显示、session 信息展示这几个。我试过把状态栏做成纯 shell 的也试过用 Node 脚本最后发现 Python 单行内联最省事——不用额外装文件直接塞进 settings.json 就能跑跨机器同步配置也方便。下面按先配环境、再写状态栏、最后验证的顺序来。2. 前置准备settings.json 的位置与 env 配置在动 statusLine 之前得先把 Claude Code 调用哪个模型这件事定下来因为状态栏第一项显示的就是模型名它读的是会话实际使用的模型。~/.claude/settings.json是 Claude Code 的用户级配置文件Windows 下对应C:\Users\你的用户名\.claude\settings.jsonmacOS/Linux 下是~/.claude/settings.json。如果这个文件不存在直接新建一个即可。配置里最关键的是env段。Claude Code 通过环境变量决定请求发往哪个兼容 Anthropic 协议的端点、用哪个模型。下面是我当前在用的结构把模型换成了 DeepSeek 系列你可以按自己实际接入的服务替换ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN{ env: { ANTHROPIC_BASE_URL: https://api.deepseek.com/anthropic, ANTHROPIC_AUTH_TOKEN: 你的 API Key, ANTHROPIC_MODEL: deepseek-v4-pro[1m], ANTHROPIC_DEFAULT_OPUS_MODEL: deepseek-v4-pro[1m], ANTHROPIC_DEFAULT_SONNET_MODEL: deepseek-v4-pro[1m], ANTHROPIC_DEFAULT_HAIKU_MODEL: deepseek-v4-flash[1m], CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: 1, CLAUDE_CODE_EFFORT_LEVEL: max } }这里几个字段值得说清楚。ANTHROPIC_MODEL是主模型ANTHROPIC_DEFAULT_OPUS_MODEL/SONNET/HAIKU分别对应 Claude Code 内部按任务复杂度分派的三档模型——比如它做轻量补全时会走 Haiku 档所以我把 Haiku 指到了更便宜的 flash 版本。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC设为 1 可以关掉一些非必要的遥测请求减少干扰。CLAUDE_CODE_EFFORT_LEVEL设成 max 是让它在推理上多花点力气。如果你用的是 TaoToken 这类聚合接入把ANTHROPIC_BASE_URL换成对应的 API 地址、ANTHROPIC_AUTH_TOKEN换成在控制台生成的 Key 就行模型 ID 按平台文档填。配置完 env 先别急着加 statusLine建议先跑一次claude确认能正常对话否则状态栏里模型名会显示成?你会分不清是脚本问题还是接入问题。注意ANTHROPIC_AUTH_TOKEN是明文存在本地文件里的别把这个 settings.json 提交到公开仓库。团队共享时用环境变量注入或者单独的密钥管理不要直接贴 Key。env 确认无误后再往同一个 JSON 里追加statusLine和enabledPlugins两段。顺序上建议 env 在前statusLine 在后方便阅读。接下来就是核心的状态栏脚本。3. 可复制的 statusLine 配置与脚本statusLine的机制是Claude Code 每次刷新界面时把当前会话的上下文信息以 JSON 形式通过 stdin 喂给你的命令你的命令往 stdout 打印一行字符串这行字符串就显示在底部。所以脚本要做的事就是解析 stdin 的 JSON拼出想要的格式。先看最终效果长这样deepseek-v4-pro[1m] | enterprise_entry_ana (master) | █░░░░░░░░░ 19% | ↑1155.2k ↓76.6k tokens从左到右依次是模型显示名、当前目录名、git 分支、上下文占用进度条、累计输入 token、累计输出 token。下面是可以直接粘进~/.claude/settings.json的完整片段{ statusLine: { type: command, command: python3 -c \\nimport json, sys, os, subprocess\nraw sys.stdin.read().strip()\nd json.loads(raw) if raw else {}\nmodel d.get(model, {}).get(display_name, ?)\ncwd d.get(cwd, )\npath os.path.basename(cwd) if cwd else ?\nbranch \ntry:\n r subprocess.run([git, -C, cwd, branch, --show-current], capture_outputTrue, textTrue, timeout2)\n branch r.stdout.strip()\nexcept:\n pass\nctx d.get(context_window, {}).get(used_percentage, 0)\nbar_w 10\nfilled int(ctx / 100 * bar_w) if ctx else 0\nbar █ * filled ░ * (bar_w - filled)\ntok_in d.get(context_window, {}).get(total_input_tokens, 0)\ntok_out d.get(context_window, {}).get(total_output_tokens, 0)\ndef fmt(n):\n if n 1000:\n return f{n/1000:.1f}k\n return str(n)\nprint(f{model} | {path} ({branch}) | {bar} {ctx}% | ↑{fmt(tok_in)} ↓{fmt(tok_out)} tokens)\n\ }, enabledPlugins: { frontend-designclaude-plugins-official: true } }脚本逻辑拆开看sys.stdin.read()拿到 Claude Code 传入的 JSONd.get(model, {}).get(display_name)取模型名d.get(cwd)取当前工作目录再用os.path.basename只留最后一段目录名git 分支用subprocess调git branch --show-current加了 2 秒超时防止卡住context_window.used_percentage是上下文占用百分比用它算出 10 格的进度条total_input_tokens和total_output_tokens是累计 token用fmt函数把超过 1000 的转成k单位。几个容易踩的点提前说。第一python3在部分 Windows 环境里叫python如果报 command not found把命令开头的python3换成python。第二JSON 里内嵌的 Python 代码用了\n换行粘贴时确保这些转义没被编辑器吃掉。第三进度条用的█和░是 Unicode 字符终端字体不支持会显示成方块换成#和-也行。提示如果你不想把长脚本塞进 JSON可以把 Python 存成~/.claude/statusline.py然后 command 写成python3 ~/.claude/statusline.py可读性和可维护性都更好改脚本不用动 settings.json。配置保存后Claude Code 需要重启会话才会重新读取 settings.json。重启后状态栏应该立刻出现。如果没出现先检查 JSON 是否合法——用python3 -m json.tool ~/.claude/settings.json验证一下格式错误会导致整份配置被忽略。4. 验证请求重启会话后逐项核对状态栏配好之后不能只看它显示了要逐项确认每个字段都跟着实际状态走。验证分三步先确认模型名正确再确认 token 会涨最后确认切换模型时状态栏跟着变。第一步重启 Claude Code。退出当前会话重新执行claude。进入后看底部状态栏第一段应该显示你ANTHROPIC_MODEL里配的模型名。如果显示?说明脚本没读到model.display_name多半是 Claude Code 版本较旧、传入的 JSON 结构里没有这个字段可以在脚本里加一行调试把raw直接打印出来看实际结构。第二步制造 token 消耗。随便问一个需要读文件的问题比如让它读一个几百行的源码文件并总结。问完之后观察状态栏的↑和↓数字——输入 token 会因为把文件内容塞进上下文而明显上涨输出 token 随回答长度增加。多问几轮数字应该持续累加而不是重置。同时进度条百分比也会往上走这就是判断该不该 /compact的直接依据。第三步验证模型切换。Claude Code 支持在会话里用/model命令切换模型。切到另一个模型后状态栏第一段应该立刻变成新模型名。这一步能验证脚本读的是实时会话状态而不是启动时的快照。如果你配了 Haiku 档走 flash 模型可以在触发轻量任务时观察是否短暂显示 flash 的名字。实测下来token 数字的刷新是跟着每次请求完成的不是每敲一个字就变所以问完等回答结束再看最准。进度条百分比同理。如果你发现数字长时间不动先确认是不是在等待模型响应而不是脚本坏了。注意context_window里的 token 是当前 session 的累计值不是账户余额。想看账户额度得去对应平台的控制台状态栏只反映这个会话消耗了多少上下文。验证通过后你就有了一个能实时反映 session 健康度的状态栏。接下来把常见报错整理一下方便你出问题时快速定位。5. 本篇常见报错排查状态栏这类配置出问题症状往往很隐蔽——要么整行不显示要么显示一半。下面按真实遇到过的报错逐条对照。状态栏完全不显示。最常见原因是 settings.json 不是合法 JSON。Claude Code 解析失败会静默忽略整份配置env 和 statusLine 一起失效。用python3 -m json.tool ~/.claude/settings.json检查报错行号就是问题所在。另一个原因是没重启会话配置是启动时读的。报local proxy failed或连接类错误。这类通常和 statusLine 无关而是 env 里的ANTHROPIC_BASE_URL填错或服务不可达。先确认地址能通再确认ANTHROPIC_AUTH_TOKEN没写错。如果返回 401就是 Key 无效或过期去平台控制台重新生成一个换上。状态栏显示?而不是模型名。说明脚本没从 stdin JSON 里取到model.display_name。不同 Claude Code 版本传入的字段名可能不同临时把脚本改成print(raw)把原始 JSON 打出来看实际字段叫什么再改取值路径。报reading choices或响应解析失败。这多半是接入端点返回的格式和 Anthropic 协议不完全兼容属于模型接入层的问题不是 statusLine 的锅。检查ANTHROPIC_BASE_URL是否指向了正确的兼容端点模型 ID 是否拼写正确。git 分支显示为空。如果当前目录不是 git 仓库git branch --show-current返回空脚本里已经用 try/except 兜住了不会报错只是括号里没内容。这是预期行为不用管。token 数字一直是 0。检查 Claude Code 版本是否支持context_window字段。旧版本可能不传这个对象脚本里.get(context_window, {})会返回空字典取出来就是 0。升级到较新版本即可。OAuth 相关报错。如果你用的是需要 OAuth 登录的接入方式token 过期会报认证失败。重新走一次登录流程或者改用 API Key 方式接入避免会话中途掉线。排查顺序建议是先验 JSON 合法性再看 env 能否正常对话最后才怀疑 statusLine 脚本本身。因为 statusLine 依赖会话能正常跑起来接入层不通的话状态栏也没数据可显示。6. 把状态栏用起来接入与后续状态栏配好只是第一步真正让它产生价值的是把它变成你的操作信号。我的习惯是进度条低于 50% 正常聊50% 到 75% 之间开始注意超过 75% 就主动/compact或者把当前任务收尾后开新 session。这样能避免聊到后面模型变笨才发现上下文已经爆了。如果你还没接入模型或者想换一个更稳定的接入端点可以去 TaoToken 控制台生成 API Key然后在env段里替换ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN。接入文档里有各协议的端点说明照着填即可。想先验证模型对话是否正常可以用模型对话页面发一条测试请求确认返回格式没问题再写进 settings.json。对于长期跑编码任务、需要频繁开 session 的场景Coding Plan 这类按量方案会比单次调用更划算配合状态栏的 token 显示你能清楚看到每个 session 花了多少方便做成本预估。最后留一个实用技巧把 statusLine 脚本单独存成文件然后在 settings.json 里只写python3 ~/.claude/statusline.py。这样你想加字段——比如显示当前时间、显示待办数量、显示 CPU 占用——直接改脚本就行不用每次动 JSON 转义。脚本里所有取值都用.get()带默认值任何一个字段缺失都不会让整行崩掉这是保证状态栏稳定的关键。