EN JA
無料ダウンロード

Claude Code hooks リファレンス

公式ドキュメントとの照合日: 2026年9月20日

hook は、Claude Code が「確認待ちになった」「応答が終わった」などの節目で自動実行するコマンドです。 hook を初めて触るなら、設定を手書きせず作れる hooks ビルダーから始めてください。 hook を書くときに必要な情報を 1 ページにまとめました。全イベントの一覧と各 matcher が受け付ける値、 すべての hook が標準入力で受け取る項目、settings.json と statusLine の形、終了コードの意味です。 最後の節では、AgentManager がこれらのイベントから導出するセッションごとの状態ファイルを、 自分のスクリプトから読みたい人向けに説明します。

hook イベント一覧

Claude Code は現在 33 種の hook イベントを定義しています。3 列目は、そのイベントで matcher が何を対象に絞り込むかと、値の例です。 「—」のイベントは matcher を無視して常に発火します。| で区切った素の名前は完全一致、 正規表現の記号を含む場合は JavaScript の正規表現として扱われます。空の matcher は全件に一致します。

イベント発火するタイミングmatcher の対象
セッションのライフサイクル
SessionStartセッションが開始・再開した開始の種類 startup|resume|clear|compact|fork
Setup--init / --maintenance のセットアップ時セットアップの種類 init|maintenance
UserPromptSubmitプロンプトを送信した(Claude が読む前)—
UserPromptExpansionスラッシュコマンドがプロンプトに展開された—
Stopメインエージェントの応答が終わった—
StopFailureAPI エラーでターンが止まったエラーの種類 rate_limit|overloaded|authentication_failed|billing_error|max_output_tokens|unknown
Notificationあなたの操作待ち(許可の確認・一定時間入力なし・質問への回答)通知の種類 permission_prompt|idle_prompt|elicitation_dialog|agent_needs_input
SessionEndセッションが終了した終了理由 clear|resume|logout|prompt_input_exit|other
ツールと許可
PreToolUseツール実行の直前(ブロック可能)ツール名 Bash|Edit|Write|mcp__.*
PermissionRequestツール実行に許可の判断が必要になったツール名 Bash|Edit|Write
PermissionDenied自動モードがツール実行を拒否したツール名 Bash|Edit|Write
PostToolUseツール実行が成功した後ツール名 Bash|Edit|Write|mcp__.*
PostToolUseFailureツール実行が失敗した後ツール名 Bash|Edit|Write
PostToolBatch並列ツール呼び出しの一括分がすべて終わった—
MessageDisplayアシスタントのメッセージが表示された—
サブエージェントとタスク
SubagentStartサブエージェントが起動したエージェント種別 general-purpose|Explore|Plan
SubagentStopサブエージェントが終了したエージェント種別 general-purpose|Explore|Plan
TaskCreatedタスクが作成された—
TaskCompletedタスクが完了になった—
TeammateIdleエージェントチームのメンバーが待機に入る直前—
コンテキスト・設定・モデル
PreCompactコンテキスト圧縮の直前トリガー manual|auto
PostCompactコンテキスト圧縮の完了後トリガー manual|auto
InstructionsLoadedCLAUDE.md やルールファイルが読み込まれた読み込み理由 session_start|nested_traversal|path_glob_match|include|compact
ConfigChangeセッション中に設定ファイルが変わった設定の種類 user_settings|project_settings|local_settings|policy_settings|skills
PreModelSwitchモデル切り替えの直前(ブロック可能)切り替え先モデル .*opus.*
PostModelSwitchモデルが切り替わった後切り替え先モデル .*opus.*
ElicitationMCP サーバーが入力を求めたMCP サーバー名 my-server
ElicitationResultMCP サーバーの入力要求に応答したMCP サーバー名 my-server
ワークスペース
CwdChanged作業ディレクトリが変わった—
DirectoryAdded/add-dir でディレクトリが追加された追加方法 slash_command|register_repo_root
FileChanged監視中のファイルが変更されたファイル名(正規表現ではなく | 区切り) .envrc|.env
WorktreeCreategit worktree が作成される—
WorktreeRemovegit worktree が削除される—
古い版はファイル全体を捨てます。Claude Code 2.1.101 より前の版は、未知のイベント名を含む設定ファイルを丸ごと無視します。 そのファイル内の hook と permissions がすべて黙って無効になります。StopFailure や PostCompact のような 新しいイベントを追加する前に claude --version を確認してください。

すべての hook が標準入力で受け取る項目

各 hook コマンドは標準入力から JSON オブジェクトを 1 つ受け取ります。次の項目は全イベント共通で、イベントごとに固有の項目が加わります (例: ツール系イベントの tool_name と tool_input、Notification の notification_type、 StopFailure の error_type、SessionEnd の reason)。

項目意味
session_idClaude Code セッションの固定 ID。永続化するものはこれをキーにします。
hook_event_name上の表のイベント名。1 つのスクリプトで複数イベントを扱うときはこれで分岐します。
cwdhook 発火時点のセッションの作業ディレクトリ。
transcript_pathセッションの JSONL トランスクリプトのパス。
prompt_id現在のターンが属するユーザープロンプトの ID。
scratchpad_dirセッション専用の一時ディレクトリ。
permission_mode現在の許可モード(default・plan・acceptEdits・bypassPermissions など)。
effort現在の推論の努力量の設定。
agent_id・agent_typeサブエージェント内で発火した場合に付きます。メインエージェントでは付きません。

settings.json のスキーマ

hook はトップレベルの hooks キーの下に置きます。置き場所は ~/.claude/settings.json(ユーザー)、 .claude/settings.json(プロジェクト・コミット対象)、.claude/settings.local.json(プロジェクト・git 管理外)のいずれかです。 ファイルはマージされ、複数ファイルに定義した hook はそれぞれから実行されます。

{
  "hooks": {
    "<イベント名>": [
      {
        "matcher": "<任意の絞り込み>",
        "hooks": [
          { "type": "command", "command": "<シェルコマンド>", "timeout": 600 }
        ]
      }
    ]
  }
}
キー意味
matcher任意。イベント表の値で絞り込みます。省略または空なら全件に一致します。
hooks[].typecommand はシェルコマンドを実行します。他のハンドラ種別(http・mcp_tool・prompt・agent)もありますが、このページとビルダーは command を扱います。
hooks[].commandあなたのユーザー環境で実行されるシェルコマンド。$HOME などの変数は展開されます。
hooks[].timeouthook を打ち切るまでの秒数。既定は 600。UserPromptSubmit・PreModelSwitch・PostModelSwitch は 30、MessageDisplay は 10。SessionEnd の hook は全体で 1.5 秒を共有します。

statusLine のスキーマと標準入力

ステータス行は別のトップレベルキーで、枠は 1 つだけです。そのコマンドはアシスタントの応答のたびに実行され、 hook には渡らないデータ(コンテキストウィンドウの使用量と利用上限の状態)を受け取ります。

{
  "statusLine": {
    "type": "command",
    "command": "<シェルコマンド>",
    "padding": 0,
    "refreshInterval": 5,
    "hideVimModeIndicator": false
  }
}
標準入力の項目意味
session_id・versionセッション ID と Claude Code のバージョン。
model.id・model.display_name現在使用中のモデル。
workspace.*現在のディレクトリとプロジェクトディレクトリ。
cost.*セッションの累積コストと経過時間のカウンタ。
context_window.used_percentageコンテキストウィンドウの使用率。ほかに remaining_percentage・total_input_tokens・context_window_size・current_usage。
rate_limits.five_hour・rate_limits.seven_dayそれぞれ used_percentage と resets_at(エポック秒)を持ちます。

終了コード

終了コード効果
0成功。標準出力は verbose モードで表示され、構造化出力を受け付けるイベントでは JSON として解釈されます。
2ブロック対応イベント(PreToolUse・UserPromptSubmit・PermissionRequest・PreModelSwitch・Stop・SubagentStop など)で動作を止めます。標準エラー出力が理由として Claude に渡されます。
その他非ブロックのエラー。標準エラー出力があなたに表示され、動作は続行されます。

AgentManager のセッション状態ファイル

AgentManager の hook は上のイベントをセッションごとに 1 つの JSON ファイルへ集約し、 ~/.claude/agent-manager/sessions/<session_id>.json に書きます。イベントのたびにその場で上書きされるため、 読み取り側でパースに失敗したら壊れたと判断せず読み直してください。導出ルールは hook で Claude Code のセッション状態を追跡するで説明しています。

項目型意味
session_idstringClaude Code のセッション ID。ファイル名と同じです。
statestringwaiting・done・processing・idle・error のいずれか。
waiting_kindstring | null待機の理由。approval(許可の確認)、plan(計画の承認)、choice(回答待ちの質問)。state が waiting 以外なら null。
error_reasonstring | nullstate が error のときの StopFailure のエラー種別。rate_limit・overloaded・authentication_failed・billing_error・max_output_tokens・unknown。
cwdstring直近のイベントが報告した作業ディレクトリ。
labelstringアプリに表示する名前。cwd の末尾のパス要素です。
host_bundle_id・host_bundle_chainstring | null, arrayセッションを動かしているターミナルアプリのバンドル ID と、それを特定するのに使ったプロセスの親子関係。
iterm_session_id・tmux_pane_idstring | nullセッションをクリックしたときに該当ペインをフォーカスするための識別子。
owner_pid・owner_started_atint, stringclaude プロセスの PID と起動時刻。両方を突き合わせて、PID が再利用された死んだセッションを検出します。
created_at・updated_at・state_sinceISO 8601 stringファイルの初回書き込み時刻、最終書き込み時刻、state が最後に変わった時刻。
active_subagent_ids・subagent_seen_idsarray of string現在実行中のサブエージェントと、このセッションで観測した全サブエージェント。
main_stopped・main_waitingbool内部フラグ。メインエージェントが Stop を出したか、メインエージェントが入力待ちで止まっているか。
agent_input_pending_idsarray of stringagent_needs_input を出してまだ回答されていないサブエージェント。

もう 1 つのファイル ~/.claude/agent-manager/stats/<session_id>.json は statusLine の パススルーが書きます。ステータス行の標準入力にある context_window・rate_limits・model を そのまま持ち、PreCompact が発火したときはその印も持ちます。インストール前に設定していたステータス行のコマンドは ~/.claude/agent-manager/statusline-original.json に保存され、引き続き実行されます。

この表の状態を、hook を書かずに画面と通知で受け取る

上の状態ファイルは AgentManager が自動で書きます。確認待ちになったセッションを通知し、 すべてのセッションの状態を一覧できます。無料で使え、アカウント登録は不要です。

macOS 13 以降 — 無料プランは同時に 2 セッションまで表示