Claude Code 消耗 ~15-20% 的令牌在 3 字状态行上
Claude Code 消耗 ~15-20% 的令牌在 3 字状态行上:一个 Bun 预加载,使 agent_summary 关闭 · 由 Flamerix AI 提供,flamerix.ai · MIT 由 Flamerix AI 提供 · MIT 许可证 在 Linux 上测试,Claude Code 2.1.257–2.1.312(参见测试版本)。二进制文件未被修改(BUN_OPTIONS=--preload)。更新可能会静默撤消此设置,因此请参见验证。TL;DR curl -fsSL https://gist.githubusercontent.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce/raw/no-agent-summary.js -o ~/.local/share/no-agent-summary.js claude daemon stop --any BUN_OPTIONS= "${BUN_OPTIONS : + $BUN_OPTIONS } --preload $HOME/.local/share/no-agent-summary.js" claude 为每个 Claude Code 进程永久生效,参见安装。 问题 每 ~30 秒,对于每个后台代理,Claude Code 将该代理的整个转录发送给代理自己的模型(通常是 Opus),并要求它 "用 3-5 个词描述您最近的动作"。答案仅在代理面板中更新代理的状态行;它从未到达模型或您的对话。没有设置可以关闭它,自 2.1.232(2026 年 8 月)起默认启用。异常在 Claude Code 的 OpenTelemetry 导出中被 DRIM 检测到:按 query_source 对 claude_code.api_request 事件进行分组显示 agent_summary 的成本超过了主要对话本身。query_source = agent_summary 钩子前一周 2 天后 所有 Claude Code 支出的份额 16.4 %(主要对话:15.7 %) 0 % 所有 API 请求的份额 19.7 %,大约 1/5 0 % 的支出用于 Opus 96 % — 输入令牌每输出令牌 ≈ 9,000:1 — 此处的支出是 Claude Code 自己的每请求估算(cost_usd),而不是发票:在订阅中,您失去的是速率限制头部空间。我们并不是唯一测量它的人:#86879 收集到 4 个独立测量 18-26 %。 修复(其工作原理) no-agent-summary.js 是一个 Bun 预加载(约 80 行代码)。它包装了 setTimeout / setInterval ; 当回调的源文本包含摘要锚点(例如 [AgentSummary] 定时器触发日志行)时,它返回一个惰性句柄,而不是启动定时器。其他所有定时器均未受影响。 在 OpenTelemetry 导出中,抑制的请求是 query_source = agent_summary 的 claude_code.api_request 事件。 为什么使用定时器钩子而非更简单的方法:该模块以预编译的 Bun 字节码形式提供,因此内部编辑其 JS 文本不会改变任何内容,并且 API 客户端不通过包装的 globalThis.fetch。但是 Function.prototype.toString 仍然返回即使在字节码中运行时的回调源,因此定时器可以通过其中的字符串被识别。 惰性定时器使用的时间正好是 2³¹−1 毫秒:Node 和 Bun 将更大的延迟视为 1 毫秒,因此 "无限" 延迟将立即触发。 安装 将 no-agent-summary.js 放在一个稳定的位置;注意其绝对路径。全局设置 BUN_OPTIONS,使每个 Claude Code 进程都能获取它。 选项之一:# ~/.profile, ~/.bashrc, ~/.zshrc export BUN_OPTIONS= "${BUN_OPTIONS : + $BUN_OPTIONS } --preload /abs/path/no-agent-summary.js " # ~/.config/fish/config.fish set -gx BUN_OPTIONS "--preload /abs/path/no-agent-summary.js " # ~/.config/environment.d/50-no-agent-summary.conf(systemd 用户环境;也可达 # 用户服务和定时器;在用户管理器下次启动时应用,通常是下次登录) BUN_OPTIONS=--preload /abs/path/no-agent-summary.js 或者一个名为 claude 的包装,在 PATH 中更早的位置(此情况使其在一个 Claude Code 进程启动另一个时保持幂等): #! /bin/sh HOOK=/abs/path/no-agent-summary.js case "${BUN_OPTIONS-}" in * "--preload $HOOK" * ) ;; * ) export BUN_OPTIONS="${BUN_OPTIONS : + $BUN_OPTIONS } --preload $HOOK" ;; esac : "${CC_AGENT_SUMMARY_LOG := ${XDG_RUNTIME_DIR :-/tmp}/no-agent-summary.log}" export CC_AGENT_SUMMARY_LOG exec /path/to/the/real/claude "$@" 重启守护进程和每个已运行的会话,然后从具有 BUN_OPTIONS 的环境中启动 Claude Code:claude daemon stop --any 环境变量值影响 CC_AGENT_SUMMARY_MODE 关闭(默认),pass 关闭了摘要定时器。 pass 是 A/B 控制:加载和记录,保持每个定时器未受影响。任何其他值在 stderr 上发出警告并作为关闭处理。 CC_AGENT_SUMMARY_LOG 文件路径,可选 在加载时附加预加载活动模式=… bun=… hooked=…,每个匹配定时器一行(前 20 行)和退出计数。 CC_AGENT_SUMMARY_MARKER 文件路径,可选 在加载时覆盖为预加载活动…行。 细微差别 在安装后重启守护进程。守护进程、pty 主机和预热的 bg-spare 会话将继承启动守护进程的客户端的环境,因此在设置 BUN_OPTIONS 之前启动的守护进程会继续生成未钩挂的会话。因此执行 claude daemon stop --any 。 无头运行也需要:claude -p,cron,CI,编辑器集成。 平台:Linux 测试,macOS 和 Windows 未测试。在 Windows 上,/$bunfs/ 门很可能永远不会安装钩子。
阅读全文 →本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡