跳转至

openclaw hooks

检查并配置内部钩子:用于命令、 消息、会话和 Gateway 事件的处理程序。单独运行 openclaw hooks 会执行与 openclaw hooks list 相同的报告。这些命令不会管理 HTTP Webhooks,也不会管理插件钩子中的类型化 api.on(...) 钩子目录。

目标与范围

只读报告(hooks、list、info、check)会先在所选 Gateway 上调用 hooks.status。已配置的远程 Gateway 和显式指定的 OPENCLAW_GATEWAY_URL 目标具有权威性:远程 URL 缺失、 连接/身份验证失败以及不支持的方法会直接失败,而不是 显示客户端本地钩子。隐式选择的本地 Gateway 在不可用或其钩子报告方法/agent 参数不受支持时,可以回退到本地发现。其他错误不会被静默替换为本地 清单。

启用、禁用、安装和更新会修改本地文件/配置/状态。 它们不会 通过 RPC 更改远程 Gateway。若要更改服务器,请在该主机上运行命令,并使用其 profile/配置。由新安装或链接写入的启用、禁用和配置可以在默认 hybrid 重载模式中立即生效。off 需要手动 重启。钩子文件和元数据不会被监视。编辑它们或更新现有钩子代码后,请重启。

--agent <id> 选择用于检查的 agent 工作区。当已配置的 agent 没有隐式所有者时,它是必需的。空白或未知 ID 会失败。该选项可以在 list、info、check、enable 和 disable 之前或之后使用。它不会将持久化的钩子条目限定到该 agent,并且不支持在 install/update 中使用。参见 本地、远程和 agent 范围 了解工作区清单与 Gateway 加载之间的区别。

列出钩子

openclaw hooks [--agent <id>] [--json]
openclaw hooks list [--agent <id>] [--eligible] [--json] [-v|--verbose]

发现包括捆绑钩子、活动插件钩子、受管钩子、额外 目录以及所选工作区。钩子名称冲突遵循 源策略。

选项 含义
--agent <id> 选择要检查的工作区。
--eligible 仅显示 loadable 钩子:按每个钩子/源策略启用、满足要求,并且至少声明了一个事件。
--json 将结构化 JSON 直接写入 stdout。父级 hooks 命令也接受该选项。
-v, --verbose 在人类可读表格中添加 Missing 列。

人类可读输出是一个包含 Status、Hook、Description 和 Source 列的表格, 前面带有 Hooks (<ready>/<total> ready)。插件管理的源显示为 plugin:<id>。

Note

ready、eligible 和 loadable 是清单结果,而不是实时处理程序 注册检查。该报告不会应用 Gateway 的主开关或 配置名称选择,不会导入处理程序以证明其可用,也不会验证 事件是否已运行。即使内部钩子 系统处于关闭状态,捆绑钩子也可能显示为 ready。启用目标钩子并 验证其真实副作用。

列出 JSON

根对象包含 workspaceDir、managedHooksDir 和 hooks。 每个钩子包括:

  • 标识/显示:name、description、source、可选 pluginId、 emoji、homepage 和 managedByPlugin。
  • 状态:enabledByConfig、requirementsSatisfied、loadable、可选 blockedReason,以及兼容性别名 eligible(loadable)和 disabled(!enabledByConfig)。
  • 事件/要求:events、unknownEvents 和 missing,其数组 为 bins、anyBins、env、config 和 os。

blockedReason 可以是 disabled in config、workspace hook (disabled by default)、 missing requirements 或 no events defined。未知事件是 建议性的:它们本身不会使钩子无法加载。

获取钩子信息

openclaw hooks info <name> [--agent <id>] [--json]

接受钩子名称或其元数据 hookKey。精确的钩子名称优先于 匹配的键。一个键必须标识单个钩子。显示源、描述符 和处理程序路径、主页、事件、未知事件警告、阻止原因以及 每个要求的状态。缺失或歧义的钩子以代码 1 退出。歧义选择器会列出候选项,以便你选择唯一的名称或键。

JSON 包含列表字段,外加 filePath、baseDir、handlerPath、 hookKey、always、requirements、configChecks 和规范化后的 install 选项。每个配置检查具有 path 和 satisfied。每个安装选项具有 id、kind、label 和 bins。安装选项是描述性元数据,而不是 自动安装依赖项的命令。

检查资格

openclaw hooks check [--agent <id>] [--json]

打印 ready/not-ready 钩子的总数,并列出阻止原因。JSON 包含 total、eligible、notEligible 和 hooks,其中包含一个 eligible 名称 数组和一个 notEligible 数组,数组元素为 { name, blockedReason?, missing } 对象。

即使钩子未就绪,成功报告也会以代码 0 退出。对于 自动化资格检查,应检查 JSON 计数,而不是将 退出代码视为所有钩子均已就绪的结果。这仍然不会测试实际加载。

启用钩子

openclaw hooks enable <name> [--agent <id>]

在本地发现钩子,然后在本地配置中写入 hooks.internal.entries.<hookKey>.enabled = true 和 hooks.internal.enabled = true。该条目中的其他字段会 保留。精确的钩子名称优先于匹配的键。歧义的键 匹配会失败且不写入。

对于缺失的钩子、插件托管的钩子或未满足的运行时要求,启用操作会失败。它可以启用当前已禁用的工作区钩子。这并不证明存在有效的模块导出或事件订阅。也请检查 info 和 Gateway 日志。

该条目是全局的,即使使用 --agent:无论在哪里发现该键,它都会生效。添加命名条目可以缩小先前开放式目录选择的范围。参见配置。

运行中的 Gateway 会在 hybrid 模式下重新加载选择。如果选定的钩子无法加载,它会保留之前的处理器。请检查 Gateway 日志。重新加载不会重放 gateway:startup,因此 boot-md 会在下次 Gateway 启动时运行。

禁用钩子

openclaw hooks disable <name> [--agent <id>]

写入 hooks.internal.entries.<hookKey>.enabled = false。它不会删除钩子文件,也不会更改主开关。缺失/不明确的钩子和插件托管的钩子会被拒绝。缺少运行时要求不会阻止禁用操作。在 hybrid 模式下,后续事件会使用更新后的选择。已运行的事件会使用其原始处理器完成。

插件托管的钩子不能通过这些命令切换。请通过 openclaw plugins 启用或禁用所属插件。

安装和更新钩子包

使用统一的插件安装程序来安装经过审核的钩子包:

openclaw plugins install npm:<package>
openclaw plugins install npm:<package>@<version> --pin
openclaw plugins install ./my-hook-pack
openclaw plugins install ./my-hook-pack.tgz

openclaw plugins update <id> --dry-run
openclaw plugins update <id>

包在 package.json 的 openclaw.hooks 下声明钩子目录。没有 package.json 的本地目录可以包含单个 HOOK.md 和处理器。复制的钩子包会安装到 <stateDir>/hooks/<id>。它们的钩子会在配置中启用,安装来源记录在共享的 SQLite 状态中。该配置可以立即在 hybrid 模式下激活钩子。不要在 openclaw.json 中编写 hooks.internal.installs。

对于 npm 钩子包路径,spec 仅限 registry:包名加上可选的精确版本或 dist-tag。Git/URL/文件 spec、npm 别名和 semver 范围不属于 npm registry spec。裸 spec 和 @latest 保持在稳定轨道上。预发布解析需要显式的预发布版本或非 latest 标签,例如 @beta 或 @rc。使用 npm: 显式选择 npm。统一安装程序支持 openclaw plugins 中描述的其他插件来源。

支持的本地存档格式有 .zip、.tgz、.tar.gz 和 .tar。复制的钩子包会从 dependencies 和 optionalDependencies 中解析运行时包,包括仅包含可选依赖的包。仅列在 devDependencies 中的包会被省略。npm pack 和依赖安装使用 --ignore-scripts。这不会对已安装的处理器进行沙箱隔离。无论 npm 的 dry-run 或 pack-destination 设置如何,下载始终会在 OpenClaw 的临时工作区中创建存档。

安装选项与信任

选项 对钩子包的效果
-l, --link 将确切的本地钩子或包根目录添加到 hooks.internal.load.extraDirs,而不是复制它。支持单个钩子和嵌套包布局。
--pin 在可用时将解析出的精确 npm name@version 记录到安装状态中;不适用于本地路径。
--force 确认非 ClawHub 来源,并允许替换现有的已复制安装。对于链接,它确认来源但不进行复制。
--acknowledge-install-policy-warning 确认操作员的 security.installPolicy 警告,无需提示。阻止安装和策略失败仍会停止安装。

交互式非 ClawHub 安装会要求您确认信任。非交互式安装需要 --force。plugins install 和 hooks install 别名都不接受 --yes 标志。--force 也不能替代确认安装策略警告。在提供任一确认之前,请先审查来源。

Warning

链接的钩子直接从提供的路径运行。链接不会复制它或创建符号链接。单个钩子根目录会加载自己的 HOOK.md 和处理器。包只会加载 openclaw.hooks 中列出的钩子目录,包括 ./hooks/my-hook 等嵌套路径。声明的路径必须保持在包内部,并直接指向钩子。发现机制不会递归到嵌套包或集合中,也不会扫描未列出的子项,即使所有声明的路径都被拒绝。

只链接受信任的代码。额外的目录仍然会使目录钩子名称选择跨发现来源保持开放式,而不仅仅是在链接的包内。链接可以立即在 hybrid 模式下激活钩子。编辑现有钩子代码或元数据后请重新启动,检查 hooks list,并验证处理器的实际副作用。

更新行为

更新使用跟踪的 npm 安装记录。已跟踪的钩子包 ID 使用其存储的 spec。匹配的 npm 包 spec 可以选择新版本/标签。本地路径和存档记录不会被 npm 钩子更新程序刷新。

--dry-run 会报告将要更改的内容,而不会安装或重写配置。--all 在统一更新程序中选择插件和钩子包,包括通过已弃用的别名访问时。它不是仅限钩子的批量命令。

当适用的存储完整性哈希与下载的工件不同时,更新程序会发出警告并在终端中要求确认。没有 CLI 标志可以回答该提示:plugins update 和 hooks update 别名都不接受 --yes,而 --acknowledge-install-policy-warning 仅涵盖安装策略警告。--dry-run 会在不提示的情况下报告差异。

弃用别名

这些命令会打印一条弃用警告,并转发到统一的 owners:

openclaw hooks install <path-or-spec> [-l|--link] [--pin] [--force] [--acknowledge-install-policy-warning]
openclaw hooks update [id] [--all] [--dry-run] [--acknowledge-install-policy-warning]

对于 update,请提供 id 或 --all。这些别名不接受 --agent,也不是新自动化的首选接口。

内置钩子

维护的目录、事件订阅、选项和验证说明位于 内置钩子。其中包括 boot-md、bootstrap-extra-files、command-logger、compaction-notifier 和 session-memory(手动和自动重置捕获)。

command-logger 日志文件

在 Gateway 主机上,使用默认状态目录:

tail -n 20 ~/.openclaw/logs/commands.log
jq . ~/.openclaw/logs/commands.log
jq 'select(.action == "new")' ~/.openclaw/logs/commands.log

对于自定义状态目录,请使用 <stateDir>/logs/commands.log。这些记录包含会话和发送者标识符。请保护访问权限,并安排保留或轮转。该钩子不会轮转这些日志。

备注

报告命令支持 --json。成功的 JSON 会直接输出到 stdout。失败时使用标准的 CLI JSON 失败封装,缺失的钩子信息还会包含所请求的 hook 名称。报告命令不会将钩子作为测试执行。

隐藏的 hooks relay 命令保留用于生成的原生 harness 集成。它不是内部钩子测试命令,也不是手动事件触发命令。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw