10 个 Design Axes,分 3 组:

下面把 10 个 axes 按性质分成 3 组:结构组(这个 harness 是什么形状)、行为组(它怎么动)、资源组(它用什么、记什么)。

结构组 Structure
Axis取值范围典型实例
1. topologysingle ↔ multiClaude Code 默认 single(subagent 可扩展);Anthropic research system 是 multi;Stripe minions 是 multi
2. coordinationorchestration ↔ cooperationorchestration:中心化 lead agent 派发任务(Anthropic research system);cooperation:去中心化,通过共享状态协作(Stripe minions 通过 PR/CI)。两者可混合
3. session spansingle-session ↔ multi-session单次对话 vs 跨多次对话。一个 artifact 跨 session 协作系统就是 multi-session 的例子。这个 axis 很关键:它说明跨 session 是 Harness 的一个设计选择
行为组 Behavior
Axis取值范围典型实例
4. control loopReAct / Plan-Execute / Tree Search / ...ReAct:观察 → 推理 → 行动;Plan-Execute:先规划整体,再逐步执行。Inside the Scaffold论文把 5 种 loop primitives(ReAct、generate-test-repair、plan-execute、multi-attempt retry、tree search)视为可组合 building blocks
5. autonomyfully-autonomous ↔ approval-required ↔ supervised"信任边界"——决定哪些操作需要人工审批(destructive action、force push、生产部署等)
6. execution isolationnone ↔ git-worktree ↔ sandbox ↔ full VMCline 的 git-worktree(轻隔离)、Claude Code 的本地 sandbox(中隔离)、Daytona/远程 VM(重隔离)。决定了一次错误的rm -rf会影响什么
资源组 Resources
Axis取值范围典型实例
7. memoryworking / long-term / sharedworking:当前 session 临时记忆;long-term:磁盘持久化;shared:多 agent 共享 Artifact Network。Hu Wei 综述指出:file-persistent、hybrid、hierarchical 是生产主流,纯 ephemeral in-memory 很少见
8. tool typefunction / env / verify / workflowfunction:纯函数工具(计算、查询);env:环境交互(文件系统、bash);verify:验证工具(测试、lint);workflow:复杂工具(开 PR、部署)
9. verificationcomputational ↔ inferentialcomputational:确定性验证(typecheck、unit test);inferential:LLM-as-judge(code review、语义验证)
10. compaction7 种策略Inside the Scaffold论文统计的 7 种策略:summarization、sliding window、retrieval-based、hierarchical 等

这 10 个 axes 的价值:

当你说"Anthropic research system"时,你可以精确描述它:

Axis选择
topologymulti
coordinationorchestration
session spansingle
control loopplan-execute
autonomyapproval-required
execution isolationsandbox
memoryshared
verificationcomputational + inferential
......

这比笼统地说"它是个 multi-agent 系统"清晰得多。

第 4 层:Pattern(可复用的设计模式)

从现有的一些Harness中,我们可以抽象出一些跨领域可复用的结构性设计。这些 Pattern 不是某个具体项目的配置,而是经过验证的、可以在不同场景下重复使用的设计蓝图。

这一层类似于软件工程中的 GoF 设计模式——你不会说"我在用单例模式这个产品",你会说"我在这个项目里应用了单例模式"。

Anup Jadhav 总结的 5 个基础 Pattern:

#Pattern解决的问题关键做法
1Plan-Act-Verify几乎所有 agent 的基础模式分解任务 → 执行 → 自检的基础循环
2Progressive Disclosure对抗 context rot(上下文膨胀导致 agent 混乱)Skill 按需加载,而不是一次性把所有指令塞进 context
3State Outside Context持久状态不污染 context window持久状态放磁盘/artifact;Anthropic 长任务 harness 明确推荐用feature_list.json+claude-progress.txt做跨 session 共享文件
4Clean-Context Continuation避免 context 累积导致模型性能退化长任务执行中,定期 reset context,从任务简介重启
5Approval Checkpoints关键操作需要 human-in-the-loop在 destructive action 前暂停等待审批

学术界和工业界补充的 Pattern:

#Pattern解决的问题关键做法
6Initializer + Coding Agent长任务需要 spec + 增量实现分离Anthropic 长任务 harness 的标志性模式:Initializer agent 写 spec/TODO,Coding agent 增量实现。现在的很多 SDD 框架就使用了这个 Pattern
7Planner / Evaluator Split对抗 agent "自己批自己作业太宽松"写代码的模型和审代码的模型分开
8Approved Fixtures避免 agent 自己生成测试、自己通过的循环自嗨用固定测试数据对抗 agent 自评
9Ralph Loop实现 agent 的自迭代Hook 截断退出 + 重注入 prompt

Pattern 层的特殊性:

这一层是 Harness Engineering 的核心。它承上启下:

  • 向下:组合 Design Components 中的能力和设计轴
  • 向上:被具体的 Instance 实例化

当你在设计一个新的 agent 系统时,不应该从零开始发明,而应该先看看这些 Pattern 中哪些适用,然后组合、调整。

第 5 层:Design Instance(最具体的现实)

这一层是现实世界中真正跑起来的 agent 系统。当你打开 Claude Code、看到 Stripe 的 PR 机器人、或者部署一个 CI/CD 自动修复系统时,你看到的就是 Design Instance。

几个典型例子:

Instance关键特征对应的 axes 选择
Anthropic Multi-Agent Research SystemClaude Opus 作为 lead agent 协调多个 Claude Sonnet subagent 并行;Lead agent 把研究任务分解并写入虚拟文件系统作为 TODO;3 个 Sonnet subagent 并行执行搜索和分析;相比单个 Opus agent 在复杂研究任务上展现显著性能提升topology=multi、coordination=orchestration
Stripe Minions每周自动合并 1300+ PR;Blueprint 架构(deterministic node + agentic node);CI 严格的 two-strike rule(失败两次立即升级到人工);PR webhook 触发,事件驱动topology=multi、coordination=cooperation(多个 agent 通过 PR/CI 这个共享状态协作)
CI/CD Auto-Triage + Auto-FixCron 定时扫描 CI 失败/新 issue;代码自动生成 prompt 描述问题;Skill 自动分类问题类型;Agent 在 worktree 中自动修复;Checker 判断修复是否完成;自动开 PR,等 CI green 后通知 Slack channel;状态持久化到文件系统(自动化 agent 系统实例,叠加 Loop Pattern)
OpenAI Codex 长期项目实例OpenAI 团队用 5 个月构建并交付一个内部 beta 产品,人工手写代码为 0 行;团队起初由 3 名工程师驱动 Codex,后续扩展到 7 名;系统持续跨多个 session 工作;OpenAI 称之为 "harness engineering"——通过代码外壳管理 agent loop(持续运行的 agent 系统实例)

这一层的价值在于:它是抽象概念的锚点。当我们讨论 Pattern 或 Primitives 时,可以随时回到这些具体例子来验证理解是否正确。

三个关键认知

有了这个分层结构,我们可以回答几个容易混淆的问题。

认知 1:Multi-agent 的位置

我之前一直在考虑,multi-agent到底处于什么位置, 是不是应该在harness 之上的独立层。

有了我自己的分层后,就可以简单定义:

Multi-agent 只是topology 这个 design axis上的一个选项。

  • Anthropic research system = harness(topology=multi, coordination=orchestration, ...)
  • Stripe minions = harness(topology=multi, coordination=cooperation, ...)
  • 基于RAG的智能问答 = harness(topology=single, ...)

它们都是 harness,只是在 topology 轴上的选择不同。

认知 2:"Harness"这个词的三种用法

现在我们可以精确区分:

  1. "Claude Code 是一个 Harness"→ 指的是 Framework 层的产品
  2. "解决问题和评估的agent分开 是一个好的 Harness 设计"→ 指的是 Pattern 层
  3. "我们项目的 Harness 配置在 AGENT.md 里"→ 指的是 Design Instance 层的具体配置

三个人说的都是"Harness",但分别在不同层。

Harness Engineering 解决的问题

Context Engineering 无法回答的问题,Harness Engineering 都能回答:

  • Agent 怎么自己去找信息?(工具调用的控制)
  • Agent 如何安全地运行?(沙箱、权限管理)
  • Agent 如何跨多个 session 协作?(状态持久化、调度)
  • 什么时候触发 compaction?(生命周期管理)

这些问题都能在 Harness Engineering 的框架内得到回答。

这个分层解决了什么问题?

  1. 概念边界清晰:说"Harness"时,明确在说哪一层
  2. 设计决策明确:知道在哪一层做什么决策
  3. 复用性提升:Pattern 层可以跨项目复用
  4. 沟通效率提升:团队讨论时不会鸡同鸭讲

终于轮到最近突然火起来的Loop Engineering了,我把它定位成一个特殊的Pattern

四、Loop Engineering:让 Harness 自主运转的 Pattern

Loop Engineering 解决什么问题?

在 Harness Engineering 的基础上,我们已经能构建出功能完整的 Agent 系统。但还有一个关键问题没有解决:

谁来启动 Agent?谁来决定什么时候让 Agent 工作?

传统的 Agent 工作模式是:

  1. 人发现问题(比如 CI 失败、有新 issue、PR 需要 review)
  2. 人打开 Claude Code,输入 prompt
  3. Agent 执行任务
  4. 人查看结果,决定下一步

这个模式有几个问题:

问题 1:人是瓶颈

  • 你得盯着 GitHub、Slack、CI 系统,发现问题才能让 Agent 行动
  • 半夜 CI 失败了,Agent 不会自己修,得等你早上醒来

问题 2:上下文断裂

  • 每次都要重新告诉 Agent 背景、规则、注意事项
  • Agent 不记得上次做了什么,每次都是"新员工"

问题 3:无法持续工作

  • 你不可能 24 小时坐在电脑前给 Agent 分配任务
  • 大型项目的 Agent 协作需要持续数天,人无法全程盯着

Loop Engineering 就是为了解决这些问题:把 Harness 从"人工启动的工具"升级为"自主运行的 Agent"

典型场景对比:有 Loop 和没 Loop 的区别

为了更具体地理解 Loop Engineering 的价值,我们对比两个场景:

场景:CI/CD Auto-Triage + Auto-Fix

场景:CI/CD Auto-Triage + Auto-Fix

把"没 Loop"和"有 Loop"两条流程平行对齐:

步骤没有 Loop Engineering(人工驱动)有 Loop Engineering(系统驱动)
触发CI 失败了,你收到 Slack 通知Cron 每 10 分钟触发一次(Self-triggering)
发现问题你打开 Claude Code系统自动扫描 CI 失败和新 issue
生成 prompt你输入 "/fix the failing CI"代码生成 prompt 启动 Agent(Self-prompting)
修复Agent 在 worktree 里修复Agent 在 worktree 里修复
判断完成你 review、mergeChecker 判断是否修复完成(Stop condition check)
开 PR你开 PR自动开 PR
状态记录状态写入文件(State persistence)
通知你盯着 CICI green 后自动通知 Slack "已修复,请 review"
你的角色盯着监控、手动启动、半夜失败了得等早上只需要最后 review,不需要盯着监控

关键区别:

维度没 Loop有 Loop
谁盯着监控系统
谁启动 Agent你手动系统自动
谁判断完成Checker
工作时间受你作息限制24/7

Stripe Minions 实例:

  • 每周自动合并 1300+ PR
  • PR webhook 触发(Event-driven Loop
  • Blueprint 架构:把工作流拆成 deterministic node 和 agentic node
  • CI 严格的 two-strike rule:失败两次立即升级到人工
  • 多个 agent 通过 PR/CI 这个共享状态协作

Loop Engineering 的核心能力与依赖

Loop Engineering 的本质是一个 orchestration pattern。它真正新增的核心能力只有一个:Self-Triggering(系统自动触发)

但要让这个 pattern 工作,它需要依赖 Harness 已有的三个基础能力。下面按依赖关系展开:

核心能力:Self-triggering(系统自动触发)

这是 Loop Engineering 唯一真正新增的能力:不需要人手动启动,系统自己决定何时启动 Agent。

实现方式

  • Cron:定时触发(每 10 分钟扫描 CI、每天早上生成报告)
  • Event:事件触发(PR created、issue opened、CI failed、webhook 推送)
  • Condition check:条件触发(当某个指标达到阈值)

根据触发的主动性,可以分为:

  • Polling-based:系统主动扫描(Cron、condition monitoring)
  • Event-driven:外部事件推送(webhook、file watch、message queue)

技术实现

  • 依赖Framework 层的 Trigger 系统(cron / event / hook 机制)
  • 具体"什么时候触发、触发什么"是Pattern / Design Instance 层的 决策

例子

# Cron: 每 10 分钟检查一次 */10 * * * * agent run "scan and fix CI failures" # Event: GitHub webhook on PR.opened -> agent run "review PR" # Condition: 监控指标 when error_rate > 5% -> agent run "investigate and alert"

关键区别

  • 不是 Loop:人手动打开 Claude Code 输入 "/fix CI"(人触发)
  • 是 Loop(Event-driven):Stripe Minions 的 PR webhook 自动触发 agent 处理
  • 是 Loop(Polling-based):Cron 每 10 分钟主动扫描 CI 状态并决定是否修复
依赖能力 1:Self-prompting(系统生成 prompt)

为什么 Loop 需要它:触发后,Agent得有输入才能知道做什么。

重要澄清:Self-prompting不是 Loop 发明的——任何 Harness 都可以代码生成 prompt(比如根据 tool schema 生成 system prompt)。但 Loop必须用它,否则触发后 Agent 不知道干什么。

实现方式

  • 读取外部状态(CI 状态、issue 列表、PR diff)
  • 根据状态生成结构化的 prompt
  • 注入 context(相关代码、历史修复记录)
  • 依赖Framework 层的 Trigger 能力
依赖能力 2:State persistence(跨 session 状态传递)

为什么 Loop 需要它:Loop 通常跨多个 session 工作(一次修不完、需要等外部状态变化),得有地方存状态。

重要澄清:State persistence不是 Loop 发明的——这是 Harness 的session span axis(multi-session)+State Outside Context pattern。任何需要跨 session 的 Harness 都可以用。但 Loop大概率需要它

与 Harness 的关系

  • 跨 session 能力来自 Harness 的 session span 设计轴(single-session ↔ multi-session)
  • State Outside Context 是 Harness Pattern 层的一个成员
  • Loop Engineering 只是让这个跨 session 流程自动化触发

举例说明

  • Harness 的 multi-session(非 Loop):用户手动起一个新 session 读 artifact 继续工作
  • Loop Engineering:系统定时自动起 session 检查 artifact 并推进工作

区别在于"谁触发",而不是"能否跨 session"。

实现方式

  • Session 1:Agent 写状态到文件(feature_list.jsonprogress.txt、artifact)
  • Session 1 结束
  • Session 2:自动触发,读取文件,继续工作
  • Session 2:更新文件状态
  • 依赖Framework 层的 Memory 能力+State Outside Context pattern

每个 session 读这个文件,知道该做什么,做完后更新状态。


Loop Engineering 的价值:不是发明新的能力,而是通过 Self-triggering 把 Harness 从"人工启动的工具"升级为"自主发现问题并解决的 Agent"。这是从"被动响应"到"主动监控"的范式转变。

Loop Engineering 在 Harness 分层中的位置

现在可以回头再看看:Loop Engineering 到底是什么?

它是 Pattern 层的成员

在上一节的分层结构中,Loop Engineering 位于Pattern 层,和 Plan-Act-Verify、Initializer + Coding Agent 平级。

Addy Osmani 的 5+1 building blocks 验证了这一点:

Addy 说 Loop Engineering 依赖 6 个 building blocks:

  1. Automations(定时/事件触发)
  2. Worktrees(隔离工作空间)
  3. Skills(固化知识)
  4. Plugins/connectors(MCP)
  5. Sub-agents(maker/checker 分离)
  6. Memory

这 6 个里,其实都已经在 Harness 里了

  • Automations → Framework 层 Trigger的能力
  • Worktrees → Framework 的 sandbox runtime
  • Skills → Framework 的 skill registry + Pattern 的 progressive disclosure
  • Plugins → Framework 的 MCP client
  • Sub-agents → Framework 的 subagent spawn + Pattern 的 Planner/Evaluator
  • Memory → Framework 层 Memory 能力 + Pattern 的 State Outside Context
那为什么很多人说"Loop 在 Harness 之上"?

这是个好问题。Addy、Boris 的文章确实给人"Loop 是更高层"的感觉。

三个非概念性的原因:

  1. 修辞/传播原因

    • "从手动 prompting 到自动 prompting" 是个范式转变
    • 包装成"新一层"更有冲击力,便于传播
    • 技术文章需要吸引眼球
  2. 产品原因

    • Claude Code 和 Codex 把 Automations 做成 first-class feature
    • 产品上需要"突出"这个新功能
    • /loop命令看起来像是"新能力"
  3. 历史原因

    • "Harness engineering" 这个词 2025 年才定型
    • "Loop engineering" 是 2026 年的新词
    • 新词自然要"在它之上"才显得新

但从概念本质讲:Loop Engineering 是 Harness 内部的一个 Pattern,主要依赖 Framework 层的 Trigger 能力,通过组合现有能力实现自驱动。

Loop 的真正价值不是"层级更高",而是"范式转变":

从"人工启动的工具"到"自主运行的 Agent",这个跃迁的价值不在于引入了新的技术能力,而在于改变了人与 Agent 的协作模式

  • 过去:你是 Agent 的老板,发现问题、分配任务、检查结果
  • 现在:你是系统的架构师,设计规则让系统自己发现问题、分配任务、检查结果

这个转变的意义,不亚于从"手动部署"到"CI/CD 自动部署"、从"人工监控"到"自动告警"。