メインコンテンツへスキップ
各フックイベントは、エージェントのライフサイクル内の特定の時点で発火します。どのツール呼び出しでフックがトリガーされるかを絞り込むには、matcher フィールド (フックイベントの tool_name に一致する正規表現) を利用します。

PreToolUse

ツールが実行されるに発生します。これを利用して、ツール呼び出しをブロックしたり、変更したり、前提情報を追加したりできます。 標準入力データ: 例 — 破壊的なコマンドをブロックする:
例 — src/ 外への書き込みでは確認を必須にする: ツールへの入力を検査し、判定を返すスクリプトを利用します。
例 — 実行前にコマンドを書き換える: フックは、標準出力に hookSpecificOutput.updatedInput を出力することで、ツールへの入力を透過的に書き換えることができます (出力形式を参照) 。たとえば、シェルコマンドをラッパー経由で実行するフックスクリプトは次のとおりです。
書き換えられた引数は、ツール呼び出しが実行される前に反映されるため、エージェントは元のコマンドではなく更新後のコマンドを実行します。

PostToolUse

ツールの実行完了に実行されます。ログの記録、検証、または後続アクションのトリガーに利用します。 標準入力データ: 例 — すべてのシェルコマンドをログに記録する:

PermissionRequest

エージェントが許可するかどうかの判断を必要とするときに発生します。これを利用して、カスタムの承認ロジックを実装できます。 標準入力データ: 例 — git コマンドを自動承認する:

UserPromptSubmit

ユーザーがメッセージを送信したときに発生します。これを利用して、前提情報を追加したり、ワークフローをトリガーしたりできます。 標準入力データ: 例 — すべてのプロンプトに前提情報を挿入する:
このコマンドは、イベント名付きの hookSpecificOutput オブジェクト内に additionalContext を標準出力へ出力します。そのテキストはエージェントの前提情報に取り込まれます:

Stop

エージェントが停止する (ターンを終了する) と発生します。追加の指示を与えたり、早すぎる停止を防いだりするために利用します。 標準入力データ: 例 — エージェントにテストを実行するよう促す:
条件が最終的に満たされないと、処理をブロックする stop フックによってエージェントがループする可能性があるため、注意してください。

PostCompaction

前提情報の圧縮が正常に完了したに発火します。ログの記録、後続アクションのトリガー、または圧縮中に失われた可能性のある前提情報の再注入に利用します。 標準入力データ: 例 — 圧縮イベントをログに記録する:

SessionStart

新しいセッションが開始されると発生します。初期化、ログ記録、または開発環境のセットアップに利用します。 標準入力データ: 例 — セットアップスクリプトを実行:
SessionStart コマンドでは、標準出力 の hookSpecificOutput オブジェクト内に additionalContext を出力して、前提情報を渡すこともできます。

SessionEnd

セッションが終了したときに発生します。クリーンアップや最終ログの記録に利用します。 標準入力データ:

複数のイベントへのマッチング

1 つのhooksファイルで、複数のイベント用のフックを定義できます。

Matcher の利用

matcher フィールドは、フックイベントの tool_name に対してマッチする regex です。利用できるのは、ツール関連のイベント PreToolUsePostToolUsePermissionRequest です。 ツール関連以外のイベント (UserPromptSubmitStopPostCompactionSessionStartSessionEnd) には tool_name がないため、その種類のすべてのイベントでフックを実行するには、"" を利用するか、matcher を省略します。
matcher は permission glob ではありません。mcp__github__* のようなパターンは permissions では有用ですが、フックの matcher は regex です。フックの matcher では mcp__github__.* を利用してください。

一致対象にできるツール名

フックのマッチャーは、フックスクリプトが stdin の tool_name として受け取るものと同じ、外部から見えるツール名に対して評価されます。利用可能な正確なツール名は、CLI モード、モデル、有効になっている統合によって異なる場合があります。 一般的な公開コアツール名は次のとおりです。
  • read
  • edit
  • grep
  • glob
  • exec
MCP server のツールは、mcp__<server>__<tool> の形式で表示されます。たとえば、github という MCP server の create_issue という名前のツールは、mcp__github__create_issue として表示されます。 その他のツールについては、フックの stdin に表示される tool_name に正確に一致させてください。現在のセッションで利用可能な完全な一覧を確認するには、matcher: "" を指定した一時的な PostToolUse フックを追加し、stdin のペイロードをログに記録してください。