Claude Code 有笔比主对话还贵的暗账:状态栏那几个字(agent_summary)
Claude Code 后台每个活跃 agent 约每 30 秒把整段 transcript 再发给 Opus,只为状态栏 3–5 个词;请求不进主对话、也不进本地会话日志。Flamerix 一周 OTEL:agent_summary 约占花费 16.4%(主对话约 15.7%)、请求约 19.7%;issue #86879 另有会话测约 18–26%。本文讲机制、怎么用 query_source 自查,以及社区 Bun preload 方案的风险声明(非官方、升级须复验)。可作 769 compact 续篇。

Claude Code 有笔比主对话还贵的暗账:状态栏那几个字(agent_summary)
昨天这篇 769:长会话别再被假 1M 打断 讲的是:上下文过线时别停死,要 compact 后续跑。今天补同一条产品线的另一侧——钱和额度是不是在你看不见的地方烧掉。
场景很常见:开了几个后台 / 子 agent,面板上状态栏每隔一会儿换几个词(「reading files」「running tests」之类)。看起来无害。问题是:为了这 3–5 个词,客户端可能每隔约 30 秒,把该 agent 的整段 transcript再送给模型(多半是 Opus)做一次小结;结果只更新面板,不进你的主对话。
社区用 OpenTelemetry 按 query_source 分组后发现:在「多子代理、跑得久」的用法里,这项叫 agent_summary 的请求,可以占到总花费的大约 15%–20%,有人测到比主对话还高。GitHub issue #86879 里还有约 18%–26% 的独立测点。
下文数字一律标「据公开 gist / issue / 评论自测」,不是我本机复跑的账单。订阅制下损失的常常是限额余量,不一定是「多打一张发票」。先学会自己量,再决定要不要动第三方方案。
一、先看结论
| 项 | 要点 |
|---|---|
| 是什么 | 后台 agent 定时「状态栏小结」请求,query_source=agent_summary |
| 何时贵 | 多并发、长墙钟、上下文已经很大的子代理;单会话闲逛通常不明显 |
| 公开测点 | Flamerix 一周:花费约 16.4%、请求约 19.7%;#86879 会话:加权约 18%、请求约 22.7%;评论另有约 15–22%、缓存读约 26% |
| 官方开关 | 社区结论:无文档化的可靠关闭方式(部分 env 只能顺带关掉 fork/后台能力) |
| 建议顺序 | 先 OTEL 按 query_source 自查 → 评估是否真吃额度 → 再考虑第三方 preload(自担风险、升级复验) |
| 和 769 | 769 管「长会话别断」;本文管「断不了时别暗烧」——可一起读,内容不重复 |
二、机制:3–5 个词,为何能烧一整段上下文
据 Flamerix gist 与 #86879 的公开描述,行为大致是:
- 对每个活跃的后台 / 子 agent,约每 30 秒触发一次(间隔也可被服务端调到约 30–240 秒区间,默认常落在下限附近)。
- 请求把该 agent 当前整段对话历史(再加工具 schema 等)送到该 agent 自己的模型(实测里大量是 Opus 档)。
- 模型被要求用 3–5 个词描述「最近在干什么」。
- 文本只更新 Agents 面板状态栏;不写回主对话上下文(issue 里写明 fork、deny tools、
skipTranscript等)。
因此成本随两件事线性放大:
- 并发数:3 个长跑子代理 ≈ 每分钟约 6 次小结请求;
- 上下文体积:子代理 transcript 越大,每次重读越贵(缓存命中能降价,但「每 30 秒再扫一遍」仍会啃限额)。
gist 还给出一个反直觉比例:约 9000 : 1 的输入 token / 输出 token——输出就那么几个词,输入却是整段历史。
时间线(据 gist,2026):
| 版本附近 | 变化 |
|---|---|
| 2.1.32 起代码出现 | 早期公开构建里基本不可达 |
| 2.1.72 / 2.1.117 | SDK / CLI 逐步可达 |
| 2.1.232(约 2026-08) | 交互式后台 agent 默认开启 |
| 2.1.300 | 间隔可服务端调节(约 30–240 s) |
| 2.1.310 | 出现更省的 short 模式,但 gist 称默认仍是全量 transcript,且切模式靠服务端旗标 |
三、公开测点怎么读(别把「一周 16%」当成你的账单)
1)Flamerix / DRIM:按周汇总
来源:gist
在 Claude Code 的 OpenTelemetry 导出里,对 claude_code.api_request(或同类 API 请求事件)按 query_source 分组:
| 指标(hook 前一周) | agent_summary |
|---|---|
占总花费估计(cost_usd) |
约 16.4%(主对话约 15.7%) |
| 占总 API 请求 | 约 19.7%(约 1/5) |
| 其中落在 Opus 的花费占比 | 约 96% |
| 装 hook 后两天 | 上述份额 → 0%(作者自述) |
gist 自己写明:这里的 spend 是客户端每请求估计,不是发票;订阅用户丢的是 rate-limit / 限额余量。
2)Issue #86879:单会话原始包抓取
来源:#86879(2026-08-15 开,后续评论持续到 2026-10)
作者一次约 4 小时、27 个子代理、1496 次请求(OTEL_LOG_RAW_API_BODIES):
| 种类 | 调用次数 | 原始 token 占比 | 按 Opus 价加权占比 |
|---|---|---|---|
| 真实 agent 轮次 | 1076 | 70.4% | 72.7% |
agent_summary |
339 | 22.2% | 18.0% |
| suggestion / task-notification | 各约 36–37 | 约 3.5% 级 | 约 2.5–3.8% |
同时:约 22.7% 的请求次数只换来总共约 2.2 万输出 token(约 65/次)的化妆文案。
3)评论区其它测点(同 issue)
- 有人在 20+ 子代理会话里看到加权 token 约 15–22%。
- 2.1.276 上一次约 1h45、四子代理会话:
agent_summary约占会话 cache-read 的 26%;长上下文子代理(约 380k)下,每小时光 spinner 就可到数千万级 cache-read。 - 2026-10-22 仍有人反馈 2.1.300 / 2.1.301 没有文档化官方关法;另有人用「可见 cache vs 隐藏 cache」估子代理暗读。
- 2026-10-28 Flamerix 在 issue 下挂出上述 Bun preload gist。
怎么用这些数字: 它们描述的是「子代理很重」的尾部用法。你若几乎不开后台 agent,份额可能接近 0——以你自己的 query_source 分组为准。HN / 二手文也会出现「我这边最多约 8%」这类反例,正好说明方差大,不要直接改预算表。
四、先装表:用 OTEL 按 query_source 自查
省 Token 系列一贯立场(见 760 冷静篇):先表后刀。
agent_summary 还有个坑:skipTranscript: true(issue 原文)——它不进磁盘上的会话 transcript。只看本地 JSONL / 聊天记录的用量工具,会系统性低估。要看见它,得走 OpenTelemetry / 原始 API 体 一类通道。
实操提纲(按你现有采集栈裁剪):
- 打开 Claude Code 的用量 / tracing 导出(官方文档入口:Monitoring usage;具体环境变量以你当前版本文档为准)。
- 过滤 API / LLM 请求类事件,按属性
query_source分组。 - 对比:
agent_summaryvs 主对话 / 真实 agent 轮次——先看请求次数占比,再看 token /cost_usd。 - 选一天「几乎没开后台 agent」做对照:若份额接近 0,说明你平时不受影响。
- 子代理很重的日子再采一次:这才是决策样本。
可选自检清单:
- 导出里能看到
query_source字段 - 能单独筛出
agent_summary - 知道自己用的是「估计 cost」还是供应商账单
- 对照过「无后台日」vs「多子代理日」
没有表,就不要先上第三方 hook。
五、有没有官方关闭开关?
综合 gist 与 #86879 的公开结论(截至素材核实日,issue 仍 open):
| 尝试 | 社区观察 |
|---|---|
| 文档化「关掉状态栏小结」 | 未见可靠官方开关 |
SDK agentProgressSummaries 一类选项 |
gist 称在打包逻辑里常被其它条件 OR 掉,false 不够用 |
未文档 env(如 CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES) |
有人怀疑只能打开或行为不明,勿当关法 |
CLAUDE_CODE_FORK_SUBAGENT=0 / 停后台任务 |
可能顺带消掉小结,但连 fork / 后台能力一起砍,代价大 |
| 其它「非必要流量」类开关 | gist 称部分名字在二进制里根本不存在或覆盖不到这条路径 |
issue 作者的诉求很朴素:给一个 env / settings 键,或把这类化妆请求纳入「可关的非必要流量」。在官方回应前,工程上只能:计量 → 减并发/减墙钟 → 或自担风险用社区方案。
六、社区 Bun preload:能关,但是第三方、升级敏感
Flamerix 提供的方案(MIT,作者声明 as-is、自担风险):用 Bun 的 --preload 在运行时包一层 setTimeout / setInterval;若回调源码文本命中 summarizer 锚点(例如含 [AgentSummary] Timer fired 一类字符串),则换成惰性定时器,其它定时器原样放行。不改 Claude Code 二进制文件。
公开安装思路(完整脚本与校验步骤以 gist 为准,此处不复制整份 hook 源码):
bash
## 1) 下载 gist 中的 no-agent-summary.js 到稳定绝对路径(示例)
## 2) 启动前带上 preload,并重启 daemon,避免旧环境继承
claude daemon stop --any
BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS }--preload /绝对路径/no-agent-summary.js" claude
gist 强调的验收与坑:
- 必须
claude daemon stop --any(或等价重启),否则 daemon / pty / 预热会话仍可能不带 preload。 - 无头、
claude -p、CI、编辑器集成也要带同一环境变量。 - 作者测过 Linux 上多版(含 2.1.312 等):hook
off时 summary fork 次数可到 0;pass模式用于 A/B。 - Fail-open:锚点字符串一变,hook 匹配失败 → 小结静默恢复。所以 每次升级后复验(看 preload 日志 + OTEL 里
agent_summary是否归零)。 - 可见副作用:面板状态不再刷新;与 SDK
task_progress的 summary 字段等可能变空——功能换额度,不是免费午餐。 - 法律 / ToS:改客户端运行时行为是否触碰服务条款,作者明确甩给使用者自查;本博客不鼓励在未读条款、未自测的情况下对生产账号上 hook。
本站立场: 可以当「社区应急阀」了解;默认推荐仍是 OTEL 自查 + 少开无意义的长跑子代理。真要上 hook,请直接读原 gist,并在升级流水线里加一条「agent_summary 是否仍为 0」的检查。
七、和 769 / 省 Token 系列怎么串
| 篇 | 解决什么 | 不解决什么 |
|---|---|---|
| 769 compact | 标准上下文过约 200K 时别假 1M 停死;排除笔记防失忆 | 不解释状态栏暗请求 |
| 本文 agent_summary | 看见并评估面板小结这笔暗账 | 不重复 compact / MEMORY.md 修复细节 |
| 760 冷静篇 | README 大数字要成对实测 | 不涉及本条 query_source |
| 755 SmartCompact | 挑「提交/测试绿」再压 | 压不掉 skipTranscript 的旁路请求 |
可执行组合:
- 长会话用户:先升到 2.1.311+(769),会话别断。
- 子代理重度用户:OTEL 看一眼
agent_summary占比。 - 占比高且你不需要面板文案:再评估社区 preload;否则优先 少并发、短墙钟、任务拆小。
- 任何「再省 20%」的承诺:回到 760——用自己的表验收。
八、检查清单
计量
- 能按
query_source看到agent_summary - 区分「估计 cost」与真实限额/账单
- 有「无后台日」基线
行为
- 不需要的长跑子代理及时停
- CI / 无人值守会话尤其警惕「没人看的 spinner」
若考虑第三方 hook
- 已读 gist 免责声明与 Verify 节
- 只用绝对路径
--preload,并重启 daemon - 升级 Claude Code 后复跑 Verify + OTEL
- 接受「状态栏不再更新」
九、小结
agent_summary是给状态栏用的旁路模型调用:约每 30 秒、整段 transcript、常常是 Opus 档,不进主对话、也不进 transcript 日志。- 公开测点集中在 约 15%–26% 区间(花费或 token,口径不同);你的数字以 OTEL 分组为准。
- 社区目前认为 没有干净的官方关法;Bun preload 能压到 0,但是 第三方、fail-open、升级必复验。
- 和 769 一起看:长会话既要续得上,也要看得见暗账——表先于刀。
参考来源
- Flamerix AI gist(机制、一周 16.4%/19.7%、Bun preload、版本表):https://gist.github.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce
- GitHub issue #86879(会话测 18%/22.7% 请求、后续评论测点):https://github.com/anthropics/claude-code/issues/86879
- Claude Code 用量监控文档:https://code.claude.com/docs/en/monitoring-usage
- 本系列:769 自动 compact · 760 省 Token 冷静篇 · 755 SmartCompact