跳到正文

FirLab03 · 产品

AgentLens

编码 Agent 用量归档 · 跨平台桌面应用

一个桌面看板,回答「这些 Agent 到底做了什么、在哪台机器上做的」。 几台机器、四种编码 Agent、几万条会话之后,「这个月跑了多少、花在哪、哪台机器上跑的」就没人能凭记忆回答了。AgentLens 把这些记录采到一处,然后老实告诉你哪些数字算得准、哪些算不准。

已发布 · 早期
版本
v0.0.5
发布于
2026-08-12
01问题

它解决的问题

编码 Agent 的用量记录各自散在本地数据库里:OpenCode 一份、Claude Code 一份、Codex 一份、Hermes 一份。字段口径不一样,轮转策略不一样,也没有哪个地方能把它们放在一起看趋势。

只在一台机器上用一个 Agent 的话,翻它自己的界面就够了。麻烦从第二台机器开始 —— 工作站、构建机、云上的开发容器各跑各的,谁也说不出总数;等某台机器被重装或者数据目录被清空,那段历史就直接消失了。

再往下一层是成本。多数工具给你一个总金额,但不说清这个金额里有多少是上游返回的真实计费、多少是本地按价目表估的、又有多少记录根本查不到价格。三种数据相加得到的数字看着精确,实际上不能用来做任何判断。

谁会需要

多机开发者
本机加上远端构建机或开发容器,用量分散在几台机器上,没有一个合起来的视图。
混用多个 Agent 的人
OpenCode、Claude Code、Codex 与 Hermes 换着用,四份记录的口径还不一致。
需要对账的人
想知道钱花在哪个模型、哪个项目、哪个 Agent 上,并且需要知道这个数字有多可信。
02界面

实际界面

四张实际截图,不是渲染图。除标注为深海蓝的那张,其余都是默认的「石墨浅色」主题;界面语言目前是中文。

图 01
AgentLens 总览页的内容区:统计区间与粒度筛选,Token 用量卡、成本卡与消息会话卡三张并排,下方是按模型分组的用量趋势折线图,图右端有一段斜纹填充的断裂桶。

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

图 02
深海蓝主题下的 AgentLens 总览页,用量趋势按模型分组,多条彩色折线配一条虚线代表合并后的其他项。

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

图 03
AgentLens 用量分析页的三级下钻表格:来源、agent、模型逐层展开,行内可见「成本缺失」标记和占比条。

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

图 04
AgentLens 主机管理页:本机主机卡与一台 SSH 远端主机卡并排堆叠,每张卡上都有独立的采集源勾选框。

主机页把本机和 SSH 远端并排放。采集源的开关做在每张主机卡上而不是设置页里 —— 同一个源在哪台机器上开、在哪台不开,本来就是两件事。默认只勾了 OpenCode。

03能力

能做什么

采集范围
本机在首次打开主机页时自动注册,不用配置。远端主机通过 SSH 添加,点「测试连接」后机器标识哈希由探测结果自动填入。默认只采 OpenCode,Claude Code、Codex 与 Hermes 要在主机卡上逐个勾选 —— 第一次启用一个新源时那一轮要全量扫描它的数据目录,会比平时慢。
分析维度
按报表时区、Agent、模型、项目分组看趋势,也能一路下钻到单条记录。区间预设有今天、7 天、30 天、本季度、本年与自定义;粒度可以交给自动,也可以锁定到小时、天、周或月。
Token 口径
输入、输出、推理、缓存读、缓存写五个原子桶始终分列,既不折叠成一个 total,也不去读源库自己算好的合计值。
覆盖状况
没有数据覆盖的桶和部分覆盖的桶在趋势图里画成不同的填充,而不是画成一条掉到 0 的线。缺数据和真的是 0,在图上必须能分清。
定价回退
同一个模型经不同网关接入时,价目表条目往往只挂在归属方名下,严格按 (provider, model) 匹配会大面积查不到价,所以允许跨 provider 回退。实测 251737 条记录,可定价比例从 0.1% 提到 99.4%。手工覆盖价是例外,仍然精确匹配,不外溢。
刷新节奏
本机与远端都能改成自动刷新,远端用一个独立的间隔,两者的下限都是 600 秒。
时区一致性
日历分桶只有一份实现,在 Rust 侧。前端一个日期库都没装,拿到的标签已经按报表时区成型,不会被二次换算到另一个时区 —— 所以各个页面的报表口径永远一致。
凭据存放
SSH 口令只进操作系统钥匙串:Linux 走 Secret Service,Windows 走凭据管理器。不落配置文件,也不经 IPC 回传给界面。
04保证

三件不能出错的事

  1. 01

    归档库是权威历史

    源库轮转、备份被删、远端数据目录被整个清空,已归档的记录都还在。归档库是本地一份 SQLite,带去重和按源的水位线;它不是源数据的缓存,而是比源活得更久的那一份。这一条是整个工具存在的前提 —— 一个会跟着源一起缩水的看板,等于没有历史。

  2. 02

    远端采集只读

    静态链接的 musl 采集器推到远端,校验 SHA-256,就地执行,退出时清掉自己。它不写远端工具的任何数据。SSH 那一侧的远端命令是恒定的,变化的只有当作位置参数传进去的载荷,命令本身不参与字符串拼接。

  3. 03

    未知成本不写 0

    查不到价格的记录标记为缺失,在界面上是一个「成本缺失」徽标,不是 0.0000。这条看着最小,但它决定了成本数字能不能用:一旦缺失被渲染成 0,任何求和、任何占比、任何「这个月比上个月省了多少」都是错的,而且错得看不出来。

05成本

成本是怎么算的

三种来源的金额始终分开保存,绝不相加成一个「总花费」。这是 AgentLens 与多数用量工具最实际的差别。

  1. 01

    上游自带金额

    记录里带有上游返回的计费金额。它用的是上游的价目表,和本地估算不可比,所以折叠在一个独立入口后面,不并进估算值。

  2. 02

    目录里查不到价

    模型在本地价目表里没有条目。这类记录连计费基数都不全,标记为「成本缺失」,不参与任何求和、任何占比。

  3. 03

    本地估算

    本机价目表乘以可计费 Token。这是唯一能横向比较的一栏,旁边始终标着它覆盖了多少条记录,让你自己判断这个估算可信到什么程度。

结论

真正能跨模型、跨时间比较的只有每百万可计费 Token 的单价,所以成本卡把它放在最显眼的位置,而不是放那个看着最像账单的总金额 —— 因为那个总金额不是账单。

06安装

装到自己机器上

预编译包三个。一行式脚本自己认平台,用发布清单校验 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 是开的。

07技术栈

怎么搭起来的

后端
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。
08成熟度

成熟度,说清楚

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 里强制。这些数字说明代码被测过,不说明每个平台的安装包都被人手动打开过。