上個月有個從新竹來找我的客戶,傳了一張截圖給我。

他工程師用 Claude Code 整理客戶報價資料,AI 建議把一份含有客戶報價的 CSV 丟去外部測試 API。工程師沒多想,準備照做。老闆盯著操作記錄看,整個人都緊了。他傳訊問我:「這種事,有沒有辦法從根本上卡住?」

有。答案叫 hooks。

hooks 是什麼

Claude Code 的 hooks,是讓你在 AI 執行任何動作之前或之後,插入一段自己設定的腳本。你可以把它想成是在 Claude 跟你的系統之間設置的崗哨。

目前有四個觸發時機: PreToolUse,AI 準備呼叫工具之前。 PostToolUse,工具執行完畢之後。 Notification,Claude 送出某些通知時。 Stop,Claude 完成任務停下來的時候。

每個 hook 都是一段 shell 指令或 Python 腳本,設定在專案的 .claude/settings.json 裡面。AI 要做任何動作,都得先通過你設定的這道關卡。不是靠 AI 的記性,是程式層面的強制執行。

跟在 CLAUDE.md 裡寫規則不一樣。CLAUDE.md 是給 AI 看的指示,AI 可能遵守,也可能在某個情況下忽略。Hooks 是你寫的程式在跑,AI 繞不過去。

對公司流程能做哪些檢查

我幫那個新竹客戶設了兩個 hook。

第一個是 PreToolUse:在 AI 準備執行 Bash 指令之前,先跑一段 Python 腳本偵測指令裡有沒有出現客戶資料夾路徑或敏感關鍵字。出現就中斷,並把完整指令記進 log 檔。Python 三十行不到,花了我大概四十分鐘。

第二個是 PostToolUse:每次 Claude 修改或建立檔案後,自動把檔名、時間、操作者記進一份 CSV。這個用 shell 腳本解決,十五行。

後來他們自己又加了一個,針對合規需求:所有 Claude 讀取過的資料夾路徑都要記錄。法務要求的,現在每週自動產出一份稽核記錄。

台中還有個做裝潢設計的公司。工程師習慣晚上十一點繼續工作,有次 AI 準備直接蓋掉正式環境的設定檔。他們後來在 Stop hook 裡加了一段:任務結束後,如果有任何尚未版本控制的修改,自動跑 git diff 輸出摘要,寄到主管的 Slack 頻道。隔天早上主管掃一眼就知道昨晚發生了什麼。

hooks 能做的事大致有這幾類:操作記錄(把 AI 做了什麼寫進 log)、敏感資料防護(偵測操作路徑,必要時中斷)、自動通知(發 Slack 或 email)、流程合規(備份、格式驗證、稽核)、環境保護(防止 AI 動到不該動的地方)。

不需要每個都設,選最在乎的那一兩個先做就夠了。

觀卦說的那件事

我在教這些東西的時候,有時候會用易經的觀卦解釋 hooks 的邏輯。

觀卦的核心是「觀我生,進退」:在行動之前,先清楚看見自己和周圍的狀況。不是消極等待,是主動設置觀察點,讓你在真正需要介入的時候,你已經看到了、準備好了。

Hooks 做的事跟這個很像。大多數時候,hook 跑完什麼事都沒發生,默默放行。但當那個真的需要被攔下來的動作出現時,你有崗哨,你看得到,你能介入。

很多人問我企業 AI 導入最大的風險是什麼,我的答案一直是:不是 AI 做了什麼壞事,是你不知道它做了什麼。Hooks 解決的,就是這個問題。

怎麼設定

設定在專案的 .claude/settings.json 裡,加上 hooks 物件,指定觸發時機和要攔截的工具名稱,以及要執行的腳本路徑。你的腳本從標準輸入接收 JSON 格式的動作描述(包含工具名稱和輸入參數),然後決定要不要讓這次操作繼續。要中斷,回傳非零 exit code 就行了。

不需要複雜的程式。我幫客戶設的大多數 hook,都是十行到三十行 Python 或 shell,做一件很具體的事。

那個新竹客戶後來告訴我,hooks 設好之後,才第一次覺得可以放心讓工程師用 Claude Code 做比較敏感的工作。不是 AI 變安全了,是他現在看得到 AI 在做什麼了。

這個差距,比你想的大。