從「以為 hook 什麼都能做」到「理解 hook 只是哨兵」的學習歷程——釐清 Hook、Slash command、CLAUDE.md 的分工,以及判斷該不該用 hook 的三個準則:不能漏、不需判斷、綁定生命週期事件。
好的,以下是將標記穿插回原文後的完整版本:
建立 Bump PRD Hook 的認知調整歷程
從「以為 hook 什麼都能做」到「理解 hook 只是哨兵」的學習筆記
一、認知差異對照
示意圖 · diagram generated/hook-cognition-contrast.tsx 要 AI 判斷必須自己呼叫 API(需 API key、要付費) 判斷給 AI、執行給 script、強制檢查才給 hook 最關鍵的誤解
把「使用者說 commit 就觸發」當成 hook 的工作。實際上那是 AI 在做語意理解,hook 只認得生命週期事件(SessionStart、Stop、PreToolUse 等),不認得「意圖」。
二、循序漸進的調整過程
時間軸 · timeline generated/hook-learning-journey.tsx 1
初始想法
用 hook 在 git merge 時自動 bump 版號
Hook 綁的是 Claude Code 生命週期,不是 git 事件;merge 自動 bump 該用 CI 或 git hook。
2
退而求其次
Hook 偵測「我要 release」關鍵字自動 bump
Hook 可注入 context,但判斷與執行是 AI 跟 slash command 的事;regex 關鍵字偵測會誤判漏判。
3
想全自動
docs 改完後 hook 自己判斷該 bump 哪一位
Hook 沒有 AI,要判斷得呼叫 Anthropic API——需 API key、要付費、引入不確定性、多 2–10 秒延遲。
4
讓 AI 判斷後把版號當參數傳給 script
Slash command 才是接收參數的正確機制,不是事件 hook;事件 hook 只能拿 JSON context。
5
流程修正
綁在 commit 流程,AI 看 diff 後判斷
觸發點對齊 git workflow,不需事件 hook 也不需 API key;AI 在 commit 前本就要看 diff,順手判斷版號是免費加值。
6
Hook 只當「忘記發版」的哨兵
Hook 不執行 bump,只在 Stop event 檢查「docs 改了但版號沒動」用 exit 2 印提醒;職責切乾淨。
三、七種 Hook 事件
示意圖 · diagram generated/hook-lifecycle-events.tsx 一次性檢查
對話結束時做一次性檢查,不會像 PostToolUse 那樣每改一個檔案就觸發。
避免無限迴圈
不會因為改了 PRD 又再次觸發自己。
時機自然
Claude 講完話的瞬間檢查,使用者剛好會看到提醒。
點擊節點查看說明
| 事件 | 觸發時機 | 我的使用 |
|---|
SessionStart | Session 開始時 | — |
UserPromptSubmit | 使用者送出訊息、AI 還沒處理 | — |
PreToolUse | AI 決定用工具、還沒執行 | — |
PostToolUse | 工具執行完成 | — |
Notification | Claude Code 要通知你 | — |
Stop ⭐ | AI 結束回應時 | ✅ 使用中 |
SubagentStop | 子 agent 結束時 | — |
為什麼選 Stop event
- 對話結束時做一次性檢查:不會像 PostToolUse 那樣每改一個檔案就觸發
- 避免無限迴圈:不會因為改了 PRD 又再次觸發自己
- 時機自然:Claude 講完話的瞬間檢查,使用者剛好會看到提醒
四、最終成果架構
示意圖 · diagram generated/bump-prd-architecture.tsx - -理解「commit / 發版」意圖
- -跑 git diff 看變更
- -依 SemVer 判斷 bump major/minor/patch
- -寫 changelog summary
執行層
Slash command /bump-prd
- -接收參數 <new_version> <category> "<summary>"
- -機械式寫進 PRD 與 changelog
- -可靠 deterministic 不依賴 AI 判斷力
- -對話結束時檢查「docs 有變更但 PRD 版號沒動」
- -用 exit 2 印提醒讓 AI 轉達
- -不執行 bump 只負責提醒
流程示意
正常流程
改 docs → 說「commit」 → AI 判斷 → /bump-prd → commit
忘了發版時(哨兵介入)
改 docs → 對話結束 → Stop hook 檢查 → 提醒「該發版」
五、Key Takeaway
視覺化 · free generated/hook-takeaway-quote.tsx Hook 是哨兵,不是司令官。
它站在固定位置(事件)、看到固定情況(matcher)、做固定動作(script)——不思考、不判斷、不指揮,那是 AI 的工作。
判斷該不該用 hook 的三個準則
- 這件事「不能漏」嗎? → 漏了沒關係的事,寫在 CLAUDE.md 就好
- 這件事「不需要判斷」嗎? → 需要語意判斷的,給 AI
- 這件事「綁定在生命週期事件」嗎? → 使用者意圖驅動的,給 slash command
三個都 yes 才該用 hook。
示意圖 · diagram generated/hook-decision-tree.tsx
機制對照表
表格 · table generated/mechanism-comparison-table.tsx 機制對照| 機制 | 誰觸發 | 做什麼 |
|---|
| Hook | Claude Code 引擎(事件) | 機械式動作、守門 |
| Slash command | 使用者或 AI 主動呼叫 | 可帶參數的工具 |
| CLAUDE.md | AI 每次讀(advisory) | 行為指引、SOP |
| Skill | AI 依需要載入 | 給 AI 用的知識/工具集 |
| Git hook與 Claude 無關 | Git 觸發(commit/push 時) | 跟 Claude Code 無關 |
建立於 2026/06/12 建立-bump-prd-hook-的認知調整歷程.mdx