Hook 是什麼?
看工具執行前後,規則如何改變流程
▌一句話理解
Hook = 自動觸發的附加動作
你設定一個條件:「每次發生 X,就自動去做 Y。」
不需要每次手動叫我做,Claude Code 在背後幫你監控,條件一符合就自己跑。
比喻:宿舍門口的警衛
PostToolUse(事後型)
= 你寄件後,警衛幫你送到 7-11 取貨。你只管寄,剩下的他負責。
PreToolUse(事前型)
= 你要出門前,警衛先看你背包,發現你帶了違禁品就擋住你。你根本出不了門。
▌例子 1:寫完 HTML 自動開瀏覽器(PostToolUse)
時間軸 →
🤖
我執行
Write 工具
寫入 .html 檔
→
✅
檔案存好了
磁碟上已存在
→
🪝
Hook 啟動
PostToolUse
Write 跑完後觸發
→
🌐
open 指令執行
瀏覽器自動打開
關鍵點
:Hook 在「Write 完成之後」才跑。所以如果 Write 失敗,hook 也不跑。 本例用事後 Hook 開啟預覽;工具已完成,所以它不能回頭攔截這次寫檔。
▌例子 2:git add 前擋住敏感檔(PreToolUse)
情境 A:加了危險檔案
🤖
我準備執行
git add .env
→
🪝
Hook 先攔截
PreToolUse
Bash 跑之前觸發
→
🔍
腳本掃描
發現 .env
→
🚫
permissionDecision: "deny"
git add
完全沒執行
顯示警告訊息
情境 B:正常檔案
🤖
我準備執行
git add main.py
→
🪝
Hook 先攔截
PreToolUse
→
🔍
腳本掃描
未拒絕,續走權限流程
→
✅
放行
其他權限也通過後執行
關鍵點
:Hook 在「Bash 執行之前」跑。
輸出
permissionDecision: "deny"
→ 整個指令被取消,就像它從未被呼叫一樣。
Hook 以 exit 0 結束且不提出決策 → 繼續正常權限流程;其他權限檢查仍可能要求確認或拒絕。
▌Pre vs Post 一眼看清楚
🟢 PostToolUse(事後型)
觸發時機
工具執行「成功後」才跑
能擋住嗎?
不能
,事情已經做完了
適合用來
做完後的附加動作:開瀏覽器、發通知、記錄 log
我們的例子
寫完 HTML → 自動 open
🟠 PreToolUse(事前型)
觸發時機
工具執行「之前」先跑
能擋住嗎?
能
,PreToolUse 回傳 deny 可拒絕這次工具呼叫
適合用來
安全把關:擋危險指令、確認敏感操作
我們的例子
git add .env → 被擋下,警告顯示