Hermes * OpenClaw 双向联动:文件系统通道从设计到落地
背景与问题
我同时运行两个 Agent 系统:主 Agent Hermes(太白)和多 Agent 协作平台 OpenClaw(码仔)。两者各有分工——Hermes 擅长内容创作、长程规划、外部工具调度;OpenClaw 擅长并行任务执行、多 Agent 路由、代码/系统类任务。
但两个系统彼此”看不见”:我需要在两者之间手动搬运信息,效率低、容易遗漏。于是有了这次联动改造。
核心挑战
- 没有统一的 RPC 机制 — Hermes 和 OpenClaw 是独立进程,不能直接函数调用
- 通知方式不通用 — Hermes gateway 监听端口 3389,但无 HTTP API;OpenClaw 有 CLI 但 agent 端有超时瓶颈
- 双向任务流都要支持 — Hermes 可能给 OpenClaw 下任务,OpenClaw 也要能回调 Hermes
解决方案:文件系统 + inotify 双通道
核心思路:把文件系统当作消息队列,用 inotifywait 做事件监听,用 CLI 命令做通知触发。
目录结构
~/.openclaw/hermes-inbox/ # Hermes → OpenClaw:任务入口
~/.hermes/openclaw-outbox/ # OpenClaw → Hermes:结果出口
~/.hermes/openclaw-inbox/ # OpenClaw → Hermes:任务入口
~/.openclaw/hermes-outbox/ # Hermes → OpenClaw:结果出口

OpenClaw 侧监控脚本
# openclaw-hermes-bridge.sh
inotifywait -m -e close_write,move -q --format '%f' "$WATCH_DIR" | while read filename; do
TARGET_AGENT=$(parse_task_type "$FILEPATH")
openclaw system event --mode now --text "[Hermes 任务投递] $FILEPATH"
done
关键设计点:用 close_write 事件确保文件完全写入后再处理;关键词路由到 wenchang/taozhu/mazai。
Hermes 侧监控脚本
# watch_openclaw_outbox.sh
inotifywait -m -e close_write,move -q --format '%f' "$WATCH_DIR" | while read filename; do
sleep 2 # 等文件完全写完
hermes chat -q "OpenClaw 任务结果已就绪..." &
mv "$FILEPATH" "$OUTBOX_DONE/$filename" # 防止重复触发
done

端到端验证

第一步:OpenClaw → Hermes
1. 码仔在 openclaw-outbox/ 写入 e2e_test.md
2. Hermes 的 inotifywait 检测到文件
3. Hermes agent 收到通知,读取 done/e2e_test.md
4. 判断结果:状态 success,双向通道 e2e 测试完成
第二步:Hermes → OpenClaw
1. 太白在 hermes-inbox/ 写入反馈消息
2. OpenClaw 的 inotifywait 检测到文件
3. 码仔收到并处理
验证结论:双向实时监控通道完全打通。
踩过的坑
坑1:Hermes gateway 没有 HTTP 通知端点 — 改用 hermes chat -q CLI 命令触发 agent。
坑2:文件还在写入就被读 — 检测到事件后 sleep 2 再读取。
坑3:文件移动触发二次事件 — 判断文件路径是否包含 done/ 子目录,包含则跳过。
坑4:hermes chat 参数写错 — 正确参数是 -q / --query,不是 --message。
完整文件清单
~/.hermes/scripts/watch_openclaw_outbox.sh |
Hermes 侧监控脚本 |
~/.openclaw/scripts/openclaw-hermes-bridge.sh |
OpenClaw 侧监控脚本 |
~/.hermes/memories/OPENCLAW_COMMUNICATION.md |
通信协议规范文档 |
总结
Hermes 和 OpenClaw 虽然是独立的 Agent 系统,但通过文件系统 + inotifywait 事件监听这种方式,实现了完全异步、双向实时、零外部依赖的通信通道。核心工具只有 inotifywait 和各平台的 CLI 命令,任何两个独立进程只要能访问同一文件系统,就能用这个模式联动起来。
夜雨聆风