Hook 配置与发现
启用并选择内部钩子,以及 Gateway 如何跨来源发现它们。属于 钩子 指南的一部分。
配置¶
为了获得可预测的选择,请启用命名钩子,而不是开启广泛发现:
{
"hooks": {
"internal": {
"enabled": true,
"entries": {
"command-logger": { "enabled": true },
"session-memory": { "enabled": false }
}
}
}
}
目录加载钩子的主开关和选择规则如下:
| 配置 | 选择 |
|---|---|
hooks.internal.enabled: false |
内部钩子已关闭。 |
| 没有主标志,也没有已启用条目、额外目录或受跟踪的安装 | Gateway 会跳过目录钩子加载。 |
| 命名条目,且主标志省略或为 true | 已启用的名称构成允许列表;主开关上的 enabled: true 不会扩大该列表。未设置 enabled: false 的条目会贡献其名称。 |
| 主标志为 true,但没有命名条目或命名安装 | 对符合条件的钩子进行开放式发现。 |
| 声明钩子名称的受跟踪钩子包 | 这些名称会加入选择;显式的每个钩子 enabled: false 仍会禁用非插件钩子。 |
非空的 load.extraDirs,或没有钩子名称列表的受跟踪安装 |
开放式发现,而不是限制到该目录或包的选择。 |
工作区钩子始终需要 entries.<hookKey>.enabled: true,即使处于开放式发现中。对于其他文件钩子,条目可以通过其名称或 hookKey 选择,但设置会在 hookKey 下读取。CLI 会解析名称并为你写入正确的键。添加第一个命名条目可能会缩小之前较宽泛的选择;在更改之前请检查现有钩子。
每个钩子的条目接受任意处理器定义的字段。核心类型包括 enabled 为布尔值,以及 env 为字符串到字符串的映射;它不会校验自定义处理器选项。例如:
{
"hooks": {
"internal": {
"entries": {
"my-hook": {
"enabled": true,
"env": { "MY_HOOK_LABEL": "example" }
}
}
}
}
}
每个钩子的 env 可满足资格检查,但不会修改 process.env。
在携带配置的事件中,处理器可以从
event.context.cfg?.hooks?.internal?.entries?.["my-hook"]?.env 读取它。其他事件不
保证提供 cfg 字段。不要记录完整的配置对象,也不要在示例中放入机密信息。
Warning
hooks.internal.handlers 已弃用,并且无法通过常规配置校验。在运行
openclaw doctor --fix 之前,请将每个已注册模块迁移到包含 HOOK.md 和处理器的托管或
工作区钩子目录。Doctor 会移除旧注册项;它不会创建可执行文件。对于仅旧版配置
且 hooks.internal.enabled: true 的情况,它也会移除该标志,以避免广泛
发现。命名条目、非空额外目录以及显式的
enabled: false 会被保留。
钩子发现¶
目录发现按名称合并钩子,规则如下:
| 来源 | 位置和冲突行为 |
|---|---|
| 内置 | 随 OpenClaw 一起提供。 |
| 插件 | 由活动插件声明的钩子目录;可以替换内置名称。 |
| 托管 | <stateDir>/hooks/,通常为 ~/.openclaw/hooks/;可以替换内置和插件名称。 |
| 额外目录 | hooks.internal.load.extraDirs;与托管钩子相同的来源策略。后面的额外目录优先于前面的额外目录;托管目录优先于额外目录。 |
| 工作区 | <workspace>/hooks/;可以添加名称,但不能替换内置、插件或托管名称。需要显式选择加入。 |
内置、托管、工作区和插件钩子位置都是集合目录:发现过程会检查它们的直接子项,以查找钩子或在其 package.json 中声明 openclaw.hooks 的包。
每个显式的 hooks.internal.load.extraDirs 路径也可以是包根目录、
单钩子根目录或集合目录。包根目录只加载其声明的钩子路径,包括
./hooks/my-hook 这样的嵌套路径。每个
路径必须直接指向一个钩子;发现过程不会递归进入另一个
包或集合。一个被识别但没有有效钩子的包会保持为空,而不是
扫描未列出的子项。单钩子根目录会加载其自身的 HOOK.md
和处理器。只有普通集合根目录才会执行直接子项扫描。
例如,若要直接选择 /opt/openclaw-hook-library/my-hook/HOOK.md,请添加该钩子的目录:
若要改为扫描库的直接子项,请添加
/opt/openclaw-hook-library。仅添加受信任的目录:任何额外路径都会启用跨发现源、超出命名条目的钩子名称选择,
即使该路径只选择单个钩子或包。
处理器文件必须保留在其钩子目录内;包和插件钩子路径必须保留在其包根目录内。逃逸这些边界的
符号链接将被拒绝。钩子配置和已选择工作区的变更会在
hybrid 模式下重新加载发现,包括由新钩子包安装或链接写入的配置。钩子
文件和元数据不会被监视;在编辑它们或更新现有钩子代码后请重启,然后验证处理器的实际副作用。
钩子包¶
钩子包是一种在 package.json 的 openclaw.hooks 中声明钩子目录的包。通过统一安装器安装已审核的包或本地目录:
安装和更新标志、npm 限制、链接根目录的行为和信任,以及已弃用的 hooks install / hooks update 别名,详见
安装和更新钩子包。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw