Skip to content

OpenClaw vs Hermes Agent:两种 Harness 哲学的深度对比

封面

TL;DR — OpenClaw 把 harness 当作可替换的引擎(插进去就能跑,坏了换一个);Hermes 把 harness 当作可进化的有机体(越用越聪明,还能自动搜索最优配置)。本文按架构逐层拆解两者的技术实现差异。


2026 年 Q1,开源 AI Agent 赛道出现了两个现象级项目:

  • OpenClaw(TypeScript,361K+ stars)—— Peter Steinberger 和社区构建,定位"个人 AI 助手操作系统"
  • Hermes Agent(Python,95K+ stars)—— Nous Research 构建,定位"自我改进的自主 AI Agent"

两者都跑在个人设备上,都支持飞书/Telegram/Discord/Slack 等多平台,都以 MIT 协议开源。但它们对一个核心概念的理解截然不同——harness

一、什么是 Harness,以及两个项目为什么理解不同

Harness 在软件工程中由来已久——test harness、evaluation harness 都是老概念。在 LLM/Agent 领域,harness 泛指模型周围的那层代码。Stanford 的 Meta-Harness 论文(arXiv:2603.28052)给出了一个更精确的形式化定义:LLM 系统的性能不仅取决于模型权重,还取决于 harness——决定存储什么、检索什么、呈现给模型什么的那层代码,并首次提出了自动优化 harness 的方法。

两个项目对这个定义的取舍完全不同:

OpenClaw 只取了其中的"执行"维度——harness 是一个可插拔的底层执行器,负责执行单个准备好的 agent turn,不多不少。理论渊源是工程性的,类比"操作系统为应用管理资源"。核心目标:让不同 model family 的原生运行时被统一调度。

Hermes Agent 完整接受了论文的定义,并进一步扩展——harness 是围绕模型的全部代码,而且 Hermes 还在此基础上叠加了内置的闭环学习循环(这是 Hermes 自己的创新,论文里没有)。核心目标:内置 Skill 闭环让 harness 在使用中自我改进,外部 Meta-Harness 在基准测试上自动搜索最优 harness 代码。

这个分歧决定了后续所有实现层面的差异。


二、架构全景

OpenClaw vs Hermes Agent 架构对比

如图中虚线标注所示,两个项目的层级并不对齐

  • Hermes 的 Gateway 只是入口之一(标注"仅消息路由"),OpenClaw 的 Gateway 是独立的控制平面层
  • Hermes 的 AIAgent 橙色大框横跨了 OpenClaw 的 Gateway + Agent Loop 两层职责(标注"编排+执行合一")
  • Hermes 底部的 Meta-Harness 在 OpenClaw 侧完全没有对应(标注"无对应")

层级对不上,所以下面按功能角色分组对比。


三、按功能角色对比

控制平面:OpenClaw Gateway vs Hermes 无独立控制平面

OpenClaw 有一个专属的控制平面层——Gateway(架构图左侧蓝色框)。

  • TypeScript 实现(server.impl.ts),默认端口 18789
  • WebSocket 类型化 API,JSON Schema 校验
  • 拥有 session 管理、channel 路由、auth/pairing、tool policy、cron、hook 系统
  • 所有消息平台(WhatsApp/Telegram/Slack/Discord/Signal/iMessage/飞书等)和客户端(macOS App/CLI/Web UI/iOS/Android Nodes)都走同一个 WebSocket

Hermes 没有独立的控制平面层。它的 gateway/run.py(~9,000 行)是 AIAgent 的消息分发前端——18 个平台适配器(Telegram/Discord/Slack/WhatsApp/Signal/Matrix/飞书/DingTalk/WeCom/Email 等),但不拥有 agent 逻辑,只负责创建 AIAgent 实例并调用 run_conversation()。在架构图里,Gateway 和 CLI、ACP、Batch Runner 并列在 Entry Points 中。

为什么这很重要? OpenClaw 的 Gateway 掌控全局——模型切换、权限校验、工具审批都在 Gateway 层完成后才交给下游。Hermes 的编排权在 AIAgent 自己手里,Gateway 管不了它。这直接影响了"谁有权决定 harness 怎么跑"。

编排引擎:OpenClaw Agent Loop vs Hermes AIAgent

这是两个项目分化最大的部分。

OpenClaw Agent Loop(架构图左侧青色框)

核心运行时是 pi-agent-core。一个 agent run 的流程:

  1. agent RPC 验证参数、解析 session,立即返回 { runId, acceptedAt }
  2. 解析 model + thinking/verbose/trace → 加载 skills snapshot → 调用 runEmbeddedPiAgent
  3. 通过 per-session + global 队列串行化 → 构建 pi session → 订阅事件 → 超时中止
  4. 事件桥接:tool → stream: "tool",assistant → stream: "assistant",lifecycle → stream: "lifecycle"

同时提供 10+ Plugin Hooks 覆盖完整生命周期(before_model_resolvebefore_prompt_buildbefore_tool_call 等)。

重点:Agent Loop 不是 harness。它是 harness 的上层,负责把一切准备好,然后交给下层 harness 执行。

Hermes AIAgent(架构图右侧橙色框)

run_agent.pyAIAgent 类(~10,700 行),集编排与执行于一体——AIAgent 本身就是 harness

Turn 生命周期 9 步:生成 task_id → 追加消息 → 构建系统提示(融合 SOUL.md / MEMORY.md / USER.md / Skills)→ 预压缩检查(>50% 上下文触发)→ 构建 API 消息(支持 chat_completions / codex_responses / anthropic_messages 三种模式)→ 注入临时提示层 → prompt caching → 可中断 API 调用 → 解析响应并循环。

其中可中断调用的实现值得注意:主线程同时监听 response、interrupt event、timeout 三个信号,API 请求在后台线程执行。用户发新消息或 /stop 时 API 线程被丢弃,不会有残留状态。工具执行通过 ThreadPoolExecutor 并发(interactive 工具除外)。

关键差异:OpenClaw 把"编排"和"执行"分成两层(Agent Loop + Harness),Hermes 合在一个类里。分层利于替换执行后端;合体让 harness 能直接感知上下文压力和记忆状态——这是实现自我改进的前提。

执行层:OpenClaw Agent Harness vs Hermes Memory + Skill System

对比:可插拔执行器 vs 闭环学习飞轮

这一部分体现了最本质的哲学差异。OpenClaw 在编排引擎下面放了一个可替换的执行器;Hermes 在编排引擎下面放了记忆和学习系统。

OpenClaw Agent Harness(架构图左侧紫色框)

Harness 是一个接口极窄的可插拔执行器。Core(Gateway + Agent Loop)已经解决了所有"决定做什么"的问题,harness 只管"怎么跑这一个 turn"。

  • Core 管的:provider/model 解析、认证、thinking level、context budget、transcript、tool policy、fallback
  • Harness 管的:接收准备好的 prompt/tools/images → 调用原生 runtime → 返回结果

注册只需两个方法——supports() 声明支持哪些 provider/model,runAttempt() 执行 turn:

typescript
const myHarness: AgentHarness = {
  id: "my-harness",
  supports(ctx) {
    return ctx.provider === "my-provider"
      ? { supported: true, priority: 100 }
      : { supported: false };
  },
  async runAttempt(params) {
    return await runMyNativeTurn(params);
  },
};

选择策略:环境变量强制 → auto 模式询问各 harness → 无匹配 fallback 到内置 PI → 可禁用 fallback。内置两个 harness:PI(通用默认)和 Codex(原生 app-server 协议,自带 thread 管理和 compaction)。

Hermes Memory + Skill System(架构图右侧绿色 + 黄色框)

Hermes 在这一位置没有"可替换执行器"的概念,取而代之的是三层记忆 + 闭环学习

层级存什么怎么存
Session context当前对话内存 + SQLite(压缩后丢弃中间部分)
Persistent facts关于用户和项目的事实MEMORY.md / USER.md + FTS5 全文索引
Skill memory可复用的任务解决方案~/.hermes/skills/ 下的 Markdown 文件

三层协同构成闭环学习飞轮(对应插图右侧):完成任务 → 蒸馏出 Skill Document(agentskills.io 标准)→ 存入技能库 → 下次遇到类似问题时 FTS5 检索召回。Skill 不是静态的——agent 在使用中改进它们,并通过 nudge mechanism 主动提醒自己持久化新知识。

关键差异:OpenClaw 在执行层回答"用哪个引擎跑",Hermes 在对应位置回答"怎么让每次跑都比上次更好"。

外部优化:Meta-Harness(Hermes 独有)

Meta-Harness 优化循环

这是 OpenClaw 完全没有对应的部分。

hermes-agent-metaharness(独立仓库)实现了 Stanford Meta-Harness 论文的核心思想:用外部优化循环自动搜索最优 harness 代码

它的工作方式(对应插图):

  1. Proposer(coding agent)读取文件系统中所有历史 candidate 的源代码、分数、执行 trace
  2. 基于这些信息生成新的 candidate harness
  3. 在 TBLite / TB2 等基准上跑 benchmark 评估
  4. 将结果归档回文件系统,循环继续

关键创新:proposer 每步可访问高达 10M tokens 的诊断上下文(而非压缩摘要),能精确追溯失败原因。

论文实验结果:

场景提升
在线文本分类+7.7 pts,同时减少 4x context tokens
数学推理(200 道 IMO 级)+4.7 pts(跨 5 个模型平均)
Agentic Coding(TerminalBench-2)76.4% pass rate,Opus 4.6 排名第二

对比来看:OpenClaw 的 harness 是无状态的——不学习、不优化、不搜索。智能完全依赖上游模型和人工配置的 Skills。


四、总结:可替换的引擎 vs 可进化的有机体

维度OpenClawHermes Agent
Harness 本质可插拔执行器插件接口整体系统 + 外部优化循环
核心文件plugin-sdk/agent-harness(接口定义)run_agent.py(~10,700 行)
控制平面Gateway 独立层,拥有 session/auth/policy无独立控制平面,编排权在 AIAgent
编排 vs 执行分两层(Agent Loop + Harness)合一(AIAgent 即 harness)
记忆Session transcript(Core 管理)三层:Session / Persistent / Skill
学习能力闭环:自动创建/改进 Skill
执行后端PI / Codex / 自定义Local / Docker / SSH / Daytona / Modal / Singularity
自动优化不涉及Meta-Harness 外部搜索
RL 集成不涉及Atropos RL + trajectory 导出

OpenClaw 选择"关注点分离"——Harness 只是一个窄接口,Core 拥有绝大部分控制权。可组合性高,责任边界清晰,harness 出错可以 fallback。代价是 harness 层没有学习能力。

Hermes 选择"自我改进"——整个系统就是 harness。Skill Documents 让 agent 越用越好(Nous Research 报告:20+ 自创 Skills 的 agent 完成研究任务快 40%),Meta-Harness 在基准测试上自动搜索最优配置。代价是系统复杂度极高,定制门槛也高。

一句话收尾:OpenClaw 把 harness 当作可替换的引擎,Hermes 把 harness 当作可进化的有机体。 选哪条路,取决于你要解决的是"统一调度"还是"持续进化"的问题。


参考资料