惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Y
Y Combinator Blog
M
MIT News - Artificial intelligence
The Cloudflare Blog
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 司徒正美
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
C
Check Point Blog
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
V
V2EX
F
Fortinet All Blogs
B
Blog
大猫的无限游戏
大猫的无限游戏
N
Netflix TechBlog - Medium
B
Blog RSS Feed
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - hangox

如何给 Claude 中的网页做截图 AGP 8.0+ Publish idea 插件兼容 K2 模式 IDEA 不提示 gitlab-ci 字段问题 不要随便使用 npm 源加速站点 Xcode Format Swift 代码 idea Convert File To Kotlin File 多 Commit 问题 ApkList 源问题修复 BCM94360CS2 黑苹果 macOS Sonoma Wifi 不能开启修复 NginxProxyManager 数据库迁移记录 android ConcurrentModificationException 错误 Android Studio 插件分享——Gradle Utilities Android Studio 插件分享——Jadx Class Decompiler templete Android Studio 3.0 新特性 Android SpringAnimator初探 关于Android菜单上的记录 升级到 classpath 'com.android.tools.build:gradle:1.0.0-rc1 OnScrollListenerPro
Claude Code 自定义状态栏配置指南
hangox · 2026-03-16 · via 博客园 - hangox

基于 claude-hud 项目改造,调整了配色(莫兰迪色系)并增加了 API 模式支持。原项目也可以直接使用。

效果预览

状态栏显示在 Claude Code 终端底部,实时展示项目、Git、模型、费用和配额信息。

订阅模式(Claude Pro/Team 订阅用户):

➜ my-app git:(main) ✗ | ctx:45% | Opus 4.6 | $1.23/$5.67 (订阅) | 周:$42 | 月:$180 | 5h:32%@14:30 | 7d:15%@2.3d

API 模式(自建 API 或第三方中转):

➜ my-app git:(main) ✗ | ctx:45% | Opus 4.6 | $1.23/$5.67 (api.openai.com) | 周:$42 | 月:$180

各段含义

含义 示例
➜ my-app git:(main) ✗ 当前目录 + Git 分支 + 未提交更改标记 无更改时不显示 ✗
ctx:45% 上下文窗口已用百分比 ≥90% 变黄色警告
Opus 4.6 实际使用的模型(从 transcript 末尾读取) 而非配置的模型
$1.23/$5.67 (订阅) 今日 项目费用/总费用 + 来源标签 API 模式显示域名
周:$42 本周累计费用 两种模式
月:$180 本月累计费用 两种模式
5h:32%@14:30 5小时配额使用率 + 重置时间 仅订阅模式
7d:15%@2.3d 7天配额使用率 + 剩余天数 仅订阅模式

订阅模式 vs API 模式

脚本通过 ANTHROPIC_BASE_URL 环境变量自动判断模式:

  • 未设置 → 订阅模式:显示全部信息(费用 + 配额)
  • 已设置 → API 模式:显示费用(今日 + 周 + 月),标签为 API 域名,无配额信息

两种模式共有功能

  • 今日/周/月费用统计:通过 ccusage dailyccusage weeklyccusage monthly 获取(基于本地 transcript 文件,与模式无关)

订阅模式独有功能

  • OAuth 配额查询:从 macOS Keychain(Claude Code-credentials)或 ~/.claude/.credentials.json 读取 OAuth token,调用 https://api.anthropic.com/api/oauth/usage 获取 5 小时和 7 天配额使用率

API 模式行为

费用标签自动提取 ANTHROPIC_BASE_URL 的域名部分显示,例如:

  • ANTHROPIC_BASE_URL=https://api.openai.com/v1 → 显示 (api.openai.com)
  • ANTHROPIC_BASE_URL=https://my-proxy.com/anthropic → 显示 (my-proxy.com)

前置依赖

  1. Bun — TypeScript 运行时(必需)

    curl -fsSL https://bun.sh/install | bash
    
  2. ccusage(可选)— Claude Code 费用统计工具

    npm install -g ccusage
    

    未安装时费用相关段不显示,不影响其他功能。

安装步骤

1. 放置脚本

从 Gist 下载 statusline.ts~/.claude/statusline.ts

curl -fsSL https://gist.githubusercontent.com/hangox/09cdf644683f7301973d4b48b63a329d/raw/statusline.ts -o ~/.claude/statusline.ts

2. 配置 settings.json

~/.claude/settings.json 中添加:

{
  "statusLine": {
    "type": "command",
    "command": "/bin/sh -c 'PATH=\"$HOME/.bun/bin:$PATH\" bun \"$HOME/.claude/statusline.ts\"'"
  }
}

/bin/sh -c 包裹是为了将 bun 加入 PATH,避免 Claude Code 内部环境找不到 bun。

3. 重启 Claude Code

配置后重启即可生效。

工作原理

数据输入

Claude Code 在每次刷新状态栏时,通过 stdin 传入 JSON:

{
  "cwd": "/path/to/project",
  "transcript_path": "/path/to/transcript.jsonl",
  "model": { "id": "claude-opus-4-6", "display_name": "Opus 4.6" },
  "context_window": {
    "context_window_size": 200000,
    "used_percentage": 45.2,
    "current_usage": { "input_tokens": 50000, "output_tokens": 10000 }
  }
}

模型名检测

脚本不直接使用 stdin 中的 model 字段,而是读取 transcript_path 文件末尾 8KB,从最后一条 assistant 类型消息中提取实际使用的模型 ID,再通过内置映射表转为友好名称(如 claude-opus-4-6Opus 4.6)。

数据获取流程

main()
  │
  ├── 1. readStdin()              ← 读取 stdin JSON
  │
  ├── 2. Promise.all([...])       ← 并行执行以下四项:
  │     ├── getDailyData()        ← ccusage daily(spawnSync,立即完成)
  │     ├── getOAuthQuota()       ← Anthropic API(真正异步 fetch,仅订阅模式)
  │     ├── getWeeklyCost()       ← ccusage weekly(spawnSync,两种模式)
  │     └── getMonthlyCost()      ← ccusage monthly(spawnSync,两种模式)
  │
  └── 3. getGitInfo()             ← git 命令(同步,在 Promise.all 之后执行)

注意:daily/weekly/monthly 使用 spawnSync 同步执行,用 Promise.resolve() 包裹后放入 Promise.all 并不能真正并行。实际的并行效果仅体现在 OAuth fetch(真正异步)与同步调用之间。所有 spawnSync 调用单次超时 5 秒。

缓存策略

为避免频繁调用外部命令,脚本在 /tmp/ 下维护缓存文件:

缓存文件 有效期 数据 适用模式
cl_status_today.txt 60s 今日费用(项目+总计) 两种
cl_status_weekly.txt 300s 本周费用 两种
cl_status_monthly.txt 600s 本月费用 两种
cl_status_oauth.txt 180s OAuth 5h/7d 配额 仅订阅

缓存过期后自动重新获取;外部命令失败时静默跳过,不影响其他段显示。OAuth 请求失败(含 429 限流)时写入空占位缓存 {},避免在缓存有效期内反复重试。

自定义修改

  • 颜色:修改 const c 对象中的 ANSI 颜色码(支持 RGB,如莫兰迪色系)
  • 模型名映射:修改 MODEL_DISPLAY 对象添加新模型
  • 显示段:在 main() 中增删 segments.push(...) 调用
  • 缓存时间:调整 readCache() 第二个参数(秒)
  • 分隔符:修改最后 segments.join(" | ") 中的分隔字符串