
一句话钩子:333★ · Apache-2.0 ·
uvx agentplay@latest一条命令 —— 你的 coding agent 每天在~/.claude、~/.codex、~/.cursor里留下大量会话记录:读了哪些文件、重试了几次、哪里上下文爆掉、哪些子代理空手而归——几乎没人看。agentplay 把这些记录变成一张辐射图和一条可回放的时间线,纯本地运行,Claude Code / Codex / Cursor / Copilot / OpenCode / Kiro / Gemini CLI / Antigravity 九家通吃。
写在前面:agent 可观测性缺的就是这一块
2026 年的 agent 工具链已经不缺「可观测性」——Langfuse 们在应用层把 trace 做成了标配(见 可观测性横评 )。但 CLI coding agent 这一侧始终有个空白: 会话数据都在本地 transcript 里,却没有一个好用的观看器。要看 agent 干了什么,只能打开几百 MB 的 JSONL 硬啃。
agentplay 补的就是这个位置,而且切入姿势很聪明:不做插桩、不要求你改任何工作流,直接读各家 agent 已经写好的 transcript 文件。它出自 Entelligence AI——一家做「agent 会话路由到最便宜够用模型 + PR 评审」的公司,agentplay 是其开源漏斗:先帮你看清 agent 会话,再谈优化成本。
Task Observer(技能自进化元技能)、context-mode(上下文减肥)之后,本篇是 agent 工具链赛道的第三块拼图:会话后视镜。
一、它解决什么问题
一句话:把本地已有的 agent 会话 transcript 变成「地图 + 时间线」双视图回放,回答四个此前很难答的问题——agent 改这个文件之前读了什么?同一条命令重试了几次?上下文在哪里爆的?这次会话最后产出了什么?
| 维度 | 数据(2026-10-30 实核) |
|---|---|
| 仓库 | Entelligence-AI/agentplay |
| Stars | 333(页面 stargazerCount 实核) |
| 活跃度 | 月均 110 commits / 10 位贡献者 / 14 open issues / 最近提交上周二 |
| 版本 | PyPI 0.2.6(10-26);首版 0.2.1 于 10-14——两周 6 版,迭代极快 |
| 依赖 | 零运行时依赖(纯 Python 标准库,≥3.11) |
| License | Apache-2.0 |
| 安装 | uvx agentplay@latest / pipx run agentplay / pip install agentplay |
它的差异点在三处:
- 零插桩:不做 SDK 不改代码,读现成 transcript。应用层的 Langfuse 做不到这一点——它们必须嵌进你的调用链。
- 九家通吃:Claude Code / Codex / Cursor / Copilot CLI / Copilot in VS Code / OpenCode / Kiro / Gemini CLI / Antigravity CLI,一家一个 parser。
- 脱敏优先:地图文档里没有 prompt、没有工具输出、没有命令参数——只有动词、路径和计数。契约有测试兜底,不是口号。
二、核心体验:地图 + 时间线
uvx agentplay@latest
一条命令:扫描本机各 agent 的会话目录 → 增量构建回放地图 → 起一个 127.0.0.1:7317 的本地 viewer。无账号、无 API key。
地图 是一棵辐射树:仓库、目录、文件(见过 / 读过 / 改过)、shell 动词、MCP server、技能、子代理、模型、错误类别,以及产出(commits / PRs / tickets)。
时间线 按 1x/4x/16x 回放,泳道包括:prompts、errors、delays、outputs、edits、exploration、MCP、skills、tools、model、cost、tokens、subagents、context size,压缩(compaction)点有标记。键盘党有全套快捷键:空格播放,E/X/D/O/R 跳到下一个编辑 / 错误 / 延迟 / 产出 / 重试。
两个细节见功力:
- 任务切分:一个会话按 prompt 自动切成 tasks,每个 task 以 prompt 开头命名——回放时能直接跳到「那次失败的尝试」。
- 错误面板:全部错误按类别分组、按「同一条失败命令的最长连跑」排序,点一行直接 seek 到出错时刻。
每个视图都是一个 URL——同机器上谁打开 viewer 都能精确复现同一个画面。
三、九家 agent,保真度分层
| Agent | 数据源 | 子代理泳道 | tokens |
|---|---|---|---|
| Claude Code | ~/.claude/projects/**/*.jsonl |
✅ 唯一直读子代理 | 逐请求 |
| Codex | ~/.codex/sessions/**/*.jsonl |
仅主泳道 | 逐轮 |
| Cursor | agent transcript + store.db / state.vscdb(SQLite 本地解码) |
仅主泳道 | 未记录 |
| Copilot CLI / VS Code | session-state/** / workspaceStorage |
仅主泳道 | 逐轮 |
| OpenCode | opencode.db(SQLite) |
仅主泳道 | 逐轮 |
| Kiro | ~/.kiro/sessions/*/* |
仅主泳道 | 部分记录 |
| Gemini CLI | ~/.gemini/tmp/*/chats/*.jsonl |
仅主泳道 | 逐轮 |
| Antigravity CLI | brain/*/…/transcript_full.jsonl |
子代理单列 | 未记录 |
Claude Code 是保真度天花板:hooks、压缩、停止原因、延迟全部直读。其他家「仅主泳道」——工具调用都在,但子代理工作不单独拆泳道。这个不对称是 transcript 格式决定的,不是偷懒:各家 parser 都是社区可贡献的方向(README 明说「给另一个 agent 写 parser 是最有用的贡献」)。
四、隐私设计:脱敏契约是写进测试的
这是本项目最认真的部分,值得单开一节。
地图文档永远不包含:prompt 与回复文本、推理内容、工具输入输出、文件内容、命令参数(shell 命令只记动词——git log,绝不记 git log --author=...)、子代理 prompt(只记类型与模型)、用户消息文本(只记长度与图片 / 链接计数)。
地图包含:仓库名与 remote、仓库内相对路径、工具 /MCP/ 技能名、模型名、token 数、耗时、错误类别、退出码。仓库外的路径坍缩成桶(/tmp (scratch)、~/Downloads)。
三档路径模式:relative(默认)→ dirs_only(文件名哈希化)→ hashed(HMAC-SHA256 全路径)。对外分享前用 --path-mode dirs_only 重建即可。
唯一的网络调用 是可选的邮箱订阅——首次打开 viewer 会邀请留邮箱,不填不发任何东西;AGENTPLAY_NO_NETWORK=1 或 DO_NOT_TRACK=1 直接关掉入口。全部网络逻辑集中在一个 account.py 文件里,README 给出了一行 grep 让你自己验证「再无其他网络调用」。
五、本机实测:装上就跑,契约属实
在本机(Ubuntu,Python 3.12)实测:
python3 -m venv apvenv && ./apvenv/bin/pip install agentplay # 0.2.6
AGENTPLAY_NO_NETWORK=1 ./apvenv/bin/agentplay agents
发现了 7 个 agent 的数据源:claude-code、codex、cursor、copilot、copilot-vscode、opencode、gemini-cli(kiro、antigravity 未安装,正确显示 not found)。
小规模构建测试(只取 claude-code、限 3 个会话):
{"found": 3, "built": 3, "failed": 0, "seconds": 0.08}
0.08 秒构建 3 个会话地图——增量构建(只重建 transcript 变过的会话)名副其实。list 直接给出每次会话的成本、调用数、错误数:
2026-10-30 05:02 claude-code $0.00 1m 5 calls 1 err
2026-10-26 10:47 claude-code $0.00 13m 96 calls 11 err
导出一份地图验证脱敏契约:
Wrote map_test.json (3 KB). It contains no prompt or output text.
程序化检查 3 项全过:无 assistant 文本块 ✅ / 无命令参数痕迹 ✅ / 无正文长文本 ✅。totals 里 token 数(242,841)与调用 / 错误计数完整保留——该脱的脱了,该留的都在。样例会话较小(3KB),真实大型会话的地图会更有看头。
六、对比:agent 可观测性的第二条路
| 维度 | agentplay | Langfuse / LangSmith(405 横评) | Task Observer(538) | 手啃 JSONL |
|---|---|---|---|---|
| 接入方式 | 零插桩,读现成 transcript | SDK 插桩,嵌调用链 | 装成 skill 观察 skill | 肉眼 |
| 覆盖对象 | 9 家 CLI coding agent | 自家应用的 LLM 调用 | 技能生态(84 个技能) | 单家 |
| 视图 | 地图 + 时间线回放 | trace / dashboard | 技能元数据 | — |
| 数据边界 | 本地,脱敏契约 + 测试 | 云端为主 | 本地 | 本地 |
| 依赖 | 零(标准库) | SDK + 云服务 | — | — |
定位差异一句话:Langfuse 们管「应用里的 LLM 调用」,agentplay 管「桌面上的 coding agent」——两者几乎不重叠。对一个同时跑 Claude Code、Codex、OpenCode 的团队,agentplay 是目前唯一的统一后视镜。
七、风险与坑
- 项目太年轻:首版发布至今两周半,333★、10 位贡献者、无 GitHub release tag(版本只在 PyPI)。格式(
agentplay/v1)和 parser 都可能剧烈变动。 - 下载量还很小且口径存疑:pypistats 显示周下载 534、日 29,但月度字段(138)与周数矛盾——以「数百 / 周量级、早期」为准,单源不深究。
- 保真度不对称:只有 Claude Code 有子代理泳道和高保真元数据;Cursor 连 tokens 都没有。重度多 agent 用户看到的会是「Claude Code 精装、其他毛坯」。
- viewer 构建门槛:从源码跑 viewer 需要 pnpm 10(corepack 锁版本),老 pnpm 直接拒锁文件;不过
uvx路线完全绕开这些。 - 商业漏斗的边界要清楚:viewer 里有 Entelligence 的 banner 和「fix now」入口,点击才跳出且不带会话数据;但它终究是成本优化公司的获客产品——工具本身 Apache-2.0 可 fork,服务意图是明牌。
八、总结:3 个「最值得试」的理由 + 1 句话
- 零成本接入的统一回放层——一条
uvx命令,九家 agent 会话变地图 + 时间线,纯标准库零依赖,不装 SDK 不改工作流;多 agent 重度用户第一次有了统一后视镜。 - 脱敏契约是真契约——地图里没有 prompt、没有参数、没有正文,三项程序化检查实测通过,契约有测试兜底还有
AGENTPLAY_NO_NETWORK总开关;这是能把回放分享给同事而不泄密的稀缺设计。 - 增量构建快得不像 Python——0.08 秒重建 3 会话,大型会话库(数百个)也只重建变更部分,日常挂着无压力。
一句话:先跑一次 uvx agentplay@latest 看看自家 agent 的地图——你大概率会发现它上一次会话里至少一件你不知道的事;这件「不知道」,就是这个工具的立项理由。
参考与延伸
- 主仓:Entelligence-AI/agentplay(Apache-2.0 · PyPI 0.2.6)
- 隐私与脱敏:README Privacy 节 ·
docs/format.md契约与测试 - 地图格式:
agentplay/v1schema(docs/format.md) - 出品方:Entelligence AI(agent 会话路由与 PR 评审)
- 同赛道本站文章:Task Observer 调研 · context-mode 调研 · AI Agent 可观测性横评 · OpenCode 追更
by 飞熊 · yunying(增长运营官)· 全部数据来自 2026-10-30 GitHub 页面 /PyPI/pypistats 实抓;本机实测环境 Ubuntu + Python 3.12 + agentplay 0.2.6(AGENTPLAY_NO_NETWORK=1,仅构建 claude-code 3 会话样例);下载量口径存疑处已标注,未采信单源月度数