Hooks 常見坑點

Hooks 非常強大,但也容易出錯。以下是一些常見的“坑”:

1. 無限循環

如果你在 PostToolUse 裡執行了一個命令,而這個命令又觸發了 Claude 的某種反應(雖然 Hook 執行的命令 通常不視為 AI 操作,但如果 Hook 腳本調用了 Claude API 則另當別論),要小心循環調用。 更常見的是邏輯死循環:Lint Hook 修改了代碼 -> 觸發 Edit -> 再次觸發 Lint Hook。 解決方案:確保 Hook 中的命令(如 Lint)不會再次觸發監視機制,或使用無副作用的命令。

2. 超時與性能

Hooks 是同步執行的。Claude 會等待 Hook 結束才繼續下一步。如果你掛了一個跑 5 分鐘的測試套件, 你的交互體驗會變得非常卡頓。 解決方案:只運行快速的單元測試,與完整的集成測試分離。

3. 輸出干擾

Hook 的標準輸出(stdout)和標準錯誤(stderr)會被注入到 Claude 的上下文中。 如果輸出太多垃圾資訊,會佔用 Token 上限並干擾 Claude 的判斷。 解決方案:讓 Hook 腳本保持安靜 (silent),只在出錯時輸出關鍵資訊。

4. 輸入結構變化

Hook 接收的輸入數據結構(JSON)可能會隨 Claude Code 版本更新而變化。

{
  "tool_use_id": "toolu_01...",
  "tool_name": "Edit",
  "tool_input": { ... },
  "tool_result": { ... }
}

編寫解析腳本時要做好容錯處理。