English · 中文
macOS 菜单栏 / Windows 系统托盘工具,展示 Claude CLI 的 每日 Token 用量、估算花费、按模型 / MCP / Skill 的调用统计。
技术栈:Tauri 2 + React + TypeScript(前端)/ Rust(数据层)。

⬡ 14.00M)| 用途 | 路径 |
|---|---|
| 会话日志(Token / 模型 / 工具调用) | ~/.claude/projects/**/*.jsonl |
| 用户 MCP 白名单 | ~/.claude.json → mcpServers + projects[*].mcpServers |
| 用户 Skill 白名单 | ~/.claude/skills/ 目录 |
| 模型价格 | 主:models.dev(裸模型名,匹配 Claude CLI 日志)→ 兜底:LiteLLM → 内置快照。缓存于 ~/Library/Caches/tokenscope/,24h 刷新,离线回退 |
message.id 去重(流式/重试会重复 usage);同一消息跨多行时合并其工具调用,token 只计一次input(未缓存) / cache(creation+read) / output;UI 默认把 cache 并入 In 显示,并单列「cached %」.↔p,如 glm-5.1⇄glm-5p1);models.dev 优先官方裸名价priced 标记,两源都查不到的模型只计 Token、UI 标注「暂无定价」mcp__<server>__* 且 server 在用户配置中 → MCP;Skill 调用(Skill 工具的 input.skill,或 /skill 斜杠命令)且在 skills 目录中 → Skill;其余忽略花费为按公开价格的估算;订阅用户应理解为「等效消费价值」。
每条 assistant 消息的 usage 给出四个互斥的 token 计数(同一 token 不会被重复统计):
| 阶段 | usage 字段 |
含义 | 单价(相对 input) |
|---|---|---|---|
| Input(未缓存) | input_tokens |
本轮新发送的提示词 token | 1× |
| Cache 写入 | cache_creation_input_tokens |
写入提示缓存的上下文 | 约 1.25× |
| Cache 命中(读) | cache_read_input_tokens |
从缓存重放的上下文 | 约 0.1×(便宜很多) |
| Output | output_tokens |
模型生成的 token | 约 5× |
Tokens(按周期对消息求和):
total = input + cache_creation + cache_read + output
# UI 展示: In = input + cache_creation + cache_read, Out = output, cached % = cache_read / total
Cost(每个阶段各按价格表里自己的单价计算):
cost = input × price.input
+ cache_creation × price.cache_creation
+ cache_read × price.cache_read # 缓存命中按折扣后的 read 单价计费
+ output × price.output
所以缓存命中不会按普通 input 计费,而是用专门(更便宜)的 cache_read 单价——这就是重度缓存场景下 token 量很大、花费却不高的原因。UI 只是把 cache 折进「In」做展示,计费始终按上面四个独立单价。
brew install --cask hdusy/tokenscope/tokenscope
安装后会自动清除隔离属性(cask 的 postflight 已内置 xattr -cr),首次直接打开即可,不会弹「Apple 无法验证」。
打开一次后即注册为登录项,之后每次开机自动在菜单栏运行。
升级:
brew update && brew upgrade --cask tokenscope
Tokenscope_*_universal.dmg(同时支持 Apple Silicon 与 Intel)bash
xattr -cr /Applications/Tokenscope.app && open /Applications/Tokenscope.app未签名是当前的已知限制。要彻底「双击直开」需 Apple Developer ID 签名 + 公证,见
PRD.md§6.4。
Tokenscope_*_x64-setup.exe⬡ 12.40M)Tokenscope · today 12.40M)pnpm install
pnpm tauri dev # 启动桌面 App(需要 Rust 工具链)
仅预览前端(用真实数据快照 public/dev-dashboard.json):
pnpm dev # http://localhost:1420
# 刷新快照:
cd src-tauri && cargo run --example dump > ../public/dev-dashboard.json
pnpm tauri build # macOS 产出 .app / .dmg,Windows 产出 .exe (NSIS),均位于 src-tauri/target/release/bundle/
分发见 PRD.md §6.3(macOS 推荐 Homebrew Cask;.dmg / .exe 直接下载建议代码签名 + 公证)。
src/ React 前端
data.ts 类型 + Tauri 桥 + 主题 + 格式化
charts.tsx 图表原语(柱状/甜甜圈/sparkline/热力图/分段控件)
App.tsx 主面板
src-tauri/src/
store.rs JSONL 增量摄取(按 message.id 去重 + 多行合并)
parser.rs 聚合(Day/Week/Month + 热力图)
pricing.rs models.dev / LiteLLM 价格加载与计价
config.rs 用户 MCP / Skill 白名单
model.rs 返回给前端的数据结构
lib.rs Tauri 命令 + 菜单栏托盘
开发过程中遇到的典型 bug(现象、根因、解决办法)汇总在 docs/BUGFIXES.md。
$ claude mcp add tokenscope \
-- python -m otcore.mcp_server <graph>