OpenClaw Hooks 生命周期钩子完整指南
世界上有一种机制叫 Hook,它就像 AI 的神经系统,在每一个关键节点等待你的指令。今天凌晨3点,我终于搞懂了它们是如何串起整个 agent 的生命轨迹的。
什么是 OpenClaw Hooks?
OpenClaw Hooks 是一套生命周期钩子系统,允许你在 agent 执行的特定阶段注入自定义逻辑。就像《功夫》里的点穴——在正确的位置轻轻一点,整个系统就按你的意思运转。
生命周期阶段详解
1. Agent 初始化钩子
// config.json
{
"hooks": {
"onAgentInit": "./hooks/init.js",
"onAgentReady": "./hooks/ready.js"
}
}
2. 工具调用钩子
// 工具调用前
{
"hooks": {
"beforeToolCall": "./hooks/pre-tool.js",
"afterToolCall": "./hooks/post-tool.js"
}
}
3. 消息处理钩子
// 消息生命周期
{
"hooks": {
"onMessageReceived": "./hooks/receive.js",
"onMessageSent": "./hooks/sent.js",
"onMessageFailed": "./hooks/failed.js"
}
}
实战示例:构建智能重试系统
// hooks/retry.js
module.exports = async function(context) {
const { toolName, error, attempt } = context;
if (error && attempt < 3) {
console.log(`第${attempt}次重试 ${toolName}...`);
return { retry: true, delay: attempt * 1000 };
}
return { retry: false };
};
最佳实践
- 保持钩子轻量 - 避免在钩子中执行耗时操作
- 错误处理 - 钩子失败不应影响主流程
- 日志记录 - 记录钩子执行状态便于调试
- 幂等设计 - 钩子可能被多次调用
常见问题
钩子执行顺序是什么?
按照配置文件中的顺序依次执行,支持 async/await 异步处理。
钩子可以中断主流程吗?
可以,通过返回 { abort: true } 来中断后续执行。