我做了一个 AI Token Dashboard:把 Claude Code、Codex、Gemini 等 AI 工具的 Token 消耗统一看清楚
项目地址:https://github.com/fengguanghuai/ai-token-dashboard
技术栈:Node.js / React / Vite / SQLite
关键词:AI Agent、Token 统计、本地看板、隐私优先、多工具用量分析
这两年 AI 编程工具越来越多:Claude Code、Codex CLI、Gemini CLI、OpenClaw、Hermes Agent……每个工具都很好用,但当我真的把它们放进日常工作流之后,很快遇到一个很现实的问题:
我到底用了多少 Token?钱主要花在哪个工具、哪个模型、哪个项目上?
很多平台会给账单,但账单往往是平台视角;我更想要的是一个面向个人工作流的视角:今天用了多少,本周和上周相比有什么变化,哪个项目最烧 Token,缓存命中率怎么样,哪些模型贡献了主要成本。
于是我做了这个项目:AI Token Dashboard。它不只是展示数字,更像是把一堆 AI 工具的使用痕迹整理成一份能“说话”的个人效率报告。

它解决什么问题?
如果你只用一个 AI 工具,Token 用量可能还比较好理解。但实际工作中,我们经常会同时使用多种工具:
- 用 Claude Code 做代码理解和复杂重构
- 用 Codex CLI 处理本地仓库任务
- 用 Gemini CLI 做一些长上下文或辅助分析
- 用 OpenClaw、Hermes Agent 组织更复杂的本地 Agent 流程
这些工具的数据分散在不同位置,格式也不一样。最后常见的结果是:工具越用越多,但自己对成本和使用结构越来越模糊。
AI Token Dashboard 的目标很简单:
把分散在本机的 AI 工具使用记录采集出来,统一写入本地 SQLite,然后用一个看板展示。
它更偏个人开发者、Agent 重度用户和本地自动化玩家,不是一个云端 SaaS。默认情况下,它只读取本机文件,不上传数据,不做遥测。
主看板:先看整体,再 drill down
主看板关注的是“现在发生了什么”。它会把一段时间内的 Token 消耗、费用、缓存、模型和来源统一展示出来。

目前主看板包含这些信息:
- 总 Token、Input、Output、Cache、Reasoning、估算费用
- 与上一周期对比的涨跌幅
- 每日 Token 使用趋势
- 不同工具来源占比
- Top 模型和费用分布
- 缓存命中率
- 设备、模型、来源筛选
- 一键触发本机采集
- CSV 导出
我比较喜欢的一点是,它不是只给一个总数,而是能回答更具体的问题:
- 最近 30 天主要是哪个工具在消耗 Token?
- 成本是不是集中在某几个模型?
- 缓存读占比高不高?
- 今天异常高,是哪个来源造成的?
- 多设备合并之后,哪台机器贡献了主要消耗?
这些问题如果只靠账单页面,很难直接看出来。
复盘页:把数据变成一份月度报告
除了主看板,我还做了一个 /review 复盘页。它更像一份适合阅读、打印或截图分享的报告。

复盘页会把数据组织成更叙事化的结构,比如:
- 本月用了多少 Token
- 花费了多少钱
- 最高单日是哪一天
- 最常用工具是什么
- 活跃项目有多少
- 日均费用是多少
相比主看板,复盘页不是为了频繁操作,而是为了阶段性回顾。比如月底看一眼:这个月我到底把 AI 用在了哪里?哪些项目真正消耗了上下文?成本是不是合理?
支持哪些数据源?
目前项目支持这些本地工具的数据采集:
| 工具 | 数据来源 |
|---|---|
| Claude Code | ~/.claude/projects/ 以及相关本地会话目录 |
| Codex CLI | ~/.codex/sessions/、~/.codex/archived_sessions/ |
| Gemini CLI | 本地 Gemini 会话记录 |
| Hermes Agent | ~/.hermes/state.db 或 $HERMES_HOME/state.db |
| OpenClaw | ~/.openclaw/agents/ |
采集逻辑是纯本地的。没有安装某个工具时,会自动跳过,不会影响其他数据源。
为什么强调本地优先?
AI 工具的会话记录里可能包含很多敏感上下文,比如项目路径、代码仓库名、文件结构、任务描述,甚至部分对话片段。
所以这个项目默认坚持几个原则:
- 本地读取:采集器直接读取本机日志文件
- 本地存储:数据写入
data/usage.sqlite - 默认不上传:除非主动配置 push,否则不会把数据发到远端
- 价格缓存本地化:正常采集使用仓库内置的 LiteLLM / OpenRouter 定价缓存
- 采集接口只允许本机触发:页面内采集接口限制 loopback 访问
如果你有多台机器,也可以把它部署成一个中心 hub,然后在其他设备上通过 token 推送采集结果。这是可选能力,不影响单机使用。
技术实现
项目整体比较轻量,没有引入复杂后端框架。
核心结构大概是这样:
▼text复制代码src/ ├── collect.mjs # 数据采集 CLI 入口 ├── dev.mjs # 开发模式:同时启动 API 与 Vite ├── server.mjs # HTTP 服务 + API ├── db.mjs # SQLite schema 与 upsert ├── pricing.mjs # 定价匹配与费用估算 ├── collectors/ # 各工具采集器 └── client/ ├── dashboard/ # 主看板 ├── review/ # 复盘页 └── shared/ # 共享工具函数
后端使用 Node.js 内置的 node:sqlite,前端是 React + Vite。采集器会把不同工具的原始日志规范化成统一结构:
- 日期
- 来源工具
- 模型
- Input tokens
- Output tokens
- Cache read tokens
- Cache creation tokens
- Reasoning tokens
- 估算费用
然后再写入 SQLite,前端通过 API 读取聚合数据。
快速开始
如果你想在本地跑起来,流程很直接:
▼bash复制代码git clone https://github.com/fengguanghuai/ai-token-dashboard.git cd ai-token-dashboard npm install npm run collect npm run build npm run serve
然后打开:
▼text复制代码http://localhost:4173 http://localhost:4173/review
开发模式可以直接运行:
▼bash复制代码npm run dev
它会同时启动 API 服务和 Vite 前端开发服务:
▼text复制代码http://localhost:4173 # API 服务 http://localhost:5173 # Vite 前端
多设备汇聚
如果你在多台电脑上使用 AI 工具,可以把其中一台作为中心节点:
▼bash复制代码INGEST_TOKEN="your-secret-token" npm run serve
其他设备采集后推送到中心节点:
▼bash复制代码npm run collect -- \ --device "my-laptop" \ --push http://your-hub-host:4173/api/ingest \ --token "your-secret-token"
中心节点会把多台机器的数据合并进同一个 SQLite,看板里可以按设备筛选。
我为什么觉得这个项目有用?
AI 编程工具的使用成本,不只是“花了多少钱”这么简单。更关键的是,它反映了我们的工作方式:
- 哪些项目最依赖 AI 辅助?
- 哪类任务消耗最多上下文?
- 是不是大量 Token 花在重复解释项目背景上?
- 缓存是否真的帮我们省了成本?
- 某个模型是不是明显更贵但收益不明显?
当这些数据被看见以后,很多优化才有抓手。
比如我可以根据看板发现:某些项目的 Token 消耗很集中,那就应该补充项目文档、上下文索引或 agent skill;如果缓存命中率很高,说明长会话和重复上下文确实被复用了;如果某个工具费用占比突然升高,就可以回头看那几天到底做了什么。
这也是我做这个 Dashboard 的核心原因:让 AI 使用从“感觉很频繁”变成“数据上可复盘”。
后续计划
后面我还想继续补几个方向:
- 支持更多 AI CLI / Agent 工具
- 增加更细的项目维度分析
- 做更清晰的成本异常提醒
- 增加按任务类型的归因
- 提供更适合长期归档的周报/月报导出
- 进一步对齐不同工具之间的 Token 统计口径
如果你也是 AI Agent 或 AI 编程工具的重度用户,欢迎试试这个项目,也欢迎提 issue 或 PR。
项目地址:
