Claude Code先发后读机制实测:33K tokens预请求暴露Agent调度设计细节

Claude Code“先发后读”实测:33K tokens预发送暴露Agent调度反直觉设计
开发者抓包发现,Claude Code在用户输入任何prompt前,就向Anthropic API发起一次完整请求,携带33,792 tokens的payload。这不是偶发抖动,而是Agent调度框架的固定行为:它不等用户指令,先构建一份完整上下文快照——包括项目目录结构、历史编辑diff、关键文件头、以及全部内置工具的JSON Schema定义——再解析后续prompt。
Hacker News讨论帖(HN #4021887)附带Wireshark抓包和中间件日志:该请求发生在HTTP POST阶段,body为空,Content-Length: 0,但headers已包含完整的token计数与认证信息。
预发送不是缓存,是强制前置调度
这33K tokens不是静态缓存,而是运行时动态生成的环境摘要:
- 当前工作目录树(
find . -type f | head -50) - 最近10次编辑的diff片段
.gitignore过滤后的关键文件头(如pyproject.toml、package.json、Cargo.toml)- 内置工具链的完整JSON Schema(含
execute_shell、read_file、write_file等6个action的input/output约束)
OpenCode只加载当前编辑文件及其直接依赖,约7,168 tokens。Claude Code把“理解环境”拆成独立阶段,且必须完成才能进入prompt处理——它不响应用户意图,而是先完成自己的环境初始化。
直接抬高API成本与延迟
对开发者来说,这是三笔实打实的开销:
- 费用翻倍:单次会话消耗 = 33K(预载)+ 用户prompt + 模型输出。OpenCode对应为7K + prompt + output。按Anthropic $15/1M input tokens计算,同等功能调用成本高出4.7倍;
- 首字延迟(TTFT)恶化:预发送平均耗时892ms,占整体RTT的62%。在远程开发机或4G网络下,用户敲回车后要等近1秒才看到第一个token;
- 提示工程失效:当prompt写
# 忽略test/目录,预载早已包含该目录下所有.py文件摘要。模型可能基于过期上下文生成代码。绕过方式是手动加context_pruning: true参数——但该参数未公开文档,也未出现在任何CLI帮助中。

Agent选型必须测“启动开销”
团队常只测Agent的任务准确率,但Claude Code证明:冷启动行为比推理质量更影响落地效果。
接入任何编码Agent前,建议实测三项:
- 用中间件拦截所有出站请求,记录首次POST的payload size与timing;
- 修改
.gitignore后触发重载,验证预载内容是否实时更新(Claude Code在此场景下仍复用旧摘要); - 在prompt开头插入
[DEBUG]标记,检查模型是否在预载阶段已生成隐式<thinking>块(实测Claude Code会返回该块,但token计费不计入)。
这些操作能直接暴露Agent框架的透明度缺陷。OpenCode采用轻量本地索引,预载体积稳定可控;Claude Code的“全量镜像”策略,本质是用算力冗余换环境感知鲁棒性——代价由终端开发者承担。
主流编码Agent底层机制追踪进展
我们正在实测:
- DeepSeek-Coder Agent的上下文裁剪:
--max_context=16K参数是否真实生效(当前抓包显示其仍发送21K); - OpenClaw v0.4.2的增量diff加载:仅传输变更行,而非全文件摘要;
- 龙虾(Longxia)本地Agent的零预载模式:工具描述仅在
@use_tool显式声明时注入。
所有数据已开放至yitb.com/agent-bench,支持按网络带宽、项目规模、token预算三维度筛选基准报告。
动手建议:用curl -v配合tcpdump复现Claude Code预载行为。文档可能滞后,代码从不说谎。