できること
決まった時点で処理を実行
Claude Code のライフサイクルの特定の時点で、ユーザー定義のシェルコマンドを実行します。編集後のファイル整形やセッション開始時のコンテキスト注入などを、LLM の判断に頼らず毎回実行させられます。
ツール呼び出しの制御
実行前のコマンドをブロックしたり、保護したいファイルの編集を止めたりできます。編集をブロックしたときは理由が Claude にフィードバックとして渡り、Claude はそれをもとに進め方を調整できます。
判断が要る条件の評価
決まったルールでは判断しにくい条件は、Claude モデルで条件を評価する prompt フックや agent フックで扱えます。
機能解説
概要
LLM が実行を選ぶかどうかに頼らず、決まった処理を毎回実行させる決定的な制御に使います。プロジェクトの規則の徹底、繰り返し作業の自動化、既存のツールとの連携に向いています。
Hooks は、Claude Code がライフサイクルの特定の時点で実行するユーザー定義の処理です。イベントが発火すると、該当するフックを並列に実行します。
- フックは stdin・stdout・stderr と終了コードで Claude Code とやり取りし、イベントごとのデータを JSON で stdin から受け取ります。終了コードでできるのはブロックするか何もしないかだけで、より細かく制御するときは終了コード 0 で終わり、stdout に JSON オブジェクトを出力します。
- matcher を指定しないフックは、そのイベントが起きるたびに発火します。matcher で発火の対象を絞れます。
ifフィールドは permission rule syntax でツール名と引数を合わせて絞り込む仕組みで、ツールのイベントでだけ使えます。 - 多くのフックは
"type": "command"でシェルコマンドを実行します。ほかにhttp・mcp_tool・prompt・agentの型があります。HTTP フックはイベントのデータを HTTP エンドポイントに POST し、command フックと同じ形式の JSON で結果を受け取ります。 - prompt フックは、プロンプトとフックの入力データを Claude モデルに送って判断させます。agent フックはサブエージェントを起動し、ファイルの読み取りやコード検索などのツールで条件を確かめてから判断を返します。
- 実現したい内容を CLI で説明して、Claude にフックを書かせることもできます。
ツール呼び出しと権限の制御
- 複数の
PreToolUseフックが許可の判断を返したときは、deny・defer・ask・allowの順で、最も制限の強い判断が適用されます。 permissionDecision: "deny"を返すフックは、bypassPermissionsモードや--dangerously-skip-permissionsの指定があってもツールをブロックします。PermissionRequestフックが"behavior": "allow"を返すと、Claude Code が利用者に代わって許可要求に応答します。PermissionRequestでは agent 型のフックは実行されず、command または http フックを案内するエラーが表示されます。PreToolUseとPermissionRequestフックが返すupdatedInputは、Claude 自身の入力と同じように検証されます。未知のキーは除去され、ツールが受け付けない入力の場合は呼び出しが拒否されます。- command と HTTP フックに
onFailure: "block"を指定すると、フックが起動できない・タイムアウトする・想定外の終了コードで終わる場合に、操作を通さずにブロックします。 PostToolUseフックはツールの実行後に動くため、実行済みの操作を取り消せません。
設定と導入時に確認したい点
- フックを追加する場所で、そのフックの適用範囲が決まります。
/hooksを実行すると、設定済みのフックをイベントごとにまとめた 1 つのリストで確認できます。 - フックを無効にするには、設定ファイルで
"disableAllHooks": trueを指定します。managed settings のフックは、managed settings 側にも同じ指定をしない限り実行されます。 allowManagedHooksOnlyを設定しているとき、管理設定で強制的に有効化されたプラグインのフックは実行されます。- VS Code ではコマンドメニューの Hooks (フック) ダイアログで、user・project・local 設定のフックを表示・追加・編集・削除できます。managed・plugin・session のフックは読み取り専用です。
- prompt フックと agent フックは、サブエージェントを含めてセッションあたり同時に最大 24 個まで実行され、これに加えてイベントのタイムアウトより長く待ったものが最大 12 個実行されます。
- 5 万文字を超えるフックの出力は、コンテキストに直接挿入されず、ファイルパスとプレビュー付きでディスクに保存されます。
- フックの実行結果は、
Ctrl+Oで transcript view (会話記録の表示) を開いて確認できます。
使い方
~/.claude/settings.jsonを開き、Notificationフックを追加します。ファイルが無い場合は作成します。- Claude Code のプロンプトで
/hooksと入力して hooks browser (フックの一覧) を開き、追加したフックがNotificationの下に表示されていることを確認します。 Escで CLI に戻り、ステータスバーに⏸ manual mode onが表示されるまでShift+Tabを押します。- 許可が必要な作業を Claude に頼み、ターミナルから別の画面に切り替えます。デスクトップ通知が届けば設定は動いています。
利用シーン
.env・package-lock.json・.git/ 内のファイルなど、変更させたくないファイルの編集を止める場面に向いています。
PostToolUse イベントと Edit|Write の matcher を組み合わせ、Claude が編集したファイルに Prettier をかける用途に使えます。
外部のプロセスやエディターが設定ファイルを変更したときに発火する ConfigChange イベントで、変更の記録や許可されていない変更のブロックに使えます。
Claude が入力や許可を待っているときに発火する Notification イベントで、作業の待ち状態を知らせる場面に向いています。
ChatGPT・OpenAI の対応する機能
比較の単位となる業務: エージェントのライフサイクルイベントに応じたカスタム処理の自動実行とツール呼び出しの制御
Codex の Hooks (フック) と比べると、大きな出力の扱い方に違いがあります。Claude Code では 5 万文字を超えるフックの出力をディスクに保存し、ファイルパスとプレビューを渡します。Codex では、フックのコンテキストのスピル上限を設定できます。
設定を確認する画面も異なります。Claude Code は VS Code のコマンドメニューの Hooks ダイアログで user・project・local 設定のフックを編集できます。Codex アプリにはフックのアプリ内信頼レビューフローがあり、フックの設定が終わる前でも Hooks 設定を開けます。
権限まわりでは、Claude Code の PermissionRequest フックは "behavior": "allow" を返して許可要求に応答できます。Codex では、権限フックが厳格な自動レビューのリクエストを解決できます。
これまでの変更
UserPromptSubmitフックが、スキルやカスタムスラッシュコマンドの展開前に実行されるようになりました。モデル切り替えをブロック・確認・注釈できる
PreModelSwitchとPostModelSwitchイベントが加わりました。/add-dirなどで作業ディレクトリが追加された後に発火するDirectoryAddedフックが加わりました。StopとSubagentStopフックがhookSpecificOutput.additionalContextで Claude にフィードバックを与え、ターンを続行させられるようになりました。SessionStartフックがreloadSkills: trueでスキルディレクトリを再スキャンできるようになり、表示時にメッセージ本文を変換・非表示にできるMessageDisplayイベントが加わりました。JSON 出力に
terminalSequenceフィールドが加わり、制御端末なしでデスクトップ通知・ウィンドウタイトル・ベルを出せるようになりました。シェルを介さずコマンドを起動する
argsフィールドと、PostToolUse用のcontinueOnBlock設定が加わりました。PostToolUseフックがhookSpecificOutput.updatedToolOutputで全ツールの出力を置き換えられるようになりました。type: "mcp_tool"で MCP ツールを直接呼び出せるようになり、PostToolUseとPostToolUseFailureの入力にduration_msが加わりました。Windows で
CLAUDE_ENV_FILEとSessionStartフックの環境ファイルが適用されるようになりました。PreCompactフックが加わり、終了コード 2 または{"decision":"block"}でコンパクションをブロックできるようになりました。settings.jsonに認識できないフックイベント名があっても、ファイル全体が無視されなくなりました。UserPromptSubmitフックでhookSpecificOutput.sessionTitleによりセッションタイトルを設定できるようになりました。PreToolUseフックに"defer"の判断が加わり、ヘッドレスセッションをツール呼び出しで一時停止し、-p --resumeで再開してフックに再評価させられるようになりました。auto mode の分類器が拒否した後に発火するPermissionDeniedフックも加わりました。
出典
出典 19 件を表示
- Claude Code のリリース (2026-04-04)
- Claude Code のリリース (2026-04-10)
- Claude Code のリリース (2026-04-18)
- Claude Code のリリース (2026-04-23)
- Claude Code のリリース (2026-05-01)
- ChatGPT・Codex のリリースノート (2026-05-08)
- Claude Code のリリース (2026-05-15)
- Claude Code のリリース (2026-05-31)
- Claude Code のリリース (2026-06-06)
- ChatGPT・Codex のリリースノート (2026-07-21)
- Claude Code のリリース (2026-07-25)
- Claude Code のリリース (2026-08-28)
- Claude Code のリリース (2026-09-12)
- Claude Code のリリース (2026-09-25)
- Claude Code のリリース (2026-10-03)
- Claude Code のリリース (2026-10-09)
- Claude Code のリリース (2026-10-18)
- Claude Code のリリース (2026-10-31)
- 公式ヘルプ