



到底什么是 AI Harness?
写在前面的坦白:这篇文章不是「AI 大白话科普」,也不是「给你推荐 5 个 agent 框架」。
它更像一次拆解——把 Claude Code、Cursor、Codex 这些"明星 agent"扒开,看里面到底装了什么,然后告诉你:为什么 2026 年大家突然都在喊 harness,为什么「等 GPT-6」这句话越来越像借口。
为什么写这篇文章
上周 r/singularity 上有个帖子,4000 多赞,一句话戳到我了:
"Claude code + fable does better with multi-agent workflows than Sol + terra, which means either Claude code harness is amazing or Anthropic trains the models to just be aware agentically."
然后 Addy Osmani 那篇《Agent Harness Engineering》周末读完,Terminal Bench 2.0 那组数据让我沉默了一阵子:
"Claude Opus 4.6 running inside Claude Code scores far lower than the same model running in a custom harness. Viv's team moved a coding agent from Top 30 to Top 5 by changing only the harness."
同样的模型,换 harness,Top 30 → Top 5。 这不是微调,这是换"鞋子"。
第一节:Agent = Model + Harness,这道公式是 2026 年的工程共识
[场景] 这不是新词,但今年所有做 agent 的人突然都同意一件事——模型只是大脑,harness 才是让它能干活的那层。Claude Code、Cursor、Codex、Aider、Cline 底下有时候跑的是同一只模型,但行为完全不同,差异全在 harness。
Anthropic 给出的定义最干净:「The system that enables a model to act as an agent: it processes inputs, orchestrates tool calls, and returns results.」
LangChain 那边的公式更狠:「Agent = Model + Harness. If you're not the model, you're the harness.」
[命令] 把任何 agent 拆开看,都在做这四件事:
harness = tools + context + loop + permissions1. tools 你能给 agent 调什么(file/shell/web/MCP)2. context 你把什么信息塞进 prompt(AGENTS.md/skills/历史)3. loop 谁调谁、调到什么时候停4. permissions 哪些动作要审批、哪些直接放行[注意] 真正让 harness 工程变成一门学科的,是 Addy 那篇文章里点出的 ratchet(棘轮)机制:agent 每次犯傻,你就把这次失败物化进 harness——加一条 AGENTS.md、加一个 hook、加一个 reviewer 子 agent。好 harness 长这样:每一行规则都对应一次具体翻车。
第二节:模型和 harness 是「出厂绑定」的——所以别再「等 GPT-6」
[场景] 这是我读完 Addy 文章后最想骂醒身边人的一点。Anthropic 训练 Claude Code 的方式是让模型在 harness 里 post-train,不是训完再装壳子。所以你换 harness 跑同一个模型,能力可能立刻释放,也可能立刻死掉——取决于它出厂时被绑在哪个 harness 上。
举个具体例子:Claude Code 训练的 harness 是 Claude Code,Cursor 训练的 harness 是 Cursor 的代码检索 + 多文件编辑 + review 子 agent 系统。你把 Claude 模型搬到对方 harness 里,前 10% 的能力直接掉线,因为它的肌肉记忆不在那里。
[命令] 一句话判断"该升级模型还是 harness":
# 1. 同一个模型,在你现有 harness 里跑分是多少?# 2. 同一个模型,在别人的 harness(Claude Code/Cursor/Codex)里跑分是多少?# 3. 差距是 2 倍以上 → harness 的问题,不是 model 的问题# 4. 差距 < 20% → model 的天花板了,该升级模型[注意] 这个判断方法不是银弹。如果你的任务严重依赖私有代码库(比如 50 万行 monorepo),别家的 harness 也救不了你——你必须自己磨 harness,因为别人的 sandbox / context / tools 都不认识你的代码。这件事 Mitchell Hashimoto 2026 年初那篇《My AI Adoption Journey》里讲得很透:本地模型"还不够好",但 Claude Code 之所以能用,是因为它跟 Anthropic 的 harness 是出厂绑定的。
第三节:三步自己造一个 harness——从 nano claude code 开始
[场景] 你觉得 harness 是大厂的事?GitHub 上 shareAI-lab/learn-claude-code 这周刚炸出来,标题就一句话:「Bash is all you need - A nano claude code-like 「agent harness」, built from 0 to 1」。
它证明了一件事:一个能用的 harness,核心代码可以塞进一个 bash 文件。前提是你把它要承担的事想清楚。
[命令] 三步走,从 0 到 1 搓一个 harness:
# 1. 写最小 loop(model ↔ tools,能跑通即可)# bash 里就是:cat prompt | claude | parse_tool_call | run_tool | feed_back_resultwhiletrue; do result=$(echo"$history" | claude --model opus-4.7 --tools "$TOOLS_JSON") tool_call=$(echo"$result" | jq -r '.tool_call // empty') [ -z "$tool_call" ] && break output=$(eval"$tool_call")history="$history\n[assistant]: $result\n[user/tool]: $output"done# 2. 加上权限(危险命令拦截)# 写一个 hook,白名单 + 黑名单,匹配到 rm -rf /、git push -f、curl | sh 直接拦掉DENY_PATTERN='(rm -rf /|git push -f|curl .* \| (ba)?sh)'# 3. 加上 AGENTS.md 和 Skills# 把"这个项目用什么包管理器 / 测试命令 / 不要做的事"塞进 system prompt[注意] 这三步看着简单,但第 3 步是最容易写烂的。AGENTS.md 不是 README,不是 onboarding 文档——它是「针对 agent 训练数据的微调」。每一条规则都要能追到一次具体翻车:「曾经 agent 在这里栽过,所以现在写在这里」。不要写"建议使用 TypeScript",要写"不要用 any,会被 typecheck 拦下来"。
第四节:把 harness 拆成 guides + sensors,你就有了工程化抓手
[场景] 写完上面那个 mini harness,你会发现一个问题:agent 还是经常做蠢事。怎么办?
Martin Fowler 站上 Birgitta Böckeler 的那篇文章给了一个非常工程化的拆分——guides(预判) + sensors(反馈)。
- Guides
在 agent 行动前引导它走对路:AGENTS.md、Skills、bootstrap 脚本、TypeScript 强类型约束。 - Sensors
在 agent 行动后捕获错误让它自纠正:测试、linter、typecheck、AI code review、LLM-as-judge。
[命令] 给你自己的 harness 装上 4 类传感器:
# sensors.yaml - 跑在每个 task 之后computational_fast:# ms 级,跑每次提交-typecheck# tsc --noEmit / mypy --strict-linter# eslint --max-warnings 0 / ruff check-unit_tests# pnpm test --changedcomputational_slow:# s 级,跑集成后-integration_tests# pnpm test:e2e-arch_tests# archunit / dependency-cruiserinferential_fast:# s 级,用本地小模型-convention_check# Ollama + qwen2.5-coder 跑"代码风格 review"inferential_slow:# 10s+ 级,用云端大模型-design_review# Claude Opus 4.6 / Fable 5 跑"架构合理性 review"[注意] computational 和 inferential 的本质区别是 deterministic vs non-deterministic。前者便宜到能跑每次提交,后者贵到只能跑集成后。别一股脑全塞 inferential,token 账单会教你做人。
第五节:Harness-as-a-Service——下一代 agent 的分发形态
[场景] 当你把上面四节看完,会发现一件事:「造 harness」已经变成一个新的 SaaS 形态。Anthropic 把 Claude Code 拆成 Claude Agent SDK、OpenAI 把 Codex 拆成 Agents SDK、LangChain 把 deepagents 开源——他们不再卖「模型 API」,开始卖「harness runtime」。
Viv(Anthropic 的)在 Addy 那篇文章里给了这个趋势一个名字:HaaS, Harness-as-a-Service。
[命令] 如果你是产品经理,2026 年下半年评估 agent 工具,要看三个东西:
1. SDK 开放度 - 能不能让你改 system prompt / 加 tool / 插 hook? (不能改的 = 你买的是黑盒,后续会被锁)2. Context 策略 - 它的 context window 怎么管理?压缩策略是什么? (重点不是 200k 还是 1M,是它怎么处理 80% 之后的溢出)3. Subagent 编排 - 能不能拆任务?能不能并行?cache 命中率怎么算? (这是 Fable 5 跑出 BrowseComp 96 分 / 46% 成本的核心)[注意] 这里有个反直觉点:不要被「最强模型」绑架。shao__meng 那篇《为 Fable 5 设计成本高效 Harness》给了一个具体场景——任务小的时候,Fable 单独跑比 Fable 编排 + Sonnet worker 更便宜(协调加价 60% 没收益)。任务大的时候,反过来,委派才显现套利。
所以:模型强弱 ≠ 总成本最低。harness 的拓扑决定成本曲线。
三步上手:今天就能给自己的 agent 加一层 harness
# 1. 写一份 AGENTS.md,把你最近 3 次 agent 翻车的根因写进去# (格式:翻车场景 → 我做了什么 → 现在的规则)cat > AGENTS.md << 'EOF'# Project Rules## 包管理器- 必须用 pnpm,不要 npm/yarn(锁文件混乱会导致装包失败)## 测试- 任何 PR 必须包含单元测试,覆盖新加的 function(否则 CI 红)## 不要做的事- 不要直接 git push -f,会被 hook 拦下来- 不要在 commit 里加 .env,会被 pre-commit 拦下来EOF# 2. 装一个 pre-commit hook,跑 typecheck + linter + 单元测试pip install pre-commitcat > .pre-commit-config.yaml << 'EOF'repos: - repo: local hooks: - id: tsc name: TypeScript check entry: pnpm exec tsc --noEmit language: system types: [ts, tsx] - id: eslint name: ESLint entry: pnpm exec eslint --max-warnings 0 language: system types: [ts, tsx, js, jsx]EOFpre-commit install# 3. 加一个 review 子 agent,跑在每个 PR 上# (Claude Code 的话:直接在 /agents 里加一个 reviewer)# (Codex 的话:.codex/agents/reviewer.toml)一句话总结:2026 年不是「等模型」的年份,是「磨 harness」的年份。模型一年升一代,harness 每周都能磨一次——每次 agent 翻车,都是 harness 升一级的机会。
夜雨聆风