惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LangChain Blog
P
Privacy & Cybersecurity Law Blog
Hugging Face - Blog
Hugging Face - Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
A
Arctic Wolf
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
The GitHub Blog
The GitHub Blog
P
Privacy International News Feed
WordPress大学
WordPress大学
U
Unit 42
S
Securelist
T
The Exploit Database - CXSecurity.com
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
Latest news
Latest news
Hacker News: Ask HN
Hacker News: Ask HN
小众软件
小众软件
Know Your Adversary
Know Your Adversary
The Cloudflare Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
Security Latest
Security Latest
Google DeepMind News
Google DeepMind News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - Franky
Y
Y Combinator Blog
博客园 - 叶小钗
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
S
Secure Thoughts
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
M
MIT News - Artificial intelligence

XPoet's Blog

Codex 常用命令 | XPoet's Blog Claude Code 常用命令 | XPoet's Blog AI 编程工程化:Plugin——AI 工具能力的产品化形态 | XPoet's Blog AI 编程工程化:MCP——给你的 AI 员工打通外部能力 | XPoet's Blog AI 编程工程化:Subagent——给你的 AI 员工打造协作助手 | XPoet's Blog AI 编程工程化:Skill——给你的 AI 员工装上技能包 | XPoet's Blog AI 编程工程化:Command——给你的 AI 员工编一套操作手册 | XPoet's Blog AI 编程工程化:Rule——给你的 AI 员工立规矩 | XPoet's Blog AI 编程工程化:AI 时代程序员的基本功 | XPoet's Blog 独立开发者的福音:Amazon DynamoDB 数据库 | XPoet's Blog 零基础入门 JavaScript 算法 | XPoet's Blog 微信公众号又双叒叕改名了 | XPoet's Blog 赞赏作者 Admire Author 💕 | XPoet's Blog JavaScript 的并发模型和事件循环 | XPoet's Blog 常考的 JavaScript 手写题 | XPoet's Blog JavaScript 的内存管理 | XPoet's Blog 从 0 开始手把手带你搭建一套企业级 Vue3.x 工程化项目 前端工程化入门 | XPoet's Blog 快速掌握 Vue 3.0 基础语法 | XPoet's Blog Vue 项目动态修改 DOM 的 CSS 伪类
AI 编程工程化:Hook——AI 每次操作前后的自动检查站 | XPoet's Blog
XPoet · 2026-03-15 · via XPoet's Blog

上一篇我们讲了 Skill——给 AI 装上专业技能包

这篇讲 Hook,也是我觉得配置之后最有「踏实感」的一个东西。


说两件让我印象深刻的事

第一件。

AI 帮我改完一个模块,逻辑没问题,看起来挺好,我直接 commit 推上去了。

结果 CI 挂了。

原来几个文件改完没跑类型检查,导致 CI 的 build 出现几个 Error。每次手动补这一步,不是什么大事,但确实烦。

第二件更有意思。

有一次让 AI 整理项目里的临时文件。它跑了一段时间,然后告诉我:

「已清理无用文件,项目结构更整洁了。」

听起来挺好。但我根本不知道它删了什么,什么时候删的,也没任何提示让我确认。

后来查了 git 记录,那几个文件确实可以删,但当时真的出了一身冷汗。

两件事,一个根子:AI 干活,没有检查站。

改完代码没人盯着格式化。执行操作没人记录日志。你不知道它干了什么,也不知道该检查哪里。

配好 Hook,这两件事都不会再发生。

image


什么是 Hook

说白了,Hook 就是在 AI 调用工具前后,自动执行的一段 Shell 脚本

你告诉 Claude Code:每次它写文件之后,跑一下 ESLint。每次它执行 Bash 命令之前,先记一条日志。

配好后,再也不用手动盯着了。

把它理解成机场的安检通道更直观。

旅客要登机,得先过安检。安检不是为了刁难你,是为了保证每个人都按规矩来。AI 每次写代码、执行命令,也需要这个机制——操作之前检查一遍,操作之后验证一遍。

Hook 就是这个检查站。

这里有个很关键的区别——Hook 和 Rule 不一样。

Rule 是写在 CLAUDE.md 里的说明,AI 会尽量遵守,但本质上是「建议」。有时候会被忘掉。

Hook 是代码。你配了,它每次都执行。没有例外。

image


Hook 有哪几个时机

Claude Code 的 Hook 支持 4 种主要触发时机:

PreToolUse — 工具调用之前

AI 准备动手,还没执行。

最适合做拦截。脚本返回退出码 2,Claude Code 取消这次操作,同时把脚本输出反馈给 AI,让它知道为什么被挡,重新调整方案。

PostToolUse — 工具调用之后

AI 刚完成一次操作。

格式化、跑测试、触发构建——都放这里。用得最多的时机。

Notification — Claude 等你的时候

Claude Code 需要你输入或确认时触发。

最常见用途:发一条桌面通知,不用一直盯着屏幕等。

Stop — AI 停下来的时候

AI 完成整个任务、响应结束时触发。

适合跑完整测试、写汇总日志、发「干完了」的通知。


5 个实际场景

① 写完代码自动格式化

最高频的用法。

AI 改了文件,格式对不对?有没有 warning?不配 Hook 就得手动检查。配上 PostToolUse,AI 每次写文件之后自动跑一遍 ESLint 和 StyleLint。

你拿到的永远是干净的代码。不用叮嘱,不用手动触发。

② 保护不能动的文件

.env 文件、密钥文件、package-lock.json——这些东西 AI 不应该碰。但没人明说,它不知道。

PreToolUse Hook 拦截对这些文件的写操作,脚本返回退出码 2,操作直接取消,AI 收到提示。再也不用担心它手滑。

③ 记录所有 Bash 命令

AI 执行的每一条命令,你能追溯吗?

用 PreToolUse 勾住 Bash 工具,把命令和时间戳写到日志文件里。出了问题翻日志,AI 的每一步都清清楚楚。就是开头说的「悄悄删文件」那种情况,有了日志就不用出冷汗了。

④ 长任务完成后发通知

跑一个大型重构,可能要好几十分钟。你不可能一直盯着屏幕。

配 Notification Hook,Claude 等你确认的时候弹系统通知。或者配 Stop Hook,AI 干完了停下来的时候提醒你。

去倒杯水,回来看结果。

⑤ 自动跑测试

AI 改完代码,测试跑了没有?

PostToolUse 或者 Stop Hook 里触发 pnpm test,失败了 AI 直接看到输出,接着修。不用你每次手动说「跑一下测试」。


怎么配置

方式一:用 /hooks 菜单

最简单。在 Claude Code 里输 /hooks,打开交互式菜单。

选触发时机 → 设置 matcher → 填写命令 → 选保存位置。全程图形化,不用手写 JSON。刚上手的时候推荐这个方式。

方式二:直接编辑配置文件

配置文件有三个位置:

文件路径作用域
~/.claude/settings.json全局,所有项目生效
.claude/settings.json项目级,可提交 git,团队共享
.claude/settings.local.json项目本地,gitignore,不共享

基本结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"触发时机": [
{
"matcher": "匹配哪些工具",
"hooks": [
{
"type": "command",
"command": "要执行的 Shell 命令"
}
]
}
]
}
}

matcher 支持管道符组合:

1
2
3
"Edit|Write"   —— 文件编辑操作
"Bash" —— 执行命令
"" —— 空字符串,匹配所有工具

三个直接可用的配置

写完文件自动 Prettier(官方示例)

先装 jqbrew install jq),用来解析 Hook 接收到的 JSON 输入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
}
]
}
]
}
}

保护 .env 等敏感文件

先建一个脚本 .claude/hooks/protect-files.sh

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

PROTECTED=(".env" "package-lock.json" ".git/")
for pattern in "${PROTECTED[@]}"; do
if [[ "$FILE_PATH" == *"$pattern"* ]]; then
echo "已阻止:$FILE_PATH 是受保护文件" >&2
exit 2
fi
done

然后在配置里引用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/protect-files.sh"
}
]
}
]
}
}

任务需要确认时发 macOS 桌面通知

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code 需要你的确认\" with title \"Claude Code\"'"
}
]
}
]
}
}

注意事项

Hook 是同步的,别让它跑太慢。

AI 操作 → Hook 跑完 → AI 继续。Hook 卡了,整个流程就卡着。格式化、日志、通知这类轻操作没问题。真要跑完整测试套件,考虑放在 Stop 时机,或者后台异步(命令末尾加 &)。

PreToolUse 的拦截退出码是 2,不是其他非零值。

exit 2 才会让 Claude Code 取消操作并把原因反馈给 AI。其他非零值行为不一样,写拦截脚本的时候别搞混。

Hook 触发的操作不会再触发 Hook。

不用担心死循环:PostToolUse Hook 里写了文件,不会再触发一次 PostToolUse。官方处理好了。

个人配置和团队配置分开放。

桌面通知、个人日志,放 ~/.claude/settings.jsonsettings.local.json。格式化、保护文件这类团队都要用的,放 .claude/settings.json 并提交 git——大家拉项目就自动生效。

Hook 和 Rule 配合用,效果最好。

Rule 里定了「提交前必须通过 ESLint」,Hook 负责每次改完文件就自动执行这件事。规矩和执行,两手都要有。


去哪找参考配置

Hook 目前没有独立市场,但有几个好地方:

Claude Code 官方文档

https://code.claude.com/docs/en/hooks-guide

最全的来源。常用配置示例、字段说明、技术细节都在这里。建议精读一遍,半小时够了。

Claude 官方 Blog

https://claude.com/blog/how-to-configure-hooks

Anthropic 自己写的上手指南,从零开始配,步骤很清楚。

awesome-claude-code

https://github.com/hesreallyhim/awesome-claude-code

26,000+ Stars 的 Claude Code 资源合集,有专门的 Hook 配置分类。社区维护,质量有保证。


最后

Rule 让 AI 知道规矩。Command 封装你的操作流程。Skill 给 AI 装上专业能力。

Hook 做的是另一件事:让这些规矩在每次操作的时候真正被执行到。

AI 改完代码就格式化,碰敏感文件就拦截,任务完成就通知你——这些事不用叮嘱,配好就一直在。

人会忘,Hook 不会。


下一篇讲 Subagent:AI 学会拆任务之后,复杂项目可以怎么分工,效率能快多少。

欢迎感兴趣的朋友继续保持关注~

应部分读者呼声,作者组建了 AI 编程交流群,感兴趣的朋友请扫码加入,一起交流学习~
如果二维码过期,请添加作者微信并备注“AI 编程交流群”,作者会拉你进群。
image

AI 编程工程化:Hook——AI 每次操作前后的自动检查站

post/36097f621228/

Published

2026-03-15 21:41