Hooks(自動化規則引擎)

Claude Code 的自動觸發規則——Claude 觸發某事件時自動執行的程式,不需手動同意。

四種 Hook 類型

類型觸發時機用途
PreToolUseClaude 用工具驗證、權限檢查
PostToolUseClaude 用工具自動格式化、跑測試
Stop任務完成清理、報告、final check
PostCompact上下文壓縮重貼關鍵規則、存檔摘要、推 Channels

範例 1:自動 Prettier 格式化

.claude/hooks.json

{
  "hooks": [
    {
      "name": "auto-format",
      "trigger": "PostToolUse",
      "tools": ["write_file"],
      "script": "prettier --write {file_path}",
      "continueOnError": true
    }
  ]
}

效果:每次 Claude 寫 .ts / .js 檔,自動跑 prettier

範例 2:停止前先跑測試

{
  "name": "test-before-stop",
  "trigger": "Stop",
  "script": "npm test",
  "failMessage": "❌ Tests failed - 請修復後再 Stop"
}

範例 3:危險指令攔截

{
  "name": "block-rm-rf",
  "trigger": "PreToolUse",
  "tools": ["bash"],
  "condition": "command.contains('rm -rf')",
  "script": "echo '❌ rm -rf 已被 hook 攔截'",
  "block": true
}

為什麼用 Hook

  1. 強制紀律:每次寫檔都格式化,不靠 Claude 自願
  2. 降低錯誤:commit 前必跑測試
  3. 保護:危險指令自動攔截
  4. 客製化:每個專案不同規則

範例 4:PostCompact 重貼規則

{
  "name": "reinject-pam-rules",
  "trigger": "PostCompact",
  "script": "cat .claude/rules/grading-service.md | claude-inject"
}

效果:上下文壓縮 後 Claude 仍記得「等第計算只能呼叫 GradingService」這條紅線——壓縮不會把它丟掉。

Hook 作為反饋機制

Boris Cherny(Boris Cherny 13 條心法 第 7 條)把 PostToolUse 鉤子歸類為「處理專案最後 10%」的工具——但更深的價值是它構成 反饋循環 的具體實作層。

為什麼 Hook 是反饋的關鍵:LLM 的盲點在於「寫完就走」,沒看到自己 code 跑起來的結果。PostToolUse 把「寫完 → 跑 → 看結果」這個迴圈寫進規則裡,每次 Claude 動工具就強制完成一輪。

反饋通道對照:

Hook 類型反饋給誰看例子
PostToolUseClaude 自己(下一輪 prompt 看得到)prettier --write / eslint --fix 失敗訊息回灌
StopClaude 在收工前檢查npm test 失敗就擋下 Stop
PreToolUseClaude 動手前lint-before-edit.sh 攔下會踩雷的 Edit
PostCompactClaude 壓縮後重貼紅線規則,避免「忘了」

搭配反饋循環的最強組合

Edit code  ─[PostToolUse: prettier]─▶  format
            ─[PostToolUse: tsc]──────▶  type check
            ─[PostToolUse: vitest]───▶  unit test
                                        │ 失敗 → fail message 回灌 prompt
                                        │ Claude 看到錯誤 → 自我修正
                                        ↓
                                     再 Edit ─▶ 再 PostToolUse ─▶ ...

→ 這就是 Boris 說的「反饋循環讓品質提升 2-3 倍」的具體機制。沒有 Hook,反饋要靠人類眼睛;有 Hook,Claude 自己看得到自己的錯。

對 PAM 的應用

可以加:

  • 寫完 .cs 自動跑 dotnet format
  • commit 前自動跑 xUnit 測試
  • 改 EF migration 前先 dry-run
  • 寫 SQL 前自動檢查有沒有 string concat
  • PostCompact 後重貼 CLAUDE.md 紅線
  • Stop hook:Channels 推 Telegram 完成通知

相關概念

強連結(原文明確提及)

深入閱讀(外部資源)

← 回到 wiki