首页 › AI Agent › Agent100道面试题 › 框架选型-frameworks/ › 主流 Coding Agent Harness 横评:Claude Code / Cursor / Aider / Cline / Codex CLI 在 Context / Tool / Permission / Sandbox 四维对比

主流 Coding Agent Harness 横评:Claude Code / Cursor / Aider / Cline / Codex CLI 在 Context / Tool / Permission / Sandbox 四维对比

难度: 高级 🆕 2026 新增(Harness 主题)​

简短回答​

2026 年 Coding Agent Harness 已从"单一 CLI 工具"演化为多层架构产业。Claude Code(Anthropic)、Cursor(Cursor Inc.)、Aider(Paul Gauthier)、Cline(Cline.bot)、Codex CLI(OpenAI)这五大 harness 在四个维度上 故意选择了完全不同的策略:Context(Claude Code 自动 compact + Memory tool vs Aider tree-sitter + PageRank vs Cursor 云端 Composer vs Cline IDE context vs Codex AGENTS.md)、Tool(MCP / 自家 SDK / Function calling / Apply_patch)、Permission(Claude Code allow-list + Hook 硬拦 vs Cline 显式 Plan/Act vs Codex 三档 approval mode)、Sandbox(无沙箱 vs OS 原生 Seatbelt/bubblewrap vs 云端 VM)。任何"哪个最好"的回答都必须先问"在哪个维度"。Claude Code 的扩展生态(Skill / MCP / Slash / Hook / Subagent 五机制协同)是当前最完整、最值得深入研究的范本。​

2026 年中值得关注的两个新动向:一是工具融合趋势——The New Stack 报道 Claude Code / Cursor / Codex 三大工具正通过 MCP、Skill 等共享开放标准"merge into one stack",能力趋同而非分化;二是自主性光谱的另一极——Devin 2.0(2026.2)走"多模型全自主异步工程师"路线,自主任务完成率约 40%,与五大本地 harness 的"人机协作"路线形成对照。​

Cheat sheet:​

•

四维对比口诀:Context(怎么记)/ Tool(怎么用)/ Permission(怎么审)/ Sandbox(怎么隔)​

•

Context 三流派:全塞 + compact(Claude Code)/ 检索式(Aider repo map)/ 云端(Cursor / Devin)​

•

Sandbox 两路线:OS 原生(Codex Seatbelt/bubblewrap)vs 云端 VM(Devin / Replit / Cursor 3)vs 无沙箱靠人审批(Cline / Claude Code)​

•

Claude Code 五机制口诀:MCP=plumbing / Skill=how-to / Slash=button / Hook=guardrail / Subagent=isolation​

•

Hook vs Prompt 本质差:Hook 确定性(regardless of model) / Prompt 概率性(model may skip)​

•

关键数据:Cline CLI + Claude Opus 4.7 在 Terminal Bench 2.0 跑出 74.2%,超过 Claude Code 同模型 69.4%​

•

2026 三强新进展:Claude Code(Ultrathink 深思考模式 + 语音输入,2026.3)/ Cursor 3(重建界面 + 并行 Agent 编排)/ Codex CLI(每周多 alpha 迭代)​

•

2026 工具融合趋势:三大 harness 通过 MCP、Skill 等共享标准走向 "merge into one stack",能力趋同​

•

自主性另一极:Devin 2.0(2026.2,多模型,全自主异步工程师)自主完成率约 40%,$500/mo;社区共识是「组合两个工具」(如 Aider/Cline + Devin)而非单押​

详细解析​

一、五大 Coding Agent Harness 形态总览​

​

#eEJSNsBFeqek text { white-space: pre; }#eEJSNsBFeqek .fb0 { stroke: var(--N900-FG, 0.15); }#eEJSNsBFeqek .fb0 {stroke: rgba(31,35,41, 0.15)}#eEJSNsBFeqek .fx0 { stroke-miterlimit: 10; }#eEJSNsBFeqek .fx0 {stroke-miterlimit: 10}#eEJSNsBFeqek .fa1 { fill: rgb(187, 191, 196); }#eEJSNsBFeqek .fa1 {fill: rgb(187, 191, 196)}#eEJSNsBFeqek .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#eEJSNsBFeqek .fx1 {font-style: normal}#eEJSNsBFeqek .fx2 { text-anchor: middle; }#eEJSNsBFeqek .fx2 {text-anchor: middle}#eEJSNsBFeqek .fx3 { dominant-baseline: central; }#eEJSNsBFeqek .fx3 {dominant-baseline: central}#eEJSNsBFeqek .fx4 { stroke: none; }#eEJSNsBFeqek .fx4 {stroke: none}#eEJSNsBFeqek .fc0 { fill: var(--text-caption); }#eEJSNsBFeqek .fc0 {fill: #646a73}#eEJSNsBFeqek .fa2 { fill: var(--text-link-disabled); }#eEJSNsBFeqek .fa2 {fill: rgb(187, 191, 196)}#eEJSNsBFeqek .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#eEJSNsBFeqek .fx5 {font-style: normal}#eEJSNsBFeqek .fx6 { text-anchor: start; }#eEJSNsBFeqek .fx6 {text-anchor: start}#eEJSNsBFeqek .fx7 { dominant-baseline: alphabetic; }#eEJSNsBFeqek .fx7 {dominant-baseline: alphabetic}#eEJSNsBFeqek .fc1 { fill: rgb(0, 0, 0); }#eEJSNsBFeqek .fc1 {fill: rgb(0, 0, 0)}#eEJSNsBFeqek .fb1 { fill: var(--N900-FG, 0.15); }#eEJSNsBFeqek .fb1 {fill: rgba(31,35,41, 0.15)}#eEJSNsBFeqek .fb2 { fill: rgb(209, 217, 224); }#eEJSNsBFeqek .fb2 {fill: rgb(209, 217, 224)}#eEJSNsBFeqek .fa3 { fill: var(--bg-body); }#eEJSNsBFeqek .fa3 {fill: #fff}ABCDE123456HarnessClaude CodeCursorAiderClineCodex CLI形态全屏 CLI + IDE 集成VS Code Fork + ComposerGit-first 终端VS Code 扩展 + 2026-05 独立 SDKRust 终端 App模型策略锁定 Claude(Opus 4.7 / Sonnet 4.6 / Haiku 4.5)自家 Composer 模型 + 多模型可选BYOM(OpenAI / Claude / 本地)BYOM(任意)OpenAI(gpt-5 / o5 / codex models)标志特征Hook + Skill + MCP + Subagent + Plugin 五件套;75% auto-compact;2026.3 新增 Ultrathink 深思考模式 + 语音输入Cursor 3(2026-04)重建界面,引入 Agents Window(云端 VM)+ 并行 Agent 编排tree-sitter + PageRank repo mapPlan/Act 显式分离;checkpoint 每步可回滚OS 原生 Seatbelt/bubblewrap 沙箱 + AGENTS.md 标准SWE-bench Verified 2026-Q1Opus 4.7 87.6% / Sonnet 4.5 80.9%Composer 78.4%(Cursor 3 发布数据)70%+(Sonnet 4.6 配置)Cline CLI + Opus 4.7 = Terminal Bench 2.0 74.2%gpt-5-codex ~85%

​

​

Devin / Replit Agent 因为是"云端容器 VM + 浏览器入口"而非"本地 harness",本题不作主比较对象,仅作为云端 sandbox 路线的参照。​

Devin 2.0(2026.2)补充:Cognition 把 Devin 定位为"全自主异步工程师"——2026.2 起支持多模型(不再锁单家),自主任务完成率约 40%,入门价 $500/mo。它代表与五大本地 harness 相反的一极:用「自治长度 + 异步交付」换「人工介入」。社区共识是顶级开发者倾向于组合使用两个工具(如 Aider + Devin、Cline + Devin)而非押注单一 Agent——本地协作做精细改动,云端 Devin 跑长周期大任务。Codex CLI 同期保持每周多个 alpha 版本的高频迭代。​

​

二、四维对比详表​

维度 1:Context 管理​

​

#dWETTLbPOMIQ text { white-space: pre; }#dWETTLbPOMIQ .fb0 { stroke: var(--N900-FG, 0.15); }#dWETTLbPOMIQ .fb0 {stroke: rgba(31,35,41, 0.15)}#dWETTLbPOMIQ .fx0 { stroke-miterlimit: 10; }#dWETTLbPOMIQ .fx0 {stroke-miterlimit: 10}#dWETTLbPOMIQ .fa1 { fill: rgb(187, 191, 196); }#dWETTLbPOMIQ .fa1 {fill: rgb(187, 191, 196)}#dWETTLbPOMIQ .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#dWETTLbPOMIQ .fx1 {font-style: normal}#dWETTLbPOMIQ .fx2 { text-anchor: middle; }#dWETTLbPOMIQ .fx2 {text-anchor: middle}#dWETTLbPOMIQ .fx3 { dominant-baseline: central; }#dWETTLbPOMIQ .fx3 {dominant-baseline: central}#dWETTLbPOMIQ .fx4 { stroke: none; }#dWETTLbPOMIQ .fx4 {stroke: none}#dWETTLbPOMIQ .fc0 { fill: var(--text-caption); }#dWETTLbPOMIQ .fc0 {fill: #646a73}#dWETTLbPOMIQ .fa2 { fill: var(--text-link-disabled); }#dWETTLbPOMIQ .fa2 {fill: rgb(187, 191, 196)}#dWETTLbPOMIQ .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#dWETTLbPOMIQ .fx5 {font-style: normal}#dWETTLbPOMIQ .fx6 { text-anchor: start; }#dWETTLbPOMIQ .fx6 {text-anchor: start}#dWETTLbPOMIQ .fx7 { dominant-baseline: alphabetic; }#dWETTLbPOMIQ .fx7 {dominant-baseline: alphabetic}#dWETTLbPOMIQ .fc1 { fill: rgb(0, 0, 0); }#dWETTLbPOMIQ .fc1 {fill: rgb(0, 0, 0)}#dWETTLbPOMIQ .fx8 { font: 400 13px LarkHackSafariFont, LarkEmojiFont, ui-monospace, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, "Noto Sans", Tahoma, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", STHeiti, SimHei, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", system-ui; }#dWETTLbPOMIQ .fx8 {font-style: normal}#dWETTLbPOMIQ .fb1 { fill: var(--N900-FG, 0.15); }#dWETTLbPOMIQ .fb1 {fill: rgba(31,35,41, 0.15)}#dWETTLbPOMIQ .fb2 { fill: rgb(209, 217, 224); }#dWETTLbPOMIQ .fb2 {fill: rgb(209, 217, 224)}#dWETTLbPOMIQ .fa3 { fill: var(--bg-body); }#dWETTLbPOMIQ .fa3 {fill: #fff}ABCD123456HarnessClaude CodeCursorAiderClineCodex CLI策略全塞 + 自动 compact云端 Composer 上下文池外部检索 + 显式控制IDE 上下文 + 文件批准AGENTS.md + workdir 文件读取关键机制75% 利用率时 compact;Memory tool 持久化;Skill progressive disclosure@-mention 文件、Composer 自动 retrieve;Cursor 3 多窗口并发tree-sitter AST 解析全 repo → PageRank 排序 → token 预算内塞入显式 add file / read file;每步全 transcript 可见自动读 monorepo 嵌套 AGENTS.md;32 KiB 硬上限静默截断Token 经济200K 窗口,compact 后基本不丢;CLAUDE.md 自动 re-inject自家模型适配,不公开具体策略默认 ,无 chat 文件时膨胀 8x用户完全可控,配 BYOM 模型选AGENTS.md 是核心 context 入口--map-tokens=1024

​

关键对比 — Claude Code 的 "全塞 + compact" vs Aider 的 "检索式 repo map":​

​

#OStwXxsURQHG text { white-space: pre; }#OStwXxsURQHG .fb0 { stroke: var(--N900-FG, 0.15); }#OStwXxsURQHG .fb0 {stroke: rgba(31,35,41, 0.15)}#OStwXxsURQHG .fx0 { stroke-miterlimit: 10; }#OStwXxsURQHG .fx0 {stroke-miterlimit: 10}#OStwXxsURQHG .fa1 { fill: rgb(187, 191, 196); }#OStwXxsURQHG .fa1 {fill: rgb(187, 191, 196)}#OStwXxsURQHG .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#OStwXxsURQHG .fx1 {font-style: normal}#OStwXxsURQHG .fx2 { text-anchor: middle; }#OStwXxsURQHG .fx2 {text-anchor: middle}#OStwXxsURQHG .fx3 { dominant-baseline: central; }#OStwXxsURQHG .fx3 {dominant-baseline: central}#OStwXxsURQHG .fx4 { stroke: none; }#OStwXxsURQHG .fx4 {stroke: none}#OStwXxsURQHG .fc0 { fill: var(--text-caption); }#OStwXxsURQHG .fc0 {fill: #646a73}#OStwXxsURQHG .fa2 { fill: var(--text-link-disabled); }#OStwXxsURQHG .fa2 {fill: rgb(187, 191, 196)}#OStwXxsURQHG .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#OStwXxsURQHG .fx5 {font-style: normal}#OStwXxsURQHG .fx6 { text-anchor: start; }#OStwXxsURQHG .fx6 {text-anchor: start}#OStwXxsURQHG .fx7 { dominant-baseline: alphabetic; }#OStwXxsURQHG .fx7 {dominant-baseline: alphabetic}#OStwXxsURQHG .fc1 { fill: rgb(0, 0, 0); }#OStwXxsURQHG .fc1 {fill: rgb(0, 0, 0)}#OStwXxsURQHG .fb1 { fill: var(--N900-FG, 0.15); }#OStwXxsURQHG .fb1 {fill: rgba(31,35,41, 0.15)}#OStwXxsURQHG .fb2 { fill: rgb(209, 217, 224); }#OStwXxsURQHG .fb2 {fill: rgb(209, 217, 224)}#OStwXxsURQHG .fa3 { fill: var(--bg-body); }#OStwXxsURQHG .fa3 {fill: #fff}ABC123优势劣势Claude Code 流派(全塞 + 智能压缩)context 不丢,cross-file 推理强;模型直接看到原文200K 窗口 + compact 算法依赖;长 trajectory 可能丢早期细节Aider 流派(外部检索)小窗口模型也能在大 repo 工作;显式控制,可解释tree-sitter 不支持的语言失效;仅给 outline 不给原文

​

维度 2:Tool Registry & Discovery​

​

​

关键观察 — apply_patch 的 post-training coupling:​

Codex 模型在 post-training 阶段被 绑定 到 apply_patch 工具的语法(OpenCode 团队 + HumanLayer 双重证实)。要让 Codex 在自家 harness 里发挥水平,必须模仿 Codex 的 apply_patch 签名。Claude Code 模型类似——Claude Opus 4.x / Sonnet 4.x 对 str_replace_based_edit_tool 与 bash 工具的偏好已写进权重。这就是 SDK / harness / 模型三者深度耦合的本质。​

维度 3:Permission & Approval​

​

​

关键观察 — Hook 的确定性 vs 提示词的概率性(深刻教训):​

Claude Code 的 Hook 系统是 2026 业界讨论最多的设计点。在 prompt 里写"提交前必须跑 lint"——模型可能跳过(概率性);写成 PreToolUse Hook(shell 脚本)——保证执行(确定性)。HumanLayer 总结:"success is silent, failures are verbose"——成功不污染 context,失败把错误注入 agent loop 让模型修。这是把 Coding Agent 从"玩具"变成"生产工具"的关键。​

维度 4:Sandbox & Runtime​

​

表格加载中...

​

三种沙箱路线的本质权衡:​

​

​

三、Claude Code 扩展生态深度剖析(五机制协同)​

Claude Code 的扩展生态是 2026 最完整、最值得深入的 harness 设计范本。社区已总结的发布时间线:​

​

代码块​

Plain Text

2024-11 MCP (Model Context Protocol) 外部工具协议​

2025-07 Subagents Context 隔离与并行​

2025-09 Hooks 生命周期确定性触发​

2025-10 Plugins 分发与打包​

2025-10 Skills Progressive Disclosure 知识包​

2026-02 Agent Teams 多 Subagent 编排​

​

五种机制的设计对照表​

​

​

记忆口诀:​

​

MCP = plumbing(管道) Skill = how to(手册) Slash = manual trigger(按钮) Subagent = isolation(隔间) Hook = guardrail(护栏)​

​

Skill 的 Progressive Disclosure 三级架构​

Anthropic 把 Skill 拆为三层加载(官方文档明确):​

​

​

经济性证据:17 个官方 skill 全加载只需 ~1700 token,等价于"知道几十种能力但只为一种付费"。​

​

代码块​

YAML

# SKILL.md 必填字段示例​

---​

name: pdf-processing # ≤64字符,小写/数字/连字符,禁用 "anthropic"/"claude"​

description: Extract text and tables from PDF files. Use when working with PDFs. # ≤1024字符​

---​

​

## Workflow​

​

1. Use `python scripts/extract.py ` to extract text​

2. ...​

​

核心机制:Skill 不是把全部内容塞进 system prompt,而是 Claude 在 VM 中通过 bash read SKILL.md 显式读取。Script 文件在执行时只把 stdout 注入 context,代码本身不消耗 token。这是 2026 跨厂商采纳的第一个开放标准(OpenAI / Google / GitHub / Cursor 在两个月内集成)。​

Hook 的 12+ 生命周期事件​

Claude Code 官方支持的 hook 事件按 cadence 分类:​

​

代码块​

Plain Text

Per session: SessionStart / SessionEnd / Setup​

Per turn: UserPromptSubmit / Stop / StopFailure​

Per tool call: PreToolUse / PostToolUse / PostToolBatch​

Agent-related: SubagentStart / SubagentStop / TaskCreated​

MCP-related: PermissionRequest / PermissionDenied / Elicitation​

Async: FileChanged / CwdChanged / PreCompact / PostCompact​

​

5 种 handler 类型:command(shell) / http(POST 端点) / mcp_tool / prompt(单轮 LLM 评估) / agent(带工具的子 agent,实验性)。​

权限决策模型(PreToolUse 独有):​

​

代码块​

JSON

// .claude/settings.json​

{​

"hooks": {​

"PreToolUse": [​

{​

"matcher": "Bash",​

"hooks": [​

{​

"type": "command",​

"command": "node /path/to/check-destructive.js"​

}​

]​

}​

]​

}​

}​

​

​

代码块​

JavaScript

// check-destructive.js — 示例 hook 输出​

const input = JSON.parse(require('fs').readFileSync(0, 'utf-8'));​

if (input.tool_input.command.match(/rm -rf|git push --force/)) {​

console.log(JSON.stringify({​

permissionDecision: "deny", // 即使 --dangerously-skip-permissions 也硬拦​

reason: "Destructive command blocked by project policy"​

}));​

process.exit(0);​

}​

process.exit(0); // allow​

​

Exit code 约定(极易踩坑):​

•

0 = 成功(解析 stdout JSON)​

•

2 = blocking error(阻止动作)​

•

其他 = 非阻塞错误​

•

注意:exit 1 不阻断,必须 exit 2 才阻断​

Permission Decision 四值:allow / deny(强拦) / ask(强制升级用户审批) / defer(走正常权限流程)。​

Subagent vs MCP server 的边界​

这是面试官最爱挖的细节问题:​

​

​

Subagent 的两种语义:​

•

默认 fresh-context:每次启全新 200k 窗口,子任务跑完只返回最终 string,中间 tool_call 不进父 context​

•

CLAUDE_CODE_FORK_SUBAGENT=1 fork:继承当前对话历史(基于已有上下文继续探索),代价是 fork 子 context 随父增长,且与 --print headless 模式不兼容​

实战例子:「提交前自动跑 lint + 写测试时按需加载测试规范」​

这是 Scout-A Q3 的经典场景题,五机制如何协同:​

​

代码块​

Plain Text

需求拆解​

├── lint 必须每次都跑 → Hook(确定性)​

​

错误用法(常见踩坑):​

•

把 commit message format 做成 Skill → 应放 CLAUDE.md / AGENTS.md(频繁触发,不是按需)​

•

指望 Skill 访问 GitHub → 应用 MCP(Skill 没工具能力,只有 bash 内 stdout)​

•

把简单 prompt 模板做成 Skill → 应用 Slash Command(Skill 太重,过度设计)​

•

在 prompt 里写"提交前必须跑 lint" → 应该是 Hook(模型可能跳过)​

四、横向对比小结:选哪个 Harness?​

​

代码块​

SQL

​

SWE-bench Verified ≠ 唯一指标:harness 的产品体验差异远大于跑分差异。Cursor 在交互流畅度上领先,Aider 在 git 集成与可解释性上领先,Claude Code 在生态深度上领先,Codex CLI 在沙箱安全上领先,Cline 在显式可控性上领先。先问"我的场景看重哪个维度",再选 harness。​

2026 工具融合趋势(选型新变量):The New Stack 报道 Claude Code / Cursor / Codex 三大工具正通过插件和共享开放标准"merge into one stack"——MCP 让三者接同一批 server,Skill 这种 progressive disclosure 知识包在两个月内被 OpenAI / Google / GitHub / Cursor 集成,AGENTS.md / CLAUDE.md / .cursor/rules 也在收敛为相似的"项目指令文件"约定。这意味着选型的护城河正从「功能差异」转移到「Context / Permission / Sandbox 的工程取舍与生态成熟度」——能力趋同后,谁的可控性、可审计性、隔离强度更好,谁就更适合生产。另一条并行路线是人机协作 vs 全自主的分工:本地 harness(五大)做精细协作,Devin 2.0 这种全自主异步 agent 跑长周期大任务,社区主流做法是组合使用而非二选一。​

常见误区 / 面试追问​

•

误区 1:「Claude Code 五机制可以互相替代」 — 错。MCP / Skill / Slash / Subagent / Hook 各管一个独立的 context 问题,强行替代会过度设计或失效。常见错误:把 commit format 写成 Skill(应在 CLAUDE.md)、指望 Hook 给模型加知识(Hook 不进 context,应该是 Skill)、用 Skill 调 GitHub(应该用 MCP)。​

•

误区 2:「Hook 和 Prompt 是一回事,反正都是让模型做什么」 — 这是 Coding Agent 从"玩具"到"生产工具"的核心分水岭。Hook = 确定性(regardless of model behavior) / Prompt = 概率性(model may skip)。在 CLAUDE.md 写"提交前必须跑 lint"——模型可能跳过;写成 PreToolUse hook——保证执行。这层分工不理解就做不出可靠的代码 Agent。​

•

误区 3:「Cursor 3 的 Agents Window 让 Cursor 变成了 Devin」 — 不完全。Cursor 3 引入云端 sandbox VM,但仍然以编辑器为主入口;Devin 则是"全自治长跑"(200 分钟自治再交付)。两者形态不同:Cursor 是"IDE + 异步 agent 加成",Devin 是"独立 SWE 代理"。​

•

误区 4:「OpenAI Codex 模型可以无缝放到任何 harness 里」 — 错。Codex 模型在 post-training 阶段被绑定到 apply_patch 工具签名,OpenCode 团队发现脱离这个签名性能会掉。Post-training coupling 是 2026 行业的硬约束——模型与 harness 是深度耦合系统。​

•

追问 1:「Aider 的 repo map 算法核心是什么?」 → 答:tree-sitter 解析所有源文件成 AST → 提取 name.definition.* 和 name.reference.* 两类 tag → NetworkX 构建文件依赖图(A 引用 B 定义的符号 → 有向边) → PageRank 排序(chat-mentioned files 50x 权重,well-named identifiers 10x 权重) → token 预算下二分查找最大塞入量。默认 --map-tokens=1024,无 chat 文件时膨胀 8x。这是"小窗口模型在大 repo 上能工作"的核心算法。​

•

追问 2:「为什么 Claude Code 的 PreToolUse Hook deny 决策能强拦 --dangerously-skip-permissions?」 → 答:因为 Hook 是项目级别的配置约束而非"用户偏好"。Anthropic 的设计哲学是:项目所有者可以设置"用户即使加了 bypass flag 也不能越的红线",这对企业 / 团队 / 开源项目至关重要。具体到代码,PreToolUse Hook 的 permissionDecision: "deny" 在 permission system 层面短路了所有 upstream 判断。​

•

追问 3:「Skill 的 Progressive Disclosure 与 RAG 的检索式有什么区别?」 → 答:表面相似,本质不同。​

◦

RAG:query → embedding 检索 → top-k chunks 进 context;触发由"用户 query"驱动,粒度是 chunk​

◦

Skill:模型读到 frontmatter description → 自主判断 → bash 读 SKILL.md;触发由"模型判断"驱动,粒度是"完整流程文档 + scripts"​

◦

Skill 的关键创新是 "模型选择加载什么知识",而 RAG 是"系统选择灌什么知识给模型"。前者更适合"流程性知识"(工作流、规范、检查清单),后者更适合"事实性知识"(文档、代码、数据)。​

•

追问 4:「Cline 2026-05 把 runtime 从 IDE 剥离成 @cline/sdk,对行业意味着什么?」 → 答:意味着 Harness 进入"runtime 独立化 + 多 surface 适配"阶段。同一份 agent runtime 可跑 IDE / CLI / Web / CI,session 跨 surface 迁移(VSCode 启动的会话可在终端继续)。这预示 2026-2027 Harness 演进方向:与产品形态解耦,与模型/工具/protocol 协同。Claude Code 同期也在做类似分层(Claude Agent SDK 与 Claude Code CLI 解耦)。​

•

追问 5:「Devin 与 Replit Agent 这种『云端长跑型』为什么没纳入横评?」 → 答:因为它们不是"本地 harness"而是"云端 agent 产品",比较维度完全不同。Devin/Replit 的核心权衡是"自治长度 vs 失败重试经济学"(Devin 用 ACU 计费、Replit 200 分钟自治),而本题五个 harness 的核心权衡是"context / tool / permission / sandbox 四维选择"。两类产品形态适合两个不同问题:本地协作开发(Claude Code / Cursor / Aider / Cline / Codex CLI) vs 异步 SWE 代理(Devin / Replit)。补充 Devin 2.0(2026.2)数据:支持多模型后自主任务完成率约 40%、入门价 $500/mo——这个 40% 正是讨论「全自主 Agent 可靠性」与「为何仍需 HITL」的硬论据,社区主流做法是组合使用(本地 harness 做精细活 + Devin 跑大任务)而非二选一。​

•

追问 6:「2026 年 Claude Code / Cursor / Codex 在融合,是不是很快会变成一个工具?」 → 答:能力在趋同,但四维工程取舍不会合并。The New Stack 报道的"merge into one stack"指的是接口层标准化——MCP 统一工具协议、Skill 统一知识加载、AGENTS.md/CLAUDE.md 统一项目指令;但每个 harness 在 Context(全塞+compact vs 检索式 vs 云端)、Permission(Hook 硬拦 vs 显式批准 vs 沙箱隔离)、Sandbox(无 vs OS 原生 vs 云端 VM)上的根本赌注不同,这些是写进架构和模型权重的取舍,不会因插件互通而消失。选型逻辑从「比谁功能多」转向「比谁的可控性、可审计性、隔离强度更适合生产」。​