Claude Code Hooks 教學:AI 會忘,鉤子不會
先講重點
短答給趕時間的人:hook(掛鉤)是在 Claude Code 的固定時機自動執行你指定動作的機制 — 開場自動載入進度、改完檔案自動跑檢查、收工自動記錄。跟寫在 CLAUDE.md 的規則差在強制力:規則是「拜託 AI 記得做」(它可能忘),hook 是「系統到點就執行」(不經過 AI 的記性)。設定寫在 settings.json,第一個 hook 可以叫 AI 幫你設,10 分鐘搞定。
會想用 hook 通常是被同一件事煩到:我的情況是「AI 改完程式常忘記跑檢查」— 在 CLAUDE.md 寫了「改完要檢查」,它 8 成會做,但就是有那 2 成忘記,而炸掉的都在那 2 成裡。後來把檢查做成 hook:只要它改了 Python 檔,檢查自動跑、有問題當場擋下來 — 從此不靠它的記性。這篇講 hook 是什麼、什麼該用 hook、第一個怎麼設。
Hook 是什麼?跟「寫規則」的本質差別
CLAUDE.md、skill 都是「用文字影響 AI 的行為」— 它讀了、理解了、大部分時候照做,但本質是「拜託」,忙起來會漏。hook 不走這條路:它是設定在系統層的自動開關,到了指定時機(例如「AI 剛改完一個檔案」),系統直接執行你指定的指令 — AI 記不記得無所謂,反正一定會跑。
判斷該用哪個,一句話:「希望它做」寫規則,「必須每次都做」設 hook。格式檢查、安全掃描、進度記錄這種「漏一次就可能出事」的,都是 hook 的守備範圍。
規則是家教(通常有效),hook 是門禁(刷卡才能過)。重要的事交給門禁。
5 個時機點,配我實際在用的例子
hook 可以掛在這些時機(名稱以官方文件為準,2026-07):
| 時機 | 白話 | 我的真實用法 |
|---|---|---|
| SessionStart | 每次開場 | 自動載入專案斷點檔 — 新對話不失憶的核心 |
| UserPromptSubmit | 你每送出一句話 | 自動附上現在時間 — AI 從此知道今天幾號 |
| PreToolUse | AI 要動手之前 | 擋高風險動作 (碰到特定資料夾就攔下) |
| PostToolUse | AI 改完檔案之後 | 自動跑程式檢查 — 寫壞當場擋回去 |
| Stop | AI 回合結束時 | 檢查該更新的紀錄檔有沒有更新 |
表裡每一條都是我電腦上真的在跑的 hook。最有感的兩個:SessionStart 載斷點(跨對話接關不靠自己記得,就是 checkpoint 那篇的自動化版)跟 PostToolUse 跑檢查(AI 寫的 Python 有問題,存檔當下就被檢查工具擋下來要求修正,不會等到執行才炸)。
第一個 hook 動手做:改完 Python 自動檢查
hook 設定放在 settings.json(個人層級或專案 .claude/ 都可以)。概念長這樣 — PostToolUse 時機、對到編輯動作、跑檢查指令:
{
"hooks": {
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{ "type": "command", "command": "你的檢查指令" }]
}]
}
}
非工程師的實話:這段 JSON 不用自己手寫。打開 Claude Code 直接說:「幫我設一個 hook,每次你改完 .py 檔就自動跑 ruff 檢查,設定寫到我的 settings.json」— 讓它自己給自己上規矩,它對這套設定格式比誰都熟。設完驗收:叫它隨便改一個 Python 檔,看檢查有沒有自動跑。
兩個安全提醒:(1) hook 執行的是真實指令,叫 AI 設的時候看一眼它寫進去的 command 是什麼,別放你看不懂的東西 (2) hook 自己壞掉會很吵 — 每次觸發都報錯、AI 做什麼都被打斷。感覺不對就先把那段設定拿掉,修好再放回來。
什麼事值得做成 hook?(先從一個開始)
別一口氣設一堆。從「你被煩最多次的那件事」開始:AI 常忘記跑檢查 → PostToolUse;每個新對話都要重新交代進度 → SessionStart 載斷點;怕它碰到不該碰的資料夾 → PreToolUse 攔截。一個 hook 穩定跑順了,再加下一個。
我的順序參考:第一個設的是 PostToolUse 檢查(最痛),第二個是 SessionStart 載斷點(配合斷點檔,完整做法在 checkpoint 系統那篇),之後才慢慢長出其他的。hooks + skills + MCP 三件套齊了之後,Claude Code 就從「很會做事的助理」變成「有你的 SOP、你的門禁、你的工具箱的分身」— 這也是這系列三篇想帶你走到的地方。
Hook 是在 Claude Code 固定時機自動執行指定動作的機制,跟 CLAUDE.md 規則的本質差別是強制力:規則靠 AI 記得(會漏),hook 由系統到點執行(必跑)。「希望它做」寫規則、「必須每次做」設 hook。5 個時機:SessionStart(開場載進度)、UserPromptSubmit(送話時附時間)、PreToolUse(動手前攔截)、PostToolUse(改完自動檢查)、Stop(收工檢查紀錄) — 每個我都有真實在用的例子。設定在 settings.json,第一個 hook 直接叫 AI 幫你設(「改完 .py 自動跑檢查」),10 分鐘搞定。原則:從最痛的一件開始,跑穩再加。
名詞解釋
- hook(掛鉤)
- 在工具的固定時機(開始對話、寫完檔案、結束回合)自動執行你指定動作的機制。像是幫 AI 設「進門要換鞋」的家規,設一次每次都自動生效。
- JSON
- 程式之間交換資料的通用格式,長得像一層層的「名稱:內容」清單,人眼也讀得懂。
- 命令列(CLI, Command Line Interface)
- 用打字指令操作電腦的方式,沒有按鈕跟視窗。Claude Code 就是命令列工具。
- 排程(cron)
- 讓程式「每天 8 點」「每小時」自動執行的定時器。自動發文、定期抓資料都靠它。
- Python
- 入門門檻最低的主流程式語言之一,資料處理、自動化、AI 領域的首選。
相關文章
▸ 常見問題
Claude Code 的 hook 是什麼?
在固定時機自動執行你指定動作的機制:開場自動載入進度、AI 改完檔案自動跑檢查、收工自動記錄。設定寫在 settings.json。跟寫規則的差別在強制力 — CLAUDE.md 的規則靠 AI 記得(忙起來會漏),hook 由系統到點執行,不經過 AI 的記性,漏一次就出事的檢查都該用 hook。
Hook 跟 CLAUDE.md 的規則差在哪?
「拜託」跟「強制」的差別。CLAUDE.md 寫「改完檔案要跑檢查」,AI 讀了、大部分照做,但有 2 成機率忘記 — 炸掉的都在那 2 成。hook 設「PostToolUse 時自動跑檢查指令」,是系統層的門禁:AI 改完檔案,檢查一定執行。判斷口訣:希望它做 → 寫規則;必須每次都做 → 設 hook。
不會寫程式能設定 hooks 嗎?
能,用最偷懶也最實際的方法:叫 Claude Code 幫自己設。直接說「幫我設一個 hook:每次你改完 .py 檔自動跑 ruff 檢查,寫進 settings.json」,它對自己的設定格式最熟。你要做的是(1) 看一眼它寫的 command 內容合不合理 (2) 驗收:叫它改個檔案,看檢查有沒有自動跑。JSON 看不懂沒關係,會驗收就好。
Hook 有哪些觸發時機?
常用 5 個:SessionStart(每次開場 — 適合自動載入專案進度)、UserPromptSubmit(你每送出訊息 — 適合附加即時資訊如時間)、PreToolUse(AI 動手前 — 適合攔截高風險動作)、PostToolUse(AI 改完檔案後 — 適合自動檢查/格式化)、Stop(回合結束 — 適合檢查紀錄有沒有更新)。完整清單以官方文件為準。從你最痛的一個時機開始設,穩了再加。
Hooks、Skills、MCP 該先學哪個?
順序:先把基本操作跟 CLAUDE.md 用熟(零門檻) → 碰到「AI 摸不到外部服務」再接 MCP → 發現同一套做法每次都要重教,寫成 skill → 發現有些檢查「靠它記得」會漏,設 hook 強制。三件套各管一塊:MCP 給工具、skill 給知識、hook 給紀律 — 都到位後,你的 Claude Code 就是照你規矩做事的分身。
看完這篇之前先確認:
- 有些檢查希望「每次都自動做」而不是靠 AI 記得
- 想在 AI 改完檔案後自動跑檢查 / 格式化
- 想搞懂 hooks 跟 CLAUDE.md 寫規則差在哪
- 還不熟 Claude Code 基本操作 (hooks 是進階題)
- 完全不想碰設定檔 (hooks 要編輯 JSON)
- 想控制 AI 的回答內容 (hooks 管流程不管內容)
- 把該用 hook 的事寫進 CLAUDE.md — 寫規則是「拜託」,hook 是「強制」
- hook 指令自己有 bug — 每次觸發都炸,AI 做什麼都被打斷
- 一開始就設一堆 — 先從一個最痛的檢查開始