設定
フックは2つのレベルのJSONファイルで設定します:
両方のファイルは加算的にマージされます。同一のハンドラー(同じイベント、マッチャー、コマンド)は重複排除されます。
設定フォーマット
hooks ラッパーはオプションです。イベントキーをルートに直接配置することもできます。
各イベントキーはルールオブジェクトの配列にマッピングされます。ルールには以下が含まれます:
matcher— マッチするツールまたはトリガー(マッチャーを参照)hooks— ハンドラーオブジェクトの配列。各ハンドラーには以下を含みます:type— 常に"command"command— 実行するシェルコマンドtimeout— ハンドラーごとのタイムアウト秒数(デフォルト60)
マッチャー
マッチャーは Claude Code のセマンティクスに従います:イベント
実行プロトコル
マッチした各ハンドラーはシェル経由で実行され、cwd はプロジェクトパスに設定されます。stdin にJSONペイロードが渡されます:
session_id— 現在のセッションIDcwd— プロジェクトパスhook_event_name— イベント名
tool_name、tool_input、tool_response、prompt、trigger、agent_type、goal など)が含まれます。
以下の環境変数が設定されます:
終了コード
タイムアウトも非ブロッキングエラーとして扱われます。
決定出力
終了コード0 の場合、stdoutにJSONオブジェクトを含めることができます:
- ツール呼び出しをブロック(PreToolUse):
{"decision": "block", "reason": "..."} - 理由付きで拒否(PreToolUse):
{"hookSpecificOutput": {"permissionDecision": "deny", "permissionDecisionReason": "..."}} - フィードバックを追加(PostToolUse):
{"additionalContext": "..."}
適用範囲
フックはすべてのエージェントコンテキストに適用されます:- メインエージェントのツール呼び出し
- サブエージェントのツール呼び出し(ペイロードに
agent_typeを含む) - GUIツールの呼び出し
- ACPツールの呼び出し
UserPromptSubmit はユーザーが入力したプロンプトのみをゲートします。ゴール継続や内部セッションメッセージはインターセプトされません。
フックエンジンのエラーはエージェントループに伝播しません。
プラグインもフックを提供できます。これらはインストール時に明示的に承認され、グローバルおよびプロジェクトのフックと統合されます。