Skip to content

Hermes 插件

yoooclaw-hermes-pluginHermes Agent 与 YoooClaw 之间的 Python 插件桥接层。它包含两个入口点插件:

  • yoooclaw —— 通用 Hermes 插件:tools、hooks、slash commands、CLI 子命令、skills。
  • yoooclaw_app —— APP 平台适配器:把手机 APP 消息接入 Hermes,并把 Hermes 回复转发回 APP。

生产环境发布的插件包里内置了对应平台的 yoooclaw 可执行文件,不需要用户预先装 CLI,插件也不会在首次运行时现下载 —— 内置的可执行文件会先校验再安装到插件自管的路径。当前插件版本 0.8.2 内置 CLI 0.8.2

daemonless 插件模式

插件模式下不再拉起 CLI daemon。插件进程直接持有 profile 的存储写者锁并直写通知 / 录音 / 图片 / 已同步网页,同时独占 openclaw-service 隧道 —— 手机通知 Relay 与 APP 会话 Relay 合并为同一条连接。CLI 的只读命令(notification *recording list/status/eventsimage *synced-web-page *)照常可用,读的就是同一批文件;yoooclaw daemon start 在插件持锁期间会被拒绝并返回 YOOOCLAW_DAEMON_DISABLED_BY_PLUGIN。停用插件后锁自动释放,即回到独立 CLI 模式,数据文件不需要任何迁移。详见使用与生命周期

一键安装

bash
curl -fsSL https://artifact.yoooclaw.com/hermes-plugin/install.sh | bash -s -- --api-key "ock_..."

Windows(PowerShell):

powershell
& ([scriptblock]::Create((irm https://artifact.yoooclaw.com/hermes-plugin/install.ps1))) --api-key ock_...

重复执行同一条命令即可升级(不需要 --force,走的是 pip install --upgrade)。也可以直接在对话里让插件自更新,见更新与升级。PowerShell 安装器会自动解析匹配的 win_amd64 wheel、定位标准安装路径下的 Hermes Agent 虚拟环境,必要时用 ensurepip 引导 pip,再用 pip install --upgrade 完成安装。

版本要求

安装器要求 Hermes Agent >= 0.14.0。更早版本没有 APP 适配器依赖的插件平台 API(PluginContext.register_platform),安装器会直接报错停止,而不是留下一个半启用的插件。

安装器做的事情:

  • 把共享 api-key 写入 ~/.yoooclaw/credentials.json
  • 清理 ~/.hermes/.env 里过期的 API-key / 旧版本地 APP 授权环境变量;
  • 确保 ~/.hermes/config.yamlplugins.enabled 里同时有 yoooclawyoooclaw_app
  • 把内置的 yoooclaw / yc 可执行文件装到 ~/.yoooclaw/hermes-plugin/bin,维护托管 shim,并在检测到的 hermes 可执行文件旁边(如果该目录可写)软链这两个命令;
  • 若发现新版独立 CLI(0.9+)已注册了开机自启动服务,安装前先禁用它,避免登录/重启后又把存储所有权抢回去;这一步禁用不了时(CLI 版本太旧不支持 daemon autostart)会直接拒绝接管;
  • 重启 Hermes gateway 后,分级验证插件是否真正激活:先确认包装好(PACKAGE_INSTALLED)→ 再确认当前 Hermes profile 的 plugins.enabled 里勾上了(PLUGIN_CONFIGURED)→ 最后确认运行时真正接管了存储写者锁和 Relay 连接(PLUGIN_ACTIVE)。任一环节校验失败,脚本现在会以非零退出码结束并打印 Package installed, activation failed.(此前无论校验是否通过都会打印"安装完成")。daemonless 模式下写者锁必须由长驻的 gateway 进程持有,安装器只能验证而不能代为接管(临时 Python 进程一退出就会释放 OS 锁)。

常用选项:

选项 / 环境变量说明
--enable-app / --no-enable-app已废弃的空操作yoooclaw_app 适配器现在总是启用,这两个 flag 保留只为不让旧命令行报错。
--version <VERSION> / --oss-channel <NAME>装指定版本 / 指定读哪个版本标记(默认 latest)。见更新与升级
--hermes-profile <name> / HERMES_PROFILEHermes 运行在具名 profile(hermes --profile <name>)下时指定,安装器会去改该 profile 的 config.yaml,网关重启命令也会带上 --profile;不传时改的是未使用具名 profile 场景下的全局配置。
YOOOCLAW_HERMES_CLI_LINK_DIR自定义 CLI 命令软链目录。
YOOOCLAW_HERMES_INSTALL_CLI=0跳过 shell 命令软链。
--no-start-daemon跳过安装后的插件激活校验(历史命名,daemonless 模式下已无 daemon 可启)。

更多本地开发选项(--skip-install--package--version--python--no-restart--no-start-daemon 等)可通过安装脚本的 --help 查看。稳定版通过 PyPI 分发(见下文手动安装)。

手动安装

稳定版也发布到 PyPI。装进 Hermes 使用的同一个 Python 环境后,Hermes 会发现这两个入口点插件:

bash
pip install yoooclaw-hermes-plugin

Hermes 0.15.1 及更早版本的入口点插件启用方式

hermes plugins enable <name> / disable / list 只识别目录形式(~/.hermes/plugins/)和内置插件,不会扫描 Python entry points,所以 hermes plugins enable yoooclaw 会报 "Plugin 'yoooclaw' is not installed or bundled."。运行时加载器确实会加载入口点插件,但前提是插件名出现在 plugins.enabled 白名单里。对 pip 安装的场景,直接编辑 ~/.hermes/config.yaml

yaml
plugins:
  enabled: [yoooclaw, yoooclaw_app]

然后重启 gateway(hermes gateway restart)。上面的一键安装器已经自动处理了这一步配置写入。

功能概览

  • 通用 Hermes 插件:tools、hooks、slash commands、CLI 子命令、skills。
  • yoooclaw_app 平台适配器:APP 消息进 Hermes,Hermes 回复出 APP。
  • Tool bridge:调用 yc --format json
  • 内置 CLI:插件包自带目标平台的 yoooclaw 可执行文件,PATH 查找只作为本地开发兜底。
  • APP transport:插件进程内维持一族托管 WebSocket 连接 —— openclaw-service*.yoooclaw.com 隧道(每个 api-key 一条),同时承载 Hermes APP 会话 RPC 帧与手机通知 / 录音 / 图片 relay 帧;APP 协议层先认领自己的白名单帧,其余交给进程内的本地 ingest。
  • 本地存储直写:通知、录音(App 下发的转写 / 总结,可选后台下载 ossUrl 音频)、图片、已同步网页(浏览器扩展经 Relay 投递)全部由插件进程按 CLI 的目录约定落盘,状态事件经进程内事件总线转发到隧道。
  • 本地 relay server 与浏览器聊天 UI,用于端到端 APP 会话测试。

APP 认证

APP 用户认证由 Relay 服务强制执行,Hermes 插件不再维护单独的本地 APP 用户白名单。

APP 适配器默认从 ~/.yoooclaw/credentials.json 解析 Relay key —— 和 yoooclaw CLI 读的是同一份,插件和 CLI 因此保持同一把 key。Hermes 环境里残留的 YOOOCLAW_APP_API_KEY / YOOOCLAW_API_KEY 会被忽略,安装器也会把它们清掉。

APP 会话走 openclaw-service Relay 隧道,endpoint 跟随 PHONE_NOTIFICATIONS_ENV / 当前 profile:

PHONE_NOTIFICATIONS_ENVRelay host
production(默认)openclaw-service.yoooclaw.com
development / test对应的内部 staging 主机(仅内部使用)

未设置或未知值会回落到当前 profile 的 environment,再回落到 productionYOOOCLAW_OPENCLAW_RELAY_URL 可以覆盖隧道 URL 用于本地或 staging 验证;已废弃的 YOOOCLAW_APP_RELAY_URL 会被安装器从 .env 里清除。

下一步