<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CodexCLI on Vibe Coding 笔记</title><link>https://8-152-7-248.sslip.io/tags/codexcli/</link><description>Recent content in CodexCLI on Vibe Coding 笔记</description><generator>Hugo -- gohugo.io</generator><language>zh_CN</language><lastBuildDate>Mon, 26 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://8-152-7-248.sslip.io/tags/codexcli/index.xml" rel="self" type="application/rss+xml"/><item><title>40 倍 token，成功率几乎没动：换个模型不如换个脚手架</title><link>https://8-152-7-248.sslip.io/p/harness-hidden-variable/</link><pubDate>Mon, 26 Oct 2026 00:00:00 +0800</pubDate><guid>https://8-152-7-248.sslip.io/p/harness-hidden-variable/</guid><description>&lt;img src="https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/cover.png" alt="Featured image of post 40 倍 token，成功率几乎没动：换个模型不如换个脚手架" /&gt;&lt;p&gt;你有没有过这种时刻：明明换了个更强的模型，代理写出来的代码却没更稳，token 账单倒是涨了一截。&lt;/p&gt;&#10;&lt;p&gt;你也可能反过来。某天你升级了一次代理，行为立刻变了：以前一句话说得清的事，它现在绕三个圈；以前一次改对的文件，它要改两遍还改错。你大概率把这笔账记在了模型头上。&lt;/p&gt;&#10;&lt;p&gt;2026 年有三篇论文把这个账重新算了一遍。结论有点反直觉：&lt;strong&gt;决定你花多少钱、干活利不利索的，主要不是模型，是模型外面那层壳。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;那层壳有个专业名字，harness，论文里也常写成 scaffold，中文就是脚手架。它管的是：工具怎么发出去、上下文怎么管、什么时候停下来、失败了怎么重试。你用的 Claude Code、Codex CLI、Cursor、OpenCode、Goose，全都是 harness。&lt;/p&gt;&#10;&lt;h2 id="40-倍-token成功率几乎没动"&gt;40 倍 token，成功率几乎没动&#10;&lt;/h2&gt;&lt;p&gt;第一篇论文 2026 年 6 月 8 日挂上 arXiv：《The Scaffold Effect in Coding Agents》（arXiv:2607.22585）。&lt;/p&gt;&#10;&lt;p&gt;作者做了件很笨的事：把模型按住不动，换 harness。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;We evaluate Qwen 3.6 Plus and MiniMax M2.5 across three open-source harnesses (Goose, OpenCode, OpenHands-SDK) on a stratified 50-task subset of Terminal-Bench Pro. Harness choice induces up to a 40x difference in tokens per solved task, while paired within-model pass-rate differences remain 0-8 percentage points (95% paired-task bootstrap CIs include zero except for the largest gap).&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;翻成人话：&lt;strong&gt;换个 harness，每解一道题的 token 消耗最多能差 40 倍；同一个模型下，成功率只差 0 到 8 个百分点&lt;/strong&gt;——除了差距最大的那一档，其余 95% 置信区间都包含 0，也就是「测不出差别」。&lt;/p&gt;&#10;&lt;p&gt;40 倍是什么概念。你以为自己在为「模型能力」付钱，账单的大头可能只是壳在反复读同一个文件。&lt;/p&gt;&#10;&lt;p&gt;更扎心的是失败方式也跟着 harness 走，而且换个模型也改不掉：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;Failure fingerprints replicate across models (REASON for Goose, VERIFY/MAX_TURNS for OpenHands-SDK, idle-loop/TIME for OpenCode), indicating harness-level biases that are largely model-independent.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Goose 老是卡在「继续想」上，OpenHands-SDK 老是把次数用光，OpenCode 老是原地转圈不干活。三种不同的病，模型换了照样犯。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;病根在壳上。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;论文最后那句建议，我认为是全文最值钱的一句：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;We therefore recommend selecting harness-model pairs by pass rate under token/latency budgets, and reporting token usage, latency, and full harness specifications alongside any model comparison.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;注意它的落点：不是「选更强的模型」，是「在 token 和延迟的预算约束下，选成功率最高的 harness-模型配对」。&lt;strong&gt;这是一个采购决策，不是一个技术信仰。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;这是一篇 7 页的 preliminary work，投稿在 ICML 2026 的 DL4C Workshop，尚未正式发表。数据量不大，但控制变量的设计干净，值得当作信号看。&lt;/p&gt;&#10;&lt;h2 id="35-个版本模型根本没动"&gt;35 个版本，模型根本没动&#10;&lt;/h2&gt;&lt;p&gt;第二篇是同年 7 月 4 日的《Don&amp;rsquo;t Blame the Large Language Model》（arXiv:2607.03691），标题几乎就是答案。&lt;/p&gt;&#10;&lt;p&gt;它做的是纵向研究：固定底座模型，把 Qwen Code CLI 的&lt;strong&gt;连续 35 个版本&lt;/strong&gt;一个一个拿来测，每个版本跑 50 道分层的 SWE-bench Verified 任务。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;Unlike prior work that fixes the agent harness and varies the model, we fix the model and vary only the agent harness, evaluating 35 sequential releases to measure their impact on agent effectiveness and efficiency.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;它顺手统计了五个主流开源 harness（Codex、Qwen Code、Gemini、OpenCode、OpenHands）的开发节奏，然后发现了一件事：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;revealing extreme release velocities exceeding two releases per day and thousands of issues within months.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;脚手架自己一天发两个版本。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;这篇论文的贡献不只是数据，它还给了一个命名。以前你升级代理觉得它变笨了，大家习惯归罪于模型。这篇论文说，这种归因很可能是错的。质量波动应该去脚手架里找，而且能追到具体的 PR。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;We trace the resulting quality fluctuations to specific development patterns and architectural components, and illustrate our findings with concrete qualitative evidence linking individual pull requests to measured quality shifts.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="同一个模型换个代理差-6-倍"&gt;同一个模型，换个代理差 6 倍&#10;&lt;/h2&gt;&lt;p&gt;第三篇是 SWE-Bench Mobile（arXiv:2602.09540），2 月 10 日发表在 KDD 2026。这个基准用的是真实 iOS 生产代码库，任务来自真实 PRD 和 Figma 设计稿，不是编出来的玩具题。&lt;/p&gt;&#10;&lt;p&gt;它测了 22 组「代理 × 模型」配置，四个代理：Cursor、Codex、Claude Code、OpenCode。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;We evaluate 22 agent-model configurations across four coding agents &amp;ndash; three commercial (Cursor, Codex, Claude Code) and one open-source (OpenCode) &amp;ndash; and find that even the best configurations achieve only 12% task success rate.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;最好的配置也只有 12% 成功率。&lt;/p&gt;&#10;&lt;p&gt;而它最狠的发现是这个：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;agent design matters as much as model capability &amp;ndash; the same model shows up to 6× performance gap across agents&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;同一个模型，换个代理，成功率差 6 倍。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;这篇里还有一条我特别想单独拎出来：简单的「防御式编程」提示词，比复杂的提示词好 7.4%。天天写提示词的人该记住这一条：在 agent 那边，很多复杂度是你自己加上去的。&lt;/p&gt;&#10;&lt;h2 id="40-倍不只活在论文里"&gt;40 倍不只活在论文里&#10;&lt;/h2&gt;&lt;p&gt;工程上有没有对应的数？有。&lt;/p&gt;&#10;&lt;p&gt;Tempest 是个并行跑多个 CLI 代理的桌面工具（Apache-2.0，193 star）。它做的事很具体：在你本机建一张代码知识图，所有并行的代理会话共享这一张图，而不是各自把代码库扫一遍。&lt;/p&gt;&#10;&lt;p&gt;它自己贴的基准表是这样的：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;仓库&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;语言&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: right"&gt;接入后 token&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: right"&gt;未接入 token&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: right"&gt;节省&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: right"&gt;工具调用节省&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;tokio&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rust&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;119K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;1.02M&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;88%&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;87%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;okhttp&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Kotlin&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;73K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;417K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;83%&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;91%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;excalidraw&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TypeScript&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;210K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;1.19M&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;82%&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;84%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;django&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Python&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;78K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;416K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;81%&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;92%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;gin&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Go&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;84K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;243K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;66%&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;71%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;alamofire&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Swift&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;184K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;493K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;63%&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;69%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;vscode&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TypeScript&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;307K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;676K&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;55%&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;63%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;README 写明这是每个仓库每组 4 次有效运行的中位数，同代理、同模型、同提示词，&lt;strong&gt;唯一变量是接不接那张共享图&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;它对问题本身的描述值得贴出来：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;Run five agents in parallel and each one reads your entire codebase from scratch — the same files, the same context, five times over. You pay for every token, every time.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;并行代理的边际成本不是线性的，因为上下文是最贵的那部分。&lt;/strong&gt; 五个代理并行，就是把同一份上下文买了五遍。&lt;/p&gt;&#10;&lt;p&gt;这张表和前面那篇 40 倍的论文，讲的是同一件事的两头：论文说换个 harness 能差 40 倍，Tempest 说就算 harness 不换，把同一份上下文喂五遍也能差好几倍。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="三篇论文与 Tempest 基准测出的同一件事" class="gallery-image" data-flex-basis="327px" data-flex-grow="136" height="792" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/01-three-papers.png" srcset="https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/01-three-papers_hu_68bc8bc097843f0c.png 800w, https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/01-three-papers.png 1080w" width="1080"&gt;&lt;/p&gt;&#10;&lt;h2 id="脚手架自己一天发两个版本"&gt;脚手架自己一天发两个版本&#10;&lt;/h2&gt;&lt;p&gt;我用 GitHub API 扫了 2026 年 9 月 26 日到 10 月 26 日这 30 天：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Claude Code：25 个 release，全是稳定版，预发布 0 个，覆盖 20 个发布日，最新是 v2.1.310（10 月 23 日）。&lt;/li&gt;&#10;&lt;li&gt;Codex CLI：92 个 release，其中稳定版 12 个、预发布 80 个，覆盖 25 个发布日。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;（Codex CLI 这个数是按全部 release 翻页统计的。如果只翻第一页 30 条，会低估成 30 个以内。）&lt;/p&gt;&#10;&lt;p&gt;25 个稳定版、0 个预发布，意味着 Claude Code 的稳定线一天能推好几版。这种节奏下，&lt;strong&gt;你昨天跑得好好的代理，今天可能就已经不是同一只了。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;而且这些改动里，混着货真价实的「壳的问题」。v2.1.309（10 月 22 日）的 release notes 里有一条：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;Fixed sandboxed Bash commands on macOS and Linux running the shell&amp;rsquo;s startup files outside the sandbox before each command&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;沙箱里的命令在执行前，先在沙箱外面把 shell 的启动文件跑了一遍。这是壳的漏洞，跟模型一点关系都没有。&lt;/p&gt;&#10;&lt;p&gt;同一天的 v2.1.307 则开始把「被拦下」这件事变成可观测数据：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;Added the &lt;code&gt;claude_code.safety_event&lt;/code&gt; OpenTelemetry event for each tool call a permission rule, auto mode, a safety check, a hook or the sandbox stopped, prompted or sent back&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;每次权限规则、自动模式、安全检查、hook 或沙箱把工具调用拦下来，都会单独产生一个遥测事件。&lt;strong&gt;你终于能看见壳在替你做决定了。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Claude Code 与 Codex CLI 近 30 天的发版节奏对比" class="gallery-image" data-flex-basis="332px" data-flex-grow="138" height="780" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/02-release-cadence.png" srcset="https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/02-release-cadence_hu_1df34ad4cc5d398b.png 800w, https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/02-release-cadence.png 1080w" width="1080"&gt;&lt;/p&gt;&#10;&lt;h2 id="三条能拿去用的判断标准"&gt;三条能拿去用的判断标准&#10;&lt;/h2&gt;&lt;p&gt;落到你手上该怎么做，三条。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一、别再只比模型，把 harness 当一等变量测。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;比模型的时候，harness 是个没写进报告的隐藏条件。同一个模型在 Claude Code 和在 Goose 里跑出完全不同的账单，你把这笔账算给了模型。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;二、给每个配对定预算，别只看通过率。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;论文给的方法很直接：在 token 和延迟的预算下，选成功率最高的配对。预算卡长这样：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;harness&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;goose&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MiniMax M2.5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;harness_version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;写具体版本号，别写 latest&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;budget&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tokens_per_task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;latency_p90_seconds&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;max_no_action_turns&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;measured&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;pass_rate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tokens_per_solved_task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;no_action_turns_per_task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;（&lt;code&gt;null&lt;/code&gt; 是故意的：第一次跑先留空，填了数才有意义。）&lt;/p&gt;&#10;&lt;p&gt;论文还留了一个容易被忽略的口子：no-action turn 就是「代理这一轮什么都没干」。它不只是 token 税，还是&lt;strong&gt;等待税&lt;/strong&gt;——你盯着屏幕等它转圈，那是实打实的时间。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;三、拿不准的时候，并排看原始答案，别只看一个代理的结论。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;一个代理给一个答案，你没法判断这是模型的水平还是壳的水平。让两三个 harness 各跑一遍同一个任务，把原始答案并排放着看，差异会自己跳出来。&lt;/p&gt;&#10;&lt;p&gt;MCO（MIT，540 star）就是干这个的，它自己管这叫 CLI 优先的编排层：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1) 先看本机装了哪些 harness&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mco doctor --json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2) 同一条任务，并排跑三个 harness&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mco review &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --repo . &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --prompt &lt;span class="s2"&gt;&amp;#34;Review this repository for high-risk bugs.&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --providers claude,codex,pi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3) 固定模型，只换 harness —— 这正是论文里的控制变量&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mco review &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --providers codex,pi &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --provider-models-json &lt;span class="s1"&gt;&amp;#39;{&amp;#34;codex&amp;#34;:&amp;#34;gpt-5.4&amp;#34;,&amp;#34;pi&amp;#34;:{&amp;#34;provider&amp;#34;:&amp;#34;seal&amp;#34;,&amp;#34;model&amp;#34;:&amp;#34;deepseek-v4-pro&amp;#34;}}&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --prompt &lt;span class="s2"&gt;&amp;#34;Review this repository for bugs.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第三条最关键：把模型钉死，只换 harness。你在自家仓库上复现的，就是那三篇论文用的方法。&lt;/p&gt;&#10;&lt;p&gt;MCO 有一点很值得学：它明确说自己不生成结论。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;ldquo;MCO keeps answer text opaque. It does not turn natural-language output into findings, severity, confidence, consensus, or an automatic decision.&amp;rdquo;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;编排层最容易犯的错，就是替你想好了结论。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="选 harness 的三个判断标准" class="gallery-image" data-flex-basis="341px" data-flex-grow="142" height="760" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/03-three-checks.png" srcset="https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/03-three-checks_hu_4a0ecf0d8d1b2c89.png 800w, https://8-152-7-248.sslip.io/p/harness-hidden-variable/images/03-three-checks.png 1080w" width="1080"&gt;&lt;/p&gt;&#10;&lt;p&gt;最后问一句：&lt;strong&gt;你现在用的那个代理，你知道它的 token 账是怎么算的吗？&lt;/strong&gt;&lt;/p&gt;&#10;</description></item></channel></rss>