内置 hooks
OpenClaw 随附的钩子,以及每个钩子的行为和选项。本指南是 钩子 指南的一部分。
内置钩子¶
| 钩子 | 事件 | 用途 |
|---|---|---|
boot-md |
gateway:startup |
在启动时运行工作区 BOOT.md 指令。 |
bootstrap-extra-files |
agent:bootstrap |
将匹配的工作区引导文件添加到上下文中。 |
command-logger |
command |
将发出的命令事件追加到 JSONL 日志中。 |
compaction-notifier |
session:compact:before, session:compact:after |
在支持的投递路径上添加压缩状态通知。 |
session-memory |
command:new, command:reset, session:auto-reset |
将最近的对话摘录保存到工作区记忆中。 |
使用 openclaw hooks enable <hook-name> 启用其中一个,并验证其副作用。
仅启动时运行的钩子(例如 boot-md)会等待下一次 Gateway 启动。
boot-md 详情¶
在每个已配置代理的已解析工作区中运行非空的 BOOT.md。
由多个代理共享的工作区只运行一次,且在该工作区选中的第一个代理下运行。启动任务按顺序运行;失败的任务会被记录,并且不会阻止后续任务。
这会通过代理运行来执行指令,而不是作为 shell 脚本,也不是作为引导文件注入。每次运行都会使用一个全新的临时 agent:<id>:boot:<run-id> 会话,并在成功或失败后清理。现有会话及其历史记录会被保留。正常的最终响应投递会被禁用;如果指令需要通知某人,必须为消息工具指定频道和目标。缺失或空文件会被跳过。
保持启动指令简短,并确保每次重启时重复执行都是安全的。它们可以使用模型和工具能力,因此启用此钩子可能会导致模型调用和出站副作用。
bootstrap-extra-files 配置¶
{
"hooks": {
"internal": {
"entries": {
"bootstrap-extra-files": {
"enabled": true,
"paths": ["packages/*/AGENTS.md"]
}
}
}
}
}
优先使用 paths。如果为空,处理器会尝试 patterns,然后尝试 files;这些是替代项,而不是合并后的列表。如果没有 patterns,钩子不会执行任何操作。
路径相对于事件的工作区解析,并且必须始终位于其中,包括符号链接解析之后。仅加载以下基名:AGENTS.md、SOUL.md、IDENTITY.md、USER.md、BOOTSTRAP.md 和 MEMORY.md。
额外文件会经过正常的引导过滤和注入限制。每个文件的读取上限为 2 MiB。注入默认每个文件 20,000 个字符,总计 60,000 个字符,由代理默认值或覆盖项中的 bootstrapMaxChars 和 bootstrapTotalMaxChars 控制;USER.md 有单独的 4,000 个字符上限。重复路径会被移除。子代理仅保留 AGENTS.md;cron 和非私密对话具有额外的上下文/隐私过滤器。使用 /context detail 检查实际注入结果;参见 上下文。
TOOLS.md 不是受支持的运行时引导基名。
openclaw doctor --fix 会归档工作区根目录中的 TOOLS.md,并将自定义内容合并到 AGENTS.md 的 ## Tools 部分。由 patterns 指定的其他 TOOLS.md 文件不会被迁移;请将这些 patterns 指向 AGENTS.md。
command-logger 详情¶
为每个发出的命令事件向 <stateDir>/logs/commands.log 追加一行 JSON。字段包括 timestamp、action、sessionKey、senderId 和 source;缺失的 sender/source 值会变成 unknown。核心会发出 /new、/reset 和 /stop,而不是每个斜杠命令。
处理器会等待追加完成,记录写入错误,并且不发送聊天确认。它不会轮转日志。请为它记录的会话和发送者标识设置适当的访问权限和保留策略。参见 日志检查。
compaction-notifier 详情¶
在压缩前添加一条简短通知,并在压缩成功后添加完成通知。通知可以包含消息数量以及可用时的压缩前/后 token 数量。它们通过压缩调用方的通知回调传递;如果没有能够投递它们的回调,启用钩子并不能保证出现可见消息。只有 before 通知而没有 after 通知,可能表示压缩被跳过、失败或中断,而不是钩子卡住。手动 /compact 不会提供此钩子消息投递回调,因此它不是测试这些通知的可靠方式。
session-memory 详情¶
在 /new、/reset(包括软重置)或自动每日/空闲轮换时,保存已结束会话最近的用户/助手文本。自动轮换会发出 session:auto-reset,而不是合成命令事件。过期检查会在后续回合被接受时进行;这不是一个在会话空闲时于每日边界写入记忆的定时器。
默认产物为 <workspace>/memory/YYYY-MM-DD-HHMM.md,如果该文件名已存在,则添加数字后缀。日期使用 agents.defaults.userTimezone;如果未设置用户时区,则使用进程 TZ;最后回退到主机时区。该文件会记录会话标识以及命令来源或自动重置原因。
| 条目选项 | 默认值 | 行为 |
|---|---|---|
| 配置项 | 默认值 | 行为 |
|---|---|---|
messages |
15 |
要包含的最近用户/助手消息;使用正整数。 |
llmSlug |
false |
请求模型生成描述性文件名 slug。 |
model |
Agent 默认值 | 可选的已配置别名、默认 provider 上的裸模型 ID,或用于 slug 生成的 provider/model。 |
该钩子会在重置关闭其活动窗口之前捕获即将结束的对话,然后在后台写入快照。捕获范围限制为
4,096 条已扫描消息和 8 MiB。隐身会话不会创建 memory 工件,包括在手动或自动重置时。
手动重置不会等待文件写入或可选的 slug 模型调用;自动重置分发也会独立于后续轮次运行。在日志中等待
Session context saved to ... 后再预期文件存在。
这是一个经过过滤的摘录,而不是完整转录或模型编写的摘要。它会省略斜杠命令文本、工具消息、跨会话用户输入、
静默回复标记以及重复的投递镜像文本。如果读取转录失败,工件可以记录该内容不可用。工作区从事件/代理配置中解析;你无需添加 workspace.dir 键。
当 llmSlug: true 时,对话文本会发送到已配置的模型以命名文件。失败时会回退到时间戳 slug。如果你不想为命名进行额外的模型调用,请保持关闭。
Note
保存的摘录是工作区 memory 工件。如果同时启用了
会话转录索引,
一个对话可能同时由 memory 和 sessions 表示,从而增加重叠结果和嵌入工作。对于仅使用钩子的召回,
请设置 memory.search.sources: ["memory"] 和
memory.search.rememberAcrossConversations: false;仅设置 sources 并不能阻止
跨会话召回添加 sessions。若要改为完整转录召回,请禁用 session-memory。这些搜索设置不会禁用
钩子的文件写入或普通转录持久化。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw