FRONTIER · 2026-10-29 · 指令栈

三个 Agent 最新版第一次请求里,工具定义占字符 63.2% 至 77.4%

一篇预印本拦截五个编码 Agent 共 1,886 次发布的第一次模型请求。各 Agent 最新那一版的第一次请求里,工具定义占 Claude Code 请求字符的 77.4%、Qwen Code 72.3%、OpenCode 63.2%;Codex 40.5%,Gemini CLI 18.9%。Claude Code 2.1.243 那次:74,078 字符里工具定义 57,346,系统提示 9,517(13%)。固定用户提示 21 个字符,占最新请求 0.02% 至 0.07%。

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-codeAnthropic Messages49449302/25–08/26
Codex@openai/codexOpenAI Responses17517404/25–08/26
Gemini CLI@google/gemini-cliGemini Generate Content19219206/25–08/26
OpenCodeopencode-aiOpenAI Responses93090706/25–08/26
Qwen Code@qwen-code/qwen-codeOpenAI Chat Completions12012007/25–08/26
合计1,9111,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 不是同一个比。

最新一次捕获:工具定义占请求字符的份额 分母是该次请求的全部字符。柱高按 3.6 像素 / 百分点。数据来自论文图 3 底行右侧。 工具定义 其余 100 50 0 77.4 Claude Code 72.3 Qwen Code 63.2 Open Code 40.5 Codex 18.9 Gemini CLI 其余含指令正文和请求里的其它字段。Gemini CLI 的工具定义柱矮,数字写在柱右侧,避免压进 68 像素高的格子。
图 1. 五个 Agent 各自最新一次捕获,工具定义占请求字符的份额。数据来自论文图 3 底行右侧。柱高按 3.6 像素 / 百分点画,作图参数是我的。
Claude Code 2.1.243:第一次请求 74,078 字符 数字来自论文图 1。绿框用户提示和系统字段,蓝框系统消息,灰框用户消息,玫红框工具定义,琥珀框角色对不上作者。 用户提示 21 字符 I AM THE USER PROMPT 系统字段 9,517 原文写成请求的 13% 系统消息 5,935 技能和子 Agent 目录 用户消息 327 含日期提醒和那 21 字 工具定义 57,346 字符 · 20 个工具 占这次请求 77.4%(57,346 / 74,078,原文图 3) Workflow 一个工具的描述 19,290 字符,比整段指令正文长 工具描述是指令正文的 2.6 倍;这篇提示没有要求 Workflow 9,517 + 5,935 + 327 + 57,346 = 73,125,差 953 原文没拆 角色名对不上作者 Gemini CLI 的环境事实 60%、Qwen Code 的 48% 写在用户角色消息里 Qwen Code 最新指令正文的 14% 在用户角色 两个 Agent 会插入助手消息「Got it. Thanks for the context!」 模型没生成这句。按角色读用户消息,会把 Agent 的字算给用户
图 2. Claude Code 2.1.243 第一次请求怎么分,以及 Gemini CLI / Qwen Code 把事实写进用户角色。73,125 和差 953 是我加的,原文只给了分项。

消息角色对不上作者。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%。