AgentLens
编码 Agent 用量归档 · 跨平台桌面应用
一个桌面看板,回答「这些 Agent 到底做了什么、在哪台机器上做的」。 几台机器、四种编码 Agent、几万条会话之后,「这个月跑了多少、花在哪、哪台机器上跑的」就没人能凭记忆回答了。AgentLens 把这些记录采到一处,然后老实告诉你哪些数字算得准、哪些算不准。
它解决的问题
编码 Agent 的用量记录各自散在本地数据库里:OpenCode 一份、Claude Code 一份、Codex 一份、Hermes 一份。字段口径不一样,轮转策略不一样,也没有哪个地方能把它们放在一起看趋势。
只在一台机器上用一个 Agent 的话,翻它自己的界面就够了。麻烦从第二台机器开始 —— 工作站、构建机、云上的开发容器各跑各的,谁也说不出总数;等某台机器被重装或者数据目录被清空,那段历史就直接消失了。
再往下一层是成本。多数工具给你一个总金额,但不说清这个金额里有多少是上游返回的真实计费、多少是本地按价目表估的、又有多少记录根本查不到价格。三种数据相加得到的数字看着精确,实际上不能用来做任何判断。
谁会需要
- 多机开发者
- 本机加上远端构建机或开发容器,用量分散在几台机器上,没有一个合起来的视图。
- 混用多个 Agent 的人
- OpenCode、Claude Code、Codex 与 Hermes 换着用,四份记录的口径还不一致。
- 需要对账的人
- 想知道钱花在哪个模型、哪个项目、哪个 Agent 上,并且需要知道这个数字有多可信。
实际界面
四张实际截图,不是渲染图。除标注为深海蓝的那张,其余都是默认的「石墨浅色」主题;界面语言目前是中文。

总览页,裁到内容区(原图是超宽窗口截图,两侧大片空白会把界面文字压得看不清)。Token 分成五个原子桶始终分列,不折叠成一个合计;成本卡最显眼的位置放的是每百万可计费 Token 的单价 —— 唯一能横向比较的那个数 —— 旁边标着它覆盖了多少条记录。趋势图里的斜纹块是没有数据覆盖的断裂桶,浅底块是部分覆盖:两者都不是 0。

同一张趋势图切到「按模型」分组,主题换成深海蓝。分组维度和主题都在标题栏就地切换,不用绕去设置页。曲线过多会读不出趋势,所以只画 Token 合计最高的几项,其余合并成一条「其他」。

用量分析页,来源 → agent → 模型 三级展开,区间与时区跟总览共用一份状态。查不到价格的行挂一个「成本缺失」标记,而不是填 0 —— 填 0 会让人以为这段用量是免费的。占比只按本级 Token 合计算,不跨级借基数。

主机页把本机和 SSH 远端并排放。采集源的开关做在每张主机卡上而不是设置页里 —— 同一个源在哪台机器上开、在哪台不开,本来就是两件事。默认只勾了 OpenCode。
能做什么
- 本机在首次打开主机页时自动注册,不用配置。远端主机通过 SSH 添加,点「测试连接」后机器标识哈希由探测结果自动填入。默认只采 OpenCode,Claude Code、Codex 与 Hermes 要在主机卡上逐个勾选 —— 第一次启用一个新源时那一轮要全量扫描它的数据目录,会比平时慢。
- 按报表时区、Agent、模型、项目分组看趋势,也能一路下钻到单条记录。区间预设有今天、7 天、30 天、本季度、本年与自定义;粒度可以交给自动,也可以锁定到小时、天、周或月。
- 输入、输出、推理、缓存读、缓存写五个原子桶始终分列,既不折叠成一个 total,也不去读源库自己算好的合计值。
- 没有数据覆盖的桶和部分覆盖的桶在趋势图里画成不同的填充,而不是画成一条掉到 0 的线。缺数据和真的是 0,在图上必须能分清。
- 同一个模型经不同网关接入时,价目表条目往往只挂在归属方名下,严格按 (provider, model) 匹配会大面积查不到价,所以允许跨 provider 回退。实测 251737 条记录,可定价比例从 0.1% 提到 99.4%。手工覆盖价是例外,仍然精确匹配,不外溢。
- 本机与远端都能改成自动刷新,远端用一个独立的间隔,两者的下限都是 600 秒。
- 日历分桶只有一份实现,在 Rust 侧。前端一个日期库都没装,拿到的标签已经按报表时区成型,不会被二次换算到另一个时区 —— 所以各个页面的报表口径永远一致。
- SSH 口令只进操作系统钥匙串:Linux 走 Secret Service,Windows 走凭据管理器。不落配置文件,也不经 IPC 回传给界面。
三件不能出错的事
归档库是权威历史
源库轮转、备份被删、远端数据目录被整个清空,已归档的记录都还在。归档库是本地一份 SQLite,带去重和按源的水位线;它不是源数据的缓存,而是比源活得更久的那一份。这一条是整个工具存在的前提 —— 一个会跟着源一起缩水的看板,等于没有历史。
远端采集只读
静态链接的 musl 采集器推到远端,校验 SHA-256,就地执行,退出时清掉自己。它不写远端工具的任何数据。SSH 那一侧的远端命令是恒定的,变化的只有当作位置参数传进去的载荷,命令本身不参与字符串拼接。
未知成本不写 0
查不到价格的记录标记为缺失,在界面上是一个「成本缺失」徽标,不是 0.0000。这条看着最小,但它决定了成本数字能不能用:一旦缺失被渲染成 0,任何求和、任何占比、任何「这个月比上个月省了多少」都是错的,而且错得看不出来。
成本是怎么算的
三种来源的金额始终分开保存,绝不相加成一个「总花费」。这是 AgentLens 与多数用量工具最实际的差别。
上游自带金额
记录里带有上游返回的计费金额。它用的是上游的价目表,和本地估算不可比,所以折叠在一个独立入口后面,不并进估算值。
目录里查不到价
模型在本地价目表里没有条目。这类记录连计费基数都不全,标记为「成本缺失」,不参与任何求和、任何占比。
本地估算
本机价目表乘以可计费 Token。这是唯一能横向比较的一栏,旁边始终标着它覆盖了多少条记录,让你自己判断这个估算可信到什么程度。
真正能跨模型、跨时间比较的只有每百万可计费 Token 的单价,所以成本卡把它放在最显眼的位置,而不是放那个看着最像账单的总金额 —— 因为那个总金额不是账单。
装到自己机器上
预编译包三个。一行式脚本自己认平台,用发布清单校验 SHA-256,不自行提权。也可以从发布页下载后手工校验。
预编译包
- Linux x86_64
- .deb
- Windows x64
- NSIS 安装包
- macOS aarch64
- .dmg
# Linux 与 macOS
$ curl -fsSL https://raw.githubusercontent.com/sunerpy/AgentLens/main/scripts/install.sh | bash# Windows,PowerShell
$ irm https://raw.githubusercontent.com/sunerpy/AgentLens/main/scripts/install.ps1 | iex# 不想把脚本管道给 shell —— 从发布页下载后手工校验
$ sha256sum -c sha256sums-linux.txt# 校验通过再装
$ sudo apt install ./AgentLens_*_amd64.deb装完之后
打开「主机管理」,本机会自动注册。要采远端就添加 SSH 主机、点「测试连接」,然后在主机卡上勾选要采的源 —— 默认只有 OpenCode 是开的。
怎么搭起来的
- Rust。核心 crate 负责归档、解析、聚合与 SSH 传输;远端采集器是独立的静态 musl 单文件;口令助手是 SSH_ASKPASS 的对端,随包分发。
- Tauri 2 —— 宿主进程、IPC 命令与托盘。
- React 18 加 Vite,Tailwind CSS 4 做样式,Recharts 画图,TanStack Query 管数据。
- SQLite,经 rusqlite 静态链接进二进制,不需要额外安装系统库。归档库带去重和按源的水位线。
- Rust 与 TypeScript 之间的类型由 ts-rs 从 Rust 侧生成,不是手写的,边界不会悄悄漂移。
- Linux .deb、Windows NSIS 安装包、macOS aarch64 .dmg。
成熟度,说清楚
v0.0.5,发布于 2026-08-12。这是一个早期版本:能装、能用、每天在用,但版本号就是它的实际状态,没有必要包装成别的样子。界面还在改,数据口径会继续收紧。
三平台的 CI 矩阵在 main 上全绿,三平台也都在构建流水线上出过真实安装包。但绿灯只说明缺陷没有复现,不说明产品在那台机器上能起来 —— 这两件事之间的距离,值得写在这里。
真机验收的实际状态
- Windows:已验收
- 在 Windows Server 上装包、启动,25 条机器可判定的 GUI 断言全过。
- Linux 与 macOS:只到出包
- 两个平台都能出安装包,但没有做过同样的真机启动验收。这不是「应该没问题」,是「没验过」。
测试规模
Rust workspace 426 条,Vitest 560 条,Playwright 组件级 151 条(mock IPC),WebdriverIO 8 个 spec 跑在真 Tauri WebView 上、对一份 15.5 万行的归档库;行覆盖率实测 92.72%,下限 90% 在 CI 里强制。这些数字说明代码被测过,不说明每个平台的安装包都被人手动打开过。