Anthropic 的工程团队在 2025 年提出一个概念:Agent 的价值不在模型,在 Harness。这句话值得所有做 AI 产品的人反复读。

什么是 Harness

Harness = 包裹 LLM 的完整运行时系统,负责管理 Agent 的感知、决策、执行和反馈循环。

类比:

  • LLM 是 CPU——负责计算(推理)
  • Harness 是 操作系统——负责调度、内存管理、I/O、进程控制

同一个 GPT-4o,放在不同的 Harness 里,表现可以天差地别。

Harness 的核心组件

┌─────────────────────────────────────────────┐
│                  Harness                     │
│                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ Context   │  │ Tool     │  │ Loop     │  │
│  │ Manager   │  │ Router   │  │ Controller│  │
│  └──────────┘  └──────────┘  └──────────┘  │
│                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ Skill     │  │ Sandbox  │  │ Eval &   │  │
│  │ Loader    │  │ / Safety │  │ Monitor  │  │
│  └──────────┘  └──────────┘  └──────────┘  │
│                                              │
│         ┌──────────┐                         │
│         │   LLM    │                         │
│         └──────────┘                         │
└─────────────────────────────────────────────┘

逐个拆解:

1. Context Manager(上下文管理器)

Agent 最大的瓶颈不是模型能力,是 上下文窗口的管理

Harness 要做的:

  • 决定塞什么进上下文(代码文件、Skill、MCP 返回、历史对话)
  • 什么时候压缩/摘要旧对话
  • 怎么组织信息让 LLM 最高效地利用

这是 2026 年 AI 工程最核心的战场。 详见「上下文工程」篇。

2. Tool Router(工具路由)

LLM 输出「我想调用 tool_X」→ Harness 负责:

  • 解析 tool call 请求
  • 路由到正确的 MCP Server / 内置工具
  • 处理错误、重试、超时
  • 把结果格式化后塞回上下文

3. Loop Controller(循环控制器)

Agent 不是一次调用,是 多轮循环

while (not done && steps < max_steps):
    response = llm.call(context)
    if response.has_tool_calls:
        results = execute_tools(response.tool_calls)
        context.append(results)
    else:
        done = True
return response

Harness 控制:

  • 最大步数(防止无限循环)
  • 什么时候该停(任务完成判断)
  • 中间状态持久化(断了能续)

4. Skill Loader(技能加载器)

根据当前任务类型,从 Skill 库中选择相关 Skill 注入上下文。Cursor 的实现是扫描 .cursor/skills/ 目录,匹配任务关键词。

5. Sandbox / Safety(沙箱与安全)

Agent 能执行代码、改文件、调 API——Harness 必须提供:

  • 文件系统隔离(只能碰 workspace 内的文件)
  • 命令执行白名单(允许 npm test,禁止 rm -rf /)
  • 网络访问控制
  • 人工确认 gate(删文件、发 PR 前弹确认)

6. Eval & Monitor(评估与监控)

生产级 Harness 内置:

  • 每步 tool call 的成功/失败率
  • Token 消耗追踪
  • 任务完成质量评分
  • 异常行为检测(循环、越权)

三家产品的 Harness 对比

组件CursorClaude CodeDevin
Context代码索引 + 当前文件 + @引用整个 repo + terminal 输出浏览器 + IDE + terminal
ToolsMCP + 内置(读写文件、terminal)内置(bash、读写、搜索)全套(浏览器、IDE、部署)
LoopAgent 模式,用户可中断自主长任务,少中断完全自主,异步执行
SandboxWorkspace 边界本地 shell云端 VM 隔离
SkillSKILL.md 按需加载CLAUDE.md 项目指令内部训练的行为模式

关键差异

  • Cursor 的 Harness 优化方向是 人机协作——Agent 做一步,人看一眼,再继续
  • Claude Code 优化 长任务自主执行——给了 goal 就跑到完,中间少打扰
  • Devin 优化 完全异步——提交任务后走开,回来看结果

Harness 设计的核心权衡

自主性 ←──────────────────────→ 可控性
Devin                          Cursor Tab 补全
(完全自主)                      (每步确认)

上下文大小 ←──────────────────→ 成本/速度
Devin (whole repo)             Cursor (@file 精确引用)

通用性 ←──────────────────────→ 领域深度
通用 Agent                     代码专用 Harness

没有「最好的 Harness」,只有 最匹配场景 的 Harness。

自建 Harness 的最小实现

如果你要在产品里集成 Agent,最小 Harness 需要:

class MinimalHarness:
    def run(self, goal: str, max_steps: int = 20):
        context = self.build_initial_context(goal)
        for step in range(max_steps):
            response = self.llm.chat(context, tools=self.available_tools)
            if response.tool_calls:
                for call in response.tool_calls:
                    result = self.execute_tool(call)
                    context.append(result)
            else:
                return response.text  # 任务完成
        return "Max steps reached"

看起来简单,但每个方法背后都是大量的工程决策——这就是 Harness 的价值。

小结

模型大家都在用(GPT-4o、Claude、Gemini),Harness 才是差异化所在。理解 Harness 的组件和权衡,你就理解了 Cursor 为什么比裸调 API 好用十倍。

下一篇:Harness 里最关键的那个组件——Context Manager,也就是「上下文工程」。