Hook-机制
一句话定义
Hook 机制是 Claude Code 在工具调用生命周期中的回调点,允许在工具执行前(PreToolUse)、执行后(PostToolUse)、会话结束(Stop)等时机触发自定义脚本,实现确定性的行为观测和自动化流程,是 Claude Code 自我学习系统的基础设施。
摘要
Hook 机制的核心价值是”确定性触发”——相比依赖模型主动调用的 Skill,Hook 由系统级事件驱动,确保 100% 的触发率。在 Claude Code 的自我学习系统中,Hook 被用于实现行为观测(记录每次工具调用)和模式提炼(会话结束时自动分析)。
Hook 的配置在 ~/.claude/settings.json 中,支持按工具类型匹配(matcher)和自定义命令。每个 Hook 点可以配置多个钩子,按顺序执行。Hook 机制是 Claude Code 自我进化系统的基础设施,解决了早期版本用 Skill 触发学习时触发率不稳定的问题。
详情
起源与背景
早期版本用 Skill 来触发学习,但 Skill 依赖模型主动调用,触发率不稳定——模型可能忘记调用 Skill,或者在不恰当的时机调用。v2 版本改用 Claude Code 原生 Hook 机制,彻底解决了这个问题。Hook 是 Claude Code 在工具调用生命周期中的回调点,可以通过 Claude CLI 执行 /hooks 命令获取可用的 Hook 类型。
核心机制 / 工作原理
Hook 类型与配置:
1. PreToolUse:工具执行前触发
- 用途:记录意图、参数验证、前置检查
- matcher: "Bash"(只匹配 Bash 工具)
- matcher: ".*"(匹配所有工具)
- 典型命令:observe.sh pre
2. PostToolUse:工具执行后触发
- 用途:记录结果、后置处理、质量检查
- 通常匹配所有工具(".*")确保 100% 采集率
- 典型命令:observe.sh post
3. Stop:会话结束时触发
- 用途:触发分析和提炼流程
- 典型命令:auto-analyze-instincts.py && auto-evolve.py
4. SessionStart:会话开始时触发
- 用途:注入记忆上下文
- 典型命令:inject_memory_context.py
配置示例(~/.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "~/.claude/hooks/observe.sh pre" }] }
],
"PostToolUse": [
{ "matcher": ".*", "hooks": [{ "type": "command", "command": "~/.claude/hooks/observe.sh post" }] }
],
"Stop": [
{ "hooks": [{ "type": "command", "command": "~/.claude/bin/auto-analyze-instincts.py && ~/.claude/bin/auto-evolve.py" }] }
]
}
}
应用 / 使用场景
- 行为观测:记录每次工具调用的输入输出,构建行为数据集
- 模式提炼:会话结束时自动分析行为模式,提炼 Instinct 规则
- 记忆注入:会话开始时自动注入相关记忆,减少冷启动时间
- 质量检查:工具执行后自动验证结果,发现规范性错误
- 自动化流程:会话结束时自动触发分析、提炼、进化流程
局限与争议
- Hook 执行会增加工具调用的延迟(通常在毫秒级,可接受)
- Hook 脚本的错误可能影响正常工具调用,需要错误处理
- 需要仔细设计 Hook 的触发条件,避免过度触发导致日志膨胀
- Hook 机制是 Claude Code 特定的,不通用到其他 AI Coding 工具
- Hook 脚本的维护成本随系统复杂度增加
与其他实体的关系
- Claude-Code —— Hook 机制是 Claude Code 的原生功能
- Instinct-Engine —— Hook 机制驱动 Instinct Engine 的数据采集