イベント概要
| イベント | トリガー | 制御可能な動作 |
|---|---|---|
PreToolUse | ツール呼び出し前 | インターセプト / 許可 / 入力の変更 |
PostToolUse | ツール成功後 | 監査 / コンテキスト注入 / 出力の上書き |
PostToolUseFailure | ツール失敗後 | エラーハンドリング / ロギング |
UserPromptSubmit | ユーザープロンプト送信前 | コンテキスト注入 / インターセプト |
SessionStart | セッション開始時 | 初期化 / コンテキスト注入 |
SessionEnd | セッション終了時 | クリーンアップ / ロギング |
Stop | AI が生成を停止した時 | 停止の防止、続行の強制 |
SubagentStart | サブエージェント開始時 | 監視 / ロギング |
SubagentStop | サブエージェント停止時 | 監視 / ロギング |
PreCompact | コンテキスト圧縮前 | 監視 / ロギング |
PostCompact | コンテキスト圧縮後 | 監視 / ロギング |
CwdChanged | 作業ディレクトリ変更時 | 監視 / ロギング |
InstructionsLoaded | 命令ファイルロード時 | 監視 / ロギング |
FileChanged | ファイルの作成/変更/削除時 | 監視 / ロギング |
PermissionRequest | パーミッション要求時 | パーミッション要求を自動承認 / 拒否 |
設定
QueryOptions.hooks で hooks を設定します:
Matcher
matcher フィールドは正規表現パターンです。ツール名がマッチした場合のみ hook が実行されます:
コールバック関数
各 hook コールバックはイベント入力、ツール使用 ID、abort signal を受け取ります:入力
すべてのイベントは共通フィールドを共有します:hook_event_name(イベントタイプ)、session_id(セッション ID)、transcript_path(記録ファイルパス)、cwd(作業ディレクトリ)。各イベントにはさらに固有のフィールドがあります(例:PreToolUse の tool_name と tool_input)。
完全な入力型定義は Hooks リファレンス を参照してください。
出力
コールバックは以下のフィールドで動作を制御するオブジェクトを返します:continue: false— セッションを終了decision: "block"+reason— ツール実行を阻止、または AI の停止を防止hookSpecificOutput— イベント固有の出力。ツール入力の変更(updatedInput)、ツール出力の上書き(updatedToolOutput)、コンテキスト注入(additionalContext)など
サンプル
セキュリティインターセプト(PreToolUse)
危険なシェルコマンドをブロック:機密情報のマスキング(PostToolUse)
ツール出力を上書きし、AK/Token などの機密情報を置換:長い出力のトリミング(PostToolUse)
長すぎる Bash 出力を先頭と末尾を残して切り詰め:強制続行(Stop)
タスクが未完了の場合、AI の停止を防止:パーミッションの自動承認(PermissionRequest)
Read ツールのパーミッション要求を自動承認:完全なパーミッションモデルはパーミッションを参照してください。
監査とセキュリティ制御(総合)
監査ログとセキュリティインターセプトの組み合わせ:注意事項
- Hook コールバックは AI の実行をブロックしないよう、迅速に返すべきです。
matcherは JavaScript 正規表現構文を使用し、tool_nameフィールドにマッチします。continue: falseはセッションを終了します——PreToolUse、PostToolUse、PostToolUseFailure、UserPromptSubmit、Stop、SubagentStopイベントでのみ有効です。観察系イベント(SessionEnd、CwdChangedなど)はこのフィールドを無視します。- 複数の hook が競合する
decision値を返した場合、"deny"/"block"が優先されます(最も厳格なルールが適用)。 - 複数の hook が
updatedToolOutputを設定した場合、最後の非空値が有効になります。チェーン変換(例:マスキング後にトリミング)が必要な場合は、単一のコールバック内で順次実行してください。