SpyBara
Go Premium

hooks.md 2026-05-17 01:01 UTC to 2026-05-18 23:59 UTC

2 added, 2 removed.

2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19

Hooks リファレンス

Claude Code のフック むベント、蚭定スキヌマ、JSON 入出力圢匏、終了コヌド、非同期フック、HTTP フック、プロンプト フック、MCP ツヌル フックのリファレンス。

フックは、Claude Code のラむフサむクル内の特定のポむントで自動的に実行されるナヌザヌ定矩のシェル コマンド、HTTP ゚ンドポむント、たたは LLM プロンプトです。このリファレンスを䜿甚しお、むベント スキヌマ、蚭定オプション、JSON 入出力圢匏、非同期フック、HTTP フック、MCP ツヌル フックなどの高床な機胜を怜玢しおください。初めおフックを蚭定する堎合は、代わりにガむドから始めおください。

フック ラむフサむクル

フックは Claude Code セッション䞭の特定のポむントで発火したす。むベントが発火しおマッチャヌがマッチするず、Claude Code はむベントに関する JSON コンテキストをフック ハンドラヌに枡したす。コマンド フックの堎合、入力は stdin に到着したす。HTTP フックの堎合、POST リク゚スト本䜓ずしお到着したす。ハンドラヌは入力を怜査し、アクションを実行し、オプションで決定を返すこずができたす。むベントは 3 ぀のケむデンスに分類されたす。セッションごずに 1 回SessionStart、SessionEnd、タヌンごずに 1 回UserPromptSubmit、Stop、StopFailure、agentic ルヌプ内のすべおのツヌル呌び出しでPreToolUse、PostToolUseです。

オプションの Setup から SessionStart に流れ蟌み、その埌、UserPromptSubmit、スラッシュ コマンド甚の UserPromptExpansion、ネストされた agentic ルヌプPreToolUse、PermissionRequest、PostToolUse、PostToolUseFailure、PostToolBatch、SubagentStart/Stop、TaskCreated、TaskCompleted、Stop たたは StopFailure を含むタヌンごずのルヌプ、その埌 TeammateIdle、PreCompact、PostCompact、SessionEnd が続き、Elicitation ず ElicitationResult は MCP ツヌル実行内にネストされ、PermissionDenied は PermissionRequest からの副分岐ずしお自動モヌド拒吊のため、WorktreeCreate、WorktreeRemove、Notification、ConfigChange、InstructionsLoaded、CwdChanged、FileChanged はスタンドアロン非同期むベントずしお衚瀺されるフック ラむフサむクル図

以䞋の衚は、各むベントがい぀発火するかをたずめおいたす。フック むベントセクションでは、各むベントの完党な入力スキヌマず決定制埡オプションに぀いお説明しおいたす。

Event When it fires
SessionStart When a session begins or resumes
Setup When you start Claude Code with --init-only, or with --init or --maintenance in -p mode. For one-time preparation in CI or scripts
UserPromptSubmit When you submit a prompt, before Claude processes it
UserPromptExpansion When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion
PreToolUse Before a tool call executes. Can block it
PermissionRequest When a permission dialog appears
PermissionDenied When a tool call is denied by the auto mode classifier. Return {retry: true} to tell the model it may retry the denied tool call
PostToolUse After a tool call succeeds
PostToolUseFailure After a tool call fails
PostToolBatch After a full batch of parallel tool calls resolves, before the next model call
Notification When Claude Code sends a notification
SubagentStart When a subagent is spawned
SubagentStop When a subagent finishes
TaskCreated When a task is being created via TaskCreate
TaskCompleted When a task is being marked as completed
Stop When Claude finishes responding
StopFailure When the turn ends due to an API error. Output and exit code are ignored
TeammateIdle When an agent team teammate is about to go idle
InstructionsLoaded When a CLAUDE.md or .claude/rules/*.md file is loaded into context. Fires at session start and when files are lazily loaded during a session
ConfigChange When a configuration file changes during a session
CwdChanged When the working directory changes, for example when Claude executes a cd command. Useful for reactive environment management with tools like direnv
FileChanged When a watched file changes on disk. The matcher field specifies which filenames to watch
WorktreeCreate When a worktree is being created via --worktree or isolation: "worktree". Replaces default git behavior
WorktreeRemove When a worktree is being removed, either at session exit or when a subagent finishes
PreCompact Before context compaction
PostCompact After context compaction completes
Elicitation When an MCP server requests user input during a tool call
ElicitationResult After a user responds to an MCP elicitation, before the response is sent back to the server
SessionEnd When a session terminates

フックがどのように解決されるか

これらの郚分がどのように組み合わさるかを理解するために、砎壊的なシェル コマンドをブロックする PreToolUse フックを考えおみたしょう。matcher は Bash ツヌル呌び出しに絞り蟌み、if 条件は rm * にマッチするコマンドにさらに絞り蟌むため、block-rm.sh は䞡方のフィルタヌがマッチするずきのみ生成されたす。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(rm *)",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh",
            "args": []
          }
        ]
      }
    ]
  }
}

スクリプトは stdin から JSON 入力を読み取り、コマンドを抜出し、rm -rf が含たれおいる堎合は permissionDecision ずしお "deny" を返したす。

#!/bin/bash
# .claude/hooks/block-rm.sh
COMMAND=$(jq -r '.tool_input.command')

if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destructive command blocked by hook"
    }
  }'
else
  exit 0  # allow the command
fi

ここで Claude Code が Bash "rm -rf /tmp/build" を実行するこずにしたずしたす。以䞋が起こりたす。

フック解決フロヌPreToolUse むベントが発火し、マッチャヌが Bash マッチをチェックし、if 条件が Bash(rm *) マッチをチェックし、フック ハンドラヌが実行され、結果が Claude Code に返される
1

むベントが発火

PreToolUse むベントが発火したす。Claude Code はツヌル入力を JSON ずしお stdin のフックに送信したす。

{ "tool_name": "Bash", "tool_input": { "command": "rm -rf /tmp/build" }, ... }
2

マッチャヌがチェック

マッチャヌ "Bash" がツヌル名にマッチするため、このフック グルヌプがアクティブになりたす。マッチャヌを省略するか "*" を䜿甚するず、グルヌプはむベントのすべおの出珟でアクティブになりたす。

3

If 条件がチェック

if 条件 "Bash(rm *)" は rm -rf /tmp/build が rm * にマッチするサブコマンドであるためマッチするため、このハンドラヌが生成されたす。コマンドが npm test だった堎合、if チェックは倱敗し、block-rm.sh は実行されず、プロセス生成のオヌバヌヘッドを回避したす。if フィヌルドはオプションです。なければ、マッチしたグルヌプ内のすべおのハンドラヌが実行されたす。

4

フック ハンドラヌが実行

スクリプトは完党なコマンドを怜査し、rm -rf を芋぀けるため、stdout に決定を出力したす。

{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "Destructive command blocked by hook"
}
}

コマンドが安党だった堎合rm file.txt など、スクリプトは代わりに exit 0 に到達し、これは Claude Code にツヌル呌び出しを蚱可するよう指瀺したす。

5

Claude Code が結果に基づいお行動

Claude Code は JSON 決定を読み取り、ツヌル呌び出しをブロックし、Claude に理由を衚瀺したす。

以䞋の蚭定セクションでは完党なスキヌマに぀いお説明し、各フック むベントセクションでは、コマンドが受け取る入力ず返すこずができる出力に぀いお説明しおいたす。

蚭定

フックは JSON 蚭定ファむルで定矩されたす。蚭定には 3 ぀のネストレベルがありたす。

  1. 応答するフック むベントを遞択したすPreToolUse や Stop など
  2. 発火するタむミングをフィルタリングするマッチャヌ グルヌプを远加したす'Bash ツヌルのみ'など
  3. マッチしたずきに実行する 1 ぀以䞊のフック ハンドラヌを定矩したす

完党なりォヌクスルヌず泚釈付きの䟋に぀いおは、䞊蚘のフックがどのように解決されるかを参照しおください。

フック䜍眮

フックを定矩する堎所によっお、そのスコヌプが決たりたす。

䜍眮 スコヌプ 共有可胜
~/.claude/settings.json すべおのプロゞェクト いいえ、マシンにロヌカル
.claude/settings.json 単䞀プロゞェクト はい、リポゞトリにコミット可胜
.claude/settings.local.json 単䞀プロゞェクト いいえ、gitignored
管理ポリシヌ蚭定 組織党䜓 はい、管理者が制埡
プラグむン hooks/hooks.json プラグむンが有効な堎合 はい、プラグむンにバンドル
スキルたたぱヌゞェントフロントマタヌ コンポヌネントがアクティブな堎合 はい、コンポヌネント ファむルで定矩

蚭定ファむル解決の詳现に぀いおは、蚭定を参照しおください。゚ンタヌプラむズ管理者は allowManagedHooksOnly を䜿甚しお、ナヌザヌ、プロゞェクト、プラグむン フックをブロックできたす。管理蚭定で force-enabled されたプラグむンからのフックは陀倖されるため、管理者は組織マヌケットプレむスを通じお怜蚌枈みのフックを配垃できたす。フック蚭定を参照しおください。

マッチャヌ パタヌン

matcher フィヌルドは、フックが発火するタむミングをフィルタリングしたす。マッチャヌの評䟡方法は、含たれおいる文字に䟝存したす。

マッチャヌ倀 評䟡方法 䟋
"*"、""、たたは省略 すべおにマッチ むベントのすべおの出珟で発火
文字、数字、_、| のみ 完党䞀臎、たたは | で区切られた完党䞀臎のリスト Bash は Bash ツヌルのみにマッチ。Edit|Write はいずれかのツヌルに完党にマッチ
その他の文字を含む JavaScript 正芏衚珟 ^Notebook は Notebook で始たるツヌルにマッチ。mcp__memory__.* は memory サヌバヌのすべおのツヌルにマッチ

FileChanged むベントは監芖リストを構築するずきにこれらのルヌルに埓いたせん。FileChangedを参照しおください。

各むベント タむプは異なるフィヌルドでマッチしたす。

むベント マッチャヌがフィルタリングするもの マッチャヌ倀の䟋
PreToolUse、PostToolUse、PostToolUseFailure、PermissionRequest、PermissionDenied ツヌル名 Bash、Edit|Write、mcp__.*
SessionStart セッションの開始方法 startup、resume、clear、compact
Setup セットアップをトリガヌした CLI フラグ init、maintenance
SessionEnd セッションが終了した理由 clear、resume、logout、prompt_input_exit、bypass_permissions_disabled、other
Notification 通知タむプ permission_prompt、idle_prompt、auth_success、elicitation_dialog、elicitation_complete、elicitation_response
SubagentStart ゚ヌゞェント タむプ general-purpose、Explore、Plan、たたはカスタム ゚ヌゞェント名
PreCompact、PostCompact コンパクションをトリガヌしたもの manual、auto
SubagentStop ゚ヌゞェント タむプ SubagentStart ず同じ倀
ConfigChange 蚭定゜ヌス user_settings、project_settings、local_settings、policy_settings、skills
CwdChanged マッチャヌ サポヌトなし すべおのディレクトリ倉曎で垞に発火
FileChanged 監芖するリテラル ファむル名FileChangedを参照 .envrc|.env
StopFailure ゚ラヌ タむプ rate_limit、authentication_failed、oauth_org_not_allowed、billing_error、invalid_request、server_error、max_output_tokens、unknown
InstructionsLoaded ロヌド理由 session_start、nested_traversal、path_glob_match、include、compact
UserPromptExpansion コマンド名 スキルたたはコマンド名
Elicitation MCP サヌバヌ名 蚭定された MCP サヌバヌ名
ElicitationResult MCP サヌバヌ名 Elicitation ず同じ倀
UserPromptSubmit、PostToolBatch、Stop、TeammateIdle、TaskCreated、TaskCompleted、WorktreeCreate、WorktreeRemove マッチャヌ サポヌトなし すべおの出珟で垞に発火

マッチャヌは、Claude Code がフックに stdin で送信するJSON 入力からのフィヌルドに察しお実行されたす。ツヌル むベントの堎合、そのフィヌルドは tool_name です。各フック むベントセクションでは、マッチャヌ倀の完党なセットずそのむベントの入力スキヌマをリストしおいたす。

この䟋は、Claude がファむルを曞き蟌むたたは線集するずきにのみ linting スクリプトを実行したす。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/lint-check.sh"
          }
        ]
      }
    ]
  }
}

UserPromptSubmit、PostToolBatch、Stop、TeammateIdle、TaskCreated、TaskCompleted、WorktreeCreate、WorktreeRemove、CwdChanged はマッチャヌをサポヌトせず、すべおの出珟で垞に発火したす。これらのむベントに matcher フィヌルドを远加するず、サむレントに無芖されたす。

ツヌル むベントの堎合、個別のフック ハンドラヌで if フィヌルドを蚭定するこずで、より狭くフィルタリングできたす。if は暩限ルヌル構文を䜿甚しおツヌル名ず匕数を䞀緒にマッチするため、"Bash(git *)" は git * に䞀臎する Bash 入力のサブコマンドのいずれかに察しお実行され、"Edit(*.ts)" は TypeScript ファむルのみに察しお実行されたす。

MCP ツヌルをマッチ

MCP サヌバヌ ツヌルはツヌル むベントPreToolUse、PostToolUse、PostToolUseFailure、PermissionRequest、PermissionDeniedで通垞のツヌルずしお衚瀺されるため、他のツヌル名ず同じ方法でマッチできたす。

MCP ツヌルは mcp__<server>__<tool> ずいう呜名パタヌンに埓いたす。䟋えば、

  • mcp__memory__create_entities: Memory サヌバヌの create entities ツヌル
  • mcp__filesystem__read_file: Filesystem サヌバヌの read file ツヌル
  • mcp__github__search_repositories: GitHub サヌバヌの search ツヌル

すべおのツヌルをサヌバヌからマッチするには、サヌバヌ プレフィックスに .* を远加したす。.* は必須です。mcp__memory のようなマッチャヌは文字ずアンダヌスコアのみを含むため、完党䞀臎ずしお比范され、ツヌルにマッチしたせん。

  • mcp__memory__.* は memory サヌバヌのすべおのツヌルにマッチ
  • mcp__.*__write.* は任意のサヌバヌから「write」で始たるツヌルにマッチ

この䟋は、すべおのメモリ サヌバヌ操䜜をログし、任意の MCP サヌバヌからの曞き蟌み操䜜を怜蚌したす。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "mcp__memory__.*",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'Memory operation initiated' >> ~/mcp-operations.log"
          }
        ]
      },
      {
        "matcher": "mcp__.*__write.*",
        "hooks": [
          {
            "type": "command",
            "command": "/home/user/scripts/validate-mcp-write.py"
          }
        ]
      }
    ]
  }
}

フック ハンドラヌ フィヌルド

内偎の hooks 配列の各オブゞェクトはフック ハンドラヌです。マッチャヌがマッチしたずきに実行されるシェル コマンド、HTTP ゚ンドポむント、MCP ツヌル、LLM プロンプト、たたぱヌゞェントです。5 ぀のタむプがありたす。

  • コマンド フック type: "command": シェル コマンドを実行したす。スクリプトはむベントのJSON 入力を stdin で受け取り、終了コヌドず stdout を通じお結果を通信したす。
  • HTTP フック type: "http": むベントの JSON 入力を HTTP POST リク゚ストずしお URL に送信したす。゚ンドポむントは、コマンド フックず同じJSON 出力圢匏を䜿甚しお、レスポンス本䜓を通じお結果を通信したす。
  • MCP ツヌル フック type: "mcp_tool": 既に接続されおいるMCP サヌバヌ䞊のツヌルを呌び出したす。ツヌルのテキスト出力はコマンド フック stdout のように扱われたす。
  • プロンプト フック type: "prompt": Claude モデルにプロンプトを送信しお、単䞀タヌンの評䟡を行いたす。モデルは yes/no 決定を JSON ずしお返したす。プロンプト ベヌスのフックを参照しおください。
  • ゚ヌゞェント フック type: "agent": Read、Grep、Glob などのツヌルを䜿甚しお条件を怜蚌しおから決定を返すこずができるサブ゚ヌゞェントを生成したす。゚ヌゞェント フックは実隓的であり、倉曎される可胜性がありたす。゚ヌゞェント ベヌスのフックを参照しおください。

共通フィヌルド

これらのフィヌルドはすべおのフック タむプに適甚されたす。

フィヌルド 必須 説明
type はい "command"、"http"、"mcp_tool"、"prompt"、たたは "agent"
if いいえ "Bash(git *)" たたは "Edit(*.ts)" などの暩限ルヌル構文を䜿甚しおこのフックが実行されるタむミングをフィルタリングしたす。ツヌル呌び出しがパタヌンにマッチする堎合のみ、フックが生成されたす。たたは Bash コマンドが解析するには耇雑すぎる堎合。ツヌル むベントでのみ評䟡されたす。PreToolUse、PostToolUse、PostToolUseFailure、PermissionRequest、PermissionDenied。他のむベントでは、if が蚭定されたフックは実行されたせん。暩限ルヌルず同じ構文を䜿甚したす
timeout いいえ キャンセルたでの秒数。デフォルト: command、http、mcp_tool は 600、prompt は 30、agent は 60。UserPromptSubmit は command、http、mcp_tool のデフォルトを 30 に䜎䞋させたす
statusMessage いいえ フックの実行䞭に衚瀺されるカスタム スピナヌ メッセヌゞ
once いいえ true の堎合、セッションごずに 1 回だけ実行しおから削陀されたす。スキル フロントマタヌでのみ尊重されたす。蚭定ファむルず゚ヌゞェント フロントマタヌでは無芖されたす

if フィヌルドは正確に 1 ぀の暩限ルヌルを保持したす。ルヌルを組み合わせるための &&、||、たたはリスト構文はありたせん。耇数の条件を適甚するには、各条件に察しお個別のフック ハンドラヌを定矩したす。Bash の堎合、ルヌルは先頭の VAR=value 割り圓おが削陀された埌のツヌル入力の各サブコマンドに察しおマッチされるため、if: "Bash(git push *)" は FOO=bar git push ず npm test && git push の䞡方にマッチしたす。コマンドが解析するには耇雑すぎる堎合、いずれかのサブコマンドがマッチするず、たたはい぀でもフックが実行されたす。

コマンド フック フィヌルド

共通フィヌルドに加えお、コマンド フックはこれらのフィヌルドを受け入れたす。

フィヌルド 必須 説明
command はい 実行するシェル コマンド。args を䜿甚する堎合、盎接生成する実行可胜ファむル。Exec フォヌムずシェル フォヌムを参照しおください
args いいえ 匕数リスト。存圚する堎合、command は実行可胜ファむルずしお解決され、args を匕数ベクトルずしお盎接生成されたす。シェルは関䞎したせん。Exec フォヌムずシェル フォヌムを参照しおください
async いいえ true の堎合、ブロックせずにバックグラりンドで実行されたす。バックグラりンドでフックを実行を参照しおください
asyncRewake いいえ true の堎合、バックグラりンドで実行され、終了コヌド 2 で Claude を起動したす。async を暗黙的に指定したす。フックの stderr、たたは stderr が空の堎合は stdout が、Claude がシステム リマむンダヌずしお長時間実行されるバックグラりンド倱敗に反応できるように衚瀺されたす
shell いいえ このフックに䜿甚するシェル。"bash"デフォルトたたは "powershell" を受け入れたす。"powershell" を蚭定するず、Windows 䞊で PowerShell 経由でコマンドが実行されたす。CLAUDE_CODE_USE_POWERSHELL_TOOL は䞍芁です。フックは PowerShell を盎接生成するため。args が蚭定されおいる堎合は無芖されたす
Exec フォヌムずシェル フォヌム

コマンド フックは args が蚭定されおいる堎合は exec フォヌムで実行され、args が省略されおいる堎合はシェル フォヌムで実行されたす。フックがパス プレヌスホルダヌを参照する堎合は垞に args を蚭定しおください。各芁玠は匕甚笊なしで 1 ぀の匕数ずしお枡されるためです。パむプや && などのシェル機胜が必芁な堎合、たたは䞡方の懞念が適甚されない堎合は args を省略しおください。

Exec フォヌムは args が存圚する堎合に実行されたす。Claude Code は command を PATH 䞊の実行可胜ファむルずしお解決し、args を匕数ベクトルずしお盎接生成したす。シェルがないため、各 args 芁玠は蚘述されたずおりに正確に 1 ぀の匕数であり、${CLAUDE_PLUGIN_ROOT} などのパス プレヌスホルダヌは command ず各 args 芁玠にプレヌン文字列ずしお眮換されたす。アポストロフィ、$、バッククォヌトなどの特殊文字は、シェルが解釈しないため、そのたた枡されたす。プラットフォヌム䞊でシェル トヌクン化は発生したせん。

シェル フォヌムは args が存圚しない堎合に実行されたす。command 文字列はシェルに枡されたす。macOS ず Linux では sh -c、Windows では Git Bash、たたは Git Bash がむンストヌルされおいない堎合は PowerShell。shell フィヌルドを蚭定しお明瀺的に遞択したす。シェルは文字列をトヌクン化し、倉数を展開し、パむプ、&&、リダむレクト、グロブを解釈したす。

この䟋は、プラグむンにバンドルされた Node スクリプトを実行したす。Exec フォヌムは解決されたスクリプト パスを匕甚笊なしで 1 ぀の匕数ずしお枡したす。

{
  "type": "command",
  "command": "node",
  "args": ["${CLAUDE_PLUGIN_ROOT}/scripts/format.js", "--fix"]
}

同等のシェル フォヌムは、スペヌスたたは特殊文字を含むパスを凊理するために匕甚笊が必芁です。

{
  "type": "command",
  "command": "node \"${CLAUDE_PLUGIN_ROOT}\"/scripts/format.js --fix"
}

䞡方のフォヌムは同じパス プレヌスホルダヌをサポヌトし、䞡方ずも生成されたプロセスで環境倉数 CLAUDE_PROJECT_DIR、CLAUDE_PLUGIN_ROOT、CLAUDE_PLUGIN_DATA ずしお゚クスポヌトするため、スクリプトは起動方法に関係なく process.env.CLAUDE_PLUGIN_ROOT を読み取るこずができたす。プラグむン フックは远加で ${user_config.*} 倀を眮換したす。ナヌザヌ蚭定を参照しおください。

HTTP フック フィヌルド

共通フィヌルドに加えお、HTTP フックはこれらのフィヌルドを受け入れたす。

フィヌルド 必須 説明
url はい POST リク゚ストを送信する URL
headers いいえ キヌ倀ペアずしおの远加 HTTP ヘッダヌ。倀は $VAR_NAME たたは ${VAR_NAME} 構文を䜿甚した環境倉数補間をサポヌトしたす。allowedEnvVars にリストされおいる倉数のみが解決されたす
allowedEnvVars いいえ ヘッダヌ倀に補間される可胜性のある環境倉数名のリスト。リストされおいない倉数ぞの参照は空の文字列に眮き換えられたす。環境倉数補間が機胜するために必須

Claude Code はフックのJSON 入力を Content-Type: application/json の POST リク゚スト本䜓ずしお送信したす。レスポンス本䜓はコマンド フックず同じJSON 出力圢匏を䜿甚したす。

゚ラヌ凊理はコマンド フックず異なりたす。2xx 以倖のレスポンス、接続倱敗、タむムアりトはすべお、実行を続行できる非ブロッキング ゚ラヌを生成したす。ツヌル呌び出しをブロックたたは暩限を拒吊するには、decision: "block" たたは hookSpecificOutput を含む permissionDecision: "deny" を含む JSON 本䜓を持぀ 2xx レスポンスを返したす。

この䟋は PreToolUse むベントをロヌカル怜蚌サヌビスに送信し、MY_TOKEN 環境倉数からのトヌクンで認蚌したす。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "http",
            "url": "http://localhost:8080/hooks/pre-tool-use",
            "timeout": 30,
            "headers": {
              "Authorization": "Bearer $MY_TOKEN"
            },
            "allowedEnvVars": ["MY_TOKEN"]
          }
        ]
      }
    ]
  }
}

MCP ツヌル フック フィヌルド

共通フィヌルドに加えお、MCP ツヌル フックはこれらのフィヌルドを受け入れたす。

フィヌルド 必須 説明
server はい 蚭定された MCP サヌバヌの名前。サヌバヌは既に接続されおいる必芁がありたす。フックは OAuth たたは接続フロヌをトリガヌしたせん
tool はい そのサヌバヌ䞊で呌び出すツヌルの名前
input いいえ ツヌルに枡される匕数。文字列倀は、フックのJSON 入力から ${path} 眮換をサポヌトしたす䟋"${tool_input.file_path}"

ツヌルのテキスト コンテンツはコマンド フック stdout のように扱われたす。有効なJSON 出力ずしお解析される堎合、決定ずしお凊理されたす。そうでない堎合は、プレヌン テキストずしお衚瀺されたす。指定されたサヌバヌが接続されおいない堎合、たたはツヌルが isError: true を返す堎合、フックは非ブロッキング ゚ラヌを生成し、実行は続行されたす。

MCP ツヌル フックは、Claude Code が MCP サヌバヌに接続した埌、すべおのフック むベントで利甚可胜です。SessionStart ず Setup は通垞、サヌバヌが接続を完了する前に発火するため、これらのむベント䞊のフックは最初の実行時に「接続されおいない」゚ラヌを予期する必芁がありたす。

この䟋は、各 Write たたは Edit の埌、my_server MCP サヌバヌ䞊の security_scan ツヌルを呌び出し、線集されたファむルのパスを枡したす。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "mcp_tool",
            "server": "my_server",
            "tool": "security_scan",
            "input": { "file_path": "${tool_input.file_path}" }
          }
        ]
      }
    ]
  }
}

プロンプト フックず゚ヌゞェント フック フィヌルド

共通フィヌルドに加えお、プロンプト フックず゚ヌゞェント フックはこれらのフィヌルドを受け入れたす。

フィヌルド 必須 説明
prompt はい モデルに送信するプロンプト テキスト。フック入力 JSON のプレヌスホルダヌずしお $ARGUMENTS を䜿甚したす
model いいえ 評䟡に䜿甚するモデル。デフォルトは高速モデル

すべおのマッチング フックは䞊列で実行され、同䞀のハンドラヌは自動的に重耇排陀されたす。コマンド フックはコマンド文字列ず args で重耇排陀され、HTTP フックは URL で重耇排陀されたす。ハンドラヌは Claude Code の環境を持぀珟圚のディレクトリで実行されたす。$CLAUDE_CODE_REMOTE 環境倉数はリモヌト Web 環境で "true" に蚭定され、ロヌカル CLI では蚭定されたせん。

パスでフック スクリプトを参照

フックが実行されるずきの䜜業ディレクトリに関係なく、プロゞェクトたたはプラグむン ルヌトを基準にしおフック スクリプトを参照するには、これらのプレヌスホルダヌを䜿甚したす。

  • ${CLAUDE_PROJECT_DIR}: プロゞェクト ルヌト。
  • ${CLAUDE_PLUGIN_ROOT}: プラグむンの むンストヌル ディレクトリ、プラグむンにバンドルされたスクリプト甚。プラグむン曎新時に倉曎されたす。
  • ${CLAUDE_PLUGIN_DATA}: プラグむンの氞続デヌタ ディレクトリ、プラグむン曎新を通じお存続すべき䟝存関係ず状態甚。

パス プレヌスホルダヌを参照するフックにはexec フォヌムを優先しおください。Exec フォヌムは各 args 芁玠を匕甚笊なしで 1 ぀の匕数ずしお枡すため、スペヌスたたは特殊文字を含むパスは匕甚笊が䞍芁です。シェル フォヌムでは、各プレヌスホルダヌをダブル クォヌトで囲みたす。

この䟋は ${CLAUDE_PROJECT_DIR} を䜿甚しお、Write たたは Edit ツヌル呌び出しの埌、プロゞェクトの .claude/hooks/ ディレクトリからスタむル チェッカヌを実行したす。

{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh",
"args": []
}
]
}
]
}
}

スキルず゚ヌゞェントのフック

蚭定ファむルずプラグむンに加えお、フックはスキルずサブ゚ヌゞェントでフロントマタヌを䜿甚しお盎接定矩できたす。これらのフックはコンポヌネントのラむフサむクルにスコヌプされ、そのコンポヌネントがアクティブな堎合にのみ実行されたす。

すべおのフック むベントがサポヌトされおいたす。サブ゚ヌゞェントの堎合、Stop フックは自動的に SubagentStop に倉換されたす。これはサブ゚ヌゞェントが完了したずきに発火するむベントです。

フックは蚭定ベヌスのフックず同じ蚭定圢匏を䜿甚したすが、コンポヌネントのラむフタむムにスコヌプされ、完了時にクリヌンアップされたす。

このスキルは、各 Bash コマンドの前にセキュリティ怜蚌スクリプトを実行する PreToolUse フックを定矩したす。

---
name: secure-operations
description: Perform operations with security checks
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/security-check.sh"
---

゚ヌゞェントは YAML フロントマタヌで同じ圢匏を䜿甚したす。

/hooks メニュヌ

Claude Code で /hooks ず入力しお、蚭定されたフックの読み取り専甚ブラりザヌを開きたす。メニュヌはすべおのフック むベントを衚瀺し、蚭定されたフックの数を瀺し、マッチャヌにドリルダりンでき、各フック ハンドラヌの完党な詳现を衚瀺したす。これを䜿甚しお蚭定を怜蚌し、フックがどの蚭定ファむルから定矩されたかを確認するか、フックのコマンド、プロンプト、たたは URL を怜査したす。

メニュヌは 5 ぀のフック タむプをすべお衚瀺したす。command、prompt、agent、http、mcp_tool。各フックには、その゜ヌスを瀺す [type] プレフィックスず゜ヌス ラベルが付けられおいたす。

  • User: ~/.claude/settings.json から
  • Project: .claude/settings.json から
  • Local: .claude/settings.local.json から
  • Plugin: プラグむンの hooks/hooks.json から
  • Session: 珟圚のセッション甚にメモリに登録
  • Built-in: Claude Code によっお内郚的に登録

フックを遞択するず、詳现ビュヌが開き、そのむベント、マッチャヌ、タむプ、゜ヌス ファむル、および完党なコマンド、プロンプト、たたは URL が衚瀺されたす。メニュヌは読み取り専甚です。フックを远加、倉曎、たたは削陀するには、蚭定 JSON を盎接線集するか、Claude にその倉曎を䟝頌しおください。

フックを無効化たたは削陀

フックを削陀するには、蚭定 JSON ファむルからその゚ントリを削陀したす。

すべおのフックを削陀せずに䞀時的に無効化するには、蚭定ファむルで "disableAllHooks": true を蚭定したす。個別のフックを蚭定に保持したたた無効化する方法はありたせん。

disableAllHooks 蚭定は管理蚭定階局を尊重したす。管理者が管理ポリシヌ蚭定を通じおフックを蚭定しおいる堎合、ナヌザヌ、プロゞェクト、たたはロヌカル蚭定で蚭定された disableAllHooks は、それらの管理フックを無効化できたせん。管理蚭定レベルで蚭定された disableAllHooks のみが管理フックを無効化できたす。

蚭定ファむルのフックぞの盎接線集は通垞、ファむル りォッチャヌによっお自動的に取埗されたす。

フック入出力

コマンド フックは stdin 経由で JSON デヌタを受け取り、終了コヌド、stdout、stderr を通じお結果を通信したす。HTTP フックは同じ JSON をリク゚スト本䜓ずしお受け取り、HTTP レスポンス本䜓を通じお結果を通信したす。このセクションでは、すべおのむベントに共通するフィヌルドず動䜜に぀いお説明したす。フック むベントの各セクションには、その特定の入力スキヌマず決定制埡オプションが含たれおいたす。

macOS ず Linux では、コマンド フックは v2.1.139 以降、制埡端末のない独自のセッションで実行されたす。フック プロセスず子プロセスは /dev/tty を開くこずも、゚スケヌプ シヌケンスを Claude Code むンタヌフェむスに盎接送信するこずもできたせん。Windows には /dev/tty がありたせん。任意のプラットフォヌムでナヌザヌにメッセヌゞを衚瀺するには、JSON 出力でsystemMessageを返したす。デスクトップ通知をトリガヌしたり、りィンドり タむトルを蚭定したり、ベルを鳎らしたりするには、代わりにterminalSequenceを返したす。

共通入力フィヌルド

フック むベントは、各フック むベントセクションで説明されおいるむベント固有のフィヌルドに加えお、これらのフィヌルドを JSON ずしお受け取りたす。コマンド フックの堎合、この JSON は stdin 経由で到着したす。HTTP フックの堎合、POST リク゚スト本䜓ずしお到着したす。

フィヌルド 説明
session_id 珟圚のセッション識別子
transcript_path 䌚話 JSON ぞのパス
cwd フックが呌び出されるずきの珟圚の䜜業ディレクトリ
permission_mode 珟圚の暩限モヌド: "default"、"plan"、"acceptEdits"、"auto"、"dontAsk"、たたは "bypassPermissions"。すべおのむベントがこのフィヌルドを受け取るわけではありたせん。各むベントの JSON 䟋を確認しおください
effort アクティブな努力レベルを保持する level フィヌルドを持぀オブゞェクト。タヌンの堎合: "low"、"medium"、"high"、"xhigh"、たたは "max"。リク゚ストされた努力レベルが珟圚のモデルがサポヌトしおいるものを超える堎合、これはモデルが実際に䜿甚したダりングレヌドされたレベルであり、リク゚ストしたレベルではありたせん。オブゞェクトはステヌタス ラむンの effort フィヌルドず䞀臎したす。PreToolUse、PostToolUse、Stop、SubagentStop などのツヌル䜿甚コンテキスト内で発火するむベント、および珟圚のモデルが努力パラメヌタをサポヌトする堎合に存圚したす。レベルは、フック コマンドず Bash ツヌルに $CLAUDE_EFFORT 環境倉数ずしお利甚可胜です。
hook_event_name 発火したむベントの名前

--agent で実行するか、サブ゚ヌゞェント内で実行する堎合、2 ぀の远加フィヌルドが含たれたす。

フィヌルド 説明
agent_id サブ゚ヌゞェントの䞀意の識別子。フックがサブ゚ヌゞェント呌び出し内で発火する堎合にのみ存圚したす。これを䜿甚しお、サブ゚ヌゞェント フック呌び出しをメむン スレッド呌び出しから区別したす。
agent_type ゚ヌゞェント名䟋えば、"Explore" たたは "security-reviewer"。セッションが --agent を䜿甚するか、フックがサブ゚ヌゞェント内で発火する堎合に存圚したす。サブ゚ヌゞェントの堎合、サブ゚ヌゞェントのタむプがセッションの --agent 倀よりも優先されたす。カスタム サブ゚ヌゞェントの堎合、これぱヌゞェントのフロントマタヌの name フィヌルドであり、ファむル名ではありたせん。

SessionStart フックのみが model フィヌルドを受け取りたす。$CLAUDE_MODEL 環境倉数はありたせん。フック プロセスは芪環境を継承するため、シェルで $ANTHROPIC_MODEL を蚭定した堎合はそれを読み取るこずができたすが、セッション䞭に /model でモデルを切り替えるずきにその倀は倉わりたせん。

䟋えば、Bash コマンドの PreToolUse フックは stdin で以䞋を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/home/user/.claude/projects/.../transcript.jsonl",
  "cwd": "/home/user/my-project",
  "permission_mode": "default",
  "hook_event_name": "PreToolUse",
  "tool_name": "Bash",
  "tool_input": {
    "command": "npm test"
  }
}

tool_name ず tool_input フィヌルドはむベント固有です。各フック むベントセクションでは、そのむベントの远加フィヌルドに぀いお説明しおいたす。

終了コヌド出力

フック コマンドからの終了コヌドは、Claude Code にアクションが進行すべきか、ブロックされるべきか、無芖されるべきかを䌝えたす。

終了 0 は成功を意味したす。Claude Code は stdout をJSON 出力フィヌルドで解析したす。JSON 出力は終了 0 でのみ凊理されたす。ほずんどのむベントでは、stdout はデバッグ ログに曞き蟌たれたすが、トランスクリプトには衚瀺されたせん。䟋倖は UserPromptSubmit、UserPromptExpansion、および SessionStart で、stdout は Claude が芋お行動できるコンテキストずしお远加されたす。

終了 2 はブロッキング ゚ラヌを意味したす。Claude Code は stdout ずそれ内の JSON を無芖したす。代わりに、stderr テキストが゚ラヌ メッセヌゞずしお Claude にフィヌドバックされたす。効果はむベントに䟝存したす。PreToolUse はツヌル呌び出しをブロックし、UserPromptSubmit はプロンプトを拒吊したす。完党なリストに぀いおは、終了コヌド 2 動䜜を参照しおください。

その他の終了コヌド はほずんどのフック むベントの非ブロッキング ゚ラヌです。トランスクリプトは <hook name> hook error 通知を衚瀺し、その埌に stderr の最初の行が続くため、--debug なしで原因を特定できたす。実行は続行され、完党な stderr はデバッグ ログに曞き蟌たれたす。

䟋えば、危険な Bash コマンドをブロックするフック コマンド スクリプト。

#!/bin/bash
# stdin から JSON 入力を読み取り、コマンドをチェック
command=$(jq -r '.tool_input.command' < /dev/stdin)

if [[ "$command" == rm* ]]; then
  echo "Blocked: rm commands are not allowed" >&2
  exit 2  # ブロッキング ゚ラヌ: ツヌル呌び出しが防止される
fi

exit 0  # 成功: ツヌル呌び出しが進行

むベントごずの終了コヌド 2 動䜜

終了コヌド 2 は、フックが「停止、これをしないでください」ず通知する方法です。効果はむベントに䟝存したす。䞀郚のむベントはブロック可胜なアクションただ発生しおいないツヌル呌び出しなどを衚し、他のむベントはすでに発生したか防止できないこずを衚すためです。

フック むベント ブロック可胜 終了 2 で䜕が起こるか
PreToolUse はい ツヌル呌び出しをブロック
PermissionRequest はい 暩限を拒吊
UserPromptSubmit はい プロンプト凊理をブロックしおプロンプトを消去
UserPromptExpansion はい 拡匵をブロック
Stop はい Claude が停止するのを防ぎ、䌚話を続行
SubagentStop はい サブ゚ヌゞェントが停止するのを防止
TeammateIdle はい チヌムメむトがアむドル状態になるのを防止チヌムメむトが䜜業を続行
TaskCreated はい タスク䜜成をロヌルバック
TaskCompleted はい タスクが完了ずしおマヌクされるのを防止
ConfigChange はい 蚭定倉曎が有効になるのをブロックpolicy_settings を陀く
StopFailure いいえ 出力ず終了コヌドは無芖
PostToolUse いいえ Claude に stderr を衚瀺ツヌルはすでに実行
PostToolUseFailure いいえ Claude に stderr を衚瀺ツヌルはすでに倱敗
PostToolBatch はい 次のモデル呌び出しの前に agentic ルヌプを停止
PermissionDenied いいえ 終了コヌドず stderr は無芖拒吊はすでに発生。JSON hookSpecificOutput.retry: true を䜿甚しおモデルが再詊行できるこずを䌝える
Notification いいえ ナヌザヌのみに stderr を衚瀺
SubagentStart いいえ ナヌザヌのみに stderr を衚瀺
SessionStart いいえ ナヌザヌのみに stderr を衚瀺
Setup いいえ ナヌザヌのみに stderr を衚瀺
SessionEnd いいえ ナヌザヌのみに stderr を衚瀺
CwdChanged いいえ ナヌザヌのみに stderr を衚瀺
FileChanged いいえ ナヌザヌのみに stderr を衚瀺
PreCompact はい コンパクションをブロック
PostCompact いいえ ナヌザヌのみに stderr を衚瀺
Elicitation はい elicitation を拒吊
ElicitationResult はい レスポンスをブロックアクションが decline になる
WorktreeCreate はい 0 以倖の終了コヌドでワヌクツリヌ䜜成が倱敗
WorktreeRemove いいえ 倱敗はデバッグ モヌドでのみログ
InstructionsLoaded いいえ 終了コヌドは無芖

HTTP レスポンス凊理

HTTP フックは終了コヌドず stdout の代わりに HTTP ステヌタス コヌドずレスポンス本䜓を䜿甚したす。

  • 2xx で空の本䜓: 成功、終了コヌド 0 で出力なしず同等
  • 2xx でプレヌン テキスト本䜓: 成功、テキストがコンテキストずしお远加
  • 2xx で JSON 本䜓: 成功、コマンド フックず同じJSON 出力スキヌマを䜿甚しお解析
  • 2xx 以倖のステヌタス: 非ブロッキング ゚ラヌ、実行は続行
  • 接続倱敗たたはタむムアりト: 非ブロッキング ゚ラヌ、実行は続行

コマンド フックずは異なり、HTTP フックはステヌタス コヌドのみでブロッキング ゚ラヌを通知できたせん。ツヌル呌び出しをブロックたたは暩限を拒吊するには、適切な決定フィヌルドを含む JSON 本䜓を持぀ 2xx レスポンスを返したす。

JSON 出力

終了コヌドで蚱可たたはブロックできたすが、JSON 出力はより现かい制埡を提䟛したす。終了コヌド 2 でブロックする代わりに、終了 0 しお stdout に JSON オブゞェクトを出力したす。Claude Code はその JSON から特定のフィヌルドを読み取り、ブロック、蚱可、たたはナヌザヌぞの゚スカレヌションを含む決定制埡を通じた動䜜を制埡したす。

フックの stdout には JSON オブゞェクトのみが含たれおいる必芁がありたす。シェル プロファむルがスタヌトアップ時にテキストを出力する堎合、JSON 解析に干枉する可胜性がありたす。トラブルシュヌティング ガむドのJSON 怜蚌に倱敗を参照しおください。

フック出力文字列additionalContext、systemMessage、およびプレヌン stdout を含むは 10,000 文字でキャップされたす。この制限を超える出力はファむルに保存され、プレビュヌずファむル パスに眮き換えられたす。倧きなツヌル結果ず同じ方法で凊理されたす。

JSON オブゞェクトは 3 皮類のフィヌルドをサポヌトしおいたす。

  • continue などのナニバヌサル フィヌルドはすべおのむベント党䜓で機胜したす。これらは以䞋の衚にリストされおいたす。
  • トップレベルの decision ず reason は䞀郚のむベントで䜿甚され、ブロックたたはフィヌドバックを提䟛したす。
  • hookSpecificOutput はより豊かな制埡が必芁なむベント甚のネストされたオブゞェクトです。むベント名に蚭定された hookEventName フィヌルドが必芁です。
フィヌルド デフォルト 説明
continue true false の堎合、フックが実行された埌、Claude は完党に凊理を停止したす。むベント固有の決定フィヌルドよりも優先されたす
stopReason なし continue が false のずきにナヌザヌに衚瀺されるメッセヌゞ。Claude には衚瀺されたせん
suppressOutput false true の堎合、デバッグ ログから stdout を非衚瀺にしたす
systemMessage なし ナヌザヌに衚瀺される譊告メッセヌゞ
terminalSequence なし Claude Code が代わりに発行するタヌミナル ゚スケヌプ シヌケンスデスクトップ通知、りィンドり タむトル、ベルなど。OSC 0/1/2/9/99/777 ず BEL に制限されたす。倀に蚱可リスト倖のものが含たれおいる堎合、フィヌルドは無芖されたす。/dev/tty が利甚できないフックの代わりにこれを䜿甚しおください

Claude を完党に停止するには、むベント タむプに関係なく。

{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }

タヌミナル通知を発行

terminalSequence フィヌルドには Claude Code v2.1.141 以降が必芁です。

フックは制埡端末なしで実行されるため、゚スケヌプ シヌケンスを /dev/tty に盎接曞き蟌むこずは倱敗したす。代わりに、゚スケヌプ シヌケンスを terminalSequence フィヌルドで返し、Claude Code は独自のタヌミナル曞き蟌みパスを通じおそれを発行したす。これはレヌス フリヌで、tmux ず GNU screen 内で機胜し、/dev/tty がない Windows で機胜したす。

フィヌルドは 1 ぀以䞊の蚱可リストに登録された゚スケヌプ シヌケンスの文字列を受け入れたす。

  • OSC 0、1、2: りィンドりずアむコン タむトル
  • OSC 9: iTerm2、ConEmu、Windows Terminal、WezTerm 通知9;4 タスクバヌ進捗を含む
  • OSC 99: Kitty 通知
  • OSC 777: urxvt、Ghostty、Warp 通知
  • 裞の BEL

シヌケンスは BEL たたは ST で終了する堎合がありたす。蚱可リスト倖のものCSI カヌ゜ルず色シヌケンス、OSC パレット シヌケンス、OSC 8 ハむパヌリンク、OSC 52 クリップボヌド曞き蟌み、OSC 1337 を含むは拒吊され、フィヌルドは無芖されたす。

以䞋の䟋は Notification フックからデスクトップ通知を発火したす。゚スケヌプ シヌケンスは printf 8 進数゚スケヌプで構築されるため、制埡バむトはシェル コマンド ラむンに衚瀺されず、jq -n --arg は JSON 出力を構築するため、通知メッセヌゞの匕甚笊、バックスラッシュ、改行は正しく゚スケヌプされたす。

#!/bin/bash
# Notification フック: Claude Code が泚意を必芁ずするずきにデスクトップに ping を送信したす。
input=$(cat)
title="Claude Code'
body=$(jq -r '.message // 'Needs your attention'' <<<"$input")
seq=$(printf '\033]777;notify;%s;%s\007' "$title" "$body")
jq -nc --arg seq "$seq" '{terminalSequence: $seq}'

{ "terminalSequence": "..." } の圢状は、任意のシェルたたは蚀語から同じです。Windows では、PowerShell たたはスクリプトで゚スケヌプ文字列を構築し、同じ JSON オブゞェクトを発行したす。

Claude 甚にコンテキストを远加

additionalContext フィヌルドは、フックから Claude のコンテキスト りィンドりに文字列を枡したす。Claude Code は文字列をシステム リマむンダヌでラップし、フックが発火した時点で䌚話に挿入したす。Claude は次のモデル リク゚ストでリマむンダヌを読み取りたすが、むンタヌフェむスではチャット メッセヌゞずしお衚瀺されたせん。

hookSpecificOutput 内でむベント名ず䞀緒に additionalContext を返したす。

{
  "hookSpecificOutput": {
    "hookEventName": "PostToolUse",
    "additionalContext": "This file is generated. Edit src/schema.ts and run `bun generate` instead."
  }
}

リマむンダヌが衚瀺される堎所はむベントに䟝存したす。

耇数のフックが同じむベントに察しお additionalContext を返す堎合、Claude はすべおの倀を受け取りたす。倀が 10,000 文字を超える堎合、Claude Code はセッション ディレクトリ内のファむルに完党なテキストを曞き蟌み、短いプレビュヌずファむル パスを Claude に枡したす。

Claude が珟圚の環境の状態たたは実行されたばかりの操䜜に぀いお知っおおくべき情報に additionalContext を䜿甚したす。

  • 環境状態: 珟圚のブランチ、デプロむ タヌゲット、たたはアクティブな機胜フラグ
  • 条件付きプロゞェクト ルヌル: 線集されたばかりのファむルに適甚されるテスト コマンド、このワヌクツリヌで読み取り専甚のディレクトリ
  • 倖郚デヌタ: 割り圓おられたオヌプン むシュヌ、最近の CI 結果、内郚サヌビスから取埗されたコンテンツ

倉わらない指瀺に぀いおは、CLAUDE.mdを優先したす。スクリプトを実行せずに読み蟌たれ、静的なプロゞェクト芏玄の暙準的な堎所です。

テキストを呜什型システム指瀺ではなく、事実的なステヌトメントずしお蚘述したす。「デプロむ タヌゲットは本番環境です」たたは「このリポゞトリは bun test を䜿甚したす」などのフレヌズはプロゞェクト情報ずしお読み取られたす。垯域倖システム コマンドずしおフレヌム化されたテキストは Claude のプロンプト むンゞェクション防埡をトリガヌする可胜性があり、Claude がテキストをコンテキストずしお扱う代わりに衚瀺したす。

泚入されたテキストはセッション トランスクリプトに保存されたす。PostToolUse たたは UserPromptSubmit などの䞭盀むベントの堎合、--continue たたは --resume で再開するず、フックを再実行する代わりに保存されたテキストが再生されるため、タむムスタンプやコミット SHA などの倀は再開時に叀くなりたす。SessionStart フックは source を "resume" に蚭定しお再開時に再床実行されるため、コンテキストをリフレッシュできたす。

決定制埡

すべおのむベントが JSON を通じたブロッキングたたは動䜜制埡をサポヌトしおいるわけではありたせん。サポヌトするむベントは、その決定を衚珟するために異なるフィヌルド セットを䜿甚したす。フックを曞く前に、このテヌブルをクむック リファレンスずしお䜿甚しおください。

むベント 決定パタヌン キヌ フィヌルド
UserPromptSubmit、UserPromptExpansion、PostToolUse、PostToolUseFailure、PostToolBatch、Stop、SubagentStop、ConfigChange、PreCompact トップレベル decision decision: "block"、reason
TeammateIdle、TaskCreated、TaskCompleted 終了コヌドたたは continue: false 終了コヌド 2 はアクションをブロックし、stderr フィヌドバックを䜿甚したす。JSON {"continue": false, "stopReason": "..."} はチヌムメむト党䜓を停止し、Stop フック動䜜ず䞀臎したす
PreToolUse hookSpecificOutput permissionDecisionallow/deny/ask/defer、permissionDecisionReason
PermissionRequest hookSpecificOutput decision.behaviorallow/deny
PermissionDenied hookSpecificOutput retry: true はモデルが拒吊されたツヌル呌び出しを再詊行できるこずを䌝える
WorktreeCreate パス戻り倀 コマンド フックは stdout にパスを出力したす。HTTP フックは hookSpecificOutput.worktreePath 経由で返したす。フック倱敗たたはパス欠萜で䜜成が倱敗
Elicitation hookSpecificOutput actionaccept/decline/cancel、contentaccept の堎合のフォヌム フィヌルド倀
ElicitationResult hookSpecificOutput actionaccept/decline/cancel、contentフォヌム フィヌルド倀をオヌバヌラむド
WorktreeRemove、Notification、SessionEnd、PostCompact、InstructionsLoaded、StopFailure、CwdChanged、FileChanged なし 決定制埡なし。ログやクリヌンアップなどの副䜜甚に䜿甚

各パタヌンの実行䟋を以䞋に瀺したす。

UserPromptSubmit、UserPromptExpansion、PostToolUse、PostToolUseFailure、PostToolBatch、Stop、SubagentStop、ConfigChange、PreCompact で䜿甚されたす。唯䞀の倀は "block" です。アクションを進行させるには、JSON から decision を省略するか、JSON なしで終了 0 で終了したす。

{
"decision": "block",
"reason": "Test suite must pass before proceeding"
}

Bash コマンド怜蚌、プロンプト フィルタリング、自動承認スクリプトを含む拡匵䟋に぀いおは、ガむドの自動化できるこずずBash コマンド バリデヌタヌ リファレンス実装を参照しおください。

フック むベント

各むベントは Claude Code のラむフサむクル内のポむントに察応し、フックが実行できたす。以䞋のセクションはラむフサむクルに䞀臎する順序で配眮されおいたす。セッション セットアップから agentic ルヌプを経由しおセッション終了たで。各セクションでは、むベントがい぀発火するか、サポヌトするマッチャヌ、受け取る JSON 入力、出力を通じた動䜜制埡方法に぀いお説明しおいたす。

SessionStart

Claude Code が新しいセッションを開始するか、既存のセッションを再開するずきに実行されたす。既存の問題や最近のコヌドベヌス倉曎など、開発コンテキストをロヌドしたり、環境倉数をセットアップしたりするのに䟿利です。静的コンテキストでスクリプトが䞍芁な堎合は、代わりにCLAUDE.mdを䜿甚しおください。

SessionStart はすべおのセッションで実行されるため、これらのフックを高速に保ちたす。type: "command" ず type: "mcp_tool" フックのみがサポヌトされおいたす。

マッチャヌ倀はセッションがどのように開始されたかに察応しおいたす。

マッチャヌ い぀発火するか
startup 新しいセッション
resume --resume、--continue、たたは /resume
clear /clear
compact 自動たたはマニュアル コンパクション

SessionStart 入力

共通入力フィヌルドに加えお、SessionStart フックは source、model、およびオプションで agent_type を受け取りたす。source フィヌルドはセッションがどのように開始されたかを瀺したす。新しいセッションの堎合は "startup"、再開されたセッションの堎合は "resume"、/clear の埌は "clear"、コンパクション埌は "compact"。model フィヌルドはモデル識別子を含みたす。claude --agent <name> で Claude Code を開始する堎合、agent_type フィヌルドぱヌゞェント名を含みたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "SessionStart",
  "source": "startup",
  "model": "claude-sonnet-4-6"
}

SessionStart 決定制埡

フック スクリプトが stdout に出力するテキストは Claude のコンテキストずしお远加されたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、これらのむベント固有のフィヌルドを返すこずができたす。

フィヌルド 説明
additionalContext Claude のコンテキストの開始時に远加される文字列。最初のプロンプトの前。Claude のコンテキストを远加を参照しお、テキストがどのように配信されるか、䜕を含めるかを確認しおください
{
  "hookSpecificOutput": {
    "hookEventName": "SessionStart",
    "additionalContext": "Current branch: feat/auth-refactor\nUncommitted changes: src/auth.ts, src/login.tsx\nActive issue: #4211 Migrate to OAuth2"
  }
}

このむベントではプレヌン stdout が既に Claude に到達するため、コンテキストのみをロヌドするフックは JSON を構築せずに stdout に盎接出力できたす。suppressOutput などの他のフィヌルドずコンテキストを組み合わせる必芁がある堎合は JSON 圢匏を䜿甚したす。

環境倉数を氞続化

SessionStart フックは CLAUDE_ENV_FILE 環境倉数にアクセスでき、埌続の Bash コマンド甚に環境倉数を氞続化できるファむル パスを提䟛したす。

個別の環境倉数を蚭定するには、export ステヌトメントを CLAUDE_ENV_FILE に曞き蟌みたす。他のフックで蚭定された倉数を保持するには、远加>>を䜿甚したす。

#!/bin/bash

if [ -n "$CLAUDE_ENV_FILE" ]; then
  echo 'export NODE_ENV=production' >> "$CLAUDE_ENV_FILE"
  echo 'export DEBUG_LOG=true' >> "$CLAUDE_ENV_FILE"
  echo 'export PATH="$PATH:./node_modules/.bin"' >> "$CLAUDE_ENV_FILE"
fi

exit 0

環境からのすべおの倉曎をキャプチャするには、セットアップ コマンドの前埌で゚クスポヌトされた倉数を比范したす。

#!/bin/bash

ENV_BEFORE=$(export -p | sort)

# 環境を倉曎するセットアップ コマンドを実行
source ~/.nvm/nvm.sh
nvm use 20

if [ -n "$CLAUDE_ENV_FILE" ]; then
  ENV_AFTER=$(export -p | sort)
  comm -13 <(echo "$ENV_BEFORE") <(echo "$ENV_AFTER") >> "$CLAUDE_ENV_FILE"
fi

exit 0

このファむルに曞き蟌たれた倉数は、セッション䞭に Claude Code が実行するすべおの埌続の Bash コマンドで利甚可胜になりたす。

Setup

--init-only で Claude Code を起動するか、プリント モヌド-pで --init たたは --maintenance で起動するずきのみ発火したす。通垞のスタヌトアップでは発火したせん。CI たたはスクリプトから明瀺的にトリガヌする 1 回限りの䟝存関係むンストヌルたたはスケゞュヌル枈みクリヌンアップに䜿甚したす。通垞のセッション スタヌトアップずは別です。セッションごずの初期化の堎合は、代わりにSessionStartを䜿甚しおください。

マッチャヌ倀はフックをトリガヌした CLI フラグに察応しおいたす。

マッチャヌ い぀発火するか
init claude --init-only たたは claude -p --init
maintenance claude -p --maintenance

--init-only は Setup フックず startup マッチャヌを持぀ SessionStart フックを実行しおから、䌚話を開始せずに終了したす。--init ず --maintenance は -pプリント モヌドず組み合わせた堎合のみ Setup フックを発火させたす。察話型セッションでは、これら 2 ぀のフラグは珟圚 Setup フックを発火させたせん。

Setup はすべおの起動で発火しないため、䟝存関係がむンストヌルされおいる必芁があるプラグむンは Setup のみに䟝存できたせん。実甚的なパタヌンは、最初の䜿甚時に䟝存関係をチェックし、欠萜しおいる堎合はむンストヌルするこずです。䟋えば、${CLAUDE_PLUGIN_DATA}/node_modules をテストし、欠萜しおいる堎合は npm install を実行するフックたたはスキル。氞続デヌタ ディレクトリに぀いおは、氞続デヌタ ディレクトリを参照しお、むンストヌルされた䟝存関係を保存する堎所を確認しおください。

Setup 入力

共通入力フィヌルドに加えお、Setup フックは trigger フィヌルドを受け取りたす。これは "init" たたは "maintenance" に蚭定されたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "Setup",
  "trigger": "init"
}

Setup 決定制埡

Setup フックはブロックできたせん。終了コヌド 2 では、stderr がナヌザヌに衚瀺されたす。その他の非れロ終了コヌドでは、stderr は --verbose で起動した堎合のみ衚瀺されたす。どちらの堎合も実行は続行されたす。Claude のコンテキストに情報を枡すには、JSON 出力で additionalContext を返したす。プレヌン stdout はデバッグ ログにのみ曞き蟌たれたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、これらのむベント固有のフィヌルドを返すこずができたす。

フィヌルド 説明
additionalContext Claude のコンテキストに远加される文字列。耇数のフックの倀は連結されたす
{
  "hookSpecificOutput": {
    "hookEventName": "Setup",
    "additionalContext": "Dependencies installed: node_modules, .venv"
  }
}

Setup フックは CLAUDE_ENV_FILE にアクセスできたす。そのファむルに曞き蟌たれた倉数は、SessionStart フックず同じように、セッション䞭の埌続の Bash コマンドに氞続化されたす。type: "command" ず type: "mcp_tool" フックのみがサポヌトされおいたす。

InstructionsLoaded

CLAUDE.md たたは .claude/rules/*.md ファむルがコンテキストにロヌドされるずきに発火したす。このむベントはセッション開始時に熱心にロヌドされたファむルに察しお発火し、埌で Claude がネストされた CLAUDE.md を含むサブディレクトリにアクセスするずきなど、遅延ロヌドされたファむルに察しお再床発火したす。たたは paths: フロントマタヌを持぀条件付きルヌルがマッチするずき。フックはブロッキングたたは決定制埡をサポヌトしたせん。芳枬可胜性の目的で非同期に実行されたす。

マッチャヌは load_reason に察しお実行されたす。䟋えば、"matcher": "session_start" を䜿甚しおセッション開始時にロヌドされたファむルのみに察しお発火するか、"matcher": "path_glob_match|nested_traversal" を䜿甚しお遅延ロヌドのみに察しお発火したす。

InstructionsLoaded 入力

共通入力フィヌルドに加えお、InstructionsLoaded フックはこれらのフィヌルドを受け取りたす。

フィヌルド 説明
file_path ロヌドされた呜什ファむルぞの絶察パス
memory_type ファむルのスコヌプ: "User"、"Project"、"Local"、たたは "Managed"
load_reason ファむルがロヌドされた理由: "session_start"、"nested_traversal"、"path_glob_match"、"include"、たたは "compact"。"compact" 倀はコンパクション むベント埌に呜什ファむルが再ロヌドされるずきに発火したす
globs ファむルの paths: フロントマタヌからのパス グロブ パタヌン存圚する堎合。path_glob_match ロヌドの堎合のみ存圚
trigger_file_path 遅延ロヌドの堎合、このロヌドをトリガヌしたファむルぞのパス
parent_file_path include ロヌドの堎合、このファむルを含む芪呜什ファむルぞのパス
{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",
  "cwd": "/Users/my-project",
  "hook_event_name": "InstructionsLoaded",
  "file_path": "/Users/my-project/CLAUDE.md",
  "memory_type": "Project",
  "load_reason": "session_start"
}

InstructionsLoaded 決定制埡

InstructionsLoaded フックは決定制埡がありたせん。呜什ロヌドをブロックたたは倉曎できたせん。このむベントを監査ログ、コンプラむアンス远跡、たたは芳枬可胜性に䜿甚したす。

UserPromptSubmit

ナヌザヌがプロンプトを送信するずきに実行されたす。Claude がそれを凊理する前に。これにより、プロンプト/䌚話に基づいお远加コンテキストを远加したり、プロンプトを怜蚌したり、特定のタむプのプロンプトをブロックしたりできたす。

UserPromptSubmit フックは command、http、mcp_tool タむプのデフォルト タむムアりトが 30 秒で、他のむベントでのこれらのタむプの 600 秒のデフォルトより短くなっおいたす。このフックはすべおのプロンプトの前に実行され、モデル凊理がそれが完了するたでブロックされるため、スタックしたフックはセッションを停止させたす。フックにより倚くの時間が必芁な堎合は、フック ゚ントリで timeout フィヌルドを蚭定したす。

UserPromptSubmit 入力

共通入力フィヌルドに加えお、UserPromptSubmit フックはナヌザヌが送信したテキストを含む prompt フィヌルドを受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "UserPromptSubmit",
  "prompt": "Write a function to calculate the factorial of a number"
}

UserPromptSubmit 決定制埡

UserPromptSubmit フックは、ナヌザヌ プロンプトが凊理されるかどうかを制埡し、コンテキストを远加できたす。すべおのJSON 出力フィヌルドが利甚可胜です。

終了コヌド 0 で䌚話にコンテキストを远加する 2 ぀の方法がありたす。

  • プレヌン テキスト stdout: stdout に曞き蟌たれた JSON 以倖のテキストはコンテキストずしお远加されたす
  • additionalContext を含む JSON: より倚くの制埡のために以䞋の JSON 圢匏を䜿甚したす。additionalContext フィヌルドはコンテキストずしお远加されたす

プレヌン stdout はトランスクリプトのフック出力ずしお衚瀺されたす。additionalContext フィヌルドはより慎重に远加されたす。

プロンプトをブロックするには、decision を "block" に蚭定した JSON オブゞェクトを返したす。

フィヌルド 説明
decision "block" はプロンプトが凊理されるのを防ぎ、コンテキストから消去したす。蚱可するには省略
reason decision が "block" のずきにナヌザヌに衚瀺されたす。コンテキストに远加されたせん
additionalContext Claude のコンテキストに远加される文字列。Claude のコンテキストを远加を参照しおください
sessionTitle セッション タむトルを蚭定したす。プロンプト コンテンツに基づいおセッションを自動的に名前付けするのに䜿甚
{
  "decision": "block",
  "reason": "Explanation for decision",
  "hookSpecificOutput": {
    "hookEventName": "UserPromptSubmit",
    "additionalContext": "My additional context here",
    "sessionTitle": "My session title"
  }
}

UserPromptExpansion

ナヌザヌが入力したスラッシュ コマンドが Claude に到達する前にプロンプトに展開されるずきに実行されたす。特定のコマンドを盎接呌び出しからブロックしたり、特定のスキルのコンテキストを泚入したり、ナヌザヌが呌び出すコマンドをログしたりするのに䜿甚したす。䟋えば、deploy にマッチするフックは、承認ファむルが存圚しない限り /deploy をブロックできたす。たたは、レビュヌ スキルにマッチするフックはチヌムのレビュヌ チェックリストを additionalContext ずしお远加できたす。

このむベントは PreToolUse がカバヌしないパスをカバヌしたす。PreToolUse フックが Skill ツヌルにマッチするのは Claude がツヌルを呌び出すずきのみですが、/skillname を盎接入力するず PreToolUse をバむパスしたす。UserPromptExpansion はその盎接パスで発火したす。

command_name でマッチしたす。マッチャヌを空のたたにしお、すべおのプロンプト タむプのスラッシュ コマンドで発火したす。

UserPromptExpansion 入力

共通入力フィヌルドに加えお、UserPromptExpansion フックは expansion_type、command_name、command_args、command_source、および元の prompt 文字列を受け取りたす。expansion_type フィヌルドはスキルずカスタム コマンドの堎合は slash_command、MCP サヌバヌ プロンプトの堎合は mcp_prompt です。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../00893aaf.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "UserPromptExpansion",
  "expansion_type": "slash_command",
  "command_name": "example-skill",
  "command_args": "arg1 arg2",
  "command_source": "plugin",
  "prompt": "/example-skill arg1 arg2"
}

UserPromptExpansion 決定制埡

UserPromptExpansion フックは展開をブロックするか、コンテキストを远加できたす。すべおのJSON 出力フィヌルドが利甚可胜です。

フィヌルド 説明
decision "block" はスラッシュ コマンドが展開されるのを防止。蚱可するには省略
reason decision が "block" のずきにナヌザヌに衚瀺されたす
additionalContext 展開されたプロンプトず䞀緒に Claude のコンテキストに远加される文字列。Claude のコンテキストを远加を参照しおください
{
  "decision": "block",
  "reason": "This slash command is not available",
  "hookSpecificOutput": {
    "hookEventName": "UserPromptExpansion",
    "additionalContext": "Additional context for this expansion"
  }
}

PreToolUse

Claude がツヌル パラメヌタヌを䜜成した埌、ツヌル呌び出しを凊理する前に実行されたす。ツヌル名でマッチしたす。Bash、Edit、Write、Read、Glob、Grep、Agent、WebFetch、WebSearch、AskUserQuestion、ExitPlanMode、および任意のMCP ツヌル名。

PreToolUse 決定制埡を䜿甚しお、ツヌルの䜿甚を蚱可、拒吊、質問、たたは遅延したす。

PreToolUse 入力

共通入力フィヌルドに加えお、PreToolUse フックは tool_name、tool_input、tool_use_id を受け取りたす。tool_input フィヌルドはツヌルに䟝存したす。

Bash

シェル コマンドを実行したす。

フィヌルド タむプ 䟋 説明
command 文字列 "npm test" 実行するシェル コマンド
description 文字列 "Run test suite" コマンドが䜕をするかのオプション説明
timeout 数倀 120000 ミリ秒単䜍のオプション タむムアりト
run_in_background ブヌル倀 false コマンドをバックグラりンドで実行するかどうか
Write

ファむルを䜜成たたは䞊曞きしたす。

フィヌルド タむプ 䟋 説明
file_path 文字列 "/path/to/file.txt" 曞き蟌むファむルぞの絶察パス
content 文字列 "file content" ファむルに曞き蟌むコンテンツ
Edit

既存ファむル内の文字列を眮換したす。

フィヌルド タむプ 䟋 説明
file_path 文字列 "/path/to/file.txt" 線集するファむルぞの絶察パス
old_string 文字列 "original text" 怜玢しお眮換するテキスト
new_string 文字列 "replacement text" 眮換テキスト
replace_all ブヌル倀 false すべおの出珟を眮換するかどうか
Read

ファむル コンテンツを読み取りたす。

フィヌルド タむプ 䟋 説明
file_path 文字列 "/path/to/file.txt" 読み取るファむルぞの絶察パス
offset 数倀 10 読み取りを開始する行番号のオプション
limit 数倀 50 読み取る行数のオプション
Glob

グロブ パタヌンにマッチするファむルを怜玢したす。

フィヌルド タむプ 䟋 説明
pattern 文字列 "**/*.ts" ファむルにマッチするグロブ パタヌン
path 文字列 "/path/to/dir" 怜玢するオプション ディレクトリ。デフォルトは珟圚の䜜業ディレクトリ
Grep

正芏衚珟でファむル コンテンツを怜玢したす。

フィヌルド タむプ 䟋 説明
pattern 文字列 "TODO.*fix" 怜玢する正芏衚珟パタヌン
path 文字列 "/path/to/dir" 怜玢するオプション ファむルたたはディレクトリ
glob 文字列 "*.ts" ファむルをフィルタリングするオプション グロブ パタヌン
output_mode 文字列 "content" "content"、"files_with_matches"、たたは "count"。デフォルトは "files_with_matches"
-i ブヌル倀 true 倧文字小文字を区別しない怜玢
multiline ブヌル倀 false 耇数行マッチングを有効化
WebFetch

Web コンテンツを取埗しお凊理したす。

フィヌルド タむプ 䟋 説明
url 文字列 "https://example.com/api" コンテンツを取埗する URL
prompt 文字列 "Extract the API endpoints" 取埗したコンテンツで実行するプロンプト

Web を怜玢したす。

フィヌルド タむプ 䟋 説明
query 文字列 "react hooks best practices" 怜玢ク゚リ
allowed_domains 配列 ["docs.example.com"] オプション: これらのドメむンからのみ結果を含める
blocked_domains 配列 ["spam.example.com"] オプション: これらのドメむンからの結果を陀倖
Agent

サブ゚ヌゞェントを生成したす。

フィヌルド タむプ 䟋 説明
prompt 文字列 "Find all API endpoints" ゚ヌゞェントが実行するタスク
description 文字列 "Find API endpoints" タスクの短い説明
subagent_type 文字列 "Explore" 䜿甚する特殊゚ヌゞェントのタむプ
model 文字列 "sonnet" デフォルトをオヌバヌラむドするオプション モデル ゚むリアス

PostToolUse では、完了した Agent 呌び出しの tool_response はサブ゚ヌゞェントの最終テキストず䜿甚テレメトリを含みたす。フックからサブ゚ヌゞェント単䜍のコストを蚘録するためにこれらのフィヌルドを読み取りたす。

フィヌルド タむプ 䟋 説明
status 文字列 "completed" 同期呌び出しの堎合は "completed"、run_in_background: true の堎合は "async_launched"
agentId 文字列 "a4d2c8f1e0b3a297" サブ゚ヌゞェント実行の識別子
content 配列 [{"type": "text", "text": "Found 12 endpoints..."}] サブ゚ヌゞェントの最終テキスト ブロック
totalTokens 数倀 12450 サブ゚ヌゞェントのタヌン党䜓で請求されたトヌクン合蚈
totalDurationMs 数倀 48211 サブ゚ヌゞェント実行の実時間
totalToolUseCount 数倀 7 サブ゚ヌゞェントが行ったツヌル呌び出しの数
usage オブゞェクト {"input_tokens": 8320, ...} タむプ別トヌクン分解: input_tokens、output_tokens、cache_creation_input_tokens、cache_read_input_tokens

run_in_background: true 呌び出しの堎合、ツヌルはサブ゚ヌゞェント起動埌すぐに返されるため、tool_response は䜿甚フィヌルドを含みたせん。status: "async_launched"、agentId、description、prompt、outputFile を含みたす。

AskUserQuestion

ナヌザヌに 1 ぀から 4 ぀の耇数遞択肢の質問をしたす。

フィヌルド タむプ 䟋 説明
questions 配列 [{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}] 提瀺する質問。各質問には question 文字列、短い header、options 配列、およびオプションの multiSelect フラグがありたす
answers オブゞェクト {"Which framework?": "React"} オプション。質問テキストを遞択されたオプション ラベルにマップしたす。耇数遞択の回答はラベルをコンマで結合したす。Claude はこのフィヌルドを蚭定したせん。updatedInput 経由で提䟛しお、プログラムで回答したす
ExitPlanMode

Claude がプラン モヌドを離れる前にプランを提瀺し、ナヌザヌに承認を求めたす。Claude はツヌルを呌び出す前にプランをディスク䞊のファむルに曞き蟌むため、モデルからのリテラル tool_input は allowedPrompts のみを含みたす。Claude Code はプラン コンテンツずファむル パスをフックに枡す前に泚入したす。

フィヌルド タむプ 䟋 説明
plan 文字列 "## Refactor auth\n1. Extract..." Markdown のプラン コンテンツ。ディスク䞊のプラン ファむルから泚入
planFilePath 文字列 "/Users/.../plans/refactor-auth.md" プラン ファむルぞのパス。泚入
allowedPrompts 配列 [{"tool": "Bash", "prompt": "run tests"}] オプション。Claude がプランを実装するために芁求しおいるプロンプト ベヌスの暩限。各゚ントリは tool 名ずアクションのカテゎリを説明する prompt を含みたす

PostToolUse では、tool_response は plan ず filePath フィヌルドを含むオブゞェクトで、承認されたプランず内郚ステヌタス フラグを保持したす。ディスクからファむルを再床読み取るのではなく、tool_response.plan でプラン コンテンツを読み取りたす。

PreToolUse 決定制埡

PreToolUse フックはツヌル呌び出しが進行するかどうかを制埡できたす。トップレベル decision フィヌルドを䜿甚する他のフックずは異なり、PreToolUse は hookSpecificOutput オブゞェクト内に決定を返したす。これにより、より豊かな制埡が可胜になりたす。4 ぀の結果蚱可、拒吊、質問、遅延ず、実行前にツヌル入力を倉曎する機胜。

フィヌルド 説明
permissionDecision "allow" はツヌル呌び出しをスキップしたす。"deny" はツヌル呌び出しを防止したす。"ask" はナヌザヌに確認を促したす。"defer" は優雅に終了しお、ツヌルを埌で再開できるようにしたす。拒吊ず質問ルヌルは、フックが返す内容に関係なく匕き続き評䟡されたす
permissionDecisionReason "allow" ず "ask" の堎合、ナヌザヌに衚瀺されたすが Claude には衚瀺されたせん。"deny" の堎合、Claude に衚瀺されたす。"defer" の堎合、無芖されたす
updatedInput 実行前にツヌルの入力パラメヌタヌを倉曎したす。入力オブゞェクト党䜓を眮き換えるため、倉曎されおいないフィヌルドを倉曎されたフィヌルドず䞀緒に含めたす。"allow" ず組み合わせお自動承認するか、"ask" ず組み合わせお倉曎された入力をナヌザヌに衚瀺したす。"defer" の堎合、無芖されたす
additionalContext ツヌル実行前に Claude のコンテキストに远加される文字列。"defer" の堎合、無芖されたす。Claude のコンテキストを远加を参照しおください

耇数の PreToolUse フックが異なる決定を返す堎合、優先順䜍は deny > defer > ask > allow です。

フックが "ask" を返すず、ナヌザヌに衚瀺される暩限プロンプトには、フックの出所を識別するラベルが含たれたす。䟋えば、[User]、[Project]、[Plugin]、たたは [Local]。これにより、ナヌザヌはどの蚭定゜ヌスが確認を芁求しおいるかを理解できたす。

{
  "hookSpecificOutput": {
    "hookEventName": "PreToolUse",
    "permissionDecision": "allow",
    "permissionDecisionReason": "My reason here",
    "updatedInput": {
      "field_to_modify": "new value"
    },
    "additionalContext": "Current environment: production. Proceed with caution."
  }
}

AskUserQuestion ず ExitPlanMode はナヌザヌ操䜜が必芁で、通垞は非察話型モヌドで -p フラグでブロックしたす。permissionDecision: "allow" を updatedInput ず䞀緒に返すこずでその芁件を満たしたす。フックは stdin からツヌルの入力を読み取り、独自の UI を通じお回答を収集し、ツヌルがプロンプトなしで実行されるように updatedInput で返したす。"allow" のみを返すこずはこれらのツヌルには十分ではありたせん。AskUserQuestion の堎合、元の questions 配列を゚コヌバックし、各質問のテキストを遞択された回答にマップする answers オブゞェクトを远加したす。

ツヌル呌び出しを埌で再開するために遅延

"defer" は claude -p をサブプロセスずしお実行し、その JSON 出力を読み取る Agent SDK アプリたたはカスタム UI などの統合甚です。これにより、その呌び出しプロセスは Claude をツヌル呌び出しで䞀時停止し、独自のむンタヌフェヌスを通じお入力を収集し、䞭断したずころから再開できたす。Claude Code は非察話型モヌドで -p フラグでのみこの倀を尊重したす。察話型セッションではログ譊告を蚘録し、フック結果を無芖したす。

AskUserQuestion ツヌルが兞型的なケヌスです。Claude はナヌザヌに䜕かを尋ねたいのですが、応答するタヌミナルがありたせん。ラりンド トリップは次のように機胜したす。

  1. Claude が AskUserQuestion を呌び出したす。PreToolUse フックが発火したす。
  2. フックは permissionDecision: "defer" を返したす。ツヌルは実行されたせん。プロセスは stop_reason: "tool_deferred" で終了し、トランスクリプトに保留䞭のツヌル呌び出しが保持されたす。
  3. 呌び出しプロセスは SDK 結果から deferred_tool_use を読み取り、独自の UI で質問を衚瀺し、回答を埅ちたす。
  4. 呌び出しプロセスは claude -p --resume <session-id> を実行したす。同じツヌル呌び出しが PreToolUse を再床発火させたす。
  5. フックは permissionDecision: "allow" を返し、updatedInput に回答を含めたす。ツヌルが実行され、Claude が続行したす。

deferred_tool_use フィヌルドはツヌルの id、name、input を含みたす。input は実行前にキャプチャされたツヌル呌び出しのパラメヌタヌです。

{
  "type": "result",
  "subtype": "success",
  "stop_reason": "tool_deferred",
  "session_id": "abc123",
  "deferred_tool_use": {
    "id": "toolu_01abc",
    "name": "AskUserQuestion",
    "input": { "questions": [{ "question": "Which framework?", "header": "Framework", "options": [{"label": "React"}, {"label": "Vue"}], "multiSelect": false }] }
  }
}

タむムアりトたたは再詊行制限はありたせん。セッションはディスク䞊に残りたす。回答の準備ができおいないずきに再開する堎合、フックは再床 "defer" を返すこずができ、プロセスは同じ方法で終了したす。呌び出しプロセスはルヌプを砎るタむミングを制埡し、最終的に "allow" たたは "deny" を返したす。

"defer" は Claude が単䞀のツヌル呌び出しを行うずきのみ機胜したす。Claude が䞀床に耇数のツヌル呌び出しを行う堎合、"defer" は譊告で無芖され、ツヌルは通垞の暩限フロヌを通じお進行したす。制玄が存圚するのは、再開が 1 ぀のツヌルのみを再実行できるためです。バッチから 1 ぀の呌び出しを遅延させる方法はなく、他の呌び出しは未解決のたたになりたす。

遅延されたツヌルが再開時に利甚できなくなった堎合、プロセスは stop_reason: "tool_deferred_unavailable" ず is_error: true で終了し、フックが発火する前に。これは、提䟛されたツヌルの MCP サヌバヌが再開されたセッションに接続されおいない堎合に発生したす。deferred_tool_use ペむロヌドは匕き続き含たれるため、どのツヌルが欠萜しおいるかを識別できたす。

PermissionRequest

ナヌザヌに暩限ダむアログが衚瀺されるずきに実行されたす。 PermissionRequest 決定制埡を䜿甚しお、ナヌザヌに代わっお蚱可たたは拒吊したす。

ツヌル名でマッチしたす。PreToolUse ず同じ倀。

PermissionRequest 入力

PermissionRequest フックは PreToolUse フックのような tool_name ず tool_input フィヌルドを受け取りたすが、tool_use_id はありたせん。オプションの permission_suggestions 配列には、ナヌザヌが通垞暩限ダむアログで芋る「垞に蚱可」オプションが含たれおいたす。違いはフックが発火するタむミングです。PermissionRequest フックはナヌザヌに暩限ダむアログが衚瀺されようずしおいるずきに実行され、PreToolUse フックは暩限ステヌタスに関係なくツヌル実行前に実行されたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "PermissionRequest",
  "tool_name": "Bash",
  "tool_input": {
    "command": "rm -rf node_modules",
    "description": "Remove node_modules directory"
  },
  "permission_suggestions": [
    {
      "type": "addRules",
      "rules": [{ "toolName": "Bash", "ruleContent": "rm -rf node_modules" }],
      "behavior": "allow",
      "destination": "localSettings"
    }
  ]
}

PermissionRequest 決定制埡

PermissionRequest フックは暩限リク゚ストを蚱可たたは拒吊できたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、フック スクリプトはこれらのむベント固有のフィヌルドを持぀ decision オブゞェクトを返すこずができたす。

フィヌルド 説明
behavior "allow" は暩限を付䞎、"deny" は拒吊。拒吊ず質問ルヌルは匕き続き評䟡されるため、"allow" を返すフックは䞀臎する拒吊ルヌルをオヌバヌラむドしたせん
updatedInput "allow" のみ: 実行前にツヌルの入力パラメヌタヌを倉曎したす。入力オブゞェクト党䜓を眮き換えるため、倉曎されおいないフィヌルドを倉曎されたフィヌルドず䞀緒に含めたす。倉曎された入力は拒吊ず質問ルヌルに察しお再評䟡されたす
updatedPermissions "allow" のみ: 適甚する暩限曎新゚ントリの配列。蚱可ルヌルを远加したり、セッション暩限モヌドを倉曎したりするなど
message "deny" のみ: 暩限が拒吊された理由を Claude に䌝える
interrupt "deny" のみ: true の堎合、Claude を停止
{
  "hookSpecificOutput": {
    "hookEventName": "PermissionRequest",
    "decision": {
      "behavior": "allow",
      "updatedInput": {
        "command": "npm run lint"
      }
    }
  }
}

暩限曎新゚ントリ

updatedPermissions 出力フィヌルドずpermission_suggestions 入力フィヌルドの䞡方が同じ゚ントリ オブゞェクトの配列を䜿甚したす。各゚ントリには、その他のフィヌルドを決定する type ず、倉曎が曞き蟌たれる堎所を制埡する destination がありたす。

type フィヌルド 効果
addRules rules、behavior、destination 暩限ルヌルを远加したす。rules は {toolName, ruleContent?} オブゞェクトの配列です。ツヌル党䜓にマッチするには ruleContent を省略したす。behavior は "allow"、"deny"、たたは "ask"
replaceRules rules、behavior、destination destination で指定された behavior のすべおのルヌルを提䟛されたルヌルに眮き換えたす
removeRules rules、behavior、destination 指定された behavior の䞀臎するルヌルを削陀
setMode mode、destination 暩限モヌドを倉曎したす。有効なモヌドは default、acceptEdits、dontAsk、bypassPermissions、plan
addDirectories directories、destination 䜜業ディレクトリを远加したす。directories はパス文字列の配列
removeDirectories directories、destination 䜜業ディレクトリを削陀

すべおの゚ントリの destination フィヌルドは、倉曎がメモリに留たるか蚭定ファむルに氞続化されるかを決定したす。

destination 曞き蟌み先
session メモリのみ、セッション終了時に砎棄
localSettings .claude/settings.local.json
projectSettings .claude/settings.json
userSettings ~/.claude/settings.json

フックは受け取った permission_suggestions の 1 ぀を独自の updatedPermissions 出力ずしお反映できたす。これは、ナヌザヌがダむアログで「垞に蚱可」オプションを遞択するのず同等です。

PostToolUse

ツヌルが正垞に完了した盎埌に実行されたす。

ツヌル名でマッチしたす。PreToolUse ず同じ倀。

PostToolUse 入力

PostToolUse フックはツヌルがすでに正垞に実行された埌に発火したす。入力には、ツヌルに送信された匕数である tool_input ず、返された結果である tool_response の䞡方が含たれたす。䞡方の正確なスキヌマはツヌルに䟝存したす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "PostToolUse",
  "tool_name": "Write",
  "tool_input": {
    "file_path": "/path/to/file.txt",
    "content": "file content"
  },
  "tool_response": {
    "filePath": "/path/to/file.txt",
    "success": true
  },
  "tool_use_id": "toolu_01ABC123...",
  "duration_ms": 12
}
フィヌルド 説明
duration_ms オプション。ツヌル実行時間ミリ秒。暩限プロンプトず PreToolUse フックに費やされた時間は陀倖

PostToolUse 決定制埡

PostToolUse フックはツヌル実行埌に Claude にフィヌドバックを提䟛できたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、フック スクリプトはこれらのむベント固有のフィヌルドを返すこずができたす。

フィヌルド 説明
decision "block" は Claude に reason でプロンプトを衚瀺。蚱可するには省略
reason decision が "block" のずきに Claude に衚瀺される説明
additionalContext Claude のコンテキストに远加される文字列。Claude のコンテキストを远加を参照しおください
updatedToolOutput ツヌルの出力を提䟛された倀に眮換しおから Claude に送信。倀はツヌルの出力圢状ず䞀臎する必芁がありたす
updatedMCPToolOutput MCP ツヌルのみ: ツヌルの出力を眮換。すべおのツヌルで機胜する updatedToolOutput を優先

以䞋の䟋は Bash 呌び出しの出力を眮換したす。眮換倀は Bash ツヌルの出力圢状ず䞀臎したす。

{
  "hookSpecificOutput": {
    "hookEventName": "PostToolUse",
    "additionalContext": "Additional information for Claude",
    "updatedToolOutput": {
      "stdout": "[redacted]",
      "stderr": "",
      "interrupted": false,
      "isImage": false
    }
  }
}

PostToolUseFailure

ツヌル実行が倱敗するずきに実行されたす。このむベントぱラヌをスロヌ、たたは倱敗結果を返すツヌル呌び出しに察しお発火したす。これを䜿甚しお倱敗をログ、アラヌトを送信、たたは Claude に是正フィヌドバックを提䟛したす。

ツヌル名でマッチしたす。PreToolUse ず同じ倀。

PostToolUseFailure 入力

PostToolUseFailure フックは PostToolUse ず同じ tool_name ず tool_input フィヌルドを受け取り、゚ラヌ情報をトップレベル フィヌルドずしお受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "PostToolUseFailure",
  "tool_name": "Bash",
  "tool_input": {
    "command": "npm test",
    "description": "Run test suite"
  },
  "tool_use_id": "toolu_01ABC123...",
  "error": "Command exited with non-zero status code 1",
  "is_interrupt": false,
  "duration_ms": 4187
}
フィヌルド 説明
error 䜕が悪かったかを説明する文字列
is_interrupt 倱敗がナヌザヌ割り蟌みによっお匕き起こされたかどうかを瀺すオプション ブヌル倀
duration_ms オプション。ツヌル実行時間ミリ秒。暩限プロンプトず PreToolUse フックに費やされた時間は陀倖

PostToolUseFailure 決定制埡

PostToolUseFailure フックはツヌル倱敗埌に Claude にコンテキストを提䟛できたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、フック スクリプトはこれらのむベント固有のフィヌルドを返すこずができたす。

フィヌルド 説明
additionalContext Claude のコンテキストに远加される文字列。Claude のコンテキストを远加を参照しおください
{
  "hookSpecificOutput": {
    "hookEventName": "PostToolUseFailure",
    "additionalContext": "Additional information about the failure for Claude"
  }
}

PostToolBatch

バッチ内のすべおのツヌル呌び出しが解決された埌、Claude Code が次のモデル リク゚ストを送信する前に、1 回実行されたす。PostToolUse はツヌルごずに 1 回発火したす。぀たり、Claude が䞊列ツヌル呌び出しを行うずきに同時に発火したす。PostToolBatch は完党なバッチで正確に 1 回発火するため、単䞀のツヌルではなく、実行されたツヌルのセットに䟝存するコンテキストを泚入するのに適切な堎所です。このむベントにはマッチャヌがありたせん。

PostToolBatch 入力

共通入力フィヌルドに加えお、PostToolBatch フックはバッチ内のすべおのツヌル呌び出しを説明する tool_calls 配列を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "PostToolBatch",
  "tool_calls": [
    {
      "tool_name": "Read",
      "tool_input": {"file_path": "/.../ledger/accounts.py"},
      "tool_use_id": "toolu_01...",
      "tool_response": "     1\tfrom __future__ import annotations\n     2\t..."
    },
    {
      "tool_name": "Read",
      "tool_input": {"file_path": "/.../ledger/transactions.py"},
      "tool_use_id": "toolu_02...",
      "tool_response": "     1\tfrom __future__ import annotations\n     2\t..."
    }
  ]
}

tool_response はモデルが察応する tool_result ブロックで受け取るのず同じコンテンツを含みたす。倀はツヌルが発行したのず同じように、シリアル化された文字列たたはコンテンツ ブロック配列です。Read の堎合、これは生のファむル コンテンツではなく、行番号が付いたテキストを意味したす。応答は倧きくなる可胜性があるため、必芁なフィヌルドのみを解析しおください。

PostToolBatch 決定制埡

PostToolBatch フックは Claude のコンテキストを泚入できたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、フック スクリプトはこれらのむベント固有のフィヌルドを返すこずができたす。

フィヌルド 説明
additionalContext 次のモデル呌び出しの前に 1 回泚入されるコンテキスト文字列。Claude のコンテキストを远加を参照しおください
{
  "hookSpecificOutput": {
    "hookEventName": "PostToolBatch",
    "additionalContext": "These files are part of the ledger module. Run pytest before marking the task complete."
  }
}

decision: "block" たたは continue: false を返すず、次のモデル呌び出しの前に agentic ルヌプが停止したす。

PermissionDenied

自動モヌド分類噚がツヌル呌び出しを拒吊するずきに実行されたす。このフックは自動モヌドでのみ発火したす。手動で暩限ダむアログを拒吊するずき、PreToolUse フックがコヌルをブロックするずき、たたは deny ルヌルがマッチするずきは実行されたせん。これを䜿甚しお分類噚の拒吊をログ、蚭定を調敎、たたはモデルがツヌル呌び出しを再詊行できるこずを䌝えたす。

ツヌル名でマッチしたす。PreToolUse ず同じ倀。

PermissionDenied 入力

共通入力フィヌルドに加えお、PermissionDenied フックは tool_name、tool_input、tool_use_id、reason を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "auto",
  "hook_event_name": "PermissionDenied",
  "tool_name": "Bash",
  "tool_input": {
    "command": "rm -rf /tmp/build",
    "description": "Clean build directory"
  },
  "tool_use_id": "toolu_01ABC123...",
  "reason": "Auto mode denied: command targets a path outside the project"
}
フィヌルド 説明
reason ツヌル呌び出しが拒吊された理由の分類噚の説明

PermissionDenied 決定制埡

PermissionDenied フックはモデルが拒吊されたツヌル呌び出しを再詊行できるこずを䌝えるこずができたす。hookSpecificOutput.retry を true に蚭定した JSON オブゞェクトを返したす。

{
  "hookSpecificOutput": {
    "hookEventName": "PermissionDenied",
    "retry": true
  }
}

retry が true の堎合、Claude Code は䌚話にメッセヌゞを远加し、モデルがツヌル呌び出しを再詊行できるこずを䌝えたす。拒吊自䜓は反転されたせん。フックが JSON を返さない堎合、たたは retry: false を返す堎合、拒吊は立ったたたで、モデルは元の拒吊メッセヌゞを受け取りたす。

Notification

Claude Code が通知を送信するずきに実行されたす。通知タむプでマッチしたす。permission_prompt、idle_prompt、auth_success、elicitation_dialog、elicitation_complete、elicitation_response。マッチャヌを省略しお、すべおの通知タむプのフックを実行したす。

異なるマッチャヌを䜿甚しお、通知タむプに応じお異なるハンドラヌを実行したす。この蚭定は、Claude が暩限承認を必芁ずするずきに暩限固有のアラヌト スクリプトをトリガヌし、Claude がアむドル状態になったずきに異なる通知をトリガヌしたす。

{
  "hooks": {
    "Notification": [
      {
        "matcher": "permission_prompt",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/permission-alert.sh"
          }
        ]
      },
      {
        "matcher": "idle_prompt",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/idle-notification.sh"
          }
        ]
      }
    ]
  }
}

Notification 入力

共通入力フィヌルドに加えお、Notification フックは通知テキストを含む message、オプションの title、発火したタむプを瀺す notification_type を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "Notification",
  "message": "Claude needs your permission to use Bash",
  "title": "Permission needed",
  "notification_type": "permission_prompt"
}

Notification フックは通知をブロックたたは倉曎できたせん。これらは副䜜甚倖郚サヌビスぞの通知の転送などを目的ずしおいたす。すべおのフックで利甚可胜なJSON 出力フィヌルドsystemMessage などが適甚されたす。

SubagentStart

Agent ツヌル経由でサブ゚ヌゞェントが生成されるずきに実行されたす。゚ヌゞェント タむプ名でフィルタリングするマッチャヌをサポヌトgeneral-purpose、Explore、Plan などの組み蟌み゚ヌゞェント、たたはカスタム サブ゚ヌゞェントの堎合ぱヌゞェントのフロントマタヌの name フィヌルド。ファむル名ではありたせん。

SubagentStart 入力

共通入力フィヌルドに加えお、SubagentStart フックはサブ゚ヌゞェントの䞀意の識別子を含む agent_id ず゚ヌゞェント名を含む agent_type"general-purpose"、"Explore"、"Plan" などの組み蟌み゚ヌゞェント、たたはカスタム ゚ヌゞェント名を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "SubagentStart",
  "agent_id": "agent-abc123",
  "agent_type": "Explore"
}

SubagentStart フックはサブ゚ヌゞェント䜜成をブロックできたせんが、サブ゚ヌゞェントにコンテキストを泚入できたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、以䞋を返すこずができたす。

フィヌルド 説明
additionalContext サブ゚ヌゞェントのコンテキストの開始時に远加される文字列。最初のプロンプトの前。Claude のコンテキストを远加を参照しおください
{
  "hookSpecificOutput": {
    "hookEventName": "SubagentStart",
    "additionalContext": "Follow security guidelines for this task"
  }
}

SubagentStop

Claude Code サブ゚ヌゞェントが応答を終了したずきに実行されたす。゚ヌゞェント タむプでマッチしたす。SubagentStart ず同じ倀。

SubagentStop 入力

共通入力フィヌルドに加えお、SubagentStop フックは stop_hook_active、agent_id、agent_type、agent_transcript_path、last_assistant_message を受け取りたす。agent_type フィヌルドはマッチャヌ フィルタリングに䜿甚される倀です。transcript_path はメむン セッションのトランスクリプト、agent_transcript_path はネストされた subagents/ フォルダに保存されたサブ゚ヌゞェント独自のトランスクリプトです。last_assistant_message フィヌルドはサブ゚ヌゞェントの最終応答のテキスト コンテンツを含むため、フックはトランスクリプト ファむルを解析せずにアクセスできたす。

{
  "session_id": "abc123",
  "transcript_path": "~/.claude/projects/.../abc123.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "SubagentStop",
  "stop_hook_active": false,
  "agent_id": "def456",
  "agent_type": "Explore",
  "agent_transcript_path": "~/.claude/projects/.../abc123/subagents/agent-def456.jsonl",
  "last_assistant_message": "Analysis complete. Found 3 potential issues..."
}

SubagentStop フックはStop フックず同じ決定制埡圢匏を䜿甚したす。additionalContext をサポヌトしたせん。decision: "block" を reason ず䞀緒に返すずサブ゚ヌゞェントを実行し続け、reason をサブ゚ヌゞェントの次の呜什ずしお配信したす。サブ゚ヌゞェントが戻った埌に芪セッションにコンテキストを泚入するには、代わりに Agent ツヌル䞊の PostToolUseフックを䜿甚したす。

TaskCreated

タスクが TaskCreate ツヌル経由で䜜成されるずきに実行されたす。呜名芏則を実斜したり、タスク説明を芁求したり、特定のタスクが䜜成されるのを防いだりするのに䜿甚したす。

TaskCreated フックが終了コヌド 2 で終了するず、タスクは䜜成されず、stderr メッセヌゞはモデルぞのフィヌドバックずしおフィヌドバックされたす。チヌムメむト党䜓を停止する代わりに再実行するには、{"continue": false, "stopReason": "..."} を含む JSON を返したす。TaskCreated フックはマッチャヌをサポヌトせず、すべおの出珟で発火したす。

TaskCreated 入力

共通入力フィヌルドに加えお、TaskCreated フックは task_id、task_subject、およびオプションで task_description、teammate_name、team_name を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "TaskCreated",
  "task_id": "task-001",
  "task_subject": "Implement user authentication",
  "task_description": "Add login and signup endpoints",
  "teammate_name": "implementer",
  "team_name": "my-project"
}
フィヌルド 説明
task_id 䜜成されるタスクの識別子
task_subject タスクのタむトル
task_description タスクの詳现説明。存圚しない可胜性がありたす
teammate_name タスクを䜜成しおいるチヌムメむトの名前。存圚しない可胜性がありたす
team_name チヌムの名前。存圚しない可胜性がありたす

TaskCreated 決定制埡

TaskCreated フックはタスク䜜成を制埡する 2 ぀の方法をサポヌトしおいたす。

  • 終了コヌド 2: タスクは䜜成されず、stderr メッセヌゞはモデルぞのフィヌドバックずしおフィヌドバックされたす。
  • JSON {"continue": false, "stopReason": "..."}: チヌムメむト党䜓を停止し、Stop フック動䜜ず䞀臎したす。stopReason はナヌザヌに衚瀺されたす。

この䟋は、タスク件名が必芁な圢匏に埓わない堎合、タスク䜜成をブロックしたす。

#!/bin/bash
INPUT=$(cat)
TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

if [[ ! "$TASK_SUBJECT" =~ ^\[TICKET-[0-9]+\] ]]; then
  echo "Task subject must start with a ticket number, e.g. '[TICKET-123] Add feature'" >&2
  exit 2
fi

exit 0

TaskCompleted

タスクが完了ずしおマヌクされるずきに実行されたす。これは 2 ぀の状況で発火したす。任意の゚ヌゞェントが TaskUpdate ツヌル経由でタスクを明瀺的に完了ずしおマヌクするずき、たたぱヌゞェント チヌムチヌムメむトが進行䞭のタスクでタヌンを終了するずき。これを䜿甚しおチヌムメむトが䜜業を停止する前に品質ゲヌトを実斜したす。䟋えば、lint チェックの合栌を芁求したり、出力ファむルが存圚するこずを確認したりしたす。

TaskCompleted フックが終了コヌド 2 で終了するず、タスクは完了ずしおマヌクされず、stderr メッセヌゞはモデルぞのフィヌドバックずしおフィヌドバックされたす。チヌムメむト党䜓を停止する代わりに再実行するには、{"continue": false, "stopReason": "..."} を含む JSON を返したす。TaskCompleted フックはマッチャヌをサポヌトせず、すべおの出珟で発火したす。

TaskCompleted 入力

共通入力フィヌルドに加えお、TaskCompleted フックは task_id、task_subject、およびオプションで task_description、teammate_name、team_name を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "TaskCompleted",
  "task_id": "task-001",
  "task_subject": "Implement user authentication",
  "task_description": "Add login and signup endpoints",
  "teammate_name": "implementer",
  "team_name": "my-project"
}
フィヌルド 説明
task_id 完了しおいるタスクの識別子
task_subject タスクのタむトル
task_description タスクの詳现説明。存圚しない可胜性がありたす
teammate_name タスクを完了しおいるチヌムメむトの名前。存圚しない可胜性がありたす
team_name チヌムの名前。存圚しない可胜性がありたす

TaskCompleted 決定制埡

TaskCompleted フックはタスク完了を制埡する 2 ぀の方法をサポヌトしおいたす。

  • 終了コヌド 2: タスクは完了ずしおマヌクされず、stderr メッセヌゞはモデルぞのフィヌドバックずしおフィヌドバックされたす。
  • JSON {"continue": false, "stopReason": "..."}: チヌムメむト党䜓を停止し、Stop フック動䜜ず䞀臎したす。stopReason はナヌザヌに衚瀺されたす。

この䟋はテストを実行し、倱敗した堎合はタスク完了をブロックしたす。

#!/bin/bash
INPUT=$(cat)
TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

# テスト スむヌトを実行
if ! npm test 2>&1; then
  echo "Tests not passing. Fix failing tests before completing: $TASK_SUBJECT" >&2
  exit 2
fi

exit 0

Stop

メむン Claude Code ゚ヌゞェントが応答を終了したずきに実行されたす。ナヌザヌ割り蟌みが原因で停止が発生した堎合は実行されたせん。API ゚ラヌは代わりにStopFailureを発火させたす。

Stop 入力

共通入力フィヌルドに加えお、Stop フックは stop_hook_active ず last_assistant_message を受け取りたす。stop_hook_active フィヌルドは、Claude Code がすでに stop フックの結果ずしお続行しおいる堎合は true です。この倀をチェックするか、Claude Code が無限に実行されるのを防ぐためにトランスクリプトを凊理したす。last_assistant_message フィヌルドは Claude の最終応答のテキスト コンテンツを含むため、フックはトランスクリプト ファむルを解析せずにアクセスできたす。

{
  "session_id": "abc123",
  "transcript_path": "~/.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "Stop",
  "stop_hook_active": true,
  "last_assistant_message": "I've completed the refactoring. Here's a summary..."
}

Stop 決定制埡

Stop ず SubagentStop フックは Claude が続行するかどうかを制埡できたす。すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、フック スクリプトはこれらのむベント固有のフィヌルドを返すこずができたす。

フィヌルド 説明
decision "block" は Claude が停止するのを防止。Claude を停止させるには省略
reason decision が "block" のずきに必須。Claude が続行すべき理由を䌝える
{
  "decision": "block",
  "reason": "Must be provided when Claude is blocked from stopping"
}

StopFailure

Stopの代わりに、タヌンが API ゚ラヌのために終了するずきに実行されたす。出力ず終了コヌドは無芖されたす。Claude が API ゚ラヌのため応答を完了できない堎合、倱敗をログ、アラヌトを送信、たたは回埩アクションを実行するのに䜿甚したす。

StopFailure 入力

共通入力フィヌルドに加えお、StopFailure フックは error、オプションの error_details、およびオプションの last_assistant_message を受け取りたす。error フィヌルドぱラヌ タむプを識別し、マッチャヌ フィルタリングに䜿甚されたす。

フィヌルド 説明
error ゚ラヌ タむプ: rate_limit、authentication_failed、oauth_org_not_allowed、billing_error、invalid_request、server_error、max_output_tokens、たたは unknown
error_details 利甚可胜な堎合、゚ラヌに関する远加詳现
last_assistant_message 䌚話に衚瀺されるレンダリングされた゚ラヌ テキスト。Stop ず SubagentStop ずは異なり、このフィヌルドは Claude の䌚話出力ではなく、"API Error: Rate limit reached" などの API ゚ラヌ文字列を含みたす
{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "StopFailure",
  "error": "rate_limit",
  "error_details": "429 Too Many Requests",
  "last_assistant_message": "API Error: Rate limit reached"
}

StopFailure フックは決定制埡がありたせん。通知ずログの目的でのみ実行されたす。

TeammateIdle

゚ヌゞェント チヌムチヌムメむトがタヌンを終了した埌、アむドル状態になろうずしおいるずきに実行されたす。これを䜿甚しおチヌムメむトが䜜業を停止する前に品質ゲヌトを実斜したす。䟋えば、lint チェックの合栌を芁求したり、出力ファむルが存圚するこずを確認したりしたす。

TeammateIdle フックが終了コヌド 2 で終了するず、チヌムメむトは stderr メッセヌゞをフィヌドバックずしお受け取り、アむドル状態になる代わりに䜜業を続行したす。チヌムメむト党䜓を停止する代わりに再実行するには、{"continue": false, "stopReason": "..."} を含む JSON を返したす。TeammateIdle フックはマッチャヌをサポヌトせず、すべおの出珟で発火したす。

TeammateIdle 入力

共通入力フィヌルドに加えお、TeammateIdle フックは teammate_name ず team_name を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "TeammateIdle",
  "teammate_name": "researcher",
  "team_name": "my-project"
}
フィヌルド 説明
teammate_name アむドル状態になろうずしおいるチヌムメむトの名前
team_name チヌムの名前

TeammateIdle 決定制埡

TeammateIdle フックはチヌムメむト動䜜を制埡する 2 ぀の方法をサポヌトしおいたす。

  • 終了コヌド 2: チヌムメむトは stderr メッセヌゞをフィヌドバックずしお受け取り、アむドル状態になる代わりに䜜業を続行したす。
  • JSON {"continue": false, "stopReason": "..."}: チヌムメむト党䜓を停止し、Stop フック動䜜ず䞀臎したす。stopReason はナヌザヌに衚瀺されたす。

この䟋は、チヌムメむトがアむドル状態になるこずを蚱可する前に、ビルド アヌティファクトが存圚するこずをチェックしたす。

#!/bin/bash

if [ ! -f "./dist/output.js" ]; then
  echo "Build artifact missing. Run the build before stopping." >&2
  exit 2
fi

exit 0

ConfigChange

セッション䞭に蚭定ファむルが倉曎されるずきに実行されたす。蚭定倉曎を監査したり、セキュリティ ポリシヌを実斜したり、蚭定ファむルぞの䞍正な倉曎をブロックしたりするのに䜿甚したす。

ConfigChange フックは蚭定ファむル、管理ポリシヌ蚭定、スキル ファむルの倉曎に察しお発火したす。入力の source フィヌルドは、どのタむプの蚭定が倉曎されたかを瀺し、オプションの file_path フィヌルドは倉曎されたファむルぞのパスを提䟛したす。

マッチャヌは蚭定゜ヌスでフィルタリングしたす。

マッチャヌ い぀発火するか
user_settings ~/.claude/settings.json が倉曎
project_settings .claude/settings.json が倉曎
local_settings .claude/settings.local.json が倉曎
policy_settings 管理ポリシヌ蚭定が倉曎
skills .claude/skills/ のスキル ファむルが倉曎

この䟋は、セキュリティ監査のためにすべおの蚭定倉曎をログしたす。

{
  "hooks": {
    "ConfigChange": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/audit-config-change.sh",
            "args": []
          }
        ]
      }
    ]
  }
}

ConfigChange 入力

共通入力フィヌルドに加えお、ConfigChange フックは source ずオプションで file_path を受け取りたす。source フィヌルドは、どのタむプの蚭定が倉曎されたかを瀺し、file_path は倉曎されたファむルぞのパスを提䟛したす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "ConfigChange",
  "source": "project_settings",
  "file_path": "/Users/.../my-project/.claude/settings.json"
}

ConfigChange 決定制埡

ConfigChange フックは蚭定倉曎が有効になるのをブロックできたす。終了コヌド 2 たたは JSON decision を䜿甚しお倉曎を防止したす。ブロックされた堎合、新しい蚭定は実行䞭のセッションに適甚されたせん。

フィヌルド 説明
decision "block" は蚭定倉曎が適甚されるのを防止。倉曎を蚱可するには省略
reason decision が "block" のずきにナヌザヌに衚瀺される説明
{
  "decision": "block",
  "reason": "Configuration changes to project settings require admin approval"
}

policy_settings の倉曎はブロックできたせん。フックは policy_settings ゜ヌスに察しお匕き続き発火するため、監査ログに䜿甚できたすが、ブロッキング決定は無芖されたす。これにより、゚ンタヌプラむズ管理蚭定が垞に有効になるこずが保蚌されたす。

CwdChanged

セッション䞭に䜜業ディレクトリが倉曎されるずきに実行されたす。䟋えば、Claude が cd コマンドを実行するずき。これを䜿甚しおディレクトリ倉曎に反応したす。環境倉数をリロヌドしたり、プロゞェクト固有のツヌルチェヌンをアクティブにしたり、セットアップ スクリプトを自動的に実行したりしたす。FileChangedずペアになり、direnvなどのツヌル甚に、ディレクトリごずの環境を管理したす。

CwdChanged フックは CLAUDE_ENV_FILE にアクセスできたす。そのファむルに曞き蟌たれた倉数は、SessionStart フックず同じように、セッション䞭の埌続の Bash コマンドに氞続化されたす。

CwdChanged はマッチャヌをサポヌトせず、すべおのディレクトリ倉曎で発火したす。

CwdChanged 入力

共通入力フィヌルドに加えお、CwdChanged フックは old_cwd ず new_cwd を受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",
  "cwd": "/Users/my-project/src",
  "hook_event_name": "CwdChanged",
  "old_cwd": "/Users/my-project",
  "new_cwd": "/Users/my-project/src"
}

CwdChanged 出力

すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、CwdChanged フックは watchPaths を返しお、FileChangedが監芖するファむル パスを動的に蚭定できたす。

フィヌルド 説明
watchPaths 絶察パスの配列。珟圚の動的監芖リストを眮き換えたすマッチャヌ蚭定からのパスは垞に監芖されたす。新しいディレクトリに入るずきは、空の配列を返すのが䞀般的です

CwdChanged フックは決定制埡がありたせん。ディレクトリ倉曎をブロックできたせん。

FileChanged

監芖されたファむルがディスク䞊で倉曎されるずきに実行されたす。プロゞェクト蚭定ファむルが倉曎されたずきに環境倉数をリロヌドするのに䟿利です。

このむベントの matcher は 2 ぀の圹割を果たしたす。

  • 監芖リストを構築: 倀は | で分割され、各セグメントは䜜業ディレクトリのリテラル ファむル名ずしお登録されるため、.envrc|.env はこれら 2 ぀のファむルを正確に監芖したす。正芏衚珟パタヌンはここでは圹に立ちたせん。^\.env のような倀は ^\.env ずいう文字通りの名前のファむルを監芖したす。
  • どのフックが実行されるかをフィルタリング: 監芖されたファむルが倉曎されるず、同じ倀は暙準マッチャヌ ルヌルを䜿甚しお、倉曎されたファむルのベヌス名に察しおどのフック グルヌプが実行されるかをフィルタリングしたす。

FileChanged フックは CLAUDE_ENV_FILE にアクセスできたす。そのファむルに曞き蟌たれた倉数は、SessionStart フックず同じように、セッション䞭の埌続の Bash コマンドに氞続化されたす。

FileChanged 入力

共通入力フィヌルドに加えお、FileChanged フックは file_path ず event を受け取りたす。

フィヌルド 説明
file_path 倉曎されたファむルぞの絶察パス
event 䜕が起こったか: "change"ファむル倉曎、"add"ファむル䜜成、たたは "unlink"ファむル削陀
{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",
  "cwd": "/Users/my-project",
  "hook_event_name": "FileChanged",
  "file_path": "/Users/my-project/.envrc",
  "event": "change"
}

FileChanged 出力

すべおのフックで利甚可胜なJSON 出力フィヌルドに加えお、FileChanged フックは watchPaths を返しお、監芖されるファむル パスを動的に曎新できたす。

フィヌルド 説明
watchPaths 絶察パスの配列。珟圚の動的監芖リストを眮き換えたすマッチャヌ蚭定からのパスは垞に監芖されたす。フック スクリプトが倉曎されたファむルに基づいお怜出した远加ファむルを監芖する堎合に䜿甚したす

FileChanged フックは決定制埡がありたせん。ファむル倉曎をブロックできたせん。

WorktreeCreate

claude --worktree を実行するか、サブ゚ヌゞェントが isolation: "worktree" を䜿甚する堎合、Claude Code は git worktree を䜿甚しお分離された䜜業コピヌを䜜成したす。WorktreeCreate フックを蚭定する堎合、デフォルトの git 動䜜を眮き換え、SVN、Perforce、Mercurial などの別のバヌゞョン管理システムを䜿甚できたす。

フックは䜜成されたワヌクツリヌ ディレクトリぞの絶察パスを返す必芁がありたす。Claude Code はこのパスを分離されたセッションの䜜業ディレクトリずしお䜿甚したす。コマンド フックは stdout にパスを出力したす。HTTP フックは hookSpecificOutput.worktreePath 経由で返したす。

フックはデフォルトの git 動䜜を完党に眮き換えるため、.worktreeincludeは凊理されたせん。.env などのロヌカル蚭定ファむルを新しいワヌクツリヌにコピヌする必芁がある堎合は、フック スクリプト内で実行しおください。

この䟋は SVN 䜜業コピヌを䜜成し、Claude Code が䜿甚するパスを出力したす。リポゞトリ URL を自分のものに眮き換えたす。

{
  "hooks": {
    "WorktreeCreate": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'NAME=$(jq -r .name); DIR=\"$HOME/.claude/worktrees/$NAME\"; svn checkout https://svn.example.com/repo/trunk \"$DIR\" >&2 && echo \"$DIR\"'"
          }
        ]
      }
    ]
  }
}

フックは stdin から JSON 入力からワヌクツリヌ name を読み取り、新しいディレクトリに新しいコピヌをチェックアりトし、ディレクトリ パスを出力したす。最埌の行の echo は Claude Code が読み取るワヌクツリヌ パスです。他の出力を stderr にリダむレクトしお、パスに干枉しないようにしたす。

WorktreeCreate 入力

共通入力フィヌルドに加えお、WorktreeCreate フックは name フィヌルドを受け取りたす。これは新しいワヌクツリヌのスラッグ識別子で、ナヌザヌが指定するか自動生成されたす䟋えば、bold-oak-a3f2。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "WorktreeCreate",
  "name": "feature-auth"
}

WorktreeCreate 出力

WorktreeCreate フックは暙準的な蚱可/ブロック決定モデルを䜿甚したせん。代わりに、フックの成功たたは倱敗が結果を決定したす。フックは䜜成されたワヌクツリヌ ディレクトリぞの絶察パスを返す必芁がありたす。

  • コマンド フック (type: "command"): stdout にパスを出力したす。
  • HTTP フック (type: "http"): レスポンス本䜓で { "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } } を返したす。

フックが倱敗するか出力を生成しない堎合、ワヌクツリヌ䜜成ぱラヌで倱敗したす。

WorktreeRemove

WorktreeCreateのクリヌンアップ察応。このフックはワヌクツリヌが削陀されるずきに発火したす。--worktree セッションを終了しお削陀を遞択するか、isolation: "worktree" を持぀サブ゚ヌゞェントが完了するずき。git ベヌスのワヌクツリヌの堎合、Claude は git worktree remove で自動的にクリヌンアップを凊理したす。git 以倖のバヌゞョン管理システムの WorktreeCreate フックを蚭定した堎合、クリヌンアップを凊理するために WorktreeRemove フックずペアにしたす。なければ、ワヌクツリヌ ディレクトリはディスク䞊に残りたす。

Claude Code は WorktreeCreate が返したパスを worktree_path ずしおフック入力に枡したす。この䟋はそのパスを読み取り、ディレクトリを削陀したす。

{
  "hooks": {
    "WorktreeRemove": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'jq -r .worktree_path | xargs rm -rf'"
          }
        ]
      }
    ]
  }
}

WorktreeRemove 入力

共通入力フィヌルドに加え、WorktreeRemove フックは削陀されるワヌクツリヌぞの絶察パスである worktree_path フィヌルドを受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "WorktreeRemove",
  "worktree_path": "/Users/.../my-project/.claude/worktrees/feature-auth"
}

WorktreeRemove フックは決定制埡がありたせん。ワヌクツリヌ削陀をブロックできたせんが、バヌゞョン管理状態の削陀やアヌカむブ倉曎などのクリヌンアップ タスクを実行できたす。フック倱敗はデバッグ モヌドでのみログされたす。

PreCompact

Claude Code がコンパクション操䜜を実行しようずしおいる前に実行されたす。

マッチャヌ倀は、コンパクションが手動でトリガヌされたか自動的にトリガヌされたかを瀺したす。

マッチャヌ い぀発火するか
manual /compact
auto コンテキスト りィンドりが満杯のずきの自動コンパクション

終了コヌド 2 でコンパクションをブロック。手動の /compact の堎合、stderr メッセヌゞはナヌザヌに衚瀺されたす。JSON で "decision": "block" を返しおブロックするこずもできたす。

自動コンパクションのブロックは、い぀発火するかに応じお異なる効果がありたす。コンテキスト制限の前にコンパクションがプロアクティブにトリガヌされた堎合、Claude Code はそれをスキップし、䌚話は非圧瞮で続行されたす。コンテキスト制限゚ラヌから回埩するためにコンパクションがトリガヌされた堎合、基瀎ずなる゚ラヌが衚瀺され、珟圚のリク゚ストが倱敗したす。

PreCompact 入力

共通入力フィヌルドに加えお、PreCompact フックは trigger ず custom_instructions を受け取りたす。manual の堎合、custom_instructions はナヌザヌが /compact に枡すものを含みたす。auto の堎合、custom_instructions は空です。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "PreCompact",
  "trigger": "manual",
  "custom_instructions": ""
}

PostCompact

Claude Code がコンパクション操䜜を完了した埌に実行されたす。このむベントを䜿甚しお、新しいコンパクト状態に反応したす。䟋えば、生成されたサマリヌをログしたり、倖郚状態を曎新したりしたす。

PreCompact ず同じマッチャヌ倀が適甚されたす。

マッチャヌ い぀発火するか
manual /compact の埌
auto コンテキスト りィンドりが満杯のずきの自動コンパクション埌

PostCompact 入力

共通入力フィヌルドに加えお、PostCompact フックは trigger ず compact_summary を受け取りたす。compact_summary フィヌルドはコンパクション操䜜によっお生成された䌚話サマリヌを含みたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "PostCompact",
  "trigger": "manual",
  "compact_summary": "Summary of the compacted conversation..."
}

PostCompact フックは決定制埡がありたせん。コンパクション結果に圱響を䞎えるこずはできたせんが、フォロヌアップ タスクを実行できたす。

SessionEnd

Claude Code セッションが終了するずきに実行されたす。クリヌンアップ タスク、セッション統蚈のログ、たたはセッション状態の保存に䟿利です。終了理由でフィルタリングするマッチャヌをサポヌトしたす。

フック入力の reason フィヌルドはセッションが終了した理由を瀺したす。

理由 説明
clear /clear コマンドでセッションをクリア
resume むンタラクティブ /resume 経由でセッションを切り替え
logout ナヌザヌがログアりト
prompt_input_exit プロンプト入力が衚瀺されおいる間にナヌザヌが終了
bypass_permissions_disabled バむパス暩限モヌドが無効化
other その他の終了理由

SessionEnd 入力

共通入力フィヌルドに加えお、SessionEnd フックはセッションが終了した理由を瀺す reason フィヌルドを受け取りたす。䞊蚘の理由テヌブルをすべおの倀に぀いお参照しおください。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "hook_event_name": "SessionEnd",
  "reason": "other"
}

SessionEnd フックは決定制埡がありたせん。セッション終了をブロックできたせんが、クリヌンアップ タスクを実行できたす。

SessionEnd フックのデフォルト タむムアりトは 1.5 秒です。これはセッション終了、/clear、およびむンタラクティブ /resume 経由でのセッション切り替えに適甚されたす。フックにより倚くの時間が必芁な堎合は、フック蚭定でフックごずの timeout を蚭定したす。党䜓的な予算は、蚭定ファむルで蚭定されたフックごずのタむムアりトの最高倀に自動的に匕き䞊げられ、最倧 60 秒です。プラグむン提䟛のフックに蚭定されたタむムアりトは予算を匕き䞊げたせん。予算を明瀺的にオヌバヌラむドするには、CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS 環境倉数をミリ秒単䜍で蚭定したす。

CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude

Elicitation

MCP サヌバヌがタスク䞭にナヌザヌ入力をリク゚ストするずきに実行されたす。デフォルトでは、Claude Code はナヌザヌが応答するためのむンタラクティブ ダむアログを衚瀺したす。フックはこのリク゚ストをむンタヌセプトしお、プログラムで応答し、ダむアログを完党にスキップできたす。

マッチャヌ フィヌルドは MCP サヌバヌ名に察しおマッチしたす。

Elicitation 入力

共通入力フィヌルドに加えお、Elicitation フックは mcp_server_name、message、およびオプションで mode、url、elicitation_id、requested_schema フィヌルドを受け取りたす。

フォヌム モヌド elicitation最も䞀般的なケヌスの堎合。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "Elicitation",
  "mcp_server_name": "my-mcp-server",
  "message": "Please provide your credentials",
  "mode": "form",
  "requested_schema": {
    "type": "object",
    "properties": {
      "username": { "type": "string", "title": "Username" }
    }
  }
}

URL モヌド elicitationブラりザベヌスの認蚌の堎合。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "Elicitation",
  "mcp_server_name": "my-mcp-server",
  "message": "Please authenticate",
  "mode": "url",
  "url": "https://auth.example.com/login"
}

Elicitation 出力

ダむアログを衚瀺せずにプログラムで応答するには、hookSpecificOutput を含む JSON オブゞェクトを返したす。

{
  "hookSpecificOutput": {
    "hookEventName": "Elicitation",
    "action": "accept",
    "content": {
      "username": "alice"
    }
  }
}
フィヌルド 倀 説明
action accept、decline、cancel リク゚ストを受け入れるか、拒吊するか、キャンセルするか
content オブゞェクト 送信するフォヌム フィヌルド倀。action が accept のずきのみ䜿甚

終了コヌド 2 は elicitation を拒吊し、stderr をナヌザヌに衚瀺したす。

ElicitationResult

ナヌザヌが MCP elicitation に応答した埌に実行されたす。フックは応答を芳察、倉曎、たたはブロックしおから、MCP サヌバヌに送り返すこずができたす。

マッチャヌ フィヌルドは MCP サヌバヌ名に察しおマッチしたす。

ElicitationResult 入力

共通入力フィヌルドに加えお、ElicitationResult フックは mcp_server_name、action、およびオプションで mode、elicitation_id、content フィヌルドを受け取りたす。

{
  "session_id": "abc123",
  "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",
  "cwd": "/Users/...",
  "permission_mode": "default",
  "hook_event_name": "ElicitationResult",
  "mcp_server_name": "my-mcp-server",
  "action": "accept",
  "content": { "username": "alice" },
  "mode": "form",
  "elicitation_id": "elicit-123"
}

ElicitationResult 出力

ナヌザヌの応答をオヌバヌラむドするには、hookSpecificOutput を含む JSON オブゞェクトを返したす。

{
  "hookSpecificOutput": {
    "hookEventName": "ElicitationResult",
    "action": "decline",
    "content": {}
  }
}
フィヌルド 倀 説明
action accept、decline、cancel ナヌザヌのアクションをオヌバヌラむド
content オブゞェクト フォヌム フィヌルド倀をオヌバヌラむド。action が accept のずきのみ意味がある

終了コヌド 2 はレスポンスをブロックし、有効なアクションを decline に倉曎したす。

プロンプト ベヌスのフック

コマンド、HTTP、MCP ツヌル フックに加えお、Claude Code はプロンプト ベヌスのフックtype: "prompt"をサポヌトしおおり、LLM を䜿甚しおアクションを蚱可たたはブロックするかどうかを評䟡し、゚ヌゞェント フックtype: "agent"はツヌル アクセスを持぀ agentic ベリファむアヌを生成したす。すべおのむベントがすべおのフック タむプをサポヌトしおいるわけではありたせん。

5 ぀のフック タむプcommand、http、mcp_tool、prompt、agentすべおをサポヌトするむベント

  • PermissionRequest
  • PostToolBatch
  • PostToolUse
  • PostToolUseFailure
  • PreToolUse
  • Stop
  • SubagentStop
  • TaskCompleted
  • TaskCreated
  • UserPromptExpansion
  • UserPromptSubmit

command、http、mcp_tool フックをサポヌトするが、prompt たたは agent をサポヌトしないむベント

  • ConfigChange
  • CwdChanged
  • Elicitation
  • ElicitationResult
  • FileChanged
  • InstructionsLoaded
  • Notification
  • PermissionDenied
  • PostCompact
  • PreCompact
  • SessionEnd
  • StopFailure
  • SubagentStart
  • TeammateIdle
  • WorktreeCreate
  • WorktreeRemove

SessionStart ず Setup は command ず mcp_tool フックをサポヌトしおいたす。これらは http、prompt、agent フックをサポヌトしおいたせん。

プロンプト ベヌスのフックの仕組み

プロンプト ベヌスのフックは Bash コマンドを実行する代わりに

  1. フック入力ずプロンプトを Claude モデルデフォルトは Haikuに送信
  2. LLM は決定を含む構造化 JSON で応答
  3. Claude Code は決定を自動的に凊理

プロンプト フック蚭定

type を "prompt" に蚭定し、command の代わりに prompt 文字列を提䟛したす。$ARGUMENTS プレヌスホルダヌを䜿甚しお、フックの JSON 入力デヌタをプロンプト テキストに泚入したす。Claude Code は結合されたプロンプトず入力を高速 Claude モデルに送信し、JSON 決定を返したす。

この Stop フックは、Claude が終了する前にすべおのタスクが完了しおいるかどうかを評䟡するよう LLM に求めたす

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "prompt",
            "prompt": "Evaluate if Claude should stop: $ARGUMENTS. Check if all tasks are complete."
          }
        ]
      }
    ]
  }
}
フィヌルド 必須 説明
type はい "prompt" である必芁がありたす
prompt はい LLM に送信するプロンプト テキスト。フック入力 JSON のプレヌスホルダヌずしお $ARGUMENTS を䜿甚したす。$ARGUMENTS が存圚しない堎合、入力 JSON がプロンプトに远加されたす
model いいえ 評䟡に䜿甚するモデル。デフォルトは高速モデル
timeout いいえ タむムアりト秒単䜍。デフォルト30
continueOnBlock いいえ プロンプトが ok: false を返すずき、理由を Claude にフィヌドバックしお、停止する代わりにタヌンを続行したす。デフォルトfalse。結果の decision: "block" に continue: true ずしお実装されたす。むベント ごずの動䜜に぀いおは、レスポンス スキヌマを参照しおください

レスポンス スキヌマ

LLM は以䞋を含む JSON で応答する必芁がありたす

{
  "ok": true | false,
  "reason": "Explanation for the decision"
}
フィヌルド 説明
ok true はアクションを蚱可、false は decision: "block" を生成したす。以䞋のむベント ごずの動䜜を参照しおください
reason ok が false のずきに必須。ブロック理由ずしお䜿甚されたす

ok: false で䜕が起こるかはむベントによっお異なりたす

  • Stop ず SubagentStop理由は Claude の次の指瀺ずしおフィヌドバックされ、タヌンが続行されたす
  • PreToolUseツヌル呌び出しが拒吊され、理由は Claude にツヌル ゚ラヌずしお返されたす。これはコマンド フックの permissionDecision: "deny" ず同等です
  • PostToolUseデフォルトではタヌンが終了し、理由は譊告行ずしおチャットに衚瀺されたす。continueOnBlock: true を蚭定しお、理由を Claude にフィヌドバックし、タヌンを続行する代わりに䜿甚したす
  • PostToolBatch、UserPromptSubmit、UserPromptExpansionタヌンが終了し、理由は譊告行ずしお衚瀺されたす。これらのむベントは continue に関係なく decision: "block" でタヌンを終了したす
  • PostToolUseFailure、TaskCreated、TaskCompleted理由は Claude にツヌル ゚ラヌずしお返されたす。PreToolUse ず同様です
  • PermissionRequestok: false は効果がありたせん。フックから承認を拒吊するには、コマンド フックを䜿甚しお hookSpecificOutput.decision.behavior: "deny" を返したす

任意のむベントでより现かい制埡が必芁な堎合は、決定制埡で説明されおいるむベント ごずのフィヌルドを䜿甚しお、コマンド フックを䜿甚しおください。

䟋マルチ基準 Stop フック

この Stop フックは詳现なプロンプトを䜿甚しお、Claude が停止するこずを蚱可する前に 3 ぀の条件をチェックしたす。"ok" が false の堎合、Claude は提䟛された理由を次の指瀺ずしお受け取り、䜜業を続行したす。SubagentStop フックは同じ圢匏を䜿甚しお、サブ゚ヌゞェントが停止すべきかどうかを評䟡したす

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "prompt",
            "prompt": "You are evaluating whether Claude should stop working. Context: $ARGUMENTS\n\nAnalyze the conversation and determine if:\n1. All user-requested tasks are complete\n2. Any errors need to be addressed\n3. Follow-up work is needed\n\nRespond with JSON: {\"ok\": true} to allow stopping, or {\"ok\": false, \"reason\": \"your explanation\"} to continue working.",
            "timeout": 30
          }
        ]
      }
    ]
  }
}

゚ヌゞェント ベヌスのフック

゚ヌゞェント ベヌスのフックtype: "agent"はプロンプト ベヌスのフックのようですが、マルチタヌン ツヌル アクセスを備えおいたす。単䞀の LLM 呌び出しの代わりに、゚ヌゞェント フックはサブ゚ヌゞェントを生成し、ファむルを読み取り、コヌドを怜玢し、コヌドベヌスを怜査しお条件を怜蚌できたす。゚ヌゞェント フックはプロンプト ベヌスのフックず同じむベントをサポヌトしおいたす。

゚ヌゞェント フックの仕組み

゚ヌゞェント フックが発火するずき

  1. Claude Code はプロンプトずフックの JSON 入力を持぀サブ゚ヌゞェントを生成したす
  2. サブ゚ヌゞェントは Read、Grep、Glob などのツヌルを䜿甚しお調査できたす
  3. 最倧 50 タヌン埌、サブ゚ヌゞェントは構造化 { "ok": true/false } 決定を返したす
  4. Claude Code はプロンプト フックず同じ方法で決定を凊理したす

゚ヌゞェント フックは、フック入力デヌタのみを評䟡するのではなく、実際のファむルを怜査したりテスト出力を怜査したりする必芁がある堎合に䟿利です。

゚ヌゞェント フック蚭定

type を "agent" に蚭定し、prompt 文字列を提䟛したす。蚭定フィヌルドはプロンプト フックず同じですが、より長いデフォルト タむムアりトです

フィヌルド 必須 説明
type はい "agent" である必芁がありたす
prompt はい 怜蚌する内容を説明するプロンプト。フック入力 JSON のプレヌスホルダヌずしお $ARGUMENTS を䜿甚したす
model いいえ 䜿甚するモデル。デフォルトは高速モデル
timeout いいえ タむムアりト秒単䜍。デフォルト60

レスポンス スキヌマはプロンプト フックず同じです蚱可するには { "ok": true } を、ブロックするには { "ok": false, "reason": "..." } を返したす。

この Stop フックは、Claude が終了するこずを蚱可する前にすべおのナニット テストが合栌するこずを怜蚌したす

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "agent",
            "prompt": "Verify that all unit tests pass. Run the test suite and check the results. $ARGUMENTS",
            "timeout": 120
          }
        ]
      }
    ]
  }
}

バックグラりンドでフックを実行

デフォルトでは、フックは完了するたで Claude の実行をブロックしたす。デプロむメント、テスト スむヌト、倖郚 API 呌び出しなどの長時間実行タスクの堎合、"async": true を蚭定しおフックをバックグラりンドで実行し、Claude が䜜業を続行できるようにしたす。非同期フックはブロックたたは Claude の動䜜を制埡できたせん。decision、permissionDecision、continue などのレスポンス フィヌルドは、制埡しようずしたアクションがすでに完了しおいるため、効果がありたせん。

非同期フックを蚭定

コマンド フックの蚭定に "async": true を远加しお、Claude をブロックせずにバックグラりンドで実行したす。このフィヌルドは type: "command" フックでのみ利甚可胜です。

このフックは、すべおの Write ツヌル呌び出しの埌にテスト スクリプトを実行したす。Claude は run-tests.sh が最倧 120 秒間実行されおいる間、すぐに䜜業を続行したす。スクリプトが完了するず、その出力は次の䌚話タヌンで配信されたす。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/run-tests.sh",
            "async": true,
            "timeout": 120
          }
        ]
      }
    ]
  }
}

timeout フィヌルドはバックグラりンド プロセスの最倧時間秒単䜍を蚭定したす。指定されない堎合、非同期フックは同期フックず同じ 10 分のデフォルトを䜿甚したす。

非同期フックの実行方法

非同期フックが発火するず、Claude Code はフック プロセスを開始し、完了を埅たずにすぐに続行したす。フックは同期フックず同じ JSON 入力を stdin 経由で受け取りたす。

バックグラりンド プロセスが終了した埌、フックが additionalContext フィヌルドを含む JSON レスポンスを生成した堎合、そのコンテンツは次の䌚話タヌンで Claude にコンテキストずしお配信されたす。systemMessage フィヌルドは Claude ではなく、あなたに衚瀺されたす。

非同期フック完了通知はデフォルトで抑制されたす。これらを衚瀺するには、Ctrl+O で詳现モヌドを有効にするか、--verbose で Claude Code を開始したす。

䟋: ファむル倉曎埌にテストを実行

このフックは Claude がファむルを曞き蟌むたびにバックグラりンドでテスト スむヌトを開始し、テストが完了したら結果を Claude に報告したす。このスクリプトをプロゞェクトの .claude/hooks/run-tests-async.sh に保存し、chmod +x で実行可胜にしたす。

#!/bin/bash
# run-tests-async.sh

# stdin からフック入力を読み取る
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# ゜ヌス ファむルのみテストを実行
if [[ "$FILE_PATH" != *.ts && "$FILE_PATH" != *.js ]]; then
  exit 0
fi

# テストを実行し、additionalContext 経由で結果を Claude に報告
RESULT=$(npm test 2>&1)
EXIT_CODE=$?

if [ $EXIT_CODE -eq 0 ]; then
  MSG="Tests passed after editing $FILE_PATH"
else
  MSG="Tests failed after editing $FILE_PATH: $RESULT"
fi
jq -nc --arg msg "$MSG" '{hookSpecificOutput: {hookEventName: "PostToolUse", additionalContext: $msg}}'

次に、プロゞェクト ルヌトの .claude/settings.json にこの蚭定を远加したす。async: true フラグにより、Claude はテストの実行䞭に䜜業を続行できたす。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/run-tests-async.sh",
            "args": [],
            "async": true,
            "timeout": 300
          }
        ]
      }
    ]
  }
}

制限事項

非同期フックは同期フックず比べおいく぀かの制玄がありたす。

  • async をサポヌトするのは type: "command" フックのみです。プロンプト ベヌスのフックは非同期で実行できたせん。
  • 非同期フックはツヌル呌び出しをブロックたたは決定を返すこずができたせん。フックが完了するたでに、トリガヌするアクションはすでに進行しおいたす。
  • フック出力は次の䌚話タヌンで配信されたす。セッションがアむドル状態の堎合、レスポンスは次のナヌザヌ操䜜たで埅機したす。䟋倖: asyncRewake フックが終了コヌド 2 で終了するず、セッションがアむドル状態でも Claude を盎ちに起動したす。
  • 各実行は個別のバックグラりンド プロセスを䜜成したす。同じ非同期フックの耇数の発火党䜓で重耇排陀はありたせん。

セキュリティに関する考慮事項

免責事項

コマンド フックはシステム ナヌザヌの完党な暩限で実行されたす。

セキュリティ ベストプラクティス

フックを曞くずきは、これらのプラクティスに留意しおください。

  • 入力を怜蚌およびサニタむズ: 入力デヌタを盲目的に信頌しないでください
  • 垞にシェル倉数を匕甚: $VAR ではなく "$VAR" を䜿甚
  • パス トラバヌサルをブロック: ファむル パスで .. をチェック
  • 絶察パスを䜿甚: スクリプトの完党なパスを指定したす。exec 圢匏では、${CLAUDE_PROJECT_DIR} を䜿甚し、パスは匕甚笊で囲む必芁がありたせん。シェル圢匏では、ダブル クォヌトで囲みたす
  • 機密ファむルをスキップ: .env、.git/、キヌなどを避ける

Windows PowerShell ツヌル

Windows では、コマンド フックで "shell": "powershell" を蚭定するこずで、個別のフックを PowerShell で実行できたす。フックは PowerShell を盎接生成するため、CLAUDE_CODE_USE_POWERSHELL_TOOL が蚭定されおいるかどうかに関係なく機胜したす。Claude Code は pwsh.exePowerShell 7 以䞊を自動怜出し、powershell.exe5.1にフォヌルバックしたす。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "shell": "powershell",
            "command": "Write-Host 'File written'"
          }
        ]
      }
    ]
  }
}

フックをデバッグ

フック実行の詳现、マッチしたフック、終了コヌド、完党な stdout ず stderr はデバッグ ログ ファむルに曞き蟌たれたす。claude --debug-file <path> で既知の堎所にログを曞き蟌むか、claude --debug を実行しおログを ~/.claude/debug/<session-id>.txt で読み取りたす。--debug フラグはタヌミナルに出力したせん。

[DEBUG] Executing hooks for PostToolUse:Write
[DEBUG] Found 1 hook commands to execute
[DEBUG] Executing hook command: <Your command> with timeout 600000ms
[DEBUG] Hook command completed with status 0: <Your stdout>

より詳现なフック マッチング詳现に぀いおは、CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose を蚭定しお、フック マッチャヌ数ずク゚リ マッチングなどの远加ログ行を確認したす。

フックが発火しない、Stop フックが実行をブロックし続ける、たたは蚭定゚ラヌなどの䞀般的な問題のトラブルシュヌティングに぀いおは、ガむドの制限事項ずトラブルシュヌティングを参照しおください。/context、/doctor、および蚭定の優先順䜍をカバヌするより広範な蚺断チュヌトリアルに぀いおは、蚭定をデバッグを参照しおください。