Skip to content

02-Hooks 系统:给 AI 助手装上"触觉"和"自律" ​


没有 Hooks 的 Claude Code 像什么? ​

想象你雇了一个超级聪明的员工。TA 的技术能力一流,但有一个致命问题:TA 完全没有自我意识。

  • TA 改了一个文件,不知道应该去格式化一下
  • TA 写完一段代码,不知道应该跑一下测试
  • TA 忙了一下午,不知道应该把成果存个档
  • TA 要做一件危险的事,不知道应该先问你一声

这不是 TA 不聪明,是 TA 没有"触觉"。TA 不知道自己刚做了一件事,更不知道做完之后应该做什么。

你可以每次手动提醒 TA——"改完文件记得格式化"、"写完代码跑一下测试"、"别忘了存档"。但你会累死,而且 TA 会忘。

Hooks 就是给 TA 装上"触觉"和"自律"。 在特定时刻自动触发特定动作,不需要你手动干预。就像人的神经系统——碰到烫的东西,手会自动缩回来,不需要大脑专门思考"我要缩手了"。


为什么是这个生命周期?从人是怎么做事的来理解 ​

ECC 定义了 6 个 Hook 点,覆盖了一个工作周期的每一个关键时刻。这不是随意设计的,而是从"人是怎么做事的"来理解的:

让我用人话解释每个 Hook 为什么存在:

SessionStart —— 早上到办公室 ​

你每天早上到办公室,第一件事是什么?打开电脑,看看昨天的工作笔记,回忆一下做到哪了。

SessionStart 做的就是这件事。Claude Code 启动时,ECC 自动加载上次会话保存的记忆——昨天讨论了什么、改了哪些文件、遇到了什么问题。TA 不用你从头介绍,TA 自己会"想起来"。

这个 Hook 解决了"不记事"的痛点。 没有这个 Hook,你每次重启终端都要把背景重新说一遍。

PreToolUse —— 做事前想一想 ​

你准备提交代码了,按 Git commit 之前,你会想一想:"我改了什么?有没有漏掉什么?"

PreToolUse 就是这个"想一想"的时刻。AI 准备使用一个工具(比如写文件、执行命令、提交代码)之前,ECC 会自动检查:

  • 这个操作安全吗?会不会把密钥提交到 GitHub?
  • 这个操作合规吗?有没有违反团队的规矩?
  • 这个操作合理吗?有没有更安全的替代方案?

这个 Hook 解决了"安全"的痛点。 它是安全检查的主要防线——在 AI 动手之前就拦住危险操作。

PostToolUse —— 做完事检查一下 ​

你改完一个文件,保存后编辑器自动帮你格式化了。你甚至没注意到——因为这是自动的。

PostToolUse 做的就是这件事。AI 改完文件后,ECC 自动检测项目用了什么格式化工具(Biome?Prettier?),自动帮你跑一遍。还会检查类型(TypeScript 有没有报错?),检查有没有遗留 console.log。

这个 Hook 解决了"质量"的痛点。 AI 写出来的代码,自动经过质量门禁,你看到的永远是整洁的代码。

Stop —— 下班前整理桌面 ​

你每天下班前会做什么?整理一下桌面,记个今天的 TODO,把重要的东西存档。

Stop 做的就是这件事。AI 完成一次回答后,ECC 自动保存会话状态、记录 token 使用和费用、在 macOS 上弹出桌面通知告诉你"任务完成了"。

这个 Hook 解决了"存档"的痛点。 每次重要交互都会被记录,下次启动时 SessionStart 会加载这些记录。

SessionEnd —— 关电脑走人 ​

你关掉终端、结束一天的工作。SessionEnd 做最后的收尾:标记会话结束、保存最终状态。

这个 Hook 和 Stop 的区别是:Stop 是"每次回答完"触发,SessionEnd 是"整个会话结束"触发。就像你每次写完一个段落会存盘(Stop),但下班关电脑时会做一次完整的备份(SessionEnd)。

PreCompact —— 定期整理房间 ​

Claude Code 的上下文窗口是有限的。聊得多了,前面的内容会被"压缩"掉。但在压缩之前,ECC 会在 PreCompact Hook 中把重要信息存档——这样即使上下文被压缩了,关键信息也不会丢失。

这个 Hook 解决了"遗忘"的痛点。 上下文窗口再大也会满,但通过 PreCompact 存档,重要的记忆不会丢失。


为什么用 Profile 三级体系? ​

ECC 的 Hooks 不是全开或全关的,它有一个"安保级别"系统,分为三级。为什么需要三级?因为不同场景需要不同级别的"纪律":

minimal —— 独居模式。 你一个人在家,基本卫生就行。只有记忆存档和成本追踪,没有太多约束。适合快速原型、个人小项目、"先跑起来再说"的场景。

standard —— 合租模式(默认)。 你跟人合住,公共区域要维护好。有质量门禁、桌面通知、持续学习。适合大多数项目——既不会太自由(质量失控),也不会太严格(影响效率)。

strict —— 公司模式。 你在公司上班,每一步都有规范。自动格式化、类型检查、配置文件保护、安全扫描全部开启。适合团队项目、生产代码、安全敏感的项目。每一步都有人看着,质量有保障。

默认就是 standard——对大多数人来说刚刚好。你可以根据项目需要随时切换。


为什么 Session 记忆这么重要? ​

这个值得单独说一下,因为它是很多人觉得"AI 编程助手不好用"的根本原因。

没有记忆的工作体验:

你:昨天我们讨论了 OAuth 怎么配,你还记得吗? AI:不好意思,我不记得了。你能再说一遍吗? 你:(把昨天说的话重复一遍) AI:好的,我理解了。那我们开始吧。 你:等等,上次你试过方案 A,不行,要换方案 B。 AI:方案 A 为什么不行? 你:(解释了一遍原因) AI:好的,那我们用方案 B。 你:(崩溃)

有记忆的工作体验:

你:继续昨天的 OAuth 工作。 AI:好的,我记得昨天试了方案 A,因为 XX 原因不行,我们决定用方案 B。上次做到配好了 callback URL,接下来应该处理 token 刷新。需要我继续吗? 你:对,继续吧。 AI:好的,我先检查一下昨天的代码... 你:(微笑)

差距不是一点半点。有记忆的 AI 不只是"记得你说了什么",而是能理解上下文——知道为什么做了某个决策、遇到了什么问题、下一步该做什么。这就像跟一个靠谱的同事合作 vs 跟一个每次重新认识的新人合作。


实际配置的 Hooks:一览表 ​

ECC 安装后实际配置了哪些 Hook?看这张表就够了:

SessionStart ​

作用说明
加载上次记忆自动读取之前会话保存的状态
检测包管理器自动识别项目用 npm/yarn/pnpm/bun

PreToolUse ​

作用说明
阻止跳过 Git Hook不允许 git commit --no-verify 绕过检查
tmux 长命令提醒用 tmux 运行长耗时命令,避免终端卡住
git push 提醒push 前提醒检查变更
文档文件警告写非标准文档文件时提醒
持续学习观察捕获操作数据用于学习
MCP 健康检查MCP 服务不可用时阻止调用
配置文件保护阻止修改 linter/formatter 配置

PostToolUse ​

作用说明
PR 创建记录创建 PR 后自动记录 URL 并提示审查
质量门禁文件编辑后自动检查质量
自动格式化编辑 JS/TS 文件后自动格式化(strict 级别)
类型检查编辑 TS 文件后自动运行 tsc(strict 级别)
console.log 警告编辑后检查是否有遗留的调试代码
持续学习观察捕获结果数据用于学习

Stop ​

作用说明
console.log 最终检查每次回答后检查修改文件中是否有遗留调试代码
状态持久化保存会话状态
会话评估分析会话中可学习的模式
成本追踪记录 token 使用和费用
桌面通知macOS 系统通知你任务完成

SessionEnd / PreCompact ​

作用说明
会话结束标记标记会话生命周期结束
上下文压缩前存档压缩前保存重要信息

你不需要改任何东西 ​

看到这里你可能觉得:"哇,这么多 Hook,我要一个个配置吗?"

不需要。

ECC 安装后,默认就开启了 standard 级别的所有 Hooks。你直接用就行。

  • 想少一点干扰?切到 minimal
  • 想更严格?切到 strict
  • 想自定义某个 Hook?参考 hooks.json 的配置修改

大多数情况下,默认配置就是最佳选择。 ECC 的作者用了 10 个月才调出来的默认值,比你瞎调靠谱。


下一步 ​

现在你知道 ECC 的"自动触发器"是怎么工作的了。接下来读 03-Agent系统,了解那 28 个"AI 专家"是怎么帮你干活的——他们分工协作,让对的人干对的事。

基于 CC BY-SA 4.0 协议发布