Claude Code 改完說「好了」,你一打開遊戲卻是一片空白?可能是少了一個括號,或改到不該改的地方。這篇設一個 hook:它每改完一次 index.html,Claude Code 就自動跑一次檢查,有錯就擋下來,把錯誤丟回給它當場修好。你不用記得叫它檢查,它也沒辦法忘記。
快速回答 hook 是寫在
.claude/settings.json的指令,Claude Code 在固定時機一定會執行它。最簡單的做法是用一句話請 Claude Code 幫你寫:「每次你改完 index.html,就自動檢查語法,有錯就擋下來」。它會設一個PostToolUsehook(改完檔案之後執行);檢查失敗時,錯誤訊息回到 Claude 手上,它接著修。這時檔案已經改了,hook 不會自動還原。檢查需要 Node.js,用/hooks確認有設好。2026-10-21 用 Claude Code 2.1.305 實測,故意少一個括號,hook 立刻擋下,Claude 馬上補回。
做完這篇,你會有
- 一個 hook:每次改完
index.html,自動檢查 JavaScript 有沒有語法錯誤 - 做過上一篇的話:同一個 hook 再跑一次
node test.js,測試沒過也擋下 - 親眼看過 hook 擋下錯誤、Claude 自己修好
開始之前要準備:
- 前幾篇的
snake-game資料夾 - Node.js:在終端機輸入
node -v有版本號就好,檢查和測試都靠它
hook 的三個設定
- 什麼時候執行
PostToolUse:改完檔案之後
- 哪些工具會觸發
Edit|Write|MultiEdit:Claude Code 改檔用的三個工具
- 要跑什麼
- 只檢查
index.html的語法,改別的檔案就跳過;有錯就以代碼 2 結束
hook 以代碼 2 結束,代表「擋下」:錯誤訊息會送回給 Claude,它就知道剛剛改壞了。
步驟 1:一句話請它寫 hook
在遊戲資料夾啟動 Claude Code,輸入:
幫我加一個 hook:每次你改完 index.html,就自動檢查裡面的 JavaScript 有沒有語法錯誤;有錯就擋下來告訴你,讓你馬上修好。設定寫在專案的 .claude/settings.json
它把 hook 加進原本的 settings.json,第 7 篇設的權限規則都還在。下面只是設定的結構,command 裡的實際程式用「……」省略了,不能直接貼上使用:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "node -e '……檢查 index.html 的語法,有錯就 exit 2……'",
"timeout": 30
}
]
}
]
}
}
command 那一行實際上是一長串 Node.js 程式,由 Claude Code 寫好,不用自己看懂。
步驟 2:用 /hooks 確認
輸入 /hooks:
這個選單只能看,不能改。要改 hook,直接跟 Claude Code 說,或改 settings.json。按 Esc 關掉。
步驟 3:故意改壞,看它擋下
輸入:
測試一下 hook:故意在 index.html 的 JavaScript 裡刪掉一個右大括號
看到 hook returned blocking error 就是 hook 擋下了。這時檔案已經改了,hook 沒辦法退回,但錯誤會送到 Claude 手上,它就會自己修。
步驟 4:把測試也加進去
做過上一篇,資料夾裡有 test.js,就再加一句:
把 node test.js 也加進這個 hook:語法檢查過了之後再跑測試,有測試沒過一樣擋下來。
這次故意改壞遊戲規則,語法完全正確:
再測一次:故意把撞牆的判斷拿掉,看 hook 會不會擋下來
語法檢查抓得到少括號,抓不到「蛇撞牆不會死」;測試抓得到。兩個一起用,改壞的機會就少很多。
換你做
想一個你希望「每次都要發生」的事,請 Claude Code 寫成 hook。例如:
- 「每次你改完 style.css,就檢查括號有沒有成對」
- 「每次你停下來等我回覆,就發一個桌面通知」
說清楚三件事:什麼時候、對哪些檔案或動作、要做什麼。
常見卡關
/hooks裡看不到我的 hook:先確認檔案在專案的.claude/settings.json,而且 JSON 格式正確(不能有多餘的逗號)。改完通常會自動生效;等幾秒還是沒有,就輸入/exit重開。- 出現
hook error,可是沒有擋下來:指令本身出錯了,例如找不到node。只有以代碼 2 結束才會擋下。先在終端機輸入node -v確認裝好了。 - 它改的明明沒錯,hook 卻一直擋:把擋下的訊息貼給 Claude Code,請它檢查 hook 的指令。
- 測試沒有跑:這個 hook 只在改
index.html時觸發,只改test.js不會跑。
你做到了
- 用一句話請 Claude Code 寫好 hook,用
/hooks確認 - 看到 hook 擋下少一個括號的錯誤,Claude 自己補回
- 把測試加進 hook,連「規則被改壞」也擋得下來
常見問題
hook 和 CLAUDE.md 有什麼不同?
CLAUDE.md 是寫給 Claude 看的規則,它通常會照做,但可能忘記。hook 是 Claude Code 在固定時機一定會執行的指令,不靠它記得。
可以讓所有專案都用同一個 hook 嗎?
可以,寫在 ~/.claude/settings.json。寫在專案的 .claude/settings.json 只對這個專案有效,可以跟著專案分享給別人。
想暫時關掉所有 hook?
在 settings.json 加一行 "disableAllHooks": true,要用時再刪掉。
hook 會拖慢它嗎?
每次改完 index.html 會多跑一次檢查。實測的語法檢查和 8 項測試很快就跑完。hook 預設最多可以跑 10 分鐘;實測時 Claude Code 自己設了 30 秒的上限,加進測試後改成 60 秒。
下一步
- Claude Code /goal 教學:設好完成條件,讓它自己做到完:
test.js是在這篇寫的。 - Claude Code 權限設定懶人包:該自動的自動、該問的一定問:hook 和權限規則寫在同一個
settings.json。
參考資料
- Anthropic, Automate actions with hooks(Claude Code 文件,設定位置、
PostToolUse與 matcher、代碼 2 擋下並回饋、/hooks、自動生效、disableAllHooks、逾時) https://code.claude.com/docs/en/hooks-guide - Anthropic, Hooks reference(Claude Code 文件,各事件的欄位與代碼) https://code.claude.com/docs/en/hooks
留言0
登入後就能留言。
登入