AI 程式開發與代理

[Claude Code #11] Hooks:別求它,改用裝置自動化

Claude Code Hooks 會在工具呼叫前後、回合結束等時機自動執行 Shell 命令。本文整理 settings.json 設定方式、事件與 matcher、自動格式化、阻擋受保護檔案,以及 prompt Hook。

閱讀 4 分鐘
[Claude Code #11] Hooks:別求它,改用裝置自動化 封面圖

即使在 CLAUDE.md 寫著「編輯後一定要執行格式化工具」,AI 也可能有忘記的時候。畢竟指示終究只是請求。

凡是必須發生的事,都應該做成裝置,而不是請求。在 Claude Code 中,這個裝置就是 Hook。

Hook 是由使用者定義的 Shell 命令。它會在 Claude Code 運作的特定時機自動執行,不論模型選了什麼,都能以決定性的方式介入。

如果說到 Claude Code 第 10 集為止的命令需要手動設定,Hook 就是會自行啟動的自動裝置。

5 分鐘建立第一個 Hook

Hook 要寫在 settings.json 的 hooks 區塊中。以下看看 Claude 等待輸入時顯示 macOS 通知的範例。

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"需要輸入\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

儲存後輸入 /hooks,就會看到已註冊的 Hook 清單。這個畫面是唯讀的;要修改時,直接編輯 settings.json,或請 Claude 代為處理即可。

可以在哪些時機介入?

依據 官方 Hook 指南,常用事件如下。

  • SessionStart:工作階段開始或恢復時
  • UserPromptSubmit:送出提示後、Claude 處理前
  • PreToolUse:工具呼叫前;可以阻擋呼叫
  • PostToolUse:工具呼叫成功後
  • Stop:Claude 的回合結束時
  • Notification:Claude 等待輸入時

使用 matcher 縮小目標範圍。寫成 "matcher": "Edit|Write" 時,只有使用檔案編輯工具才會觸發 Hook。

Claude Code 六種 Hook 事件觸發時機圖
可以在工作階段的各個重要時刻設定 Hook

三種代表性用法

編輯後自動格式化。在 PostToolUse 上設定 Edit|Write matcher 並執行 prettier。無論 AI 修改哪個檔案,都會強制格式化。

阻擋受保護檔案。PreToolUse Hook 會檢查特定路徑,以結束碼 2 結束時就會阻擋該編輯。不能使用任意失敗碼,必須是 2。不同於 CLAUDE.md 的指示,即使模型忘記,也無法繞過。

完成時通知。就像前面的 Notification 範例,不必一直盯著終端機。

需要判斷時使用 prompt Hook

有些條件很難用 Shell Script 判斷,例如「要求的工作是否全部完成?」

這時使用 type: "prompt" Hook。不要寫 Shell 命令,而是寫下判斷標準,基本的 Haiku 模型就會以 yes/no 判定。

在 Stop 事件上設定 prompt Hook,就會變成「還沒完成就繼續工作」。其實 第 6 集介紹的 /goal正是這種結構的工作階段專用包裝器。

Hook 會直接執行 Shell

能力越強,風險也越高。因為這種架構會以我的權限自動執行任意 Shell 命令。

專案 settings.json 中的 Hook 會要求確認是否信任該儲存庫。開啟他人的儲存庫時,別輕率略過這項確認。

在 Hook 命令中,變數要用引號包住;未經驗證不要執行外部輸入,這些基本原則也必須遵守。

PROMISE vs MACHINE 字樣,以及便利貼請求與自動蓋章機器的對比插圖
便利貼是請求,機器則是強制執行

總結

Hook 是把「必須發生的事」從模型的記憶力中抽離,交給系統處理的裝置。

先從強制格式化、阻擋受保護檔案、完成通知開始吧。需要判斷的條件則可擴充為 prompt Hook。

下一集將介紹按固定間隔重複執行提示的 /loop。如果 Hook 是事件自動化,/loop就是時間自動化。

來源與確認標準

延伸閱讀

Claude Code 系列

相關主題