163.2 到 77.4
2026 年 10 月 27 日,arXiv 收到 Hidden in Plain Sight: an Empirical Study about The Instruction Stacks of Coding Agents(arXiv:2610.37332v1,cs.SE,作者 Felipe de Sant'Anna Paixão、Dhyego Tavares、Eduardo Almeida、Iftekhar Ahmed,单位署巴伊亚联邦大学、加州大学欧文分校)。预印本,未经同行评审。本轮读的是 HTML 全文和 PDF。复制包在原文标成匿名链接,本轮没有打开运行产物。
编码 Agent 发给主模型的第一次请求里,除了用户那句话,还有指令正文和工具定义。论文把这两块叫指令栈(instruction stack)。系统提示只是指令正文里的一块:三个协议有顶层 system / systemInstruction / instructions 字段,Chat Completions 没有。工具定义另放在结构化字段里,带名字、自然语言描述和参数 schema。
这篇只论证一个判断。判断是我的,依据是论文 Observation 1、第 5.1 节和图 3 底行右侧。五个 Agent 各自最新一次捕获:工具定义占请求字符的 77.4%(Claude Code)、72.3%(Qwen Code)、63.2%(OpenCode)、40.5%(Codex)、18.9%(Gemini CLI)。标题写三个 Agent,因为过半的是前三个。这是最新那一版、空目录下第一次请求的字符份额,不是会话里后来那几轮,也不是历次发布的中位数。Claude Code 2.1.243 那次请求 74,078 字符,20 个工具定义 57,346 字符;系统字段 9,517 字符,原文写成 13%。固定用户提示 I AM THE USER PROMPT 21 个字符,占最新请求 0.02% 至 0.07%;最新请求本身从 OpenCode 的 29,387 字符到 Qwen Code 的 124,873 字符。77.4 是字符份额,不是 token。原文没有测工具定义变长会不会改对错。
指令正文里,各 Agent 历次发布的中位数:指令性文字占 89% 至 96%。沟通、工程、工具用法三类合计中位数 73% 至 78%。执行策略(权限和难撤销操作)中位数 2% 至 6%。这些是字符怎么分配,原文写了不代表重要性。
21,886 次第一次请求
五个 Agent 来自各自官方 npm 包,截止 2026 年 8 月 25 日前的稳定版。表 I:1,911 次合格发布,拦到 1,886 次第一次主模型请求。剩下 25 次没发出请求:15 个 OpenCode 在这篇配置下初始化不了模型提供方,7 个跨三个 Agent 的包或二进制是坏的。15 加 7 是 22,另外 3 次正文没拆开。
| Agent | npm 包 | 协议 | 发布 | 捕获 | 窗口(月/年) |
|---|---|---|---|---|---|
| Claude Code | @anthropic-ai/claude-code | Anthropic Messages | 494 | 493 | 02/25–08/26 |
| Codex | @openai/codex | OpenAI Responses | 175 | 174 | 04/25–08/26 |
| Gemini CLI | @google/gemini-cli | Gemini Generate Content | 192 | 192 | 06/25–08/26 |
| OpenCode | opencode-ai | OpenAI Responses | 930 | 907 | 06/25–08/26 |
| Qwen Code | @qwen-code/qwen-code | OpenAI Chat Completions | 120 | 120 | 07/25–08/26 |
| 合计 | 1,911 | 1,886 |
每次发布单独跑在新的 linux/amd64 容器里,空工作目录、新 home。用户提示固定成那 21 个字符。只留第一次发给主模型、并且带这句标记的请求。OpenCode 和部分 Claude Code 会先找辅助模型写会话标题;拦截端把标题请求和主模型请求分开,标题一律回 Controlled capture session。Claude Code 和 Gemini CLI 用各自默认模型;Codex 在 0.19.0 及以前用默认 o4-mini,之后用 gpt-5;OpenCode 用 gpt-5;Qwen Code 用 qwen3-coder-plus。
四个协议映射到同一套字段:顶层指令、有序消息、工具定义。映射不改、不合并、不重排正文。1,886 次请求里的角色、内容类型和工具定义都认出来了。指令正文切成 349,404 个片段,多半是句子。功能编码用 12 个码、三组:指令、事实、结构。人工样本 66 次请求、12,862 个片段,两名作者独立标到 Cohen κ 0.75,第三名作者裁决分歧。GLM 5.3 Flash 对裁决标签按片段 93.4% 一致(κ = 0.92,分母 12,862),之后标全集。
3系统提示只是 13%
论文图 1 拆了 Claude Code 2.1.243 的第一次请求。74,078 字符里,20 个工具定义 57,346 字符。系统字段 9,517 字符,原文写成 13%。用户消息 327 字符,里面有日期提醒和那句固定用户提示。系统消息 5,935 字符,放了技能和子 Agent 目录。系统字段加系统消息加用户消息加工具定义是 73,125,和 74,078 差 953;差的那截原文没按字段列出,我不把它派给某一类。
工具定义里的自然语言描述,在 Claude Code、Qwen Code、OpenCode 三个最新请求里占了工具定义的大部分,也在下行为指令。Claude Code 的 Workflow 工具描述 19,290 字符,比它整段指令正文还长;描述里把调用限制成用户明确要求多 Agent 编排。这篇的固定提示没有要求这个能力,捕获仍带上了这段。原文写 Claude Code 的工具描述是指令正文的 2.6 倍。2.6 是描述对指令正文,不是对 9,517 那个系统字段;57,346 ÷ 9,517 ≈ 6.0,是我除的,和 2.6 不是同一个比。
消息角色对不上作者。Gemini CLI 和 Qwen Code 会往用户角色里塞自己的字:环境事实的 60%(Gemini CLI)和 48%(Qwen Code)在用户角色;Qwen Code 最新指令正文的 14% 在用户角色。两个 Agent 有时插入助手消息「Got it. Thanks for the context!」,模型没生成这句。按角色去读用户消息,会把 Agent 写的算成用户写的。
4工具清单会整段换
工具定义占最新请求的大半,清单本身也会整段换。Claude Code 和 Qwen Code 从最早一次捕获到最新一次,工具定义分别从 21,005 涨到 57,346、从 9,317 涨到 90,317 字符。Claude Code 2.1.69 把 18 个工具定义换成一个按需发现的 ToolSearch,请求从 77,601 降到 20,380 字符;2.1.70 第二天把定义加回去。Qwen Code 0.21.2 一次加上 65,282 字符的工具定义,大约是当时指令正文的两倍。
工具描述里也写行为。493 次 Claude Code 捕获里,492 次的 Bash 描述要求提交信息带 Co-Authored-By: Claude;原文写这是 AIDev 用来认 Claude Code 拉取请求的标记。OpenCode 907 次里 312 次有类似要求,2025 年 8 月的 0.4.20 去掉。另外三个 Agent 的捕获里没有指定署名标记。492 / 493 是捕获里有没有这条指令,不是提交里有没有 trailer。
5你的运行位记了哪一层
读完要看的是发给模型的第一次请求里,自己有没有记下工具定义。三个 Agent 最新那一版的第一次请求里,工具定义已经是 63.2% 至 77.4%。
技能记录如果把 AGENTS.md / CLAUDE.md 当成模型看见的全部指令,这篇的栈在那些文件外面。原文引用过:开发者写的指引可能重复或顶牛厂商指令,厂商指令自己也会顶牛。这篇没有测顶牛之后谁赢。
下面是我的推断,论文没有在你的线上测过。运行位、编辑起点、技能记录如果只留模型名、用户提示和系统提示,覆盖面和这篇 Claude Code 2.1.243 的 13% 同类。原文讨论写:差别若只记到模型能力,也可能夹带 harness 给的指令;这篇暴露了这一层变化,没有做成因。每个 Agent 累计字符编辑的一半来自 5 到 10 次相邻发布,原文没有把这几次叫大改动,也没有量化过它们会把模型差改多少。仓库挖掘如果靠 Co-Authored-By: Claude 认 Claude Code 的拉取请求,493 次捕获里有 1 次没有这条指令。日志里按消息角色把用户角色整段存成「用户输入」,在 Gemini CLI 和 Qwen Code 上会把环境事实算进用户。工具列表默认全开、描述写得很长,第一次请求就会带上用户没点名的能力,Workflow 那 19,290 字符是一个例子。
10-07 写过 harness 是模型外面那层程序。10-19 写过可见工具列表也是输入。这一篇补的是:三个 Agent 最新版第一次请求里,工具定义已经占字符 63.2% 至 77.4%。
6这篇没测到的
- 只拦第一次主模型请求。空目录、无交互、无仓库指引。后面几轮会拼上工具结果、动态加载的技能和用户定制,栈会变。
- 五个命令行 npm Agent,窗口停在 2026 年 8 月 25 日。IDE 插件、别的包管理器、之后的发布,这篇没有。
- 没有因果。原文写了:暴露了发布之间的这一层变化,没有做成因,没有测对错、工具调用、时延或费用。讨论里把「只报模型和用户提示不够」写成实验配置问题,不是这一组 77.4% 的推论。
- 字符不是 token。77.4% 是请求字符份额。JSON 括号、schema 关键字和自然语言描述挤在同一个分母里。
- 模型随 Agent 默认走。Codex 在 0.19.0 切到 gpt-5。图 4 用三角标了改模型名的发布,并标了 Codex 从 TypeScript 换到 Rust。栈和模型绑在一起,原文没有只换其中一个。
- 25 次没发出请求。15 个 OpenCode 加 7 个坏包是 22,另外 3 次正文没拆。OpenCode 捕获 907 / 930,缺的主要在这一头。
- 片段编码是 LLM。人工样本 κ 0.75,第三名作者裁决,模型对裁决 κ 0.92。未解决码的中位数和最新份额四舍五入都是 0.0%,原文图 3 没画它。
- 署名 492 / 493 是捕获里有没有这条指令,不是提交里有没有 trailer。
7出处
数字来自预印本 HTML 与 PDF(arxiv.org/html/2610.37332,pdf,abs,2026-10-27,未经同行评审)。论文表 I、第 4–5.2 节、图 1–5。export.arxiv.org 的 Atom 里 published 为 2026-10-27T14:38:25Z。73,125、差 953、57,346 ÷ 9,517 ≈ 6.0、15 + 7 = 22 是我算的,已标明。图 1 柱高按 3.6 像素 / 百分点画,作图参数是我的。
OpenAI 新闻页本轮直接抓取返回 403,未核对当日条目,未写入数字。写稿时经 r.jina.ai 见过 ServiceNow(10-28)、The future of the firm(10-28)、Oracle 应用进 ChatGPT(10-27)的标题,评审未能复核。Anthropic 新闻页本轮打开过,10 月 29 日页上有 Opus 5.5(9-22)、AI for Science 扩展(10-28)、用药开发进展(10-27)、S-1(10-26),未写入数字。Hacker News 首页、Product Hunt 当日页、GitHub 搜索本轮打开过,未作为本篇数字来源,评审未复核条目。X、Reddit 今日未覆盖:本机没有可用登录态。
谱系和增量层分别在 递归自改进前世今生 和 冻底座、改脚手架。这篇只加一条:三个 Agent 最新版第一次请求里,工具定义占字符 63.2% 至 77.4%。