另一個實用 Hook

還有一個非常有用的 Hook:記錄工具輸入日誌 (Logger)

當你開發複雜的 Agent 或自定義工具時,你經常想知道 Claude 到底傳了什麼參數進去。 雖然終端會顯示,但有時候你需要結構化的日誌。

日誌 Hook 實現

我們可以利用 jq 工具把 Hook 的輸入轉存到檔案中。 Claude Code 傳遞給 Hook 的數據是在環境變數或標準輸入中(取決於具體實現細節,通常作為 stdin 傳給 command)。

注意: Claude Code 目前向 Hook 傳遞數據的方式通常是將 JSON 寫入 stdin。

{
  "type": "tool_use",
  "name": "Edit",
  "input": { ... },
  "hook_event_name": "Stop",
  "stop_hook_active": false
}

可以看到,不同 Hook 的輸入差異非常大,這使得編寫 Hook 變得困難——你不一定知道該解析哪些字段。

建議做一個輔助 Hook 來記錄輸入:

"PostToolUse": [ // Or "PreToolUse" or "Stop", etc
  {
    "matcher": "*",
    "hooks": [
      {
        "type": "command",
        "command": "jq . > post-log.json"
      }
    ]
  },
]

該命令會把 Hook 輸入寫入 post-log.json,方便你觀察真實結構,從而更容易編寫穩定的 Hook。