CodexOpenAI の機能

FEATURE

Hooks (フック)

Hooks (フック) は Codex の拡張の仕組みで、エージェントループの途中でスクリプトや MCP ツールを実行できます。

提供中公式発表と照合済み
初出未調査
ページ更新
提供状態提供中
公式の記載で確認できた環境ターミナル、デスクトップアプリ
提供を確認できたプラン公式に記載なし
目次 CONTENTS
  1. できること
  2. 機能解説
  3. 使い方
  4. 利用シーン
  5. Claude・Anthropic の対応する機能
  6. これまでの変更
  7. 関連する機能
  8. 出典
CAN DO

できること

POINT 01

ループに処理を差し込む

エージェントループの途中で、スクリプトや MCP ツールを実行できます。MCP ツールのフックでは、ライフサイクルイベントから接続済みの MCP サーバーのツールを呼び出せます。

POINT 02

プロンプトや操作を止める

UserPromptSubmit フックはプロンプトを止められます。PreToolUse フックは Bash、apply_patch によるファイル編集、MCP ツールの呼び出しなどに割り込み、ツール呼び出しを書き換えることもできます。

POINT 03

終了・中断時の処理

SessionEnd フックでセッション終了時にコマンドを実行できます。Interrupt フックは、メインスレッドで実行中のターンを中断したときに実行され、中断の記録や、フックが始めた作業の片付けに使えます。

GUIDE

機能解説

概要

たとえば、チームのプロンプトを走査して API キーの誤った貼り付けを止める使い方があります。フックは既定で有効です。

Hooks は Codex の拡張の仕組みで、エージェントループの途中でスクリプトや MCP ツールを実行します。

  • Codex は、有効な設定レイヤーの隣にある hooks.json ファイル、または config.toml 内のインラインの [hooks] テーブルからフックを見つけます。読み込み元が複数あるときは、条件に合うフックをすべて読み込みます。
  • プラグインが有効なときは、ユーザー・プロジェクト・管理のフックと並べて、そのプラグインのライフサイクルフックも読み込めます。
  • ハンドラーの種類は command と mcp_tool に対応しています。prompt と agent のハンドラーは解析されますが、実行はされません。
  • matcher フィールドは正規表現の文字列で、フックが発火する条件を絞り込みます。
  • 同じイベントに一致する複数のコマンドフックは同時に起動するため、あるフックが別の一致するフックの起動を妨げることはありません。

イベントごとの動き

  • UserPromptSubmit: decision: "block" と理由を返すと、プロンプトを止めます。
  • PreToolUse: Bash、apply_patch によるファイル編集、MCP ツールの呼び出し、その他のローカル関数ツールに割り込めます。permissionDecision: "allow" と updatedInput を返すと、止めずに対応ツールの呼び出しを書き換えます。
  • PermissionRequest: Codex が承認を求める直前に実行され、許可・拒否のほか、判断せずに通常の承認プロンプトへ進めることもできます。
  • PostToolUse: 対応ツールが出力を返した後に実行されます。すでに実行されたツールの副作用は取り消せません。
  • PreModelRequest / PostModelRequest: 同じターン内の再試行も含めて、モデルへのリクエストを記録できます。出力は診断用で、モデルのコンテキストを変えたりリクエストを止めたりはできません。
  • Stop: decision: "block" を返すと、Codex は処理を続け、フックの理由を本文とする継続プロンプトを新しいユーザープロンプトとして自動で作ります。
  • SessionEnd: セッション終了時にコマンドを実行します。最終メモの保存やファイルの片付けに使えます。サブエージェントでは実行されません。
  • Interrupt: メインスレッドで実行中のターンを中断したときに実行されます。中断の記録や、フックが始めた作業の片付けに使えます。出力で中断を防いだり、ターンを再開したりはできません。

なお、WebSearch などのホスト型ツールはローカルの関数ツールのフック経路を通らないため、PreToolUse と PostToolUse は適用されません。

バックグラウンド実行と出力の扱い

既定では、Codex はコマンドフックの完了を待ってから、きっかけとなった操作を続けます。async を true にすると、Codex は処理を続けながらコマンドフックをバックグラウンドで実行します。hooks.json ではコマンドハンドラーに "async": true を、config.toml のインラインのフックでは async = true を設定します。バックグラウンドのフックは、きっかけとなった操作を止める・承認する・書き換えるなどの制御はできません。

モデルに見えるフック出力は、既定で 1 メッセージあたりおよそ 2,500 トークンまでです。これを超えると、全文を <temp_dir>/hook_outputs/<session_id>/<uuid>.txt に保存し、モデルには先頭と末尾のプレビューと保存先のパスを渡します。

MCP ツールのフックは既存の MCP 接続を使い、サーバーの起動や再接続は行いません。

管理者・導入時に確認したい点

  • フックは既定で有効です。無効にするには、config.toml で次のように設定します。
[features]
hooks = false
  • allow_managed_hooks_only = true を設定すると、ユーザー・プロジェクト・セッション・プラグインのフックを無視し、管理者が管理するフックだけを許可します。
  • 読み込めない必須の管理フックがあるセッションは拒否されます。
  • プロジェクト内のフックは、プロジェクトの .codex/ レイヤーが信頼されている場合だけ読み込まれます。
  • Codex はフックの現在のハッシュに対して信頼を記録します。新規または変更されたフックはレビュー対象になり、信頼されるまで実行されません。
  • Codex の外でフックの出どころを確認済みの単発の自動化では、--dangerously-bypass-hook-trust を渡すと、その実行に限り保存済みの信頼なしで有効なフックを実行します。
  • ツールのフックは有用なガードレールであり、完全な強制の境界としては扱わない位置付けです。
HOW TO USE

使い方

以下は、フックを定義して信頼するまでの基本の流れです。

  1. フックを hooks.json ファイル、または config.toml に定義します。置き場所としては ~/.codex/ や <repo>/.codex/ が使いやすい場所です。
  2. CLI で /hooks を使い、フックの読み込み元の確認、新規・変更されたフックのレビュー、フックの信頼、管理対象でない個別フックの無効化を行います。
  3. プラグインに同梱されたフックは、CLI では /hooks、デスクトップアプリでは composer の Review hooks (フックをレビュー) を選ぶか、Settings (設定) > Hooks (フック) を開いてレビューし、信頼します。
公式ヘルプを開く ↗
USE CASES

利用シーン

CASE 01

チームのプロンプトを確認し、API キーの誤った貼り付けを止める場面に向いています。

CASE 02

Codex が承認を求める前に、決めたルールで許可・拒否を判断する場面に使えます。

CASE 03

セッション終了時に最終メモを保存したり、作業用のファイルを片付けたりする場面に使えます。

CASE 04

モデルへのリクエストを、同じターン内の再試行も含めて記録する場面に使えます。

COMPARISON

Claude・Anthropic の対応する機能

比較の単位となる業務: エージェント実行のライフサイクルイベントに応じたコマンド・MCPツールの自動実行

大きなフック出力の扱いは、Codex と Claude Code の Hooks のどちらにもあります。Codex はモデルに見えるフック出力を既定で 1 メッセージあたりおよそ 2,500 トークンまでとし、超えた分はファイルに保存して先頭と末尾のプレビューを渡します。Claude Code では、5 万文字を超えるフック出力をコンテキストに直接入れず、ファイルパスとプレビュー付きでディスクに保存します。

管理フックだけを許可する設定も両方にあります。Codex では allow_managed_hooks_only = true で、ユーザー・プロジェクト・セッション・プラグインのフックを無視し、管理者が管理するフックを許可します。Claude Code では allowManagedHooksOnly が設定されているとき、管理設定で強制有効化されたプラグインのフックが実行されます。

PreToolUse フックの返し方にも違いがあります。Codex では permissionDecision: "allow" と updatedInput で、止めずにツール呼び出しを書き換えます。Claude Code では "defer" の許可判断があり、ヘッドレスセッションをツール呼び出しで一時停止し、-p --resume で再開してフックに再評価させます。

TIMELINE

これまでの変更

  1. 実行中のトップレベルのターンが中断されたときにコマンドや MCP ハンドラーを実行する Interrupt フックと、許可リストに登録されたエグゼキュータープラグインの stop フックの実行が加わりました。

  2. フックによるコマンドの非同期実行と MCP ツールの呼び出し、フック一覧での実行モードの表示、読み込めない必須の管理フックがあるセッションの拒否が加わりました。

  3. 権限フックによる厳格な自動レビューのリクエストの解決、実体化されたワークスペースプラグインのフックの信頼、スレッド終了時に実行される SessionEnd フック、フックのコンテキストのスピル上限の設定が加わりました。

  4. Hooks が一般提供 (GA) になりました。

  5. Codex アプリに、フックのアプリ内信頼レビューフローが追加されました。フックの設定が済む前でも Hooks 設定を開けます。

対象プランは公式のリリースノートには記載がありません。

SOURCES

出典

出典 8 件を表示