Claude Code Hooks Mastery:13 個 Hooks 生命週期與自動化控制入門

整理 claude-code-hooks-mastery 的核心內容:如何理解 Claude Code 的 13 個 Hooks 生命週期,並用 hooks 管理權限、安全檢查、上下文注入、子代理、團隊驗證和開發自動化。

claude-code-hooks-mastery 是一個圍繞 Claude Code Hooks 的學習專案。

它不是只給幾個零散腳本,而是把 Claude Code 的 hooks 生命週期、配置方式、腳本寫法和常見自動化場景放在一起講清楚。對想讓 Claude Code 更可控、更像工程化助手的人來說,這類資料很值得看。

Claude Code 預設已經能讀程式碼、改檔案、跑命令。但如果你想讓它在特定時機自動檢查權限、攔截危險操作、注入專案規範、執行測試、提醒團隊規則,單靠聊天指令就不夠穩定。Hooks 的價值就在這裡:把「每次都要提醒 AI 的規則」變成可執行的流程。

Hooks 解決什麼問題

使用 Claude Code 一段時間後,常見痛點大概有這些:

  • 每次新會話都要重複告訴它專案規則
  • 擔心它執行不該執行的命令
  • 希望檔案修改前後自動做檢查
  • 想在提交前自動跑格式化、測試或安全掃描
  • 想把團隊規範寫成固定流程,而不是靠口頭提醒
  • 想在工具呼叫前後拿到上下文,做記錄或攔截
  • 希望複雜任務可以觸發子代理或專門腳本處理

Hooks 就是為這些「固定時機的自動動作」準備的。

你可以把它理解成 Claude Code 工作流裡的事件鉤子:當會話開始、使用者提交提示詞、模型準備呼叫工具、工具呼叫完成、代理即將結束等節點發生時,Claude Code 可以執行你配置的腳本。

13 個 Hooks 生命週期

專案 README 的重點之一,是系統整理了 Claude Code 的 13 個 hook 事件。

這些事件覆蓋了從會話開始到工具呼叫、從使用者輸入到代理結束的多個節點。按用途可以粗略分成幾類:

  • 會話啟動相關:用於初始化環境、注入專案上下文
  • 使用者輸入相關:用於檢查提示詞、補充規則、做稽核
  • 工具呼叫前相關:用於權限判斷、命令攔截、安全檢查
  • 工具呼叫後相關:用於記錄結果、觸發格式化、執行驗證
  • 任務結束相關:用於總結、清理、通知或保存狀態

這種生命週期設計讓你不必把所有規則都寫進一個超長提示詞裡。

比如,權限控制應該發生在工具呼叫前;格式化檢查更適合發生在檔案修改後;專案規範注入適合發生在會話開始或使用者輸入後。把規則放到正確的 hook 節點,通常比把所有內容塞進 system prompt 更可靠。

配置檔案在哪裡

Claude Code 的 hooks 通常透過設定檔配置。

常見位置包括:

  • 使用者級配置:~/.claude/settings.json
  • 專案級配置:.claude/settings.json

使用者級配置適合放個人偏好,比如通用安全規則、命令攔截、日誌路徑。

專案級配置適合放倉庫相關規則,比如這個專案必須跑什麼測試、哪些目錄不能改、生成檔案怎麼處理、提交前要做哪些檢查。

如果你在團隊裡使用 Claude Code,更推薦把專案級配置放進倉庫。這樣每個人打開專案時,拿到的是同一套 AI 協作約束,而不是各自憑記憶提醒。

單檔案腳本為什麼重要

專案裡強調了 UV 單檔案腳本的寫法。

這類腳本的好處是部署簡單。一個 Python 檔案就可以宣告依賴並執行,不必為了一個 hook 單獨維護複雜環境。對 hooks 來說,這很合適,因為很多 hook 只是做一件小事:

  • 檢查命令是否允許執行
  • 判斷檔案路徑是否安全
  • 讀取專案規範並返回給 Claude
  • 掃描輸出中是否包含敏感資訊
  • 在修改後執行格式化或測試
  • 把事件寫入日誌

Hook 腳本越小,越容易維護,也越不容易變成新的複雜系統。

可以做哪些自動化

claude-code-hooks-mastery 展示的方向比較多,實際工作中最常見的是下面幾類。

1. 權限和安全控制

這是 hooks 最直接的用途。

比如在 Claude Code 準備執行命令之前,先檢查命令內容。如果命令包含刪除、重置、清空、覆蓋等高風險動作,就阻止執行或要求人工確認。

類似規則還可以用於檔案路徑:

  • 不允許修改生產配置
  • 不允許寫入金鑰檔案
  • 不允許刪除遷移腳本
  • 不允許觸碰指定目錄
  • 不允許執行未批准的網路命令

這類保護放在工具呼叫前,比寫一句「不要做危險操作」更可靠。

2. 上下文注入

很多專案都有固定背景:

  • 技術棧
  • 編碼規範
  • 測試命令
  • 分支策略
  • 目錄結構
  • 禁止事項
  • 生成檔案處理規則

這些內容每次手動告訴 Claude Code 很麻煩,也容易漏。Hooks 可以在會話開始或使用者提交提示詞後,把必要上下文自動注入進去。

這相當於給 Claude Code 配一個專案級的工作說明書。它不會替代 README 或開發文件,但能讓 AI 在執行任務前更快進入正確狀態。

3. 修改後的驗證

當 Claude Code 修改檔案後,可以透過 hook 自動觸發檢查。

常見動作包括:

  • 執行格式化
  • 執行 lint
  • 執行單元測試
  • 檢查型別錯誤
  • 掃描生成檔案
  • 校驗 Markdown 或 JSON 格式

這對減少低級錯誤很有幫助。尤其是 AI 改動多個檔案時,修改後自動跑一輪輕量驗證,可以更早發現問題。

不過也要注意,hook 裡不適合預設塞太重的任務。每次檔案改動都跑完整測試套件,可能會讓體驗變得很慢。更實用的做法是按檔案類型、目錄和任務風險選擇檢查範圍。

4. 團隊規則驗證

如果團隊已經有明確約定,可以把一部分約定放進 hooks。

比如:

  • 提交訊息格式
  • 程式碼風格規則
  • 禁止直接修改某些生成檔案
  • 文件必須同步更新
  • API 變更必須改測試
  • 某些目錄只能用指定工具生成

這會讓 Claude Code 更像團隊流程的一部分,而不是一個不受約束的外部助手。

當然,hooks 不應該替代 CI。它更適合做本地快速提醒和前置攔截,真正的最終驗證仍然應該交給 CI、review 和測試系統。

5. 子代理和專門任務

README 裡還提到子代理相關內容。

這類用法適合把複雜任務拆給更專門的流程處理。比如主會話負責理解需求,hook 或配置觸發專門的檢查、稽核、總結、文件整理任務。

對個人使用者來說,最先值得做的不是複雜代理編排,而是把重複、明確、低風險的動作交給 hooks。等規則穩定後,再考慮更複雜的自動化。

Statusline 和輸出樣式

專案還覆蓋了狀態列和輸出樣式。

這部分看起來像體驗細節,但對長期使用 Claude Code 很有意義。狀態列可以展示當前上下文、任務狀態、環境資訊或提示資訊;輸出樣式則可以讓 Claude Code 的回答更符合你的工作習慣。

如果你每天都在同一個終端裡和 AI 協作,這些細節會影響效率。好的狀態提示能減少誤操作,也能讓你更快判斷當前會話是否處在正確專案、正確分支、正確環境裡。

不要把 hooks 寫得過重

Hooks 很強,但不適合什麼都往裡面塞。

比較好的規則是:

  • 高頻動作要快
  • 安全攔截要明確
  • 輸出要短
  • 失敗原因要可讀
  • 腳本盡量單一職責
  • 重型檢查交給顯式命令或 CI

如果一個 hook 每次都執行十幾秒,使用者很快就會想關掉它。如果一個 hook 攔截規則含糊不清,Claude Code 和使用者都會難以理解下一步該怎麼做。

Hooks 最適合處理那些邊界清楚的事情:允許或拒絕、補充上下文、記錄日誌、執行輕量檢查、提示下一步。

適合怎樣的使用者

如果你只是偶爾讓 Claude Code 改一小段程式碼,可能暫時不需要深入 hooks。

但如果你符合下面幾種情況,就很適合研究這個專案:

  • 高頻使用 Claude Code
  • 經常讓 AI 修改真實專案程式碼
  • 擔心 AI 執行危險命令
  • 想把團隊規範自動注入 AI 工作流
  • 希望修改後自動跑檢查
  • 想把重複提醒變成配置
  • 正在搭建更穩定的 AI 編程流程

尤其是多人協作專案,hooks 的意義會更明顯。它可以把一部分團隊經驗沉澱成腳本,而不是靠每個人臨時提醒 AI。

使用時要注意

第一,先從安全類 hook 開始。

相比複雜自動化,命令攔截、路徑保護、敏感檔案檢查更容易落地,也更能立刻降低風險。

第二,專案級規則要謹慎提交。

.claude/settings.json 會影響所有使用這個倉庫的人。把規則提交前,最好確認它不會過度限制正常開發,也不會依賴只有你本機才存在的路徑。

第三,hook 輸出要簡潔。

Claude Code 會消費這些輸出。輸出太長,會污染上下文;輸出太模糊,又起不到指導作用。最好只返回必要判斷和下一步建議。

第四,保持可除錯。

Hooks 一旦變多,問題可能出在配置、腳本、權限、路徑、依賴或 Claude Code 本身。給腳本留下清楚日誌,會讓後續排查輕鬆很多。

參考

最後一句

Claude Code Hooks 的價值,是把「希望 AI 每次都記住的規矩」變成真正會執行的流程。

如果你已經開始把 Claude Code 用在真實專案裡,hooks 會是從「會聊天的編程助手」走向「可約束的工程協作者」的關鍵一步。

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計