@li9292: 感谢卡兹克老师介绍Hook的玩法, 我也分享一下我的日常两种用法: 第一种:被动观察 在我的思考项目里,我只想知道 Claude 在干什么。 ```json "PostToolUse": [{ "matcher": "Agent|Skil…

X AI KOLs Timeline 工具

摘要

分享两种Claude Hook的用法:被动观察记录工具调用日志,以及主动干预实现学习模式状态机。强调Hooks作为硬约束比提示词更可靠。

感谢卡兹克老师介绍Hook的玩法, 我也分享一下我的日常两种用法: 第一种:被动观察 在我的思考项目里,我只想知道 Claude 在干什么。 ```json "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 负责纪律。
查看原文
查看缓存全文

缓存时间: 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、…

X AI KOLs Timeline

文章介绍了在Claude AI编程辅助中,何时应该使用Hooks来固化重复性规则(如自动格式化、提交前检查等),建议将稳定、重复、易忘的流程从Prompt中剥离交给环境默认执行。

@Khazix0918: https://x.com/Khazix0918/status/2070403772703285575

X AI KOLs Timeline

本文介绍了在Claude Code中使用Hook的六种玩法,包括权限弹窗、开机日程播报、摘要卡片、文件自动整理、久坐提醒和长任务推送,展示了如何通过事件驱动自动化来提升AI工作流的效率。