返回首頁

Claude Code Hooks 完整教學:設定架構、Event / Matcher / Handler 與兩個實戰案例

發布時間:2026-08-17 07:59
YouTube 影片重點整理

Claude Code Hooks 完整教學:設定架構、Event / Matcher / Handler 與兩個實戰案例

📺 Gary Chen⏱ 19:57🗓 2026-08-16🌐 zh-Hant🔗 https://youtu.be/rLNGSDYkK-w?si=UJNe-qqwCCfnf013

這支影片把 Claude Code Hooks 定位成比 CLAUDE.md 更強制、穩定的自動化機制:CLAUDE.md 像提醒紙條,仍依賴模型自己記得;Hook 則由軟體在固定時機強制觸發。影片依序說明 Hook 設定檔的三層架構 Event、Matcher、Handler,整理常用 Event 與五種 Handler 類型,並用兩個案例示範:提交前阻擋 .env / API 金鑰,以及文章完成前啟動 Humanizer Gate 檢查 AI 腔。最後比較 Claude Code 與 Codex 的 Hook 差異,提醒不要直接複製設定,而要用「何時啟動、啟動後做什麼」重新描述需求。

01

Hook 是把「固定時機」與「強制動作」綁在一起

0:00

影片先用 CLAUDE.md 當對照:CLAUDE.md 每次工作時會被讀取,適合放專案資訊或個人偏好,但它本質上仍像給 AI 的提醒紙條,是否遵守仍依賴模型自己判斷。

Hook 的差別是 deterministic:由 Claude Code 軟體在背後掌控,設定的時間點一到就強制介入,不是靠模型自己記得。影片用便利商店自動門比喻,只要有人走到感應區,門就必定打開。

因此,一次性任務直接在對話講;專案通用規則寫進 CLAUDE.md;但只要是固定時機一到就絕對要執行、而且不想承擔 AI 忘記風險的動作,就適合做成 Hook。

核心概念

📋 本節指令一覽

  1. CLAUDE.md
02

Hook 設定檔的三層架構:Event、Matcher、Handler

2:23

影片說明 Hook 設定通常是 JSON,會放在專案資料夾的 `.claude/settings.json`。不需要死背格式,先理解三層分工即可。

第一層是 Event,決定 Hook 什麼時候啟動。例子是語法檢查使用 `PostToolUse`,也就是 Claude 剛調用完工具時觸發。

第二層是 Matcher,負責從 Claude 可能調用的許多工具中篩出真正要攔截的操作;第三層是 Handler,在條件符合後決定要叫哪個腳本、服務或 AI 出來做事。

設定模型

📋 本節指令一覽

  1. .claude/settings.json
  2. PostToolUse
03

常用 Event:從啟動、工具使用、結束到特殊狀況

4:00

Claude Code 目前有 31 種 Event,影片建議先用工作階段分類來理解。對話開始或恢復時有 `SessionStart`,可用來強制載入 Skill;送出 prompt 時有 `UserPromptSubmit`,可在對話前先撈出相關記憶。

工具使用前後是安全防呆與驗收的關鍵:`PreToolUse` 在工具即將執行前觸發,適合擋危險 Git 指令;`PostToolUse` 在工具成功執行後觸發,適合快速驗收,例如 UI 檔案改完後掃描圖片連結或色彩對比。

工作結束或特殊狀況包含 `Stop`、`Notification`、`SubagentStart` / `SubagentStop`、`PreCompact`。影片特別提醒第一次接觸可先記住四個:`SessionStart`、`PreToolUse`、`PostToolUse`、`Stop`。

事件時機

📋 本節指令一覽

  1. SessionStart
  2. UserPromptSubmit
  3. PreToolUse
  4. PostToolUse
  5. Stop
  6. Notification
  7. SubagentStart
  8. SubagentStop
  9. PreCompact
  10. git reset --hard
  11. git push
04

Matcher 與 Handler 決定 Hook 會不會吵、做得夠不夠準

9:00

Matcher 的工作是從所有可能動作裡挑出 Hook 真正要處理的目標。影片例子是只關心 `Edit` 和 `Write`,甚至可以再加 if 條件,只檢查副檔名是 `.ts` 的程式碼。

Handler 決定條件符合後實際做什麼。影片列出五種類型:`command`、`http`、`mcp_tool`、`prompt`、`agent`。`command` 最常見,適合跑本機指令或腳本;`http` 可把錯誤送 Slack;`mcp_tool` 可從 Jira 等 MCP 工具抓任務。

`prompt` 與 `agent` 都會呼叫另一個 AI 判斷,但 `prompt` 只根據事件資料回答;`agent` 會啟動 subagent,能讀檔、搜尋程式碼或跑測試後再回傳驗收結果。

觸發範圍

📋 本節指令一覽

  1. Edit
  2. Write
  3. .ts
  4. command
  5. http
  6. mcp_tool
  7. prompt
  8. agent
05

實戰一:提交前擋下 .env 與 API 金鑰

11:55

建立 Hook 時,影片建議先講清楚兩件事:它要在什麼時候啟動,以及啟動後要做什麼。第一個案例的需求是:當 Claude 準備執行 Git commit 時,先檢查提交內容是否包含 `.env` 檔案或疑似 API 金鑰。

Claude 建立出的 Hook 使用 `PreToolUse`,Matcher 鎖定 `Bash`,放在全域 `.claude/settings.json`,所以任何專案只要 Claude 準備執行 Git commit 都會經過這道檢查。

Handler 會叫起一支 `Git Commit Secret Guard` 檢查程式;如果與提交無關就安靜結束,若發現 `.env`、私鑰、憑證或疑似 API 金鑰,就阻擋提交並指出問題檔案。影片也示範敏感資料會擋下、移除後可正常提交。

安全防呆

📋 本節指令一覽

  1. Git Commit
  2. .env
  3. API key
  4. PreToolUse
  5. Bash
  6. .claude/settings.json
  7. Git Commit Secret Guard
06

實戰二:用 Humanizer Gate 阻止 AI 腔文章直接結束

14:11

第二個案例處理的是比較質化的判斷:Claude 寫出的文章資訊可能正確,但讀起來有 AI 腔。影片示範的需求是:每當 Claude 寫完 Blog 文章、準備結束工作時,啟動一個 Agent 讀取文章,呼叫 Humanizer Skill 檢查。

這個 Hook 使用 `Stop` Event;當 Claude 準備結束工作時,Hook 先確認這次是否有修改 Blog 文章,再由 `Humanizer Gate` 找出尚未通過檢查的文章,要求 Claude 開 Agent 審查。

如果 Agent 找出 AI 寫作痕跡,會把問題段落與原因交回給 Claude,請它繼續修改;通過後這次工作才結束。文章若後來又被修改,原本的通過紀錄會失效,下次結束前重新檢查。

內容品質

📋 本節指令一覽

  1. Stop
  2. Humanizer Gate
  3. Humanizer Skill
  4. Agent
07

長期使用 Hook 前,要檢查範圍與退出條件

15:40

影片提醒,請 Claude 建立第一版 Hook 時,只要先說清楚「何時啟動」與「啟動後做什麼」即可;但要長期穩定使用,還要檢查觸發範圍是否精確。

範圍太大會讓 Hook 在無關操作中被叫起,浪費時間並打斷工作。影片的 Git 案例先用 Matcher 鎖定 `Bash`,再由檢查程式判斷是否真的是 Git commit;無關指令就安靜結束。

Stop Hook 還必須有明確的通過條件與退出條件,否則可能一直退回、修改、再檢查。Humanizer Gate 會記錄目前版本是否通過;如果連續三輪仍未通過,就停止退回,交給人工確認。

穩定性

📋 本節指令一覽

  1. Bash
  2. Git commit
  3. Stop Hook
08

Codex 可沿用判斷方式,但不能直接複製 Claude Code 設定

17:44

影片結尾指出,Codex 用戶也可以沿用同一套需求表達方式:先說清楚什麼時候啟動,以及啟動後要做什麼。

但 Claude Code 與 Codex 支援的 Event 和 Handler 不完全相同。影片提到 Claude Code 有 31 種 Event,Codex 有 11 種;`PreToolUse` 與 `Stop` 兩邊都有,因此 `.env` 檢查和 Humanizer Gate 的基本做法可以搬過去。

Handler 差異更大:Claude Code 支援 `command`、`http`、`mcp_tool`、`prompt`、`agent`,Codex 目前真正會執行的是 `command`。所以最簡單的做法不是複製設定,而是把要解決的問題直接告訴 Codex,請它依目前支援格式重新建立。

Codex 差異

📋 本節指令一覽

  1. PreToolUse
  2. Stop
  3. command
  4. http
  5. mcp_tool
  6. prompt
  7. agent

先找出一件你經常提醒 AI、而且每次都發生在固定時機的事情;只要它會重複發生,而且適合在固定時機自動處理,就值得做成 Hook。

重點時間戳索引

  1. 0:00CLAUDE.md 適合放專案資訊與偏好,但仍是提醒紙條;若動作必須在固定時機強制執行,就適合做成 Hook。
  2. 2:23Hook 設定檔通常是 JSON,核心分成三層:Event 決定何時啟動,Matcher 決定攔截哪個操作,Handler 決定最後做什麼。
  3. 4:00影片從 31 種 Event 中挑出核心類別,包含 SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、Stop、Notification、SubagentStart / Stop、PreCompact。
  4. 9:00Matcher 用來縮小 Hook 處理範圍,例如只鎖定 Edit / Write,或再用 if 條件限制副檔名,避免無關操作也觸發。
  5. 9:40Handler 分成 command、http、mcp_tool、prompt、agent;command 適合跑本機腳本,http / mcp_tool 適合外部服務或 MCP,prompt / agent 適合 AI 判斷。
  6. 11:55第一個實戰案例是在 Git commit 前檢查 .env、私鑰、憑證或疑似 API 金鑰,發現問題就阻擋提交並指出檔案。
  7. 14:11第二個實戰案例是文章完成前啟動 Humanizer Gate,讓 Agent 呼叫 Humanizer Skill 檢查 AI 腔,通過後才結束。
  8. 15:40建立 Hook 後還要檢查兩件事:觸發範圍是否夠精確,以及 Stop Hook 是否有明確通過條件與退出條件,避免無限迴圈。
  9. 17:44Codex 可以沿用相同判斷方式,但 Event / Handler 支援不同;Claude Code 設定不能直接複製到 Codex。

關鍵字

Claude CodeHooksCLAUDE.mdCodexEventMatcherHandlerPreToolUsePostToolUseStopAI 自動化

⚠️ 未確認 / 無法核對項目

  • 本報告使用影片描述與官方 zh-TW 逐字稿整理,未額外進行畫面 OCR;畫面上的實際 JSON 範例若有逐字細節,未在主文中擅自補寫。
📎 原始內容(查證 / AI 追查用,非閱讀主文,點擊展開)
YouTube description
加入我的 Patreon,查看完整文章還有提示詞模板:https://www.patreon.com/GaryChen/posts/claude-code-shi-166812099/
--
CLAUDE.md 裡寫了規則,Claude 還是常常忘記,因為那只是給 AI 的提醒紙條。Hook 不一樣,它由軟體強制執行,時機一到就一定會跑。這支影片從 Hook 是什麼講起,帶你認識十個核心 Event、Matcher 怎麼收斂範圍、五種 Handler 各適合什麼,也拆解 Superpowers、Claude-Mem、Impeccable 這些熱門專案的實際用法。最後用兩個真實案例帶你建立第一個 Hook:提交程式碼前擋下 API 金鑰,以及寫完文章自動檢查 AI 腔。用 Codex 的朋友也適用,結尾會談兩邊的關鍵差異。

📌 時間戳
0:00 AI 為什麼記不住你的規則
2:23 設定檔的三層架構
4:00 十個核心 Event
9:00 Matcher 與 Handler
11:55 建立你的第一個 Hook
17:44 Codex 的兩個差異
18:56 總結

📢 追蹤我的頻道
👍 覺得有幫助請按讚、訂閱、開小鈴鐺!

#ClaudeCode #Hooks #AI工具 #Codex #自動化
官方 zh-TW transcript with timestamps
0:00 上一支介紹 CLAUDE.md 的影片裡,我們學到
0:02 Claude Code 每次開始工作時都會讀取 CLAUDE.md
0:05 所以這份檔案很適合拿來放專案資訊
0:08 或是你的個人偏好
0:10 但有些狀況是
0:11 明明 CLAUDE.md 裡面寫了改完程式一定要跑測試
0:14 或是準備執行危險的 Git 指令時一定要先停下來
0:17 Claude 卻還是常常忘記
0:19 如果你感到心有戚戚焉
0:20 那是因為 CLAUDE.md 就像是給 AI 的一個提醒紙條而已
0:23 它提供了指示,Claude 會盡力遵守
0:26 卻不保證每一次都會乖乖照做
0:28 如果你希望有一套更強制,更穩定的機制的話
0:31 這就是 Hooks 可以幫你的地方
0:33 這支影片我會帶你完整搞懂 Hook 到底是什麼
0:36 它和 Claude Code 裡面其他功能有什麼差別
0:39 你會知道 Hooks 有哪幾個種類
0:41 而這幾個種類的 hooks 適合做什麼樣類型的工作?
0:45 如果你好奇別的大神都是怎麼樣使用 Hooks 的話
0:47 我也會拆解熱門的 GitHub repo
0:49 分析給你聽他們都是怎麼樣去使用 Hooks 的
0:52 最後,我會用實際案例帶你一步步用 Claude Code
0:54 建立屬於你的第一個 Hook
0:56 不論你是 Claude Code 還是 Codex 用戶
0:58 Hook 的原理都是通用的
1:00 因此看這支影片之後
1:01 你要在哪個 agent 裡面建立都可以
1:03 那我們就開始今天的影片
1:05 首先,我們來聊聊,到底什麼是 Hook?
1:08 你可以把它想像成便利商店的自動門
1:11 它背後有一套非常死板,絕對會執行的規則
1:13 只要有人走到感應區,門就立刻打開
1:16 完全沒有商量的空間
1:18 Hooks 在 Claude Code 裡的角色也是一模一樣的
1:21 你可以設定只要 Claude 一改完程式碼
1:23 測試就自動跑起來
1:25 你會發現
1:26 這句話的前半段是在定義觸發的時機與情境
1:29 而後半段是觸發後要做什麼
1:31 所以說穿了
1:32 Hook 就是把這兩件事情緊緊綁在一起的自動化設定
1:35 你定義好一個特定的情況
1:37 以及這個情況發生時你的 agent 要去做什麼事情
1:40 Hook 跟上一支提到的 Claude Markdown
1:42 最關鍵的差別在於是誰來負責啟動
1:44 CLAUDE.md 是讓模型自己去看
1:46 這代表它必須依賴 AI 自己去判斷什麼時候該遵守
1:49 但 Hook 完全不一樣
1:51 Hook 是 deterministic 的
1:52 它是由 Claude Code 這套軟體在背後掌控的強制機制
1:56 只要設定的時間點一到
1:58 軟體就會直接介入,強制執行任務
2:01 而不是靠模型自己去判斷要不要做
2:04 所以幫大家簡單歸納一下
2:05 如果只是一次性的任務
2:07 你在對話的時候直接講就可以了
2:09 如果是專案通用的規則跟大方向
2:11 很適合寫在 CLAUDE.md 裡面
2:12 讓模型當作參考
2:14 但如果這個動作是只要特定時機一到
2:16 就絕對必須嚴格執行
2:18 而且你一點都不想承擔被 AI 忘記的風險
2:20 那這時候,就非常適合把它做成 Hook 了
2:23 好,那一份真正的 Hook 設定檔到底長什麼樣子呢?
2:28 它其實只是用 JSON 格式寫的指令而已
2:30 通常會放在你專案資料夾裡面的
2:32 .claude/settings.json 檔案中
2:34 雖然看起來很像一堆密密麻麻的程式碼
2:37 但你完全不需要死背,也不用自己一行一行手打
2:40 只要搞懂它裡面的三層架構就可以了
2:43 我們直接舉個例子
2:45 假設有一個 Hook 的任務是檢查程式碼有沒有語法錯誤
2:48 如果你把這個設定檔打開
2:49 你會看到它裡面的分工非常明確,總共分成三層
2:53 第一層叫做 Event
2:55 它負責決定這個 Hook 要在什麼時候啟動
2:58 在這個語法檢查的例子裡面
3:00 我們的 Event 會設定成 PostToolUse
3:02 意思就是在 Claude 剛調用完工具的這個瞬間啟動
3:06 第二層叫做 Matcher
3:08 它是用來設定篩選條件的
3:10 Claude 在工作的時候會調用非常多種工具
3:13 但我們不可能每一次它調用工具
3:15 都把這個 Hook 叫出來執行
3:17 所以 Matcher 的功用
3:18 就是在告訴系統在這麼多的工作裡面
3:21 有哪些具體的操作,是真正要去篩選,去攔截的?
3:24 以這個語法檢查為例
3:25 我們就會把 Matcher 設定成只鎖定修改程式碼這個動作
3:30 最後第三層叫做 Handler
3:31 也就是真正採取行動的地方
3:33 當前面的條件都符合了
3:35 就由它來決定接下來要叫誰出來做事
3:38 以我們這個例子來說
3:39 Handler 就是去把你電腦裡面的語法檢查腳本叫出來
3:42 讓它自動幫你把錯誤抓出來
3:45 所以,如果要簡單總結這三層架構
3:47 你可以把它想成三個問題
3:49 Event 決定了什麼時候發生?
3:52 Matcher 決定了具體要攔截哪個操作?
3:55 Handler 決定了最後要做什麼動作?
3:57 這就是 Hook 最核心的運作邏輯
4:00 好,理解了 Hook 的基本架構跟極限之後
4:02 接下來,我們就來好好認識一下剛才提到的 Event
4:04 也就是啟動的時間點
4:07 老實說
4:07 Claude Code 裡面目前有多達三十一種 Event
4:11 聽起來很嚇人
4:12 但我們只要按照系統的工作階段來分類
4:14 抓出十個最核心的 Event 就夠了
4:16 我們先來看第一階段
4:17 也就是系統剛啟動
4:19 以及剛接收到你指令的時候
4:21 這個階段有兩個很重要的 Event
4:23 首先是 Session Start
4:25 顧名思義
4:25 它會在你開啟對話的那一瞬間觸發
4:29 不管你是開新對話,接續之前的紀錄
4:32 或是輸入 clear 指令清空畫面
4:34 只要對話環境一建立,它就會立刻啟動
4:37 這可以拿來做什麼呢?
4:39 GitHub 上有個很熱門的專案叫做 Superpowers
4:41 作者就利用了 Session Start Hook
4:43 設定只要用戶一開啟對話
4:44 就強制 AI 載入 Superpowers 這項 Skill
4:47 他這麼做
4:48 正是為了對付 AI 載入 Skill 的隨機性
4:50 透過 Session Start Hook
4:51 就能確保用戶的每一個對話
4:53 都有確實載入這項技能
4:55 第二個 event 是 User Prompt Submit
4:57 它會在你按下 Enter 送出 prompt 的那一刻被觸發
5:01 這可以拿來做什麼?
5:02 我們以 Claude-Mem 為例
5:04 這是一個幫 Claude Code 建立長期記憶的開源專案
5:07 用來解決 AI 跨對話會失憶的問題
5:09 它就是利用 User Prompt Submit 這個 Hook
5:11 去攔截你送出的提問
5:12 在背後呼叫一支叫做 worker-service 的程式
5:15 讓這支程式先去背景資料庫
5:17 撈出跟這次對話最相關的記憶
5:19 然後再塞給 Claude Code
5:20 透過這個做法
5:21 就能強制確保 AI 在每一次對話前
5:23 都已經帶上你的相關記憶
5:25 接著進入第二階段
5:27 當 Claude 準備去修改檔案或下達指令的時候
5:29 它其實是透過呼叫背後的各種 Tools 來完成的
5:33 而這個階段的 hooks
5:34 就是發生在 Claude 已經決定好要用哪個工具
5:36 但還沒真的執行的空檔
5:38 所以非常適合用來做安全防呆
5:40 這裡最關鍵的 Event 就是 Pre Tool Use
5:43 這種 hook 會在工具正準備被調用前觸發
5:46 還記得我們之前介紹的 Matt Pocock Skills 嗎?
5:48 他在裡面就有一個 hook 來幫你擋掉危險的 Git 指令
5:52 它會用這個 hooks 去檢查 claude tool call 指令的內容
5:56 只要發現 Claude 試圖執行像 git reset --hard
5:59 這種會把程式碼洗掉的指令
6:00 或是危險的 git push
6:02 這個 hook 就會立刻攔截
6:04 當場中斷 Claude 的動作
6:05 並告訴它你沒有權限執行這個操作
6:08 接著我們進入第三階段
6:09 也就是 Claude 順利執行完 Tool call 之後的瞬間
6:13 這階段最常用的 Event 叫做 PostToolUse
6:15 非常適合用來做快速的驗收
6:17 我自己很喜歡一款叫做 Impeccable 的前端設計 Skill
6:20 它就是在這裡把關的
6:21 只要 Claude 一改完 UI 檔案
6:23 它就會立刻啟動幫你揪錯
6:26 它是怎麼檢查的呢?
6:27 舉例來說
6:28 如果 Claude 寫了圖片標籤
6:30 但裡面的圖片連結卻是空的
6:32 這在網頁上會變成一塊無法顯示的錯誤圖示
6:35 Impeccable 的這個 hook 就會透過掃描程式碼
6:38 立刻把這個問題抓出來
6:39 又或者是字體顏色太淡看不清楚
6:42 它會直接去計算文字跟背景顏色的數學對比值
6:44 一旦發現不符合標準
6:46 它就會自動跟 Claude 說
6:47 Claude 就會自動幫你修好
6:49 最後我們來到第四階段
6:51 也就是當 Claude 執行完所有任務
6:53 準備停下來等你
6:55 或是遇到一些特殊狀況的時候
6:57 這個階段有一個很關鍵的 Event 叫做 Stop
6:59 它會在你這一回合的對話完全結束時觸發
7:02 我們再拿剛才的 Impeccable 來說
7:03 如果你去看它的原始碼,會發現它把
7:05 排版節奏,配色和諧度
7:07 這種比較深度的美感檢查
7:09 刻意留到 Stop 階段才做
7:11 為什麼呢?
7:11 因為它會把你這整個工作階段裡
7:14 所有改過的檔案全部統整起來做一次總體檢
7:17 如果每改一行程式碼就跑這種深度檢查
7:20 開發速度會被嚴重拖慢
7:21 所以把它放到最後 Stop 的時候再一次做完
7:23 是最聰明的做法
7:25 我之前有出一部 cross model review 的影片
7:27 其實就是利用這個 stop event
7:29 讓 Claude 在寫完 plan 觸發 stop event 的時候
7:32 去呼叫 codex 進行 peer review
7:34 除了 Stop 之外
7:36 這階段還有幾種處理特殊狀況的 Event
7:39 第一個是很多人都會用的 Notification
7:41 也就是通知提醒
7:42 你可以把它設定成桌面通知或提示音
7:45 這樣 Claude 在背景工作時
7:46 你不用一直守在電腦前
7:48 可以先去泡杯咖啡,或處理別的事
7:51 等它需要你確認權限,回答問題時
7:53 電腦就會發出提示,把你叫回來
7:55 第二個是 Subagent 系列的 Event
7:57 主要有 SubagentStart 和 SubagentStop
8:00 當主 Claude 叫一個 subagent 開始工作時
8:03 就會觸發 SubagentStart
8:04 當這個 subagent 做完,準備交回結果時
8:07 就會觸發 SubagentStop
8:09 這兩個時機非常適合拿來控管 subagent 的工作品質
8:12 你可以在 subagent 開始前
8:14 先補上這次任務的規則和品質要求
8:16 等它做完後
8:17 再用 Hook 檢查產出有沒有達標
8:19 最後一個是 PreCompact
8:21 當對話太長時
8:22 Claude 會自動把前面的內容濃縮
8:24 騰出空間繼續工作
8:26 但如果你發現
8:27 每次濃縮之後
8:28 它總是會漏掉你最在意的資訊
8:30 例如關鍵決策,目前進度
8:32 或是不能更動的規則
8:33 你就可以使用 PreCompact Hook
8:35 在濃縮開始前
8:37 先把這些重要資訊整理並保存下來
8:39 這樣濃縮完成後
8:40 Claude 還是能接著前面的共識繼續工作
8:43 如果你是第一次接觸
8:44 先記住四個最常見的 Event 就好
8:46 SessionStart 會在對話開始或恢復時出現
8:49 PreToolUse 會在 Claude 準備使用工具
8:52 但還沒真的執行前出現
8:54 PostToolUse 會在工具成功執行之後出現
8:57 Stop 則是在 Claude 做完這一輪工作
8:59 準備停下來時出現
9:00 理解 Event 之後,接著來看第二個元件
9:03 Matcher
9:04 它的工作很簡單
9:05 就是從所有可能出現的動作裡
9:08 挑出這個 Hook 真正需要處理的目標
9:10 像這個 Hook 的 Matcher 顯示的是 Edit 和 Write
9:12 代表它只關心 Claude 修改檔案的動作
9:15 讀取檔案,搜尋資料,或執行其他工具時
9:19 它都不會繼續往下跑
9:20 但如果還想分得更細
9:21 下面還可以再加一個 if 條件
9:23 例如在這個案例中
9:24 它只會檢查副檔名是 .ts 的程式碼
9:29 當以上條件都符合之後
9:30 才會交給下一個 Handler 處理
9:33 Matcher 把目標挑出來之後
9:34 接著就輪到第三個元件,Handler
9:36 它會決定條件符合之後
9:38 這個 Hook 實際要做什麼
9:40 目前 Handler 總共有五種類型
9:42 分別是 command,http,mcp_tool,prompt 和 agent
9:46 接下來
9:46 我們一個一個來看它們適合處理哪些事情
9:49 第一個,也是最常用的 Handler,叫做 command
9:52 它的作用
9:54 就是讓 Hook 直接執行電腦上的指令或腳本
9:57 比如 Claude 改完程式碼之後
9:59 自動執行 lint 檢查
10:00 或是用 Prettier 把格式整理好
10:02 也可以在 Claude 準備執行指令之前
10:04 先跑一段檢查程式,把危險操作擋下來
10:07 接下來是 http 和 mcp_tool
10:10 http 可以把 Hook 收到的資料傳到外部服務
10:13 比如工具執行失敗時
10:15 自動把錯誤訊息送到 Slack
10:16 讓團隊立刻知道
10:18 mcp_tool 則可以直接使用已經連線的 MCP 工具
10:22 比如每次開始工作時
10:23 自動從 Jira 抓回今天的任務
10:25 交給 Claude 當作這次工作的背景資訊
10:27 最後兩種 Handler 是 prompt 和 agent
10:30 它們都會呼叫另一個 AI 來檢查條件有沒有符合
10:33 差別在於它們完成判斷的過程
10:36 先看 prompt
10:37 當 Hook 被觸發時
10:38 Claude Code 會把這次事件的資料
10:40 連同你事先寫好的檢查條件
10:42 一起交給另一個 AI 模型
10:44 這個 AI 只會根據收到的資料回答
10:46 不會自己打開檔案或搜尋其他資訊
10:49 例如 Claude 準備提交程式碼時
10:51 你可以請 prompt 檢查這次的 Commit 訊息
10:54 有沒有符合團隊格式
10:55 如果符合,就讓這次提交繼續
10:57 如果不符合,就把原因交回給 Claude
10:59 請它重新修改
11:01 agent 的運作方式更完整
11:03 當 Hook 被觸發時
11:04 它會叫起一個 subagent
11:05 並把這次的事件資料和驗收條件交給它
11:08 這個 subagent 可以先讀取檔案,搜尋程式碼
11:11 或是執行測試
11:12 查清楚實際狀況之後,再回傳驗收結果
11:16 例如 Claude 說功能已經完成
11:18 準備結束工作時
11:19 你可以請 agent 檢查修改過的檔案
11:22 對照原本的需求,再實際執行測試
11:24 如果全部符合,就讓 Claude 結束工作
11:27 如果發現缺少功能或測試失敗
11:28 就把原因交回給 Claude,讓它繼續修改
11:31 簡單來說
11:32 prompt 是拿著現有資料直接回答
11:34 agent 則可以先讀檔案,搜尋程式碼或執行測試
11:38 查清楚之後再回答
11:40 這裡要注意
11:40 每個 Event 支援的 Handler 類型都不太一樣
11:43 比如有些 Event 可以使用 prompt 和 agent
11:46 有些只能使用 command,http 或 mcp_tool
11:49 所以實際設定之前
11:51 記得先請 AI 查一下官方文件
11:53 確認你選的 Event 能不能搭配這個 Handler
11:55 到這裡
11:56 一個 Hook 的架構你應該已經清楚了
11:59 接下來
11:59 我會教你怎麼把需求講給 AI 聽
12:01 讓它幫你建立第一個 Hooks
12:04 要請 AI 幫你建立 Hook
12:05 其實先講清楚兩件事就夠了
12:07 它要在什麼時候啟動
12:08 以及啟動之後要做什麼
12:10 比如
12:11 當 Claude 準備提交程式碼時
12:13 先檢查這次的修改裡有沒有 E N V 檔案或 API 金鑰
12:17 如果有,就把這次提交擋下來
12:19 所以你表達的重點
12:20 前半段是啟動時機,後半段是要做的事
12:24 有了這兩個資訊
12:24 AI 就能先幫你建立第一版 Hook
12:27 接下來
12:27 我們就把剛才的需求直接講給 Claude Code 聽
12:30 你可以說請幫我在我的全域設定裡建立一個 Hook
12:34 每當你準備執行 Git Commit 時
12:35 先檢查這次要提交的內容
12:37 如果裡面包含 E N V 檔案
12:39 或是疑似 API 金鑰
12:40 就先把提交擋下來
12:42 並告訴我是哪一個檔案有問題
12:44 如果沒有發現,就讓提交正常繼續
12:46 完成之後
12:47 請測試有敏感資料會擋下
12:49 沒有敏感資料會放行這兩種情況
12:52 Claude 建立完成之後
12:53 會把這個 Hook 加進我的全域設定
12:56 它使用的 Event 是 PreToolUse
12:58 代表 Claude 每次準備執行工具之前
13:00 Hook 會先介入
13:02 它的 Matcher 是 Bash
13:03 所以只有 Claude 準備執行終端機指令時
13:05 才會叫起這支檢查程式
13:07 因為我把它放在根目錄之下的點 claude 資料夾
13:10 settings json 裡
13:11 所以不管我正在使用哪一個專案
13:13 只要 Claude 準備執行 Git Commit
13:15 都會經過這道檢查
13:16 接著看 Handler
13:18 它會叫起一支名為 Git Commit Secret Guard
13:20 的檢查程式
13:22 雖然 Matcher 會在每一個 Bash 指令執行前叫起它
13:25 但程式會先判斷這次有沒有要執行 Git Commit
13:28 如果和提交無關,它就安靜結束
13:30 只有真的要提交時
13:31 才會檢查這次要進入 Git 的內容
13:33 只要發現 E N V 檔案,私鑰,憑證
13:37 或是疑似 API 金鑰
13:38 就會擋下這次提交
13:40 並告訴我問題出在哪一個檔案
13:42 如果沒有發現問題,就讓提交正常繼續
13:45 接著我們直接試一次
13:47 我先請 Claude 提交一個包含 E N V 檔案的修改
13:50 你可以看到
13:51 Git Commit 還沒有真的執行
13:53 Hook 就先把它攔了下來
13:54 並指出是哪一個檔案有問題
13:56 把敏感資料移除之後再試一次
13:58 這次檢查通過,提交就可以正常繼續
14:01 剛才第一個例子
14:02 我們是用 Command Handler 執行一支檢查程式
14:05 因為 E N V 檔案和 API 金鑰都有明確的判斷規則
14:08 用程式比對就夠了
14:11 接下來
14:11 我想示範一種需要質化判斷的 Hook
14:14 這個例子來自我平常做內容時很常遇到的問題
14:17 Claude 寫出來的文章
14:18 資訊可能都對
14:20 讀起來卻有一股很重的 AI 腔
14:22 所以我希望
14:23 每次 Claude 寫完一篇文章
14:24 Hook 都能再幫我檢查一次
14:26 看看裡面還有沒有 AI 味
14:28 為了建立這個 Hook
14:29 我會直接對 Claude 說請幫我建立一個 Hook
14:31 每當你寫完一篇 Blog 文章
14:33 準備結束工作時,啟動一個 Agent
14:36 這個 Agent 要讀取你剛產出的文章
14:38 呼叫用來去除 AI 寫作痕跡的 Humanizer Skill
14:41 再檢查文章裡有沒有 AI 味
14:43 如果發現問題
14:44 就把有問題的段落和原因交回給你
14:46 請你繼續修改
14:47 檢查通過之後,才能結束工作
14:50 Claude 建立完成之後
14:51 會把這個 Hook 放進目前專案的 settings json
14:54 它使用的 Event 是 Stop
14:55 所以每當 Claude 準備結束這次工作時
14:58 Hook 就會先檢查這個過程中有沒有修改 Blog 文章
15:01 這次使用的仍然是 Command Handler
15:03 它會執行一支叫做 Humanizer Gate 的檢查程式
15:06 這支程式不會自己判斷文章有沒有 AI 味
15:09 它負責找出這次修改過
15:10 而且還沒通過檢查的文章
15:12 再要求 Claude 開一個 Agent 來審查
15:14 接著我們直接試一次
15:16 當 Claude 寫完文章,準備結束工作時
15:18 你可以看到 Hook 先把它攔下來
15:20 接著 Claude 會開一個 Agent
15:22 呼叫 Humanizer 中文版 Skill
15:24 讀完文章
15:25 再把有 AI 寫作痕跡的段落和原因交回來
15:28 Claude 修改完成之後
15:29 Hook 會再檢查一次
15:31 確認通過,這次工作才會結束
15:33 如果文章後來又被修改
15:34 原本的通過紀錄也會失效
15:36 下次結束前還是要重新檢查
15:38 做完這兩個例子之後,你會發現
15:40 請 Claude 建立第一版 Hook 時
15:42 只要先說清楚什麼時候啟動和啟動後做什麼就夠了
15:46 但要讓這個 Hook 長期穩定使用
15:48 建立完成後還要再檢查兩件事
15:50 第一,觸發範圍夠不夠精確
15:53 Hook 的範圍如果設得太大
15:55 就會在很多無關的操作中被叫起
15:56 浪費時間,也會一直打斷工作
15:59 所以 Matcher 要先縮小範圍
16:00 Handler 裡面再檢查更細的條件
16:03 所以,我們剛才設定的 Git Hook
16:04 才會先用 Matcher 鎖定 Bash
16:06 再由檢查程式判斷這次執行的是不是 Git Commit
16:09 其他終端機指令雖然也會叫起檢查程式
16:12 但確認與提交無關之後
16:13 就會立刻安靜結束
16:15 第二,Stop Hook 有沒有設定結束條件
16:18 Stop Hook 每次阻止 Claude 結束
16:20 都會要求它繼續工作
16:22 等 Claude 修改完成,再次準備結束時
16:25 同一支 Hook 又會啟動
16:26 如果沒有明確的通過條件
16:28 它就可能一直退回,修改,再重新檢查
16:31 所以剛才的 Humanizer Gate 會記錄
16:34 目前這個版本的文章是否已經通過
16:36 通過之後
16:37 只要文章沒有再被修改,下一次就會直接放行
16:41 如果連續檢查三輪還是沒有通過
16:43 就停止退回,交給我人工確認
16:45 這樣才能避免整個工作卡在重複檢查裡
16:48 簡單來說,建立 Hook 時
16:50 先講清楚什麼時候啟動和啟動後做什麼
16:53 建立完成後
16:54 再確認它只會在需要的時候啟動
16:56 而且知道什麼時候該停止
16:58 這樣才適合長期放在你的工作流程裡
17:01 如果你看到這裡
17:02 知道 Hooks 可以解決什麼問題
17:04 但還不知道自己應該先裝哪一些
17:06 我把最常用的十五個情境整理成了一份
17:09 Hooks 實戰大全
17:11 裡面包含程式開發
17:12 內容創作和日常工作會用到的 Hook
17:14 每一個案例都有可以直接交給 AI 的建立 Prompt
17:17 你只要複製貼上
17:18 就能讓 AI 幫你完成設定
17:21 每個人的工作方式都不一樣
17:22 只看一份清單
17:24 你可能還是不知道哪些 Hook 最適合自己
17:26 所以我另外準備了一個 Hook 推薦 Prompt
17:29 它會分析你電腦裡過去所有的 Session
17:31 找出你經常重複提醒 AI 的事情
17:33 以及總是在固定時機執行的步驟
17:35 再根據你真實的使用習慣
17:37 推薦適合你的 Hooks
17:38 完整內容我放在 Patreon
17:40 需要的朋友可以在影片下方資訊欄找到連結
17:44 到這裡
17:44 我們已經用 Claude Code 完整做了兩個 Hook
17:46 如果你平常主要使用 Codex
17:48 前面學到的判斷方式一樣可以沿用
17:50 先說清楚什麼時候啟動
17:52 以及啟動後要做什麼
17:53 不過兩邊目前支援的 Event 和 Handler 不完全相同
17:56 所以 Claude Code 的設定不能直接複製到 Codex
17:59 用 Codex 的朋友
18:00 你只要記住兩個差異
18:02 第一個差異,是 Event 的數量
18:04 Claude Code 目前有三十一種
18:05 Codex 則有十一種
18:07 不過像剛才用到的 PreToolUse 和 Stop
18:09 兩邊都有支援
18:10 所以 E N V 檢查和 Humanizer Gate 的基本做法
18:13 都能搬到 Codex
18:14 實際建立時
18:15 你不用自己背這些 Event 的名稱
18:17 只要講清楚希望它在什麼時候啟動
18:19 Codex 就會根據目前支援的 Event
18:22 判斷這個需求能不能做到
18:24 第二個差異,是 Handler
18:26 Claude Code 支援 command,http,mcp tool
18:29 prompt 和 agent
18:30 Codex 目前真正會執行的只有 command
18:33 不過
18:33 這不代表 Codex 不能完成需要 AI 判斷的流程
18:36 像剛才的 Humanizer Gate
18:38 本身就是 Command Handler
18:39 先執行檢查程式
18:40 再要求主要的 Agent 呼叫 Skill 完成審查
18:44 所以同一個需求通常還是做得到
18:46 只是背後的串接方式會不同
18:48 最簡單的做法
18:49 就是把你想解決的問題直接告訴 Codex
18:52 請它按照目前支援的格式重新建立
18:54 不要直接複製 Claude Code 的設定
18:56 講到這裡
18:57 相信你已經對 Hooks 有一個完整的理解
18:59 它可以在固定的時機
19:01 自動替你執行檢查,通知或防呆
19:04 Event 決定什麼時候啟動
19:05 Matcher 決定哪些情況需要處理
19:07 Handler 則負責啟動之後要做什麼
19:10 實際建立時
19:11 你也不需要自己背設定或手寫程式
19:13 先找出一件你經常提醒 AI
19:15 而且每次都發生在固定時機的事情
19:18 接著把什麼時候啟動和啟動後做什麼講清楚
19:20 讓 AI 幫你建立第一版
19:22 再確認它的觸發範圍和結束條件
19:24 你可以從一個很小的問題開始
19:26 像是提交程式碼前檢查金鑰
19:28 只要這件事會重複發生
19:30 而且適合在固定時機自動處理
19:31 它就值得做成 Hook
19:33 你一個一個把這些重複提醒交給 Hook
19:35 會發現很多原本需要自己記得
19:37 反覆確認的事情
19:38 慢慢變成工作流程裡會自動發生的一部分
19:41 而你也可以把注意力留給真正需要自己判斷的事情
19:44 今天這支影片我們團隊光是研究還有撰寫腳本
19:47 就花了快要一週的時間
19:49 如果對你有所幫助
19:50 希望可以幫我留言,按讚,熱推
19:52 以及分享給你的朋友
19:53 這些就是對我最大的支持,那我們下次見