Codex harness
Codex ハーネスランタイム
Codex ハーネスターンのランタイム契約。セットアップとルーティングについては、 Codex ハーネスを参照してください。設定フィールドについては、 Codex ハーネスリファレンスを参照してください。
概要
Codex はネイティブモデルループ、ネイティブスレッドの再開、ネイティブツールの継続、 およびネイティブ Compaction を管理します。OpenClaw はチャネルルーティング、セッション ファイル、可視メッセージの配信、OpenClaw 動的ツール、承認、メディア 配信、およびその境界を囲むトランスクリプトミラーを管理します。
プロンプトのルーティングは、プロバイダー文字列だけでなく、選択されたランタイムに従います。 ネイティブ Codex ターンには Codex app-server の開発者指示が適用されます。一方、明示的な OpenClaw 互換ルートでは、Codex 形式の OpenAI 認証またはトランスポートを 使用する場合でも、通常の OpenClaw システムプロンプトが維持されます。
OpenClaw は、ワークスペースのパーソナリティファイルと OpenClaw エージェントの
アイデンティティが引き続き正となるよう、Codex の組み込みパーソナリティを無効化
(personality: "none")してネイティブ Codex スレッドを開始および再開します。それ以外では、
ネイティブ Codex は Codex が管理するベース指示、モデル指示、およびプロジェクトドキュメントの
読み込みを維持します。軽量な OpenClaw 実行(Cron など)では、引き続きプロジェクトドキュメントの
読み込みが抑制されます。
OpenClaw の開発者指示は、ソースチャネルへの配信、OpenClaw 動的ツール、ACP 委任、
アダプターコンテキスト、およびアクティブなエージェントワークスペースのプロファイルファイルといった、
OpenClaw ランタイムに関する事項を扱います。Skills カタログと、ツール経由で参照される
MEMORY.md ポインターは、ターン単位のコラボレーション用開発者指示として投影されます。
メモリーツールが利用できない場合は、代わりにアクティブな BOOTSTRAP.md の内容と
MEMORY.md 全体が、通常のターン入力コンテキストとしてフォールバックされます。
ほとんどの OpenClaw 動的ツールは、検索可能な openclaw 名前空間を使用します。
catalogMode: "direct-only" と指定されたツールは openclaw_direct を使用します。
Codex はこれを、ネストされたコードモード実行に公開せず、DirectModelOnly として
モデルから直接参照可能な状態に保ちます。
スレッドのバインディングとモデル変更
OpenClaw セッションが既存の Codex スレッドに接続されている場合、次のターンでは
現在選択されているモデル、承認ポリシー、サンドボックス、承認レビュアー、および
サービスティアが app-server に再送信されます。openai/gpt-5.5 から
openai/gpt-5.2 に切り替えると、スレッドのバインディングは維持されますが、新しく
選択されたモデルで処理を続行するよう Codex に要求します。
監督対象のバインディングは例外です。OpenClaw のモデル選択機能はロックされたままとなり、 再開時にはモデルとプロバイダーのオーバーライドが省略されるため、Codex は正規スレッドに 保存されたモデルとプロバイダーを復元します。別のネイティブ Codex コントロールで、 保存されたこの組み合わせを変更できます。また、初期スナップショットによって Codex の通常の モデル差異警告が生成される場合があります。外側の OpenClaw モデルとフォールバックチェーンが、 いずれかを代替することはありません。
監督と安全な継続
Codex の監督は、同じ codex Plugin のオプトイン機能です。別個の接続を介して
ネイティブスレッドを検出し、アーカイブされていないセッションだけを Gateway カタログに
投影します。明示的な appServer 接続設定がない場合、通常のハーネスがエージェント単位の
ままである一方、この接続では管理対象のユーザーホーム stdio が使用されます。
一覧表示とメタデータの読み取りは受動的であり、スレッドの再開、OpenClaw によるライブイベントの
購読、または承認への応答は行いません。
Gateway コンピューター上の保存済みまたはアイドル状態のセッションでは、ブランチとして続行
によって通常のモデルロック済みチャットが作成され、ソースで最後に永続化された完了ターンまでの、
上限付きのユーザーおよびアシスタント履歴がミラーリングされます。最初の通常チャットターンでは、
実際の承認ハンドラーが設定され、モデルまたはプロバイダーをオーバーライドせずにスナップショットを
固定するため、一時的なネイティブフォークが使用されます。Codex App Server は現在のネイティブ設定を
使用して選択された組み合わせを返し、そのモデルがソースに最後に記録されたモデルと異なる場合は、
通常の警告を生成します。同じ監督接続上で、OpenClaw は、その作業ディレクトリとランタイムポリシーの
下にある正規の appServer ソース Codex ハーネススレッドを、最初の開始時に限り、返されたモデルと
プロバイダーを正確に使用して開始し、上限付きの可視履歴を挿入して、一時フォークをアーカイブします。
ソースが再開されることはありません。正規スレッドでは OpenClaw ハーネスの完全なツールサーフェスが
利用できますが、ソースの推論、ツール呼び出し、ツール結果は複製されません。非公開の接続スコープは、
保留中と確定済みのバインディング状態の両方で維持されるため、それ以降のすべてのターンでも、
ネイティブ認証とプロバイダー設定を備えた同じ接続が使用されます。監督が無効な場合や、
バインディングまたは接続にずれがある場合は、通常のエージェントホームハーネスへ切り替えず、
安全側に閉じて失敗します。
元の CLI または VS Code ソースは、引き続き両方のカタログの対象となります。
正規ブランチはネイティブ Codex スレッドですが、そのソース種別は appServer です。
ネイティブクライアントがこのソース種別を除外する場合があるため、Codex Desktop に
表示されるとは限りません。
アクティブなソースから新しいブランチを開始したり、アーカイブしたりすることはできませんが、
既存の監督対象チャットは引き続き開けます。notLoaded はアクティビティが不明であることを意味し、
アイドル状態を意味するものではありません。OpenClaw がローカルの idle または notLoaded 行の
アーカイブを許可するのは、他に実行プロセスが存在しないことを明示的に確認し、かつプロセスローカルの
状態を新たに読み取った後だけです。Codex は、単一の App Server プロセス内ではスレッドの変更を
直列化しますが、プロセス間で排他的な実行プロセスまたは承認所有者のリースを提供しないため、
その読み取りだけでは、別のプロセスがスレッドを使用していないことを証明できません。OpenClaw は、
正確な対象、または Codex のページネーション付き子孫クエリが返した、アーカイブされていない
生成済み子孫のいずれかについて、既知のアクティブなバインディング所有者をブロックします。
列挙エラー、循環、および安全上限の超過時には、安全側に閉じて失敗します。それでもネイティブ
アーカイブは別プロセスの新しいターンと競合する可能性があるため、確認の対象には、不明なクライアントと、
状態の読み取りからアーカイブまでの間隔が含まれます。監督対象のモデルロック済みチャットは、
ネイティブバインディングを保護している間は削除できません。
ペアリングされた Node のカタログは、初期リリースではメタデータ専用のままです。現在の Node 呼び出し境界はリクエスト/レスポンス方式であり、実際の Codex ハーネスバインディングに 必要な長時間存続するターンイベント、承認リクエスト、またはストリーミング出力を伝送できません。 そのため、行がアイドル状態であっても、リモートの 続行 と アーカイブ は利用できません。
運用者向けのセットアップと Control UI に表示される動作については、 Codex の監督を参照してください。
可視応答と Heartbeat
Codex ハーネスを介した直接/ソースチャットのターンでは、内部 WebChat サーフェスへの最終アシスタント
応答の自動配信がデフォルトとなり、Pi ハーネス契約に合わせられています。つまり、エージェントは通常どおり
応答し、OpenClaw が最終テキストをソース会話へ投稿します。エージェントが
message(action="send") を呼び出さない限り最終アシスタントテキストを非公開に保つには、
messages.visibleReplies: "message_tool" を設定します。
Codex の Heartbeat ターンでは、デフォルトで検索可能な OpenClaw ツールカタログに
heartbeat_respond が追加され、エージェントはウェイクアップ時に通知せず静かなままにするか、
通知するかを記録できます。Heartbeat の自発的動作に関するガイダンスは、Heartbeat ターンに限定された
Codex コラボレーションモードの開発者指示として送信されます。通常のチャットターンでは、
Codex のデフォルトモードが維持されます。HEARTBEAT.md が空でない場合、Heartbeat の指示では
内容をインライン展開せず、Codex にそのファイルを参照させます。
フックの境界
| レイヤー | 所有者 | 目的 |
|---|---|---|
| OpenClaw Plugin フック | OpenClaw | OpenClaw と Codex ハーネス間の製品/Plugin 互換性。 |
| Codex app-server 拡張ミドルウェア | OpenClaw バンドル Plugin | OpenClaw 動的ツールを囲むターン単位のアダプター動作。 |
| Codex ネイティブフック | Codex | Codex 設定による低レベルの Codex ライフサイクルとネイティブツールポリシー。 |
OpenClaw は、Plugin の動作をルーティングするためにプロジェクトまたはグローバルの Codex
hooks.json ファイルを使用しません。ネイティブツールと権限のブリッジのために、OpenClaw は
PreToolUse、PostToolUse、PermissionRequest、および Stop に関する
スレッド単位の Codex 設定を挿入します。
Codex app-server の承認が有効な場合(approvalPolicy が "never" でない場合)、
デフォルトで挿入されるネイティブフック設定では PermissionRequest が省略され、レビュー後の
実際の権限昇格を Codex の app-server レビュアーと OpenClaw の承認ブリッジが処理します。
互換性リレーを強制するには、nativeHookRelay.events に permission_request を追加します。
SessionStart や UserPromptSubmit など、その他の Codex フックは Codex レベルの
制御のままであり、v1 契約では OpenClaw Plugin フックとして公開されません。
OpenClaw 動的ツールでは、Codex が呼び出しを要求した後に OpenClaw がツールを実行するため、 Plugin とミドルウェアの動作はハーネスアダプター内で実行されます。Codex ネイティブツールでは、 Codex が正規のツール記録を管理します。OpenClaw は選択したイベントをミラーリングできますが、 Codex が app-server またはネイティブフックのコールバックを通じて公開しない限り、 ネイティブスレッドを書き換えることはできません。
Codex app-server のレポートモードの PreToolUse イベントは、対応する app-server の承認まで
Plugin の承認を延期します。ネイティブペイロードで openclaw_approval_mode: "report" が設定されているときに、OpenClaw の before_tool_call フックが
requireApproval を返した場合、ネイティブフックリレーは Plugin の承認要件を記録し、
ネイティブの判断は返しません。後で Codex が同じツール使用に対する app-server の承認リクエストを
送信すると、OpenClaw は Plugin の承認プロンプトを開き、その判断を Codex にマッピングして返します。
Codex の PermissionRequest イベントは別個の承認経路であり、そのブリッジ用に設定されている場合は、
引き続き OpenClaw の承認を介してルーティングできます。
Codex app-server の項目通知は、ネイティブの PostToolUse リレーでまだ扱われていない
ネイティブツールの完了について、非同期の after_tool_call 観測も提供します。これらは
テレメトリー/互換性専用であり、ネイティブツール呼び出しのブロック、遅延、変更はできません。
Compaction と LLM ライフサイクルの投影は、Codex app-server の通知と OpenClaw アダプターの
状態から取得され、ネイティブ Codex フックコマンドからは取得されません。
before_compaction、after_compaction、llm_input、および llm_output は、
アダプターレベルの観測であり、Codex の内部リクエストまたは Compaction ペイロードを
バイト単位で完全に取得したものではありません。
Codex ネイティブの hook/started および hook/completed app-server 通知は、
処理軌跡とデバッグのため、codex_app_server.hook エージェントイベントとして投影されます。
これらが OpenClaw Plugin フックを呼び出すことはありません。
V1 サポート契約
Codex ランタイム v1 でサポートされる機能:
| サーフェス | サポート | 理由 |
|---|---|---|
| Codex を介した OpenAI モデルループ | サポート済み | Codex app-server が OpenAI のターン、ネイティブスレッドの再開、ネイティブツールの継続を管理します。 |
| OpenClaw のチャネルルーティングと配信 | サポート済み | Telegram、Discord、Slack、WhatsApp、iMessage、その他のチャネルはモデルランタイムの外部に維持されます。 |
| OpenClaw の動的ツール | サポート済み | Codex が OpenClaw にこれらのツールの実行を要求するため、OpenClaw は実行経路に残ります。 |
| プロンプトおよびコンテキスト Plugin | サポート済み | OpenClaw は OpenClaw 固有のプロンプトとコンテキストを Codex のターンへ投影する一方、Codex が管理するベースプロンプト、モデルプロンプト、設定済みのプロジェクトドキュメントプロンプトはネイティブ Codex 経路に残します。OpenClaw はネイティブスレッドで Codex の組み込みパーソナリティを無効にし、エージェントワークスペースのパーソナリティファイルが引き続き正規の情報源となるようにします。ネイティブ Codex の開発者指示は、codex_app_server に明示的にスコープ設定されたコマンドガイダンスのみを受け入れます。従来のグローバルコマンドヒントは Codex 以外のプロンプトサーフェス向けに維持されます。 |
| コンテキストエンジンのライフサイクル | サポート済み | 組み立て、取り込み、ターン後のメンテナンスが Codex のターンを取り囲む形で実行されます。コンテキストエンジンはネイティブ Codex の Compaction を置き換えません。 |
| 動的ツールフック | サポート済み | before_tool_call、after_tool_call、およびツール結果ミドルウェアが、OpenClaw が管理する動的ツールを取り囲む形で実行されます。 |
| ライフサイクルフック | アダプターによる観測としてサポート済み | llm_input、llm_output、agent_end、before_compaction、after_compaction は、実態に即した Codex モードのペイロードで発火します。 |
| 最終回答の修正ゲート | ネイティブフックリレーを介してサポート済み | Codex の Stop は before_agent_finalize に中継されます。revise は最終化の前に、もう一度モデル処理を行うよう Codex に要求します。 |
| ネイティブシェル、パッチ、MCP のブロックまたは観測 | ネイティブフックリレーを介してサポート済み | Codex の PreToolUse と PostToolUse は、Codex app-server 0.142.0 以降の MCP ペイロードを含む、確定済みのネイティブツールサーフェスに対して中継されます。ブロックはサポートされますが、引数の書き換えはサポートされません。 |
| ネイティブ権限ポリシー | Codex app-server の承認と互換ネイティブフックリレーを介してサポート済み | Codex app-server の承認要求は、Codex によるレビュー後に OpenClaw を経由します。PermissionRequest ネイティブフックリレーは、Codex がガーディアンによるレビュー前にこれを発行するため、ネイティブ承認モードではオプトインです。 |
| app-server の軌跡キャプチャ | サポート済み | OpenClaw は app-server に送信したリクエストと、app-server から受信した通知を記録します。 |
Codex ランタイム v1 ではサポートされていません:
| サーフェス | V1 の境界 | 将来の対応方針 |
|---|---|---|
| ネイティブツール引数の変更 | Codex のネイティブなツール実行前フックはブロックできますが、OpenClaw は Codex ネイティブツールの引数を書き換えません。 | 置換後のツール入力に対応する Codex のフック/スキーマサポートが必要です。 |
| 編集可能な Codex ネイティブトランスクリプト履歴 | Codex が正規のネイティブスレッド履歴を管理します。OpenClaw はミラーを管理し、将来のコンテキストを投影できますが、サポートされていない内部構造を変更すべきではありません。 | ネイティブスレッドの直接編集が必要な場合は、明示的な Codex app-server API を追加します。 |
Codex ネイティブツールレコード向けの tool_result_persist |
このフックは OpenClaw が管理するトランスクリプト書き込みを変換するものであり、Codex ネイティブツールレコードを変換するものではありません。 | 変換済みレコードのミラーは可能ですが、正規レコードの書き換えには Codex のサポートが必要です。 |
| 詳細なネイティブ Compaction メタデータ | OpenClaw はネイティブ Compaction を要求できますが、安定した保持/破棄リスト、トークン差分、完了概要、概要ペイロードは受信しません。 | より詳細な Codex Compaction イベントが必要です。 |
| Compaction への介入 | OpenClaw は、Plugin やコンテキストエンジンによるネイティブ Codex Compaction の拒否、書き換え、置換を許可しません。 | Plugin がネイティブ Compaction を拒否または書き換える必要がある場合は、Codex の Compaction 前後フックを追加します。 |
| バイト単位で完全に一致するモデル API リクエストのキャプチャ | OpenClaw は app-server のリクエストと通知をキャプチャできますが、最終的な OpenAI API リクエストは Codex コアが内部で構築します。 | Codex のモデルリクエスト追跡イベントまたはデバッグ API が必要です。 |
ネイティブ権限と MCP の情報要求
PermissionRequest に対して、OpenClaw はポリシーが判断を下した場合にのみ、明示的な許可または拒否の判断を返します。
判断なしという結果は許可ではありません。Codex はこれをフックによる判断なしとして扱い、
独自のガーディアンまたはユーザー承認経路へフォールスルーします。
Codex app-server の承認モードでは、デフォルトでこのネイティブフックが省略されます。
これは、permission_request が nativeHookRelay.events に明示的に含まれている場合、
または互換ランタイムがこのフックをインストールする場合を除いて適用されます。
オペレーターが Codex のネイティブ権限要求に対して allow-always を選択すると、
OpenClaw はそのプロバイダー、セッション、ツール入力、cwd の完全なフィンガープリントを、
期限付きのセッション期間中記憶します。記憶された判断は意図的に完全一致の場合にのみ適用されます。
コマンド、引数、ツールペイロード、または cwd が変更されると、新たな承認が必要になります。
Codex が _meta.codex_approval_kind を "mcp_tool_call" としてマークした場合、
Codex MCP ツールの承認情報要求は OpenClaw の Plugin 承認フローを経由します。
Codex の request_user_input プロンプトは元のチャットへ送り返され、
次にキューへ追加されたフォローアップメッセージは、追加コンテキストとして誘導されるのではなく、
そのネイティブサーバーリクエストへの回答になります。その他の MCP 情報要求は安全側に倒して失敗します。
これらのプロンプトを伝達する一般的な Plugin 承認フローについては、 Plugin 権限要求を参照してください。
キューのステアリング
実行中のキューステアリングは、Codex app-server の turn/steer に対応付けられます。
デフォルトの messages.queue.mode: "steer" では、OpenClaw は設定された無通信時間枠の間、
steer モードのチャットメッセージをまとめ、到着順に 1 つの turn/steer
リクエストとして送信します。
Codex のレビューと手動 Compaction ターンでは、同一ターンのステアリングが拒否されることがあります。その場合、OpenClaw はアクティブな実行が完了するまで待ってからプロンプトを開始します。メッセージをステアリングする代わりにデフォルトでキューに入れる場合は、/queue followup または /queue collect を使用します。ステアリングキューを参照してください。
Codex フィードバックのアップロード
ネイティブ Codex ハーネス上のセッションで /diagnostics [note] が承認されると、OpenClaw は関連する Codex スレッドに対して Codex app-server の feedback/upload も呼び出します。これには、一覧に記載された各スレッドのログと、利用可能な場合は生成された Codex サブスレッドのログが含まれます。
アップロードは、Codex の通常のフィードバック経路を通じて OpenAI サーバーに送信されます。その app-server で Codex フィードバックが無効になっている場合、コマンドは app-server のエラーを返します。完了した診断の応答には、送信されたスレッドのチャンネル、OpenClaw セッション ID、Codex スレッド ID、ローカルの codex resume <thread-id> コマンドが一覧表示されます。
承認を拒否または無視した場合、OpenClaw はそれらの Codex ID を表示せず、Codex フィードバックも送信しません。このアップロードは、ローカルの Gateway 診断エクスポートを置き換えるものではありません。承認、プライバシー、ローカルバンドル、グループチャットでの動作については、診断エクスポートを参照してください。
完全な Gateway 診断バンドルを含めず、現在アタッチされているスレッドの Codex フィードバックのみをアップロードする場合に限り、/codex diagnostics [note] を使用します。
Compaction とトランスクリプトミラー
選択したモデルが Codex ハーネスを使用する場合、ネイティブスレッドの Compaction は Codex app-server が担当します。OpenClaw は、Codex ターンに対して事前 Compaction を実行せず、Codex の Compaction をコンテキストエンジンの Compaction に置き換えず、ネイティブ Compaction を開始できない場合に OpenClaw または公開 OpenAI の要約へフォールバックしません。OpenClaw は、チャンネル履歴、検索、/new、/reset、および将来のモデルまたはハーネスの切り替えに使用するトランスクリプトミラーを保持します。
/compact や Plugin が要求する手動 Compaction 操作などの明示的な Compaction 要求は、thread/compact/start を使用してネイティブ Codex Compaction を開始します。OpenClaw は、Codex が対応する contextCompaction 完了項目を発行するまで要求と共有クライアントのリースを開いたままにし、その後 Compaction ターンを完了として報告します。その終端ターンが設定された Compaction タイムアウトを超過した場合、OpenClaw はネイティブターンの中断を要求します。リースとスレッド単位の Compaction フェンスは、Codex が終端状態を報告するか、中断 RPC を確認するまで保持されます。Codex が中断猶予期間内に確認しない場合、OpenClaw はフェンスを解放する前に接続を廃止します。リモート接続では、確認されていないリモートターンと後続の処理が重複しないよう、対応するスレッドバインディングもデタッチします。廃止された接続上の他のターンは失敗し、新しいクライアントで再試行できます。クライアントの終了、要求のキャンセル、または Compaction ターンの失敗は、失敗した操作として返されます。コンテキスト負荷に応じた自動 Compaction は Codex の役割です。OpenClaw がネイティブ Compaction を開始するのは、手動で要求されたトリガーに対してのみです。
コンテキストエンジンが Codex スレッドのブートストラップ用プロジェクションを要求すると、OpenClaw はツール呼び出しの名前と ID、入力形式、および編集済みのツール結果内容を新しい Codex スレッドへ投影します。ツール呼び出し引数の生の値は、そのプロジェクションにコピーしません。
ミラーには、ユーザープロンプト、アシスタントの最終テキスト、および app-server が発行した場合の軽量な Codex の推論または計画レコードが含まれます。OpenClaw はネイティブ Compaction の開始と終端ステータスを記録しますが、人間が読める Compaction の要約や、Compaction 後に Codex が保持した項目を監査できる一覧は公開しません。
Codex が正規のネイティブスレッドを所有するため、tool_result_persist は Codex ネイティブのツール結果レコードを書き換えません。これは、OpenClaw が所有するセッショントランスクリプトへ OpenClaw がツール結果を書き込む場合にのみ適用されます。
メディアと配信
OpenClaw は引き続きメディア配信とメディアプロバイダーの選択を担当します。画像、動画、音楽、PDF、TTS、およびメディア理解では、agents.defaults.imageGenerationModel、videoGenerationModel、pdfModel、messages.tts などの対応するプロバイダー/モデル設定を使用します。
テキスト、画像、動画、音楽、TTS、承認、メッセージングツールの出力は、引き続き通常の OpenClaw 配信経路を通ります。メディア生成に従来のランタイムは必要ありません。Codex が savedPath を含むネイティブ画像生成項目を発行すると、Codex ターンにアシスタントテキストがなくても、OpenClaw はその正確なファイルを通常の返信メディア経路を通じて転送します。