tool_name に一致する正規表現) を利用します。
以下のイベント固有フィールドに加えて、すべての stdin ペイロードには、セッションごとに固定の session_id と、ターンごとの prompt_id が含まれます (prompt_id は各ユーザープロンプトごとに更新され、最初のユーザープロンプトより前に発生するイベント (例: SessionStart) には含まれません) — Command Hooks を参照してください。
PreToolUse
ツールが実行される前に発生します。これを利用して、ツール呼び出しをブロックしたり、変更したり、前提情報を追加したりできます。 標準入力データ:
例 — 破壊的なコマンドをブロックする:
hookSpecificOutput.updatedInput を出力することで、ツールへの入力を透過的に書き換えることができます (出力形式を参照) 。たとえば、シェルコマンドをラッパー経由で実行するフックスクリプトは次のとおりです。
PostToolUse
ツールの実行完了後に実行されます。ログの記録、検証、または後続アクションのトリガーに利用します。 標準入力データ:
例 — すべてのシェルコマンドをログに記録する:
PermissionRequest
エージェントが許可するかどうかの判断を必要とするときに発生します。これを利用して、カスタムの承認ロジックを実装できます。 標準入力データ:
例 — git コマンドを自動承認する:
UserPromptSubmit
ユーザーがメッセージを送信したときに発生します。これを利用して、前提情報を追加したり、ワークフローをトリガーしたりできます。 標準入力データ:
例 — すべてのプロンプトに前提情報を挿入する:
hookSpecificOutput オブジェクト内に additionalContext を標準出力へ出力します。そのテキストはエージェントの前提情報に取り込まれます:
Stop
エージェントが停止する (ターンを終了する) と発生します。追加の指示を与えたり、早すぎる停止を防いだりするために利用します。 標準入力データ:
例 — エージェントにテストを実行するよう促す:
PostCompaction
前提情報の圧縮が正常に完了した後に発火します。ログの記録、後続アクションのトリガー、または圧縮中に失われた可能性のある前提情報の再注入に利用します。 標準入力データ:
例 — 圧縮イベントをログに記録する:
SessionStart
新しいセッションが開始されると発生します。初期化、ログ記録、または開発環境のセットアップに利用します。 標準入力データ:
例 — セットアップスクリプトを実行:
hookSpecificOutput オブジェクト内に additionalContext を出力して、前提情報を渡すこともできます。
SessionEnd
セッションが終了したときに発生します。クリーンアップや最終ログの記録に利用します。 標準入力データ:複数のイベントへのマッチング
1 つのhooksファイルで、複数のイベント用のフックを定義できます。Matcher の利用
matcher フィールドは、フックイベントの tool_name に対してマッチする regex です。利用できるのは、ツール関連のイベント PreToolUse、PostToolUse、PermissionRequest です。
ツール関連以外のイベント (UserPromptSubmit、Stop、PostCompaction、SessionStart、SessionEnd) には tool_name がないため、その種類のすべてのイベントでフックを実行するには、"" を利用するか、matcher を省略します。
matcher は permission glob ではありません。
mcp__github__* のようなパターンは permissions では有用ですが、フックの matcher は regex です。フックの matcher では mcp__github__.* を利用してください。一致対象にできるツール名
フックのマッチャーは、フックスクリプトが stdin のtool_name として受け取るものと同じ、外部から見えるツール名に対して評価されます。利用可能な正確なツール名は、CLI モード、モデル、有効になっている統合によって異なる場合があります。
カテゴリ別のコアツール名は次のとおりです。
MCP server のツールは、
mcp__<server>__<tool> の形式で表示されます。たとえば、github という MCP server の create_issue という名前のツールは、mcp__github__create_issue として表示されます。
その他のツールについては、フックの stdin に表示される tool_name に正確に一致させてください。現在のセッションで利用可能な完全な一覧を確認するには、matcher: "" を指定した一時的な PostToolUse フックを追加し、stdin のペイロードをログに記録してください。
