このページでは、Claude Code でフックを実装するためのリファレンス ドキュメントを提供します。
~/.claude/settings.json
- ユーザー設定.claude/settings.json
- プロジェクト設定.claude/settings.local.json
- ローカル プロジェクト設定(コミットされない)PreToolUse
と PostToolUse
にのみ適用)
Write
は Write ツールのみにマッチEdit|Write
または Notebook.*
*
を使用。空文字列(""
)を使用するか、matcher
を空白のままにすることもできます。type
: 現在は "command"
のみサポートcommand
: 実行する bash コマンド($CLAUDE_PROJECT_DIR
環境変数を使用可能)timeout
: (オプション)特定のコマンドをキャンセルするまでの実行時間(秒)UserPromptSubmit
、Notification
、Stop
、SubagentStop
などのマッチャーを使用しないイベントでは、matcher フィールドを省略できます:
CLAUDE_PROJECT_DIR
(Claude Code がフック コマンドを起動するときのみ利用可能)を使用して、プロジェクトに保存されたスクリプトを参照できます。これにより、Claude の現在のディレクトリに関係なく動作することが保証されます:
Task
- サブエージェント タスク(サブエージェント ドキュメント を参照)Bash
- シェル コマンドGlob
- ファイル パターン マッチングGrep
- コンテンツ検索Read
- ファイル読み取りEdit
、MultiEdit
- ファイル編集Write
- ファイル書き込みWebFetch
、WebSearch
- Web 操作manual
- /compact
から呼び出しauto
- 自動コンパクトから呼び出し(コンテキスト ウィンドウが満杯のため)startup
- 起動から呼び出しresume
- --resume
、--continue
、または /resume
から呼び出しclear
- /clear
から呼び出しcompact
- 自動または手動コンパクトから呼び出しreason
フィールドは以下のいずれかになります:
clear
- /clear コマンドでセッションがクリアされたlogout
- ユーザーがログアウトしたprompt_input_exit
- プロンプト入力が表示されている間にユーザーが終了したother
- その他の終了理由tool_input
の正確なスキーマはツールによって異なります。
tool_input
と tool_response
の正確なスキーマはツールによって異なります。
stop_hook_active
は、Claude Code がストップ フックの結果として既に継続している場合に true になります。Claude Code が無限に実行されることを防ぐために、この値をチェックするか、トランスクリプトを処理してください。
manual
の場合、custom_instructions
はユーザーが /compact
に渡すものから取得されます。auto
の場合、custom_instructions
は空です。
stdout
はトランスクリプト モード(CTRL-R)でユーザーに表示されますが、UserPromptSubmit
と SessionStart
では stdout がコンテキストに追加されます。stderr
が Claude に自動的にフィードバックされ処理されます。以下のフック イベント別の動作を参照してください。stderr
がユーザーに表示され、実行が継続されます。UserPromptSubmit
フックでは stdout がコンテキストとして注入されます。フック イベント | 動作 |
---|---|
PreToolUse | ツール呼び出しをブロックし、stderr を Claude に表示 |
PostToolUse | stderr を Claude に表示(ツールは既に実行済み) |
Notification | N/A、stderr をユーザーのみに表示 |
UserPromptSubmit | プロンプト処理をブロックし、プロンプトを消去し、stderr をユーザーのみに表示 |
Stop | 停止をブロックし、stderr を Claude に表示 |
SubagentStop | 停止をブロックし、stderr を Claude サブエージェントに表示 |
PreCompact | N/A、stderr をユーザーのみに表示 |
SessionStart | N/A、stderr をユーザーのみに表示 |
SessionEnd | N/A、stderr をユーザーのみに表示 |
stdout
で構造化 JSON を返すことができます:
continue
が false の場合、Claude はフック実行後に処理を停止します。
PreToolUse
の場合、これは "permissionDecision": "deny"
とは異なり、特定のツール呼び出しのみをブロックし、Claude に自動フィードバックを提供します。PostToolUse
の場合、これは "decision": "block"
とは異なり、Claude に自動フィードバックを提供します。UserPromptSubmit
の場合、これはプロンプトが処理されることを防ぎます。Stop
と SubagentStop
の場合、これは任意の "decision": "block"
出力よりも優先されます。"continue" = false
は任意の "decision": "block"
出力よりも優先されます。stopReason
は continue
に伴い、ユーザーに表示される理由を提供しますが、Claude には表示されません。
PreToolUse
決定制御PreToolUse
フックは、ツール呼び出しが進行するかどうかを制御できます。
"allow"
は許可システムをバイパスします。permissionDecisionReason
はユーザーに表示されますが、Claude には表示されません。"deny"
はツール呼び出しの実行を防ぎます。permissionDecisionReason
は Claude に表示されます。"ask"
はユーザーに UI でツール呼び出しを確認するよう求めます。permissionDecisionReason
はユーザーに表示されますが、Claude には表示されません。decision
と reason
フィールドは非推奨です。
代わりに hookSpecificOutput.permissionDecision
と
hookSpecificOutput.permissionDecisionReason
を使用してください。非推奨フィールド
"approve"
と "block"
はそれぞれ "allow"
と "deny"
にマップされます。PostToolUse
決定制御PostToolUse
フックは、ツール実行後に Claude にフィードバックを提供できます。
"block"
は自動的に Claude に reason
でプロンプトします。undefined
は何もしません。reason
は無視されます。"hookSpecificOutput.additionalContext"
は Claude が考慮するコンテキストを追加します。UserPromptSubmit
決定制御UserPromptSubmit
フックは、ユーザー プロンプトが処理されるかどうかを制御できます。
"block"
はプロンプトが処理されることを防ぎます。送信されたプロンプトはコンテキストから消去されます。"reason"
はユーザーに表示されますが、コンテキストには追加されません。undefined
はプロンプトが正常に進行することを許可します。"reason"
は無視されます。"hookSpecificOutput.additionalContext"
は、ブロックされていない場合に文字列をコンテキストに追加します。Stop
/SubagentStop
決定制御Stop
と SubagentStop
フックは、Claude が継続する必要があるかどうかを制御できます。
"block"
は Claude の停止を防ぎます。Claude がどのように進行すべきかを知るために、reason
を設定する必要があります。undefined
は Claude の停止を許可します。reason
は無視されます。SessionStart
決定制御SessionStart
フックは、セッション開始時にコンテキストを読み込むことができます。
"hookSpecificOutput.additionalContext"
は文字列をコンテキストに追加します。additionalContext
値は連結されます。SessionEnd
決定制御SessionEnd
フックは、セッション終了時に実行されます。セッション終了をブロックすることはできませんが、クリーンアップ タスクを実行できます。
UserPromptSubmit
フックの場合、どちらの方法でもコンテキストを注入できます:UserPromptSubmit
の特別なケース)mcp__<server>__<tool>
パターンに従います。例:
mcp__memory__create_entities
- Memory サーバーの create entities ツールmcp__filesystem__read_file
- Filesystem サーバーの read file ツールmcp__github__search_repositories
- GitHub サーバーの search ツール$VAR
ではなく "$VAR"
を使用..
をチェック$CLAUDE_PROJECT_DIR
を使用).env
、.git/
、キーなどを避ける/hooks
メニューでの確認が必要CLAUDE_PROJECT_DIR
環境変数が利用可能で、プロジェクト ルート ディレクトリ(Claude Code が開始された場所)への絶対パスが含まれます--debug
)/hooks
を実行してフックが登録されているかを確認claude --debug
を使用してフック実行の詳細を確認\"
を使用claude --debug
を使用して詳細なフック実行を確認claude --debug
を使用してフック実行の詳細を確認: