同一个模型,不同壳:用「导航选道数据挖掘」跑一遍四家 harness
9/2 我们写「壳比模型值钱」,9/4 又写「模型开始吃壳」。那如果反过来——把模型抽掉,假设四家 harness 都跑同一个旗舰模型,比的是什么?本文用一个真实的自动驾驶导航选道数据挖掘任务当切口,深潜 Claude Code、Codex、Aider、Cursor 四家壳的差异,附工作类别 × 壳的对照矩阵。
9/2 我们写《模型之外:2026 年选 AI 编程 Agent,先看壳》,结论是模型趋同后真正拉开差距的是 harness。9/4 我们又写《当模型自己变成壳》,说 GPT-6 Astra 把电脑操作、异步工具调用、中途干预整层收进了模型加 Responses API。两篇合起来天然引出一个问题:如果反过来,假设四家 harness 都套同一个旗舰模型,那比的还是模型吗?这篇就用「同一个模型」这个思想实验,把壳的设计差异单独拎出来看。
思想实验:把模型抽掉,比什么
「假设用同一个模型」这个前提,价值在于它把两件事拆开了:模型聪不聪明,和壳怎么把模型接进真实工作流。平时我们评 harness,其实一半分数在给模型——Claude Code 配 Claude、Codex 配 GPT、Cursor 配它自家路由,模型强壳就显得强。把模型抹平,剩下的才是壳自己的工程:沙箱跑在哪、上下文怎么管理、人在哪一步介入、出错怎么拽回来、数据能不能出门。
这五个轴,正好对应我 9/4 那篇说的「约束层」。这里有个反直觉的点先点破:Codex 的计算机环境、Responses API 那套异步工具、中途干预,本质就是 Astra 的执行层——壳和模型已经长在一起了。所以「同模型」半是假设,但它恰恰把系列收得更紧:比来比去,真正拉开差距的,还是沙箱、权限、记忆、恢复、人在回路这几样。
为了不让对比飘在抽象层,我挑一个特别能暴露壳差异的任务当切口。
切入任务:导航选道数据挖掘
假设你手上是几百 GB 的驾驶日志——激光雷达点云、相机帧、还有规划器的决策记录。任务一句话:挖「在什么条件下,规划器选了哪条道」。比如高速汇入时,前车速度低于多少、本车速度高于多少,planner 会从最右道切到中间道?雨天、黄昏、拥堵各是什么偏好?这任务看着像数据分析,实则每个壳跑起来手感完全不同,因为它同时撞上五个轴里的四个:
- 读大文件:parquet / rosbags,单文件几个 G,内存吃紧,得流式或分块。
- 跑统计:pandas、plotly 出图,要能迭代假设——「先按天气分桶,再看切入率」。
- 可复现:你最终要的是一条能重跑的分析流水线,不是一次性答案,因为下周数据会更新。
- 数据敏感:这是自动驾驶公司的真实日志,合规上大概率不能出本机、不能上公有云。
下面把四家壳轮流放进去跑一遍。
壳一:Claude Code —— 本地交互,敏感数据不出门
Claude Code 是在你本机跑的终端 agent,它最强的不是某一项能力,而是一整套「约束层」工具箱:CLAUDE.md 把项目约定常驻进上下文,Hooks 在文件编辑、命令执行这些生命周期节点强制跑脚本(能直接 deny 掉危险操作),Subagents 在独立上下文里并行探索不污染主会话,permissionMode 控制每一步要不要你确认。
放到选道挖掘上,手感是这样的:你 cd 进日志目录,让它先派几个 Subagent 并行摸清数据结构——一个看 parquet schema,一个抽样统计各字段缺失率,一个读规划器的决策字段含义。主会话只收结论,不被中间产物淹没。假设迭代是交互式的:你说「先按天气分桶」,它本地 venv 里跑 pandas,出图给你看,你当场改方向。
最关键是数据不出门。AV 日志的合规红线,用一条 PreToolUse Hook 就能焊死——任何向外发数据的命令直接拦:
# .claude/settings.json 里拦掉网络外联,AV 日志物理上出不了笔记本
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{ "type": "command",
"command": "cmd=$(jq -r '.tool_input.command' < /dev/stdin); \
if echo \"$cmd\" | grep -iE 'curl|wget|scp|rsync|ssh'; then \
echo 'Blocked: 日志不允许出本机' >&2; exit 2; fi; exit 0" }]
}]
}
}
适合:敏感数据 + 交互式假设迭代。短板:它不是为「扔下任务去睡觉、明早收 PR」设计的,长任务得靠后台 Subagent 撑,没有云沙箱兜底。
壳二:Codex —— 云沙箱异步,扔任务审 PR
Codex(OpenAI)走另一条路:它在云端隔离沙箱里跑,配 shell tool 托管容器——模型只「提出」shell 命令,平台在隔离环境执行,限网络、可并发多容器。异步 + 自恢复是它的天性:你把任务规格写清楚,push 上去,它就自己跑,跑完给你一个分支、一份报告和一堆图。
选道挖掘放进去:你把日志(或脱敏后的子集)推到它的云环境,写一段任务描述——「按天气/时段分桶,统计 planner 切入率,输出可复跑脚本 + 三张图」。它异步跑完,回来一个干净的 PR,你在 GitHub 上审 diff。全程你不用开着笔记本。
但短板正好是 Claude Code 的长板:数据出本机了。AV 真实日志上公有云沙箱,合规上多半过不了。除非你先脱敏、只传聚合后的子集,否则这一项直接出局。它真正舒服的场景是「数据已 sanitized、任务边界清晰、你想异步拿走结果」——比如挖掘已经公开的高速场景数据集。
适合:非敏感/已脱敏数据 + 无人值守长任务。短板:数据出本机(合规风险),人在回路只在审 PR 那一刻。
壳三:Aider —— git-native 可复现,分析即提交
Aider 是个开源终端工具,哲学和前面两家都不同:它不关心你在哪个 IDE、用哪个模型,它只关心一件事——git 是真相源。每一次 AI 改动都自动成一个原子 commit,/undo 就是 git reset,你的 git 历史就是审计日志。再叠一层 repo map(tree-sitter 解析出的符号索引,PageRank 排序,默认 1024 token 预算),让模型在没有把文件全塞进上下文时也懂跨文件结构。模型随便换,75+ 家 provider,本地模型走 Ollama 都行,代码完全离线。
选道挖掘放进去,它的卖点最对味:分析即代码、分析即提交。你在 analysis repo 里开干,每试探一步(分桶、画一张图、改统计口径)都是一个可读的 commit;repo map 让你不用把几十个 parquet schema 全贴进对话,模型也大概知道字段关系;结尾你拿到的是一条能重跑的分析流水线,历史清清楚楚写着「为什么这么分桶、哪次改了口径」。回滚?git revert 一行的事。AV 数据全程离线,因为 Aider 根本不连云。
适合:mining as code、审计/回滚 = 普通 git、数据离线。短板:纯终端,没有 IDE 那种逐 diff 接受的交互;也没有云异步,长任务得你盯着。
壳四:Cursor —— IDE 内嵌,大仓索引 + 异步出 PR
Cursor 是 VS Code 系的 AI 编辑器,最强的是把 agent 嵌进你已经在用的开发环境。Codebase Indexing 给整个工程建 embedding(Merkle 树只增量重索引),@Codebase 一搜就是语义级定位;Agent Mode 出多文件 diff 视图,每个改动你能单独接受/拒绝;Background Agent 在云 VM 里跑,把一个 GitHub issue 或 Slack 消息变成草稿 PR,手机上都能审。
选道挖掘放进去:如果这任务本来就长在你那个大 AV monorepo 里(日志读取、特征工程、可视化是既有模块),Cursor 的 indexing 让 @ 相关模块 特别顺手,Agent Mode 的 diff 视图方便你逐块 review 它改的统计逻辑。更进一步,你可以开个 GitHub issue 写「挖高速汇入的选道规律」,Background Agent 异步跑完直接开 PR,BugBot 还能顺手审一遍它写的代码。
但要说清楚它的边界:独立的一次性分析脚本,Cursor 偏重——你为了跑个 pandas 脚本开整个 IDE 有点杀鸡用牛刀;而且 Background Agent 是云 VM,数据同样要出本机(它有 privacy mode 和沙箱网络控制,但云 agent 那条路仍把代码/数据送出去)。它真正发光的地方是「挖掘嵌在大仓里 + 你要异步 + 你要 review」。
适合:嵌大仓 + 异步 + review。短板:独立一次性脚本偏重,云 agent 数据出本机。
附录:工作类别 × 外壳 对照矩阵
把上面四家,加上 Cline、Devin、Jules、Copilot、Windsurf,按五个轴排开。★ 强 / ○ 可 / — 弱。这是工程判断不是基准跑分,标的是「设计上最顺手」而非「绝对能力上限」。
| 外壳 | 大仓跨文件重构 | 无人值守长任务 | 敏感数据操作 | 秒级补全 | 可复现脚本分析 | 跨软件电脑操作 |
|---|---|---|---|---|---|---|
| Claude Code | ★ | ○ | ★ | — | ★ | ○ |
| Codex(云) | ★ | ★ | — | — | ○ | ★ |
| Aider | ★ | — | ★ | — | ★ | — |
| Cursor | ★ | ★ | ○ | ★ | ○ | ○ |
| Cline | ★ | ○ | ★ | — | ○ | ○ |
| Devin | ★ | ★ | — | — | ○ | ○ |
| Jules(Google) | ★ | ★ | — | — | ○ | — |
| Copilot | ○ | ○ | ○ | ★ | — | — |
| Windsurf | ○ | ○ | ○ | ★ | — | — |
横向看一眼就明白:秒级补全是 Copilot / Windsurf 的独占项,其他家根本不在这个赛道;敏感数据操作只有本地壳(Claude Code / Aider / Cline)能拿 ★,云方案集体 —;无人值守长任务是云 agent(Codex / Devin / Jules / Cursor Background)的领地。同一个模型下,你选哪个壳,本质是在这张表里选你最常在哪一列干活。
收尾:同模型下,壳的差异就是约束层差异
跑完这一圈,回到 9/4 那篇的论点就清楚了:Astra 吃掉的,是「执行层」——电脑操作、异步工具、中途干预,这些原本要 harness 外层兜的活,现在模型自己长出了。但「约束层」它没吃、也吃不动:数据能不能出本机(沙箱)、哪条命令要你确认(权限)、假设怎么跨会话累积(记忆)、跑飞了怎么拽回(恢复)、人在哪一步拍板(回路)。
所以「壳比模型值钱」在 9/2 成立,「模型开始吃壳」在 9/4 也成立,两句话不矛盾——模型吃的是壳的执行面,剩下的约束面反而因为模型变猛更值钱。本文用「同模型」这个假设,把这个结论从论点落成了对照表:下次选 harness,别先问它配哪个模型,先问你的任务撞上五个轴里的哪几个。
如果这篇对你挑 harness 有参考价值,去 PulsarGuide 的 Agent 专栏 看看同系列的「壳比模型值钱」和「模型自己变成壳」两篇,三篇连起来是一条线。
下一篇如果想继续这个系列,可以写「把 token 计费换成 task 计费:当模型自己变成壳,你怎么为一次完整交付付钱」——这是 9/4 那篇埋的第三个没展开的点。