一、背景与架构
1.1 需求场景
在某些复杂任务中,OpenClaw 主 agent 需要将子任务委托给外部 Hermes Agent 处理,例如:
让 Hermes 执行需要长期记忆的对话任务 利用 Hermes 的特定工具或技能 多 Agent 协作分工
1.2 实现原理
OpenClaw 通过 sessions_spawn 启动 Hermes 的 ACP 进程,ACP 是基于 JSON-RPC over stdio 的通信协议:
每次 sessions_spawn 会在本地启动一个 Hermes 进程 任务通过 stdin/stdout 传递,JSON-RPC 格式 任务完成后进程关闭,但 Hermes 自身有持久记忆系统,可以跨任务保持上下文
二、前置条件
2.1 运行环境
- OpenClaw:
已安装并正常运行,系统级 systemd 服务 - Hermes Agent:
已安装,路径 /root/.hermes/ - Python:
Hermes Agent 的 venv 内置 Python 3 - 节点:
Linux(本文档基于 root 用户 + systemd 环境)
2.2 依赖组件
三、OpenClaw 配置步骤
3.1 编辑配置文件
编辑 /root/.openclaw/openclaw.json,添加以下三个配置块。参数说明见 3.2 节表格:
3.2 重启 Gateway 使配置生效
执行以下命令重启 Gateway:
systemctl restart openclaw-gateway
⚠️ 注意:重启期间 OpenClaw 无法响应消息,请确认后再操作。
3.3 验证配置是否生效
重启后,等待约 30 秒让 Hermes 完成冷启动,然后发送测试消息:
如果 Hermes 正常响应,说明配置已生效。
四、Session 管理方案
4.1 问题分析
ACP session 存在以下限制:
mode="run":每次创建独立 session,任务结束后立即关闭,无法跨任务保持上下文 mode="session":需要 thread=true 做会话绑定,在某些平台下不可用
结论:Hermes 无法通过 ACP 协议本身保持跨任务的持久上下文。
4.2 解决思路
在 prompt 层实现上下文续接:
每次 Hermes spawn 完成后 → 记录其内部 session ID 下次发送相关任务时 → 在 prompt 里告诉 Hermes "请继续之前的 session" Hermes 自身有持久记忆 → 加载该 session 的历史,继续对话
4.3 核心脚本
会话管理脚本路径:/root/.openclaw/workspace/scripts/hermes_session.py
功能命令:
4.4 状态文件
路径:/root/.openclaw/workspace/hermes-session-state.json
4.5 自动决策逻辑
五、调用流程与示例
5.1 标准调用流程(不相关任务)
5.2 续接场景(相关任务)
5.3 关键参数说明
六、已知限制
6.1 Hermes 无法主动发起会话
当前架构是"主 agent 调用子 agent"模式,Hermes 只在收到调用时启动,任务结束后退出。Hermes 没有持续运行的监听循环,无法主动推送消息。
如果需要定时任务,可以由 OpenClaw 通过 cron 定时触发 Hermes,结果由 OpenClaw 转发给用户。
6.2 性能参考
七、文件路径参考
八、快速参考
Shell 命令:
sessions_spawn 调用:
夜雨聆风