開始使用 Claude Code hooks
學習如何透過註冊 shell 命令來自訂和擴展 Claude Code 的行為
Claude Code hooks 是使用者定義的 shell 命令,在 Claude Code 生命週期的各個階段執行。Hooks 提供對 Claude Code 行為的確定性控制,確保某些動作總是會發生,而不是依賴 LLM 選擇執行它們。
有關 hooks 的參考文件,請參閱 Hooks 參考。
hooks 的範例使用案例包括:
- 通知:自訂當 Claude Code 等待您的輸入或執行權限時如何收到通知。
- 自動格式化:在每次檔案編輯後對 .ts 檔案執行
prettier
,對 .go 檔案執行gofmt
等。 - 記錄:追蹤和計算所有執行的命令,用於合規性或除錯。
- 回饋:當 Claude Code 產生不符合您程式碼庫慣例的程式碼時提供自動回饋。
- 自訂權限:阻止對生產檔案或敏感目錄的修改。
透過將這些規則編碼為 hooks 而不是提示指令,您將建議轉換為應用程式層級的程式碼,每次預期執行時都會執行。
您必須考慮新增 hooks 時的安全性影響,因為 hooks 會在代理程式迴圈期間使用您當前環境的憑證自動執行。 例如,惡意的 hooks 程式碼可能會洩露您的資料。在註冊 hooks 之前,請務必檢查您的 hooks 實作。
有關完整的安全性最佳實務,請參閱 hooks 參考文件中的安全性考量。
Hook 事件概述
Claude Code 提供幾個在工作流程不同階段執行的 hook 事件:
- PreToolUse:在工具呼叫之前執行(可以阻止它們)
- PostToolUse:在工具呼叫完成後執行
- Notification:當 Claude Code 發送通知時執行
- Stop:當 Claude Code 完成回應時執行
- SubagentStop:當子代理程式任務完成時執行
每個事件接收不同的資料,並可以以不同方式控制 Claude 的行為。
快速開始
在這個快速開始中,您將新增一個記錄 Claude Code 執行的 shell 命令的 hook。
先決條件
安裝 jq
用於命令列中的 JSON 處理。
步驟 1:開啟 hooks 設定
執行 /hooks
斜線命令並選擇 PreToolUse
hook 事件。
PreToolUse
hooks 在工具呼叫之前執行,可以阻止它們,同時為 Claude 提供關於如何做不同事情的回饋。
步驟 2:新增匹配器
選擇 + Add new matcher…
以僅在 Bash 工具呼叫上執行您的 hook。
為匹配器輸入 Bash
。
使用空字串 ""
來匹配所有工具。*
字元本身不是有效的匹配器。
步驟 3:新增 hook
選擇 + Add new hook…
並輸入此命令:
步驟 4:儲存您的設定
對於儲存位置,選擇 User settings
,因為您正在記錄到您的主目錄。此 hook 將適用於所有專案,而不僅僅是您當前的專案。
然後按 Esc 直到您返回 REPL。您的 hook 現在已註冊!
步驟 5:驗證您的 hook
再次執行 /hooks
或檢查 ~/.claude/settings.json
以查看您的設定:
步驟 6:測試您的 hook
要求 Claude 執行一個簡單的命令,如 ls
,並檢查您的記錄檔案:
您應該看到類似以下的條目:
更多範例
有關完整的範例實作,請參閱我們公開程式碼庫中的 bash 命令驗證器範例。
程式碼格式化 Hook
編輯後自動格式化 TypeScript 檔案:
自訂通知 Hook
當 Claude 需要輸入時獲得桌面通知:
檔案保護 Hook
阻止對敏感檔案的編輯: