LOCAL DATA BOUNDARIES

本地优先,不代表可直接公开

tokens 只读本地日志、不会上传数据。实时模式只在 127.0.0.1 上连接浏览器与本机进程;离线 Dashboard 则可能把敏感本地元数据复制进一个便于分发的 HTML 文件。

数据源

来源默认日志模式启用方式
Claude Code~/.claude/projects/**/*.jsonl默认启用;或 --source claude
Gemini CLI~/.gemini/tmp/<hash>/chats/session-*.json--source gemini
Codex~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl--source codex
可选 Claude Code Router~/.claude-code-router/custom-router.js文件存在时读取

路径由 config.py 基于当前用户主目录构造。读取器把三种日志格式归一化后交给聚合层。可选 Router 文件只在本机按文本读取,不执行、不上传;有限解析器只用于保守解释普通 Claude 请求档位别名,不影响 Gemini 或 Codex 模型名,无法支持的 JavaScript 保持不解释。

统一记录会涉及哪些字段

从当前读取、聚合和 Dashboard 逻辑可见,记录可包含日期/时间、来源、模型、输入/输出 token、缓存读写 token、总量、会话标识与工作目录等字段。终端和单期 HTML 主要呈现聚合结果;Dashboard 使用的范围更广。

自然语言摘要out/session_summaries.json 是可选 sidecar,以会话标识映射摘要文本。Dashboard 的 Top 会话名称会优先使用它;没有时可能回退到从会话内容提取的标题或截断标识。

文件缓存

缓存文件名为 records-v4.json,写入平台用户缓存目录:macOS 使用 ~/Library/Caches/ai-cli-tokens,Linux 使用 $XDG_CACHE_HOME/ai-cli-tokens~/.cache/ai-cli-tokens,Windows 使用 %LOCALAPPDATA%\ai-cli-tokens。项目按日志文件的修改时间与大小判断是否需要重读;当前用户的本地 Claude Code Router 文件签名也参与缓存失效;--no-cache 可强制刷新。

报告包含什么

终端报告

按期显示总 token、模型拆分与调用次数,不形成额外分享文件。

单期静态 HTML

包含聚合趋势、模型和来源分布、明细表、生成时间与启用来源。它不会嵌入原始会话正文。

交互式 Dashboard

tokens servetokens dashboard 使用相同的数据边界:前者只通过 127.0.0.1 向当前浏览器提供快照,后者把快照写入单文件。实时服务不启用 CORS、不提供目录浏览,也不返回日志路径或异常栈;页面请求之外不会把数据发送到局域网或互联网。

为了让项目与会话 Top 能在模型筛选或时光探针变化后重新计算,并支持会话回放、Token 流光图和项目透镜,payload 会携带更多聚合和标识信息,包括:

高风险分发对象out/dashboard.html 是单文件,复制方便,也意味着其中的本机元数据会被完整复制。不要未经审查上传到公开 Issue、网盘、静态站或聊天群。

标识脱敏 Dashboard

tokens dashboard --anonymize 生成 out/dashboard-anonymized.html。脱敏发生在 payload 聚合前:完整 cwd、项目短名、原始会话标识、sidecar 摘要和会话文本标题不会进入报告。同一实体在本次报告内使用稳定别名,因此 Top、项目 → 模型 → 会话关系和逐轮回放仍能联动。每次生成使用新的随机密钥,密钥不会写入报告或缓存。

成就中心会在浏览器 localStorage 中保存版本化的稳定成就 ID、报告生成时间与有限的快照作用域,用于区分“本设备此前未观察到”;它不把该时间当作实际解锁日期,也不写入 cwd、session 或逐轮 token 序列。

Token 年鉴使用独立的 tk-almanac-v1 保存最多 8 个作用域、每个作用域最多 24 份身份无关紧凑快照,包括 snapshot ID、生成时间、覆盖日期、聚合总量、模型构成、个人纪录与赛季摘要。raw / anonymized、来源、范围、时区和指标版本彼此隔离;不会保存 cwd、session、标题、报告级匿名别名、逐轮序列或消息正文。模块内可以导出当前作用域或单独清除年鉴历史。导出 JSON 仍包含精确日期、模型和 Token 数值,因此分享前仍需审查;file: localStorage 的可用性和隔离方式也可能因浏览器而异。

脱敏版本仍保留精确日期、token 数值、小时分布、模型名、来源和逐轮 token 序列,因此属于假名化而不是完全匿名。模型名和经 Router 解析出的 backend 名不会被假名化;backend 名可能透露当前用户的本地路由配置,自定义模型名也可能包含组织语义,活动时间和数值序列则可能形成行为指纹。

Dashboard 的浏览器交互状态边界

Data Trail · 数据寻迹

Data Trail 直接复用 Dashboard 已经内嵌的日级项目、会话和 Context 构成数据,不增加新的 payload 字段,也不创建项目到会话的关联。项目证据与会话证据只是在同一范围和临时模型下分别聚合;相同或相似的显示名、标识或 Token 数值都不能被解释为已经证明的配对。

Signal Dock、Exactness 与对比

Signal Dock 的悬停 / 聚焦预览与点击固定、Exactness Key 的按住 / 固定状态、以及按住 C 或按钮触发的临时对比,都只存在于当前页面 JavaScript 内存。它们不创建新的 localStorage key,也不把项目或会话实体 ID 写入视图 URL。只有短按按钮后固定的幻影对比会以 compare=1 进入 URL;粒度、全局模型筛选、焦点日期和非自动主题仍沿用既有视图链接语义。

内存态不等于数据不存在不持久化寻迹或透镜选择,只能防止这些选择出现在链接或后续浏览器历史中。原始 dashboard.html 仍可能包含完整 cwd、session 标识、标题和逐轮 Token 序列;脱敏版本仍保留报告级假名、精确日期、模型、Token 和回放序列。

数据体检与安全分享

Dashboard 的“数据可信度实验室”只使用计数、日期、来源和字段可用性,不额外复制 cwd、session 或自然语言内容。覆盖率的分母仅是读取器已经接受并标准化的记录;解析器拒绝的原始事件不在其中,因此不能把 100% 解读为源日志绝对完整或准确。Data Trail 在项目、会话或标准化组成不可用时复用这些能力原因;它不会把字段缺失解释为零。回放体检区分可归属 session 的记录与最终实际保留的逐轮值,每个会话最多保留最近 200 轮。复制体检摘要时也不会包含标识或逐轮 Token 明细;但摘要仍可能包含精确日期范围、来源、record 数和总 Token,因此仍属于本地开发元数据。

安全分享清单

  1. 优先分享终端汇总截图或重新制作的合成数据图。
  2. 必须分享 Dashboard 时,优先生成标识脱敏版本:
    tokens dashboard --anonymize --since 2026-07-01 --until 2026-07-31 --source claude
  3. 确认发送的是 dashboard-anonymized.html,而不是原始 dashboard.html
  4. 在文本编辑器中搜索用户名、主目录、项目名、客户名、仓库名、会话标识、摘要片段和自定义模型名。
  5. 评估精确日期、小时活动和逐轮 token 序列是否适合目标接收者;必要时缩小日期范围。
  6. 不要依赖“页面离线”“标识已替换”或“数据体检”为全景数据来推断“完全匿名”或“绝对准确”。
  7. 删除或妥善保护 out/ 下不再需要的报告、缓存与摘要 sidecar。

本站如何避免泄漏

仓库中的 docs/ 只包含手写说明和合成演示数据,不读取、复制或嵌入 out/dashboard.html。自动测试会阻止常见本机绝对路径、用户名以及典型 UUID / session 标识出现在文档文件中。

查看架构可了解数据从读取到输出的边界。