Files
aios/docs/aios-v2/adr/ADR-002-openclaw-hermes-decoupling.md
T

3.2 KiB
Raw Blame History

ADR-002:OpenClaw 与 Hermes 从控制面职责中解耦

  • 状态:已采纳
  • 日期:2026-07-20
  • 影响范围:OpenClaw、Hermes、Execution Orchestrator、Agent Router、Audit、Web Console

1. 背景

OpenClaw 和 Hermes 已经具备成熟的执行能力,但历史实现可能同时承担部分租户、策略、任务状态或运维控制职责。如果继续扩展这种模式,AIOS 将无法成为唯一控制面,也无法统一 Web、审计和多租户隔离。

2. 决策

OpenClaw 与 Hermes 通过稳定的 Adapter/Boundary 接入 AIOS:

AIOS Control Plane
        |
        v
Execution Orchestrator
        |
        +--> OpenClaw Adapter --> OpenClaw Runtime
        |
        +--> Hermes Boundary --> Hermes Workers

OpenClaw 只负责:

  • 验证签名命令;
  • 执行;
  • 查询状态;
  • 取消;
  • 健康检查;
  • 返回结果和生命周期事件。

Hermes 只负责:

  • tenant/cell/profile 分区队列;
  • Worker claim;
  • Lease 与 Heartbeat;
  • 执行;
  • 完成、失败、取消和结果回传。

二者均不得:

  • 创建或批准 AIOS Task;
  • 修改租户或策略;
  • 维护第二套任务生命周期;
  • 绕过 AIOS Audit;
  • 向浏览器提供直接控制入口。

3. 备选方案

方案 A:让 OpenClaw 继续拥有控制职责

拒绝原因:会产生第二控制面,并使 Web、审批和审计持续分裂。

方案 B:让 Hermes 统一控制和执行

拒绝原因:Hermes 的核心价值是 Worker Runtime 与队列,不应承担产品、租户和策略治理。

方案 C:直接替换 OpenClaw/Hermes

拒绝原因:不符合能力复用原则,会扩大迁移风险和开发量。

4. 正面影响

  • AIOS 保持唯一权威状态;
  • OpenClaw/Hermes 可以独立升级;
  • 新 Runtime 可使用相同接入模式;
  • Web 和审计不再依赖 Runtime 内部实现;
  • 可逐步关闭旧旁路,而不需要一次性重写执行层。

5. 负面影响与风险

  • 需要维护稳定的命令、结果和健康 Contract;
  • 旧调用路径可能在迁移期并存;
  • Runtime 联调和错误语义需要统一;
  • Adapter 本身成为重要可靠性边界。

6. 迁移步骤

  1. 定义 OpenClawCommand/OpenClawResult/RuntimeHealth;
  2. 定义 HermesJob/HermesResult/HermesHealth;
  3. 引入 AIOS Orchestrator;
  4. 将新任务先通过 Adapter 执行;
  5. 迁移 Web、Codex 和自动任务入口;
  6. 冻结旧 Runtime 控制接口;
  7. 通过网络策略或代码门禁关闭旁路。

7. 回滚原则

允许回滚 Runtime 或 Adapter 版本,但不允许回滚到 Runtime 重新拥有 Tenant、Policy、Approval 或 Task Lifecycle 的模式。

8. 合规检查

  • OpenClaw 输入是否为 AIOS 生成的签名命令?
  • Hermes Job 是否包含 tenant/cell/profile?
  • Runtime 是否只返回结果,不直接写 AIOS Store?
  • Web 是否只调用 AIOS API?
  • Runtime Bug 修复是否同步更新 Contract、测试和文档?

9. 实现与测试映射

  • OpenClaw:active-runtime/app/aios_openclaw/
  • Hermes:active-runtime/app/aios_hermes/
  • Orchestrator:active-runtime/app/aios_v2/orchestrator.py
  • 测试:tests/aios_v2_candidate/test_candidate_flow.py
  • 模块契约:docs/aios-v2/04-MODULE-CONTRACTS.md