Claude Code 和 Codex 终端状态栏配置:模型、额度、上下文实时常驻,告别 Token 盲用断供
视频主要目标
Section titled “视频主要目标”用 AI CLI 干活最怕”盲用”——Agent 自动化跑任务,却不知道 5h 窗口、周额度、上下文还剩多少,突然断供,工作被迫停下、进度直接停摆。其实这些信息 AI CLI 本身都能给,只是默认没显示。本期在终端底部常驻一行实时用量(模型 / 5h / 周额度 / 上下文),覆盖 Codex CLI 与 Claude Code(含单账号 / 多账号);方法只读 stdin、不联网、不调任何非官方接口,最稳。
视频内容大纲
Section titled “视频内容大纲”- Codex CLI 内置状态栏(零脚本)
- Claude Code 单账号:脚本 + 注册 settings.json
- 多账号:CLAUDE_CONFIG_DIR 隔离 + 复制脚本各自注册
- 重启验证账号标识与配色
- Codex CLI:自带状态栏,零脚本,无需额外准备
- Claude Code ≥ v2.1.80:
rate_limits字段从该版本起原生进入 stdin,低版本取不到额度;先用claude --version确认 - jq:Claude Code 方案用它解析 stdin 的 JSON,需先安装(见第二步)
第一步:Codex CLI 开启内置状态栏(零脚本,最简单)
Section titled “第一步:Codex CLI 开启内置状态栏(零脚本,最简单)”Codex 自带状态栏,用内置 /statusline 命令勾选即可,不需要任何脚本。
操作:
- 在 Codex 会话里输入:
/statusline- 弹出多选 picker,用
↑↓移动、空格勾选、Enter确认。 推荐勾选:
- Model with reasoning(模型 + 推理等级)
- Context(上下文用量)
- Rate limits(5h / weekly 额度)
- current-dir(当前目录)
- 确认后底部立即生效,配置自动写入
~/.codex/config.toml的tui.status_line。
验证:确认后底部立即出现类似一行:
gpt-5.5 xhigh · ~/projects/demo · Context 12% · 5h 38% · weekly 22%⚠️ 局限:内置版不能自定义颜色 / 进度条 / 标签,也不支持外部脚本(社区一直在催,官方还没开放)。想要丰富效果,目前只能等 Codex 支持「命令式状态栏」;日常够用就用内置版。
第二步:安装 jq(Claude Code 方案前置)
Section titled “第二步:安装 jq(Claude Code 方案前置)”Claude Code 支持 statusLine 外部命令——跑一个脚本,把 stdin 收到的 JSON 解析后输出一行。我们写一个轻量脚本:纯读 stdin、不联网、不调任何非官方接口,最稳。脚本用 jq 解析 JSON,先装好。
操作:
# macOSbrew install jq
# Ubuntusudo apt update && sudo apt install -y jq验证:
jq --version能打印版本号(如 jq-1.7)即可。
第三步:创建 Claude Code 状态栏脚本(单账号)
Section titled “第三步:创建 Claude Code 状态栏脚本(单账号)”最终底部效果:
[Opus 4.8] | 5h 28% (3h12m) | week 3% | ctx 0%- 颜色按用量预警:🟢 <50% / 🟡 50–80% / 🔴 >80%
- 括号
(3h12m)是 5h 窗口距重置剩余时间
操作:新建 ~/.claude/statusline-command.sh,粘贴以下内容:
#!/usr/bin/env bash# Claude Code statusline:仅读 stdin(不联网)# 显示:[模型] | 5h 额度 (重置倒计时) | week 额度 | ctx 上下文# 颜色:绿<50% / 黄50-80% / 红>80%
input=$(cat)
model=$(printf '%s' "$input" | jq -r '.model.display_name // "Claude"')five_h=$(printf '%s' "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')week=$(printf '%s' "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')ctx=$(printf '%s' "$input" | jq -r '.context_window.used_percentage // 0')reset_ts=$(printf '%s' "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
RESET=$'\033[0m'; DIM=$'\033[2m'
color_for() { local v=$1; [ -z "$v" ] && { printf '%s' "$DIM"; return; }; v=${v%.*} if [ "$v" -ge 80 ]; then printf '\033[31m' elif [ "$v" -ge 50 ]; then printf '\033[33m' else printf '\033[32m'; fi}fmt_pct() { local v=$1 label=$2 if [ -z "$v" ]; then printf '%s%s --%s' "$DIM" "$label" "$RESET" else printf '%s%s %.0f%%%s' "$(color_for "$v")" "$label" "$v" "$RESET"; fi}
reset_str=""if [ -n "$reset_ts" ] && [ "$reset_ts" != "null" ]; then diff=$(( reset_ts - $(date +%s) )) if [ "$diff" -gt 0 ]; then h=$(( diff/3600 )); m=$(( (diff%3600)/60 )) if [ "$h" -gt 0 ]; then reset_str=$(printf ' %s(%dh%dm)%s' "$DIM" "$h" "$m" "$RESET") else reset_str=$(printf ' %s(%dm)%s' "$DIM" "$m" "$RESET"); fi fifi
printf '%s[%s]%s | %s%s | %s | %s' \ "$DIM" "$model" "$RESET" \ "$(fmt_pct "$five_h" '5h')" "$reset_str" \ "$(fmt_pct "$week" 'week')" \ "$(fmt_pct "$ctx" 'ctx')"加执行权限:
chmod +x ~/.claude/statusline-command.sh| 字段 | 作用 |
|---|---|
.model.display_name | 当前模型名,取不到回退为 Claude |
.rate_limits.five_hour.used_percentage | 5h 窗口已用百分比 |
.rate_limits.seven_day.used_percentage | 周额度已用百分比 |
.context_window.used_percentage | 上下文占用百分比 |
.rate_limits.five_hour.resets_at | 5h 窗口重置时间戳,用来算倒计时 |
验证:见「常见问题 · 怎么不重启就测试脚本能不能跑」,可先手动喂一段假 JSON 验证脚本能打印彩色行。
第四步:注册脚本到 settings.json 并重启
Section titled “第四步:注册脚本到 settings.json 并重启”操作:编辑 ~/.claude/settings.json,加入 statusLine 段(如已有别的配置,只合并这一项):
{ "statusLine": { "type": "command", "command": "bash ~/.claude/statusline-command.sh", "padding": 0 }}重启 Claude Code,底部出现实时用量行,完成。
验证:底部出现 [模型] | 5h .. | week .. | ctx .. 一行即成功。
💡 刚启动显示
5h --/week --是正常的:rate_limits是异步拉取,发一条消息、等回完后状态栏就有数据了。
第五步:(可选)用 CLAUDE_CONFIG_DIR 隔离多账号
Section titled “第五步:(可选)用 CLAUDE_CONFIG_DIR 隔离多账号”如果你只用一个账号,到第四步就结束了;需要多账号区分的往下走。 如果你已经配好了多账号隔离,跳到第六步。
通过 CLAUDE_CONFIG_DIR 隔离多个账号,例如:
~/.claude:通过命令claude启动 → 显示(claude)~/.claude2:通过命令claude2启动 → 显示(claude2)
目标:每个账号底部显示带账号标识的状态栏,颜色不同,一眼区分。最终效果:
(claude) [Opus 4.8] | 5h 28% (3h12m) | week 3% | ctx 0% ← 品红前缀(claude2) [Opus 4.8] | 5h 65% (2h05m) | week 41% | ctx 12% ← 蓝色前缀✅ 用量天然按账号区分:每个实例只登录自己的账号,stdin 里的
rate_limits就是该账号的数据,无需额外处理。
📌 原理:
CLAUDE_CONFIG_DIR环境变量决定 Claude Code 从哪个目录读凭据、settings、历史。把它指向不同目录,就能让多个账号互不干扰,登录态、额度、对话历史完全独立。
操作 A:创建第二个账号的配置目录
mkdir -p ~/.claude2操作 B:在 shell 配置里定义 claude2 启动命令
打开 ~/.zshrc(macOS / zsh 用户)或 ~/.bashrc(bash 用户),追加:
# 第二个 Claude 账号(独立配置目录)claude2() { CLAUDE_CONFIG_DIR=~/.claude2 claude "$@"}💡 为什么用 function 不用 alias? alias 不能携带「前置环境变量 + 透传参数」的组合写法。function 既能设环境变量,又能用
"$@"把后面的参数原样传给真命令,更稳。
操作 C:让配置生效
source ~/.zshrc # 或 source ~/.bashrc操作 D:首次登录第二个账号
claude2首次启动会进入登录流程,按提示用第二个账号登录即可。完成后这个账号的凭据存在 ~/.claude2/,和 ~/.claude/ 的第一个账号完全隔离。
验证:
ls ~/.claude/.credentials.json # 第一个账号凭据ls ~/.claude2/.credentials.json # 第二个账号凭据两个文件都存在 = 隔离成功。之后:输入 claude → 第一个账号,输入 claude2 → 第二个账号。
第六步:创建多账号版状态栏脚本
Section titled “第六步:创建多账号版状态栏脚本”多账号版在单账号版基础上多了一件事:从 CLAUDE_CONFIG_DIR 目录名推断账号名,并按名字哈希取一个稳定颜色作前缀。
操作:新建 ~/.claude/statusline-command.sh(仅这一处),内容如下:
#!/usr/bin/env bash# Claude Code statusline(多账号):仅读 stdin(不联网)# 显示:(账号) [模型] | 5h 额度 (重置倒计时) | week 额度 | ctx 上下文# 账号名由 CLAUDE_CONFIG_DIR 目录名推断:~/.claude -> claude, ~/.claude2 -> claude2
input=$(cat)
model=$(printf '%s' "$input" | jq -r '.model.display_name // "Claude"')five_h=$(printf '%s' "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')week=$(printf '%s' "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')ctx=$(printf '%s' "$input" | jq -r '.context_window.used_percentage // 0')reset_ts=$(printf '%s' "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
RESET=$'\033[0m'; DIM=$'\033[2m'; BOLD=$'\033[1m'
# 账号名:~/.claude -> claude, ~/.claude2 -> claude2cfg="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"acct=$(basename "$cfg"); acct=${acct#.}
# 账号配色:按名字哈希取稳定颜色(同名永远同色)palette=(36 35 32 33 34 31 96 95)sum=$(printf '%s' "$acct" | cksum | cut -d' ' -f1)acct_color=$'\033['${palette[$(( sum % ${#palette[@]} ))]}'m'
color_for() { local v=$1; [ -z "$v" ] && { printf '%s' "$DIM"; return; }; v=${v%.*} if [ "$v" -ge 80 ]; then printf '\033[31m' elif [ "$v" -ge 50 ]; then printf '\033[33m' else printf '\033[32m'; fi}fmt_pct() { local v=$1 label=$2 if [ -z "$v" ]; then printf '%s%s --%s' "$DIM" "$label" "$RESET" else printf '%s%s %.0f%%%s' "$(color_for "$v")" "$label" "$v" "$RESET"; fi}
reset_str=""if [ -n "$reset_ts" ] && [ "$reset_ts" != "null" ]; then diff=$(( reset_ts - $(date +%s) )) if [ "$diff" -gt 0 ]; then h=$(( diff/3600 )); m=$(( (diff%3600)/60 )) if [ "$h" -gt 0 ]; then reset_str=$(printf ' %s(%dh%dm)%s' "$DIM" "$h" "$m" "$RESET") else reset_str=$(printf ' %s(%dm)%s' "$DIM" "$m" "$RESET"); fi fifi
printf '%s%s(%s)%s %s[%s]%s | %s%s | %s | %s' \ "$BOLD" "$acct_color" "$acct" "$RESET" \ "$DIM" "$model" "$RESET" \ "$(fmt_pct "$five_h" '5h')" "$reset_str" \ "$(fmt_pct "$week" 'week')" \ "$(fmt_pct "$ctx" 'ctx')"加执行权限:
chmod +x ~/.claude/statusline-command.sh| 字段 | 作用 |
|---|---|
cfg=${CLAUDE_CONFIG_DIR:-$HOME/.claude} | 取当前实例的配置目录,未设则默认 ~/.claude |
acct=$(basename ...); acct=${acct#.} | 由目录名推断账号名(~/.claude2 → claude2) |
palette + cksum 哈希 | 按账号名取稳定颜色,同名永远同色、不同名尽量不撞色 |
第七步:复制脚本到第二账号目录并各自注册
Section titled “第七步:复制脚本到第二账号目录并各自注册”操作 1:复制脚本到第二个账号目录
mkdir -p ~/.claude2cp ~/.claude/statusline-command.sh ~/.claude2/statusline-command.sh两个目录各放一份,内容完全一样;账号标识靠运行时的
CLAUDE_CONFIG_DIR自动区分。
操作 2:两个 settings.json 各自注册
~/.claude/settings.json:
{ "statusLine": { "type": "command", "command": "bash ~/.claude/statusline-command.sh", "padding": 0 }}~/.claude2/settings.json:
{ "statusLine": { "type": "command", "command": "bash ~/.claude2/statusline-command.sh", "padding": 0 }}第八步:重启两个账号验证效果
Section titled “第八步:重启两个账号验证效果”验证:
- 用
claude启动 → 底部显示(claude)+ 品红前缀 - 用
claude2启动 → 底部显示(claude2)+ 蓝色前缀
两个实例前缀颜色不同、账号名正确,即多账号配置成功。
1)底部一直显示 5h -- / week -- 不变
Section titled “1)底部一直显示 5h -- / week -- 不变”原因:rate_limits 由 Claude Code 异步拉取,新会话刚启动时数据未就绪。
解决:发一条消息、等回完,状态栏会自动刷新出数值。
2)账号显示名想自定义(不用目录名)?
Section titled “2)账号显示名想自定义(不用目录名)?”将脚本中这两行:
cfg="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"acct=$(basename "$cfg"); acct=${acct#.}替换为:
case "$CLAUDE_CONFIG_DIR" in *claude2) acct="工作号" ;; *) acct="个人号" ;;esac- Codex:
/statusline勾选即可,零脚本。 - Claude Code 单账号:一段 30 行 bash +
settings.json三行配置。 - Claude Code 多账号:脚本不变,复制到每个
CLAUDE_CONFIG_DIR目录,账号标识自动区分。
⚠️ 免责声明:本教程仅供技术学习与网络安全研究交流,请遵守您所在国家/地区的相关法律法规及目标平台的服务条款,切勿用于任何违法用途。