Claude Code Hooks 实战:自动化你的开发流程
摘要
Hooks 是 Claude Code 的隐藏杀器。在 AI 执行操作的前后插入自定义逻辑,实现真正的开发流程自动化。
Hooks 让你在 Claude Code 的每一步操作前后插入自定义逻辑,这才是自动化的正确打开方式。
用了一段时间 Claude Code 后,你会发现一个问题:有些操作你每次都要手动确认,有些检查你每次都要自己跑,有些规范你每次都要提醒 AI。
比如:
- 每次改完代码,你都要手动跑
eslint - 每次 AI 要执行危险命令,你都想多看一眼
- 每次提交前,你都想自动跑测试
Hooks 就是来解决这些"每次都要"的问题的。
一、Hooks 是什么
Hooks 是 Claude Code 的事件系统。它让你在特定时间点自动执行 shell 命令。
你可以把它理解为 Git Hooks 的 AI 版本——Git Hooks 在 commit/push 时触发,Claude Code Hooks 在 AI 使用工具/执行命令时触发。
Hooks 配置在 .claude/settings.json 里:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": "echo 'AI 要执行命令了'"
}
]
}
}
二、四种 Hook 类型
1. PreToolUse —— 工具执行前
在 AI 调用任何工具之前触发。这是最常用的 Hook。
用途:
- 拦截危险操作
- 添加额外检查
- 修改工具参数
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": "/path/to/check-command.sh"
}
]
}
}
Hook 脚本通过 stdin 接收 JSON 输入,包含工具名和参数。脚本可以返回:
- 退出码 0:允许执行
- 退出码 2:阻止执行
- stdout 输出 JSON 可以修改工具输入或给 AI 反馈
实战例子:阻止删除操作
#!/bin/bash
# block-dangerous-commands.sh
input=$(cat)
command=$(echo "$input" | jq -r '.tool_input.command')
# 检查是否包含危险命令
if echo "$command" | grep -qE 'rm\s+-rf|drop\s+table|git\s+push\s+--force'; then
echo '{"decision": "block", "reason": "危险命令被 Hook 拦截"}'
exit 2
fi
exit 0
2. PostToolUse —— 工具执行后
在工具执行完成后触发。适合做后处理和自动化检查。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hook": "/path/to/auto-lint.sh"
}
]
}
}
实战例子:写文件后自动格式化
#!/bin/bash
# auto-lint.sh
input=$(cat)
file_path=$(echo "$input" | jq -r '.tool_input.file_path // .tool_input.filePath // empty')
if [ -z "$file_path" ]; then
exit 0
fi
# 根据文件类型自动格式化
case "$file_path" in
*.ts|*.tsx|*.js|*.jsx)
npx prettier --write "$file_path" 2>/dev/null
echo '{"message": "已自动格式化: '"$file_path"'"}'
;;
*.py)
python -m black "$file_path" 2>/dev/null
echo '{"message": "已自动格式化: '"$file_path"'"}'
;;
esac
exit 0
3. Notification —— 通知
在 Claude Code 发出通知时触发。比如任务完成、等待输入等。
{
"hooks": {
"Notification": [
{
"matcher": "",
"hook": "/path/to/notify.sh"
}
]
}
}
实战例子:任务完成时发系统通知
#!/bin/bash
# notify.sh
input=$(cat)
message=$(echo "$input" | jq -r '.message // "Claude Code 需要你的注意"')
# macOS 系统通知
osascript -e "display notification \"$message\" with title \"Claude Code\""
exit 0
4. Stop —— 任务结束
在 Claude Code 停止执行(自动完成或用户中断)时触发。
{
"hooks": {
"Stop": [
{
"matcher": "",
"hook": "/path/to/on-stop.sh"
}
]
}
}
实战例子:任务结束后自动跑测试
#!/bin/bash
# on-stop.sh
# 检查是否有文件变更
if git diff --quiet; then
exit 0
fi
# 有变更就跑测试
npm test 2>&1 | tail -20
exit 0
三、matcher 怎么写
matcher 字段决定 Hook 在什么条件下触发。它匹配的是工具名。
常用工具名:
Bash—— 执行 shell 命令Read—— 读取文件Write—— 写入文件Edit—— 编辑文件Glob—— 文件搜索Grep—— 内容搜索
支持正则和 | 分隔多个匹配:
// 匹配所有文件写入操作
{ "matcher": "Write|Edit" }
// 匹配所有操作(空字符串匹配一切)
{ "matcher": "" }
// 只匹配 Bash 命令
{ "matcher": "Bash" }
四、完整配置示例
这是我自己在用的配置,供参考:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": "/Users/me/.claude/hooks/block-dangerous.sh"
}
],
"PostToolUse": [
{
"matcher": "Write|Edit",
"hook": "/Users/me/.claude/hooks/auto-format.sh"
}
],
"Notification": [
{
"matcher": "",
"hook": "/Users/me/.claude/hooks/system-notify.sh"
}
],
"Stop": [
{
"matcher": "",
"hook": "/Users/me/.claude/hooks/run-tests.sh"
}
]
}
}
这套配置实现了:
- AI 执行 shell 命令前,自动拦截危险操作
- AI 写/改文件后,自动跑 prettier/black 格式化
- Claude Code 有通知时,弹系统通知
- 任务结束时,自动跑一遍测试
五、Hook 脚本的输入输出
每个 Hook 脚本通过 stdin 接收 JSON 数据,格式大致如下:
{
"hook_event_name": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "rm -rf /tmp/test"
},
"session_id": "abc123"
}
脚本可以通过 stdout 返回 JSON 来影响 Claude Code 的行为:
// PreToolUse: 阻止执行
{"decision": "block", "reason": "不允许删除操作"}
// PostToolUse: 给 AI 反馈
{"message": "lint 发现 3 个警告,请修复"}
退出码也很重要:
0—— 成功/允许2—— 阻止操作(仅 PreToolUse)- 其他非零 —— Hook 执行失败(不影响 Claude Code 继续)
六、注意事项
-
Hook 脚本要快。它们是同步执行的,太慢会影响 Claude Code 的响应速度。目标是 1 秒内完成。
-
错误处理要做好。Hook 脚本崩了不应该阻塞 Claude Code。做好 stderr 输出方便调试。
-
用绝对路径。不要假设工作目录,Hook 脚本里的路径都用绝对路径。
-
先测试再上线。手动跑一遍 Hook 脚本,确认输入输出格式正确。
-
权限别忘了。
chmod +x your-hook.sh。
总结
Hooks 是 Claude Code 里最被低估的功能。大部分人用 Claude Code 就是 "说一句话,等结果",但 Hooks 让你能真正定制 AI 的行为。
推荐的入门路径:
- 先配一个 Notification Hook——任务完成时收到通知,这个最实用
- 再配一个 PostToolUse Hook——自动格式化代码,减少手动操作
- 最后玩 PreToolUse Hook——拦截危险操作,建立安全防线
Hooks 的本质是把你的开发规范变成自动执行的代码,而不是每次都要口头提醒 AI。这才是开发流程自动化的正确姿势。
相关文章
2026年3月22日
Claude Code vs Cursor:选哪个?
两个最热门的 AI 编程工具,一个是终端原生,一个是 IDE 魔改。适合的场景完全不同,选错了比不用还难受。
2026年2月27日
Claude Code 的记忆机制:从 CLAUDE.md 到 Auto Memory,它到底记住了什么?
Claude Code 刚上线了 Auto Memory 功能。加上原有的 CLAUDE.md 体系,它现在有六层记忆结构。这篇拆解每层的用途、加载时机,以及怎么用才不会变成负担。
2026年2月6日
Claude Code Hooks 实战:实时感知会话状态的绝佳机制
深入 Claude Code Hooks 机制:配置格式、事件生命周期、三种钩子类型,以及一个真实案例 - 如何用 Hooks 驱动桌面宠物实时反映 AI 编码状态。
合作伙伴
CompeteMap — 英国及爱尔兰学生竞赛一站式搜索
数学、编程、科学、写作等各类竞赛信息汇总,支持按年龄和科目筛选,再也不错过报名截止日。