@li9292: 感谢卡兹克老师介绍Hook的玩法, 我也分享一下我的日常两种用法: 第一种:被动观察 在我的思考项目里,我只想知道 Claude 在干什么。 ```json "PostToolUse": [{ "matcher": "Agent|Skil…
摘要
分享两种Claude Hook的用法:被动观察记录工具调用日志,以及主动干预实现学习模式状态机。强调Hooks作为硬约束比提示词更可靠。
查看缓存全文
缓存时间: 2026/06/26 20:15
感谢卡兹克老师介绍Hook的玩法, 我也分享一下我的日常两种用法:
第一种:被动观察
在我的思考项目里,我只想知道 Claude 在干什么。
"PostToolUse": [{
"matcher": "Agent|Skill",
"hooks": [{
"command": "jq -r '...' >> log.md",
"async": true
}]
}]
每次 Claude 调用 Agent 或 Skill,
就往 log.md 追加一行:
时间戳、工具名、描述。
会话结束时再追加一条 SessionStop。
就这样。不拦截,不干预,不阻断。纯粹的可观测性。
通过Hook和日志解决了一个长期困扰我的问题: AI 到底做了什么? 不是它说它做了什么,而是去看它实际调用了什么。 两者经常不一样。
第二种:主动干预
学习项目里,我想强迫自己真正学东西,而不是让 Claude 替我写代码。
五个钩子,串成一个状态机:
- UserPromptSubmit:检查会话是否处于“学习模式“,是则激活后续拦截
- PreToolUse(Write|Edit):直接拦截写代码,
exit 2退出,告诉 Claude 现在不写,先教 - PostToolUse(Bash):每次运行命令后强制追问:你理解刚才发生了什么吗
- Stop:Claude 准备结束前检查——本轮有没有真正引导用户思考,没有就继续
- SessionEnd:会话结束时抽取本次学到的概念,写入记忆文件
Hooks 是什么
Hooks 本质上是在 Claude 的生命周期里注入 shell 命令的接口。
UserPromptSubmit → PreToolUse → [工具执行] → PostToolUse → Stop → SessionEnd
每个节点都可以:
exit 0:放行,什么都不说stdout:把文字注入 Claude 的上下文(它会读到)exit 2:阻断,强制 Claude 重新考虑
区别在于谁说了算。正常情况下 Claude 说了算;加了 Hooks,你说了算。
为什么我觉得 Hooks 被低估了
提示词会被遗忘。CLAUDE.md 规则会被绕过。 但 Hooks 是 shell 命令:它不会被“理解错“,不会被“根据上下文灵活处理“,不会因为对话太长而失效。
它是硬约束,不是软建议。
我现在对“自定义 AI 工作流“的理解是:
提示词负责意图,Hooks 负责纪律。
相似文章
@vincemask: 很多人不知道什么时候该用 Hooks。 我的判断很简单:凡是你需要反复提醒 Claude 的事,都应该考虑从 prompt 里拿出来,交给 Hook。 比如: 1、每次改完代码都要格式化 2、每次提交前都要跑 lint / test 3、…
文章介绍了在Claude AI编程辅助中,何时应该使用Hooks来固化重复性规则(如自动格式化、提交前检查等),建议将稳定、重复、易忘的流程从Prompt中剥离交给环境默认执行。
@Khazix0918: https://x.com/Khazix0918/status/2070403772703285575
本文介绍了在Claude Code中使用Hook的六种玩法,包括权限弹窗、开机日程播报、摘要卡片、文件自动整理、久坐提醒和长任务推送,展示了如何通过事件驱动自动化来提升AI工作流的效率。
@sairahul1: https://x.com/sairahul1/status/2069710540654645550
一份全面指南,解释Claude Code Hooks,这些是可编程的检查点,在操作前运行以强制执行规则并阻止或允许工具调用,比CLAUDE.md指令提供更可靠的控制。
@justone_he: 手撕 Claude Code 源码:从零理解 Agent Harness 清华的暑期课
清华大学暑期课程分享,通过阅读 Claude Code 源码来理解 Agent Harness 的任务循环、规划、上下文管理、工具调用等核心机制,并提供视频和讲义资源。
@vincemask: https://x.com/vincemask/status/2054457804057100405
文章展示了如何通过自定义 Hooks 构建自动化工作流,以解决 Claude Code 在编写代码、运行测试和格式化文件后遗漏提交或格式未完全对齐的问题。