乐于分享
好东西不私藏

Hermes * OpenClaw 双向联动:文件系统通道从设计到落地

Hermes * OpenClaw 双向联动:文件系统通道从设计到落地

背景与问题

我同时运行两个 Agent 系统:主 Agent Hermes(太白)和多 Agent 协作平台 OpenClaw(码仔)。两者各有分工——Hermes 擅长内容创作、长程规划、外部工具调度;OpenClaw 擅长并行任务执行、多 Agent 路由、代码/系统类任务。

但两个系统彼此”看不见”:我需要在两者之间手动搬运信息,效率低、容易遗漏。于是有了这次联动改造。

核心挑战

  1. 没有统一的 RPC 机制 — Hermes 和 OpenClaw 是独立进程,不能直接函数调用
  2. 通知方式不通用 — Hermes gateway 监听端口 3389,但无 HTTP API;OpenClaw 有 CLI 但 agent 端有超时瓶颈
  3. 双向任务流都要支持 — 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 命令,任何两个独立进程只要能访问同一文件系统,就能用这个模式联动起来。