Hooks
Hooks 讓您可以在 Claude Code 生命週期的特定時間點執行命令。 Hooks 與本課程涵蓋的其他內容之間的關鍵差異在於,hooks 是確定性的——它們總是會執行。
為什麼要使用 Hooks
您可以在 CLAUDE.md 中告訴 Claude 在每次編輯檔案後執行 Prettier。大多數時候它會這麼做。但有時候它不會。Hook 能確保每一次都會執行,沒有例外。
常見的使用案例包括:
- 在編輯檔案後自動格式化
- 記錄所有執行的命令以符合合規要求
- 封鎖危險操作,例如修改正式環境檔案
- 當 Claude 完成任務時向自己發送通知
運作方式
Hooks 是在您的 settings.json 中設定的。您選擇一個事件,選擇性地設定一個比對器(matcher)來指定它適用於哪些工具,並提供要執行的命令。一些最常見的事件包括:
- PreToolUse — 在工具呼叫之前執行
- PostToolUse — 在工具呼叫完成後執行
- UserPromptSubmit — 在您提交提示、Claude 處理之前執行
- Stop — 在 Claude 完成回應時執行
- Notification — 在 Claude 發送通知時執行
這些只是您可以掛接(hook into)的部分事件——Claude Code 支援更多事件。請參閱 hooks 參考文件(在新分頁中開啟)以取得完整清單。
您可以直接編輯 settings.json 來設定它們。Claude Code 內的 /hooks 命令會開啟一個唯讀清單,顯示您已設定的 hooks,讓您可以確認新的 hook 是否已出現。

實際範例
最常見的 hook:編輯後自動格式化。設定一個比對器為 "Edit|Write" 的 PostToolUse hook,這樣它就會在 Claude 使用 Edit 或 Write 工具後觸發。該命令會檢查檔案副檔名並執行適當的格式化工具:TypeScript 使用 Prettier,Go 使用 gofmt,視您的專案所使用的工具而定。
使用 PreToolUse 進行封鎖
PreToolUse hooks 可以在工具呼叫執行之前封鎖它們。您的 hook 會在 stdin 上以 JSON 格式接收工具名稱和輸入。結束代碼(exit code)決定了行為:
- 結束代碼 0 — 正常繼續。
- 結束代碼 2 — 封鎖該動作。stderr 訊息會回饋給 Claude 作為回饋,讓它知道為什麼被封鎖,並可以做出調整。
- 其他任何結束代碼 — 一個非封鎖性的錯誤,會顯示給您看,但不會阻止任何事情。
這就是您強制執行硬性規則的方式。封鎖對正式環境設定目錄的寫入。封鎖包含 rm -rf 的 bash 命令。封鎖對 main 分支的提交。任何您的團隊需要保證而非僅僅建議的事項。

與團隊共享 Hooks
在 .claude/settings.json 中設定的 hooks 屬於專案層級,可以提交到您的儲存庫中。這表示您的整個團隊會自動獲得相同的 hooks。在您的命令中使用 CLAUDE_PROJECT_DIR 環境變數來參照儲存在您專案中的腳本,這樣無論 Claude 目前的工作目錄為何,它們都能正常運作。
總結
Hooks 讓您對 Claude Code 的行為擁有確定性的控制。使用 PostToolUse 進行自動格式化和記錄。使用 PreToolUse 封鎖危險操作。在 settings.json 中設定它們,並用 /hooks 檢視它們。並將它們提交到您的儲存庫中,讓您的團隊也能獲得它們。
如果某件事必須每次都毫無例外地發生,不要把它放在提示中。把它放進 hook 裡。