跳至主要內容

    Claude Code Hooks 教學:每次改完自動檢查,改壞了當場擋下

    用一句話請 Claude Code 寫好 hook:每次改完 index.html,自動檢查 JavaScript 語法、再跑測試,有錯就把錯誤丟回給它當場修。4 個步驟,附 Claude Code 2.1.305 實測:少一個括號、拿掉撞牆判斷,都被當場擋下。

    sunny 桑尼· · 9 MIN READ · 159 次瀏覽

    Claude Code Hooks 教學:每次改完自動檢查,改壞了當場擋下
    本文目錄

    Claude Code 改完說「好了」,你一打開遊戲卻是一片空白?可能是少了一個括號,或改到不該改的地方。這篇設一個 hook:它每改完一次 index.html,Claude Code 就自動跑一次檢查,有錯就擋下來,把錯誤丟回給它當場修好。你不用記得叫它檢查,它也沒辦法忘記。

    快速回答 hook 是寫在 .claude/settings.json 的指令,Claude Code 在固定時機一定會執行它。最簡單的做法是用一句話請 Claude Code 幫你寫:「每次你改完 index.html,就自動檢查語法,有錯就擋下來」。它會設一個 PostToolUse hook(改完檔案之後執行);檢查失敗時,錯誤訊息回到 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
    
    實際畫面(Claude Code 2.1.305,2026-10-21):41 秒寫好,還自己測了沒錯、有錯、改別的檔三種情況。

    它把 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:

    實際畫面(2026-10-21):PostToolUse 底下多了一個專案 hook。

    這個選單只能看,不能改。要改 hook,直接跟 Claude Code 說,或改 settings.json。按 Esc 關掉。

    步驟 3:故意改壞,看它擋下

    輸入:

    測試一下 hook:故意在 index.html 的 JavaScript 裡刪掉一個右大括號
    
    實際畫面(2026-10-21):刪掉一個 },hook 立刻擋下,它把括號補回,index.html 和原本完全一樣。

    看到 hook returned blocking error 就是 hook 擋下了。這時檔案已經改了,hook 沒辦法退回,但錯誤會送到 Claude 手上,它就會自己修。

    步驟 4:把測試也加進去

    做過上一篇,資料夾裡有 test.js,就再加一句:

    把 node test.js 也加進這個 hook:語法檢查過了之後再跑測試,有測試沒過一樣擋下來。
    
    實際畫面(2026-10-21):同一個 hook,先查語法、再跑測試。

    這次故意改壞遊戲規則,語法完全正確:

    再測一次:故意把撞牆的判斷拿掉,看 hook 會不會擋下來
    
    實際畫面(2026-10-21):語法沒錯,但 2 項測試沒過,一樣擋下,它馬上改回。

    語法檢查抓得到少括號,抓不到「蛇撞牆不會死」;測試抓得到。兩個一起用,改壞的機會就少很多。

    換你做

    想一個你希望「每次都要發生」的事,請 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 秒。

    下一步

    參考資料

    留言0

    登入後就能留言。

    登入