Skip to content

Claude Code 和 Codex 终端状态栏配置:模型、额度、上下文实时常驻,告别 Token 盲用断供

用 AI CLI 干活最怕”盲用”——Agent 自动化跑任务,却不知道 5h 窗口、周额度、上下文还剩多少,突然断供,工作被迫停下、进度直接停摆。其实这些信息 AI CLI 本身都能给,只是默认没显示。本期在终端底部常驻一行实时用量(模型 / 5h / 周额度 / 上下文),覆盖 Codex CLIClaude Code(含单账号 / 多账号);方法只读 stdin、不联网、不调任何非官方接口,最稳。

  • Codex CLI 内置状态栏(零脚本)
  • Claude Code 单账号:脚本 + 注册 settings.json
  • 多账号:CLAUDE_CONFIG_DIR 隔离 + 复制脚本各自注册
  • 重启验证账号标识与配色

  • Codex CLI:自带状态栏,零脚本,无需额外准备
  • Claude Code ≥ v2.1.80rate_limits 字段从该版本起原生进入 stdin,低版本取不到额度;先用 claude --version 确认
  • jq:Claude Code 方案用它解析 stdin 的 JSON,需先安装(见第二步)

第一步:Codex CLI 开启内置状态栏(零脚本,最简单)

Section titled “第一步:Codex CLI 开启内置状态栏(零脚本,最简单)”

Codex 自带状态栏,用内置 /statusline 命令勾选即可,不需要任何脚本

操作

  1. 在 Codex 会话里输入:
/statusline
  1. 弹出多选 picker,用 ↑↓ 移动、空格 勾选、Enter 确认。 推荐勾选:
  • Model with reasoning(模型 + 推理等级)
  • Context(上下文用量)
  • Rate limits(5h / weekly 额度)
  • current-dir(当前目录)
  1. 确认后底部立即生效,配置自动写入 ~/.codex/config.tomltui.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,先装好。

操作

Terminal window
# macOS
brew install jq
# Ubuntu
sudo apt update && sudo apt install -y jq

验证

Terminal window
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
fi
fi
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')"

加执行权限:

Terminal window
chmod +x ~/.claude/statusline-command.sh
字段作用
.model.display_name当前模型名,取不到回退为 Claude
.rate_limits.five_hour.used_percentage5h 窗口已用百分比
.rate_limits.seven_day.used_percentage周额度已用百分比
.context_window.used_percentage上下文占用百分比
.rate_limits.five_hour.resets_at5h 窗口重置时间戳,用来算倒计时

验证:见「常见问题 · 怎么不重启就测试脚本能不能跑」,可先手动喂一段假 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:创建第二个账号的配置目录

Terminal window
mkdir -p ~/.claude2

操作 B:在 shell 配置里定义 claude2 启动命令

打开 ~/.zshrc(macOS / zsh 用户)或 ~/.bashrc(bash 用户),追加:

Terminal window
# 第二个 Claude 账号(独立配置目录)
claude2() {
CLAUDE_CONFIG_DIR=~/.claude2 claude "$@"
}

💡 为什么用 function 不用 alias? alias 不能携带「前置环境变量 + 透传参数」的组合写法。function 既能设环境变量,又能用 "$@" 把后面的参数原样传给真命令,更稳。

操作 C:让配置生效

Terminal window
source ~/.zshrc # 或 source ~/.bashrc

操作 D:首次登录第二个账号

Terminal window
claude2

首次启动会进入登录流程,按提示用第二个账号登录即可。完成后这个账号的凭据存在 ~/.claude2/,和 ~/.claude/ 的第一个账号完全隔离。

验证

Terminal window
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 -> claude2
cfg="${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
fi
fi
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')"

加执行权限:

Terminal window
chmod +x ~/.claude/statusline-command.sh
字段作用
cfg=${CLAUDE_CONFIG_DIR:-$HOME/.claude}取当前实例的配置目录,未设则默认 ~/.claude
acct=$(basename ...); acct=${acct#.}由目录名推断账号名(~/.claude2claude2
palette + cksum 哈希按账号名取稳定颜色,同名永远同色、不同名尽量不撞色

第七步:复制脚本到第二账号目录并各自注册

Section titled “第七步:复制脚本到第二账号目录并各自注册”

操作 1:复制脚本到第二个账号目录

Terminal window
mkdir -p ~/.claude2
cp ~/.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)账号显示名想自定义(不用目录名)?”

将脚本中这两行:

Terminal window
cfg="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"
acct=$(basename "$cfg"); acct=${acct#.}

替换为:

Terminal window
case "$CLAUDE_CONFIG_DIR" in
*claude2) acct="工作号" ;;
*) acct="个人号" ;;
esac

  • Codex/statusline 勾选即可,零脚本。
  • Claude Code 单账号:一段 30 行 bash + settings.json 三行配置。
  • Claude Code 多账号:脚本不变,复制到每个 CLAUDE_CONFIG_DIR 目录,账号标识自动区分。

⚠️ 免责声明:本教程仅供技术学习与网络安全研究交流,请遵守您所在国家/地区的相关法律法规及目标平台的服务条款,切勿用于任何违法用途。