一、什么是 Hooks
Hooks 是你预设的自动化脚本。当 Claude 执行到特定操作——调用工具、完成任务、发出通知——你指定的命令会自动运行。
它和 Rule、CLAUDE.md 的区别在于确定性。CLAUDE.md 和 Rule 是行为指导,Claude 读了通常会遵守,但本质上是建议,偶尔会偏离。Hooks 是代码级执行,事件触发了就一定运行,没有"看情况"的空间。
打个比方:Rule 是贴在墙上的"请随手关灯"标语,Hooks 是装在门框上的感应开关——人走了灯一定灭。
Hooks 通过生命周期事件确定触发时机。Claude Code 提供了 25+ 种事件,覆盖从会话启动到工具调用再到任务完成的完整流程。最常用的四个:
- Stop — Claude 完成任务时触发
- Notification — Claude 发出通知时触发(比如等待你确认)
- PreToolUse — 工具调用前触发,可以拦截危险操作
- PostToolUse — 工具调用后触发,适合自动格式化等后处理
二、为什么需要它
三、怎么配置 Hooks
配置位置
配置文件是 settings.json,放在两个位置:
- 项目级:
.claude/settings.json(当前项目生效,可以提交到 Git 共享给团队) - 全局级:
~/.claude/settings.json(所有项目生效)
项目级覆盖全局级。两层都配了同一事件时,项目级的配置优先。
基本示例
下面是一个最简单的 Hook——任务完成时播放提示音:
配置的三层结构:
- 事件名(
Stop)— 什么时候触发 - 匹配规则(
matcher)— 过滤条件,空字符串或省略表示全部匹配。对于 PreToolUse/PostToolUse 事件,可以用正则匹配工具名,比如"matcher": "Edit|Write"只拦截文件编辑操作 - 执行动作(
hooks数组)—type指定类型(command最常用),command写具体的 shell 命令
更多事件与类型
除了 Stop,其它几个实用事件: