第17课:Hooks
17.1 Hook 是什么
Hook 是在 Claude Code 生命周期特定事件发生时自动执行的规则,可以运行命令、HTTP 请求、MCP 工具、AI 提示或 Subagent。
与 CLAUDE.md 不同,Hook 是确定性的自动化机制,适合"每次都必须发生"的动作。
17.2 常见事件
SessionStart:会话开始或恢复;UserPromptSubmit:用户提交提示词;PreToolUse:工具执行之前;PostToolUse:工具成功执行之后;SubagentStart/SubagentStop:Subagent 启动 / 结束;PreCompact/PostCompact:上下文压缩前 / 后;Stop:Claude 准备结束本轮工作;SessionEnd:会话结束。
具体事件会随版本扩展,应查阅当前 Hooks 文档。
17.3 适合使用 Hook 的任务
每次编辑后运行格式化、阻止危险删除命令、修改敏感文件时发出警告、完成任务前运行测试、会话结束时归档结果、压缩上下文前保存重要状态。
17.4 Hook 与权限
PreToolUse Hook 可以在工具执行前检查输入并拒绝操作,例如检测到高风险删除命令时阻止执行。
Hook 脚本本身也可能带来风险,因此:必须审查脚本内容、使用明确路径、限制外部网络访问、处理错误和超时、不在 Hook 中保存敏感信息。
课后练习
设计一个 Hook 需求:当它修改课程文件后,自动检查是否包含标题、练习和验收标准。只写需求和判断逻辑,不要求直接部署。