纯本地、零上传的 Claude Code Token 用量可视化面板。 一个 Python 文件 + 一张 HTML 页面 + 一个 LaunchAgent,完事。
基于 ccusage 的数据源,在浏览器里看到按日/按周/按月/按模型的费用走势,以及今天每 15 分钟的实时 Token 消耗曲线(股票走势图风格)。所有数据来自本机 ~/.claude/projects/*.jsonl,无任何上传行为。
Claude Code 的 token 用量默认只能在 /cost 或 ccusage CLI 里看到。社区里也有 vibeusage 这类方案,但它会把用量 metadata 上传到第三方服务器(公开 profile / leaderboard)。如果你只想自己看看自己花了多少,没必要把数据送出去。
这个仓库就是为这种场景:
- ✅ 纯本地:解析本机 jsonl,零网络上传
- ✅ 零第三方 Python 库,只用标准库
- ✅ 零 Claude Code hook 改动(不碰
~/.claude/settings.json) - ✅ 费用数据由 ccusage 权威提供(定价表跟随 LiteLLM 上游)
- ✅ 日内 Token 曲线自己解析 jsonl,精度和 ccusage 对齐
- ✅ 单文件静态 HTML,打开即看;可选 LaunchAgent 自动刷新
| 区块 | 内容 |
|---|---|
| 顶部 4 卡 | 今日 / 本周 / 本月 / 累计 费用 + tokens |
| 今日实时 Token 走势 | 紫色折线:累计 tokens;绿色柱:每 15 分钟本档;红色虚线:当前时刻 |
| 每日费用(近 60 天) | 按日柱图 |
| 每周费用(近 16 周) | 按周柱图 |
| 每月费用 | 按月柱图 |
| 按模型费用 Top10 | 横向条形图,费用多的模型一目了然 |
| 明细表 | 每日逐行,可按列排序 |
所有柱子都有鼠标悬停提示,会显示对应时段或模型的具体数字。
- macOS(LaunchAgent 用);Linux 下脚本本身也能跑,只是 LaunchAgent 部分要改成 cron / systemd。
- Node.js 20+(装 ccusage 用)
- Python 3.10+(脚本本身,macOS / Homebrew 自带)
npm install -g ccusage
ccusage daily # 验证能看到数据mkdir -p ~/.claude/scripts
curl -o ~/.claude/scripts/claude-usage-report.py \
https://raw.githubusercontent.com/TZD666/ccusage-dashboard/main/claude-usage-report.pypython3 ~/.claude/scripts/claude-usage-report.py
open ~/Desktop/token-usage/index.html应当能看到完整面板,含今日实时曲线。
下载 plist 模板并把两处占位符替换成你的真实路径:
curl -o /tmp/agent.plist \
https://raw.githubusercontent.com/TZD666/ccusage-dashboard/main/com.example.claude-usage-report.plist
# __HOME__ -> $HOME (例如 /Users/alice)
# __PYTHON__ -> $(which python3)
sed -e "s|__HOME__|$HOME|g" \
-e "s|__PYTHON__|$(which python3)|g" \
/tmp/agent.plist > ~/Library/LaunchAgents/com.$USER.claude-usage-report.plist
# 同步修改 Label(可选,好处是 launchctl list 里好找)
sed -i '' "s|com.example.claude-usage-report|com.$USER.claude-usage-report|g" \
~/Library/LaunchAgents/com.$USER.claude-usage-report.plist
launchctl load ~/Library/LaunchAgents/com.$USER.claude-usage-report.plist加载后会立即生成一次 HTML,然后每 30 秒自动重生成。HTML 本身带 <meta http-equiv="refresh" content="30">,浏览器同步自动刷新。关终端、重启电脑都不会停。
python3 ~/.claude/scripts/claude-usage-report.pypython3 ~/.claude/scripts/claude-usage-report.py --watch 30python3 ~/.claude/scripts/claude-usage-report.py --refresh 30# 查看运行状态(应看到 label + 上次退出码 0)
launchctl list | grep claude-usage
# 停
launchctl unload ~/Library/LaunchAgents/com.$USER.claude-usage-report.plist
# 启
launchctl load ~/Library/LaunchAgents/com.$USER.claude-usage-report.plist
# 看日志
tail -f ~/Library/Logs/claude-usage-report.log| 路径 | 说明 |
|---|---|
~/Desktop/token-usage/index.html |
生成的面板,浏览器打开即看 |
~/Library/Logs/claude-usage-report.log |
LaunchAgent 运行日志 |
脚本顶部两行常量 OUTPUT_DIR / OUTPUT_FILE 可以自行改位置。
- 所有费用数字 来自
ccusage daily --offline --json,使用 ccusage 捆绑的 LiteLLM 定价表。你可以npm update -g ccusage更新定价。 - 今日实时曲线 直接解析
~/.claude/projects/**/*.jsonl里今天的消息,按 15 分钟分桶,用message.id去重,跳过isSidechain/ 非 assistant 消息。token 合计与 ccusage 一致(容忍因执行时差造成的几秒内的微小偏差)。 - 不涉及 Anthropic API 调用,这套监控本身不产生任何 token 开销。
- ❌ 不上传数据到任何服务器
- ❌ 不支持 Codex CLI / Gemini CLI / OpenCode(因为作者本人只用 Claude Code;想扩展欢迎 PR)
- ❌ 不做 public leaderboard / shareable profile
- ❌ 不改你任何 Claude Code 配置
| ccusage | vibeusage | 本仓库 | |
|---|---|---|---|
| 是否上传 | ❌ 否 | ✅ 是 | ❌ 否 |
| 覆盖 CLI | Claude / Codex | 7+ 种 | Claude |
| 形态 | CLI 表格 + 轻 dashboard | 本地 hook + 远端 dashboard | 本地静态 HTML |
| 日内实时 token 曲线 | 部分 (blocks --live TUI) |
有 | 有(15 min 分桶) |
| 依赖 | Node | Node + 账户 | Node (ccusage) + Python3 |
简而言之:ccusage 做采集,本仓库做可视化。
项目本体只有一个 Python 文件(~400 行,零第三方依赖)。主要入口:
load_intraday(bucket_min)— 扫 jsonl,按分钟分桶build_aggregates(daily_rows)— ccusage daily → 周/月/模型聚合svg_bar_chart/svg_hbar/svg_intraday_chart— 手写 SVG 渲染器(无 Chart.js 等 CDN 依赖,完全离线)render_html— 单文件模板generate_once— 一次生成的高层入口main— CLI +--watch守护模式
欢迎 Issue / PR。
MIT
觉得有用的话,欢迎 ⭐ Star · 作者 @TZD666