别再死磕模型调优了!Cursor和Manus告诉我们: 外壳(Harness)才是真正的护城河
导读:模型决定上限,脚手架(Scaffolding)决定下限
“每个人都在谈论模型,但没人在聊脚手架。”
今天文章通过对 Cursor、Manus、Devin 等独角兽产品的逆向工程,拆解了 Agent 圈的最新共识:
- 模型是互换的,外壳(Harness)才是护城河。
- 渐进式披露: 别让你的 Agent 在海量信息中“溺水”。
- 减法工程: 删掉 80% 的工具,成功率反而翻倍? 想知道如何跨越从“炫酷 Demo”到“落地工具”的鸿沟?答案全在这里。
作者:Himanshu (@Hxlfed14) 为 22 岁 AI 从业者,曾在卡内基梅隆大学和 UNSW 从事研究,现构建Cloudfluently(超7000用户),文章基于其实践经验,讨论模型特定支架如何提升代理可靠性。
每个人都在谈论模型,但没人在聊 脚手架(Scaffolding)。
如今交付最强 AI Agent 的公司——Claude Code、Cursor、Manus、Devin、SWE-Agent——都不约而同地收敛到了同一种架构:用一个刻意保持简单的循环包裹住模型,给它几个原子化工具作为“手”,再由 脚手架(外壳) 决定哪些信息在什么时候传递给模型。
模型是可替换的,外壳(Harness)才是产品。
以下是证据:
- Claude Opus 4.5:在一种脚手架下 CORE-Bench 评分仅 42%,换成另一种后飙升至 78%。
- Cursor:通过“延迟工具加载”,将 Token 消耗降低了 46.9%。
- Vercel:删除了其 Agent 80% 的工具,结果 Agent 反而从任务失败变成了任务成功。
同样的模型,同样的基准测试,唯一的变量就是外壳。 而在这些外壳中,最被低估的设计模式是什么?渐进式披露(Progressive Disclosure)——让 Agent 增量地发现上下文,而不是一开始就溺死在海量信息中。
本文将拆解什么是“外壳”,各家公司是如何构建的,以及为什么“渐进式披露”是区分“真正能干活的 Agent”与“华而不实的 Demo”的关键。 分析的来源(均列于文末)。
什么是智能体外壳(Agent Harness)?
LangChain 创始人 Harrison Chase 给出了最清晰的界定:
“框架(Framework)是抽象的……通常不带立场。而 外壳(Harness) 是‘自带电池’的(即插即用,且包含全套解决方案)。”
来源:LangChain "Improving Deep Agents with Harness Engineering"
智能体外壳是模型周围让其变得有用的所有东西:执行循环、工具定义、错误恢复、状态管理和信息流。模型决定做什么,而外壳决定模型能看到什么、能用什么工具,以及失败时该怎么办。
每一个生产级 Agent 都收敛于这个核心循环:
while (模型返回工具调用):
执行工具 → 捕获结果 → 附加到上下文 → 再次调用模型
就这么简单。Claude Code、Cursor 的 Agent 和 Manus 的整个架构都跑在这个循环里,真正的工程学在于围绕这个循环构建的东西。
各大公司如何构建其外壳
1. Claude Code:“模型控制循环”
背景:Claude Code 的架构已被广泛逆向工程,Anthropic 也发布了关于其外壳设计的详细文章。其核心是一个单一的扁平消息列表,配有约 18 个原子工具。来源:Anthropic "Effective Harnesses for Long-Running Agents"
- 循环机制:内部代号为
nO,这是一个简单的while(tool_call)循环。没有复杂的 DAG 编排,没有相互竞争的 Agent 人格。模型接收消息和工具,返回文本(循环结束)或工具调用(循环继续)。Anthropic 明确称之为“模型控制循环”,而非“代码控制模型”。 - 原子工具:约 18 个原语,分为四个类别:命令行发现(Bash, Glob, Grep, LS)、文件交互(Read, Write, Edit, MultiEdit)、Web 访问(WebSearch, WebFetch)和编排(TodoWrite, Task)。他们的哲学是“原语优于集成”。例如,他们选择用正则(ripgrep)而非向量数据库进行代码搜索,理由是 Claude 的理解能力足以编写复杂的正则,无需搜索索引。来源:PromptLayer "Claude Code: Behind-the-Scenes of the Master Agent Loop"
- 信息分层:会话开始时加载 6 层信息:组织策略、项目级
CLAUDE.md、用户设置、自动学习的MEMORY.md、会话历史和 Git 状态。系统提示词包含约 110 多条条件字符串(约 2896 个核心 token)。一个关键但被低估的外壳模式:注入系统提醒——在每次工具执行后的结果中,固定附加一段系统提醒。这比单纯在 System Prompt 中写指令效果好得多,因为它随每次调用不断重复。来源:Vrungta "Claude Code Architecture (Reverse Engineered)" - 错误恢复:主要由模型驱动。失败的工具执行会将错误消息作为工具结果返回,由模型决定如何处理。
- TodoWrite 技巧:这是一个“空操作(no-op)”工具,除了让 Agent 记录和跟踪计划外,没有任何实际功能。它作为一个“进度锚点”——出错后,模型会查阅它的 TODO 列表以弄清自己进行到了哪里,强制 Agent 表达思路,防止在长轨迹任务中走偏。LangChain 的“Deep Agents”分析中也明确提到了这一点。来源:LangChain "Deep Agents"
2. Cursor:“以文件为基本原语”
背景:Cursor 发布了“动态上下文发现”(2026年1月)以及另一篇关于特定模型外壳微调的文章。他们的架构有五个组件:路由器(Router)、LLM、10多个工具、上下文检索和一个类 ReAct 的编排器。来源:Cursor "Dynamic Context Discovery"
- 特定模型微调:Cursor 为每一个前沿模型都进行了专门的内部评估与“外壳微调”。不同的模型会获得不同的工具名称、提示词指令和行为指导。OpenAI Codex 模型获得了面向 shell 的工具名(如
rg);Claude 模型则获得了不同的推理摘要格式。来源:Cursor "Improving Cursor's Agent for OpenAI Codex Models" - 文件即原语:Cursor 架构中的一切都映射到文件。为什么?因为文件支持强大的搜索(ripgrep, jq, grep, 语义搜索),天然可分组(每个 MCP 服务器一个文件夹),且可版本化。他们的原话是:“文件是一个简单而强大的原语,比再增加一个抽象层更安全。”
- 自定义语义搜索:他们的嵌入模型是利用 Agent 的会话轨迹训练的。当 Agent 执行任务时,Cursor 会分析哪些文件本应在早期被检索到,并训练嵌入模型去匹配这种模式。结果:平均搜索准确度提升了 12.5%,在大型代码库(1000+ 文件)上的代码保留率提升了 2.6%。来源:Cursor "Improving Agent with Semantic Search"
3. Manus:“KV 缓存至上”
背景:Manus 自发布以来已经重写了五次框架。他们的平均输入输出 Token 比高达 100:1。他们称这种迭代过程为“随机梯度下降”。来源:Manus "Context Engineering for AI Agents: Lessons from Building Manus"
- Logit 掩码优于工具移除:Manus 曾尝试动态增删工具,但最终放弃了——因为修改上下文前段的工具定义会使后续所有 Token 的 KV 缓存(KV-Cache)失效。相反,他们永久加载所有约 29 个工具。但在解码阶段,通过限制输出 Token 的概率(Logit Masking)来控制每一步哪些工具可用。工具命名使用一致的前缀(browser_, shell_, file_*)以便进行组级别的掩码操作。来源:Manus
- 层级化动作空间:分为三个级别:Level 1(约 20 个原子函数调用工具),Level 2(通过 Bash 调用的沙箱实用程序——grep, ffmpeg, 以及通过 mcp-cli 调用的 MCP 工具),Level 3(使用预安装库的动态脚本)。这种设计将工具定义移出了上下文窗口,同时保留了完整能力。
- 最大的教训:他们发现最大的性能提升来自于“删减”——用 Shell 执行代替复杂的工具定义,用简单的移交代替“管理型 Agent”。如果随着模型变强,你的 Agent 外壳却变得越来越复杂,那肯定出问题了。
4. SWE-Agent:“智能体-计算机接口”
背景:普林斯顿大学的 SWE-Agent 在 NeurIPS 2024 上提出了 ACI(Agent-Computer Interface,智能体-计算机接口)概念,这是一种专为 LLM 智能体而非人类设计的专用接口。来源:Yang et al. "SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering"
- 受 linter 约束的代码编辑:当 Agent 发出编辑命令时,会自动运行代码检查工具(linter)。如果代码在语法上不正确,编辑就会被拒绝,Agent 必须重试。如果没有这个单一的外壳层面的安全护栏,性能会下降 3%。
- 观察结果压缩:除了最后 5 条观察结果外,所有的观察结果都被压缩为单行。Agent 能看到近期操作的完整细节以及较旧操作的摘要,这是一种融入循环内部的渐进式披露形式。
5. 其他玩家:Devin, Windsurf, Aider, Replit
- Devin:运行在隔离的云端虚拟机中,拥有一个用于处理重复任务的 Playbook 系统,以及一个知识管理系统(将反馈编码以供未来参考)。PR 合并率达到 67%,高于一年前的 34%。来源:Cognition "Devin's 2025 Performance Review"
- Windsurf:使用双智能体架构:一个规划智能体(Planning Agent)在后台持续运行并完善长期计划,而主模型处理短期动作。他们的“记忆”系统可以跨会话生成关于代码库模式的观察结果。
- Aider:拥有技术上最超前的上下文策略:使用 tree-sitter 构建基于 PageRank 的代码库地图。它解析代码以提取定义,构建一个以文件为节点、依赖关系为边的图,应用 PageRank 根据重要性对符号进行排名,并使用二分查找在 Token 预算内适配最关键的内容。
- Replit Agent:从单一智能体演变为三智能体架构(Manager, Editor, Verifier),因为他们发现单一智能体的错误率太高。其自我修复循环为:生成 → 执行 → 使用 Playwright 测试 → 修复 → 重新运行。
渐进式披露:那个还没被命名的模式
“渐进式披露(Progressive Disclosure)”借用自 UI/UX 设计,起源于 1980 年代 IBM Research 的 John Carroll,并在 1990 年代由 Jakob Nielsen 普及。其原则是:只显示当前需要的内容,按需揭示复杂性。
这对 Agent 设计至关重要。就像折叠菜单能减轻人类的认知负载一样,分层上下文加载能减少 LLM 的注意力分散(Attention Fragmentation)。来源:Honra "Why AI Agents Need Progressive Disclosure, Not More Data"
生产环境如何实现它?
- Claude Code 的
SKILL.md模式:技能文件存储在.claude/skills/中,且不会预加载到每次对话中。与每次会话必读的CLAUDE.md不同,技能仅在 Claude 检测到其相关性时加载。系统提示词将其描述为“按需加载”——Claude 只有在创建演示文稿时才会读取slide-decks.md。这防止了项目拥有几十个技能时的上下文膨胀。来源:Anthropic Claude Code Best Practices - Cursor 的延迟 MCP 工具加载:MCP 服务器包含许多带有长描述的工具,大部分都未被使用。Cursor 将工具描述同步到文件夹结构中,只给 Agent 提供工具名称作为静态上下文。完整的定义只有在需要时才抓取。在 A/B 测试中:Token 减少了 46.9%(具有统计学意义)。
- Manus 的文件系统卸载:Agent 根据需要读写文件。压缩被设计为可逆的:如果保留了 URL,就可以丢弃网页的内容;如果保留了文件路径,就可以省略文档。不断重写
todo.md的模式将全局计划推入了模型的“近期注意力区间”——直接对抗“中间迷失(Lost in the middle)”现象。
量化案例:外壳的力量
来自多个独立来源的数据一致表明:
Token 效率
- Claude-Mem 文档显示,静态加载会注入 25,000 个 Token,效率仅为 0.8%(在噪音中只有一个相关观察)。渐进式披露:955 个 Token,效率 100%。提升了约 26倍。
- Cursor 的延迟加载:减少了 46.9%。
- Vercel 的案例研究:删除 80% 的工具后,Token 从 145,463 降至 67,483,步骤从 100 降至 19,延迟从 724秒降至 141秒——并且 Agent 从任务失败转为任务成功。来源:Phil Schmid "Context Engineering for AI Agents: Part 2"
脚手架比模型更重要
- CORE-Bench:Claude Opus 4.5 在一种脚手架下得分为 42%,在另一种下得分为 78%。
- Sonnet 4:33% vs 47%。Sonnet 4.5:44% vs 62%。
- LangChain 的 deepagents-cli 仅通过改变外壳,就在 TerminalBench 2.0 上的得分从 52.8% 提升至 66.5%(提升 13.7 个百分点)。来源:LangChain "Improving Deep Agents with Harness Engineering"
为什么外壳需要这个
Liu 等人(TACL 2024)证明了 LLM 的表现遵循 U 型曲线——当相关信息在输入的开头或结尾时表现最高,而在中间时表现会下降。即使是长上下文模型也是如此。这就是为什么外壳至关重要:渐进式披露保持了输入的精简(减少了曲线失真),并将刚检索到的新信息放置在末尾(高注意力区域)。来源:Liu et al. "Lost in the Middle: How Language Models Use Long Contexts" (TACL 2024)
技术矩阵
基于公开文档,将外壳(Harness)技术映射至各智能体系统的快速参考。
图例:
[C] = 核心差异点 (Core differentiator)
[Y] = 使用/主张 (Uses/advocates)
[--] = 未公开讨论 (Not discussed publicly)
[alt] = 不同方案 (Different approach)
1. 循环架构 (Loop Architecture)
2. 渐进式披露 (Progressive Disclosure)
3. 错误处理与鲁棒性 (Error Handling & Robustness)
行业共识与分歧
- 共识:单一扁平循环优于复杂的编排;文件系统作为扩展内存;保留错误记录而非清理;使用伪计划工具(TodoWrite, todo.md)保持连贯性;原语(bash, grep, 文件系统)优于自定义集成。
- 分歧(工具过载处理):Manus 倾向于 Logit 掩码(加载所有工具,约束输出)。Cursor 倾向于延迟加载(按需加载工具定义)。相反的策略,但都有效。正确的答案可能取决于你的 Token 经济学。
- 分歧(管理强度):Google 的赌注是“把所有东西给模型,让它自己去搞清楚”(2M Token 窗口)。而其他所有人都在构建能主动过滤和分发信息的外壳。研究仍然表明,随着输入增加,性能会下降 15-47%。“重外壳”方案目前在实践中胜出。
- 未解决的问题:如何评估外壳质量。Cursor 公布的 46.9% Token 减少量是极少数公开的数据之一。目前没有标准基准可以用来头对头比较外壳设计。何时共享子智能体状态 vs 隔离状态,仍然纯粹是经验之谈。
值得注意的模式:交付最强 Agent 的团队都在不断做减法。Manus 经历了五次重写,每次都在删减东西。Anthropic 设计的 Claude Code 脚手架会在模型进步时逐渐缩小。Replit 虽然从一个 Agent 变成了三个,但每个独立的 Agent 都变得更简单了。过度工程(Over-engineering)是默认的失败模式。
总结:如果你正在构建 Agent
这项研究明确了三件事:
- 把工程精力花在外壳上,而不是挑选模型上。
- 渐进式披露不是可选项,而是架构必需。
- 计划让你的外壳变得更简单,而不是更复杂。
正如 Dex Horthy(“12 Factor Agents”方法论的提出者)所说,阈值在于模型输入容量的 40%:一旦超过这个比例,你就会进入他所说的“愚蠢区(dumb zone)”——信噪比下降,注意力破碎,Agent 开始犯一些看起来像推理失败的错误,但这实际上只是因为外壳设计太烂而导致的信息过载。来源:Horthy "12 Factor Agents"
英文:https://x.com/Hxlfed14/status/2028116431876116660