サブエージェントの既定サーフェスが v1 である理由
OpenCodex をインストールすると、サブエージェントのサーフェスは v1 に設定されます。Dashboard、Models、Subagents の各ページでは、base または v2 に移る前に確認を求め、その確認からこのページにリンクします。CLI では確認は表示されません。
理由は明確です。v2 では、ChatGPT ネイティブモデルからルーティングされたモデルへ渡すタスクを、受け取ったモデルが読めません。GPT の親から Grok、Claude、GLM の子を作るのは一般的な委任方法ですが、v2 では毎回失敗します。
発生時に表示されるもの
Section titled “発生時に表示されるもの”空の子タスクを黙って作る代わりに、生成が拒否されます。
{ "error": { "code": "unreadable_encrypted_agent_task", "message": "Routed V2 worker task is encrypted for the native ChatGPT backend and cannot be read by the selected provider. Use plaintext V2 agent-message delivery or select a native ChatGPT model." }}HTTP 400 が返され、暗号文は応答に含まれません。読めないペイロードを転送すると、子は空の指示から自信ありげな誤答を返しかねないため、安全側で拒否します。
発生する理由
Section titled “発生する理由”v1 では親が子のタスクを平文として出力します。OpenCodex がそれを読み、ルーティングし、子は実行可能な内容を受け取ります。
v2 では親が ChatGPT バックエンドで生成された encrypted_content としてタスクを出力します。鍵はそのバックエンドに残ります。OpenCodex は鍵を持っていないため、プロキシが復号したり書き換えたりすることはできません。値はフラグの裏に隠れた平文ではなく、本物の暗号文です。そのため設定ミスではなく構造上の問題であり、プロキシ側の設定では修正できません。
影響を受けない構成は 3 つあります。失敗する境界を理解するために区別してください。
| 構成 | v1 | v2 |
|---|---|---|
| ChatGPT の親からルーティングされた子 | 動作する | 失敗する |
| ルーティングされた親からルーティングされた子 | 動作する | 動作する |
| ChatGPT の親から ChatGPT の子 | 動作する | 動作する。バックエンドが自ら生成した内容を復号できる |
バックエンドは自らの暗号文を常に読めます。破綻するのは境界を越える場合だけです。
上流で修正されていますか?
Section titled “上流で修正されていますか?”まだです。少なくとも必要な送信側は未対応です。上流でマージされた openai/codex#35845 は、平文の協調メッセージの受信側に対応しました。すでに生成された平文は処理できますが、OpenAI の親が平文を生成するようにはなりません。
送信側の課題は #36376 と #37197 で引き続き公開されています。前者は Windows、macOS、Linux の CLI 0.146~0.151 で再現され、後者は不足している送信側の配信ポリシーを直接指摘しています。どちらにもメンテナーの対応確約や予定日はありません。
OpenCodex は結果を #92 に記録し、対応予定なしとして閉じました。このリポジトリ内では修正できないため、ここでの作業待ちではなく、上流の作業への参照です。
現在の 3 つのモード
Section titled “現在の 3 つのモード”| モード | サーフェス | 選ぶ場合 |
|---|---|---|
| v1(既定) | 全モデルが従来の名前空間付き生成ツールを公開します。生成時に別のモデルを直接指定できます。 | プロバイダー間で委任する場合。出荷時の既定値です。 |
| base | 上流のモデル固定設定です。Sol と Terra は v2、Luna は v1、固定されないモデルは Codex 自身のフラグに従います。 | Codex がモデルごとに意図したサーフェスを使い、同じプロバイダー内だけで委任する場合。 |
| v2 | 全モデルがフラットな同時実行ツールを公開します。 | 新しい並行セッションモデルを使い、親と子が境界の同じ側にいる場合。 |
base が先頭でなく 2 番目なのは、委任元としてよく使われる Sol と Terra が v2 に固定されるためです。この問題にとって base は中間設定ではなく、ChatGPT からルーティングされた子を作る場合は v2 と同様に動作します。
すでに base または v2 を選んでいる場合
Section titled “すでに base または v2 を選んでいる場合”既存の設定は変更されません。この既定値を含むリリースに更新しても現在の設定は書き換えず、ダッシュボードが一度通知して回答を待ちます。
- Continue は現在のモードを維持し、以後は確認しません。
- Switch to v1 は v1 を適用し、以後は確認しません。
どちらの回答も記録され、通知は再表示されません。回答せずに閉じると、次にダッシュボードを開いたときに再表示されます。
モード変更は新しい Codex セッションに適用されます。変更後に新しいセッションを開始してください。長時間動作している App ホストで以前のサーフェスが残る場合は、ocx sync を実行してそのサーフェスを再起動します。
それでも v2 を使う場合
Section titled “それでも v2 を使う場合”一般的に試す順に 4 つの方法があります。
- ChatGPT を v1 に維持する。 v2 内で
keepNativeChatGptOnV1を有効にすると、Sol と Terra は v1 のままで Grok や Claude の子を作れ、ルーティングされた親には v2 が適用されます。両方を使うのに最も近い設定です。 - 同じプロバイダー内で委任する。 ルーティングされた親からルーティングされた子へのタスクは v2 でも平文で、通常どおり動作します。
- 直接キー認証の Responses リレーを信頼する。
allowEncryptedV2AgentTasks: trueを明示的に設定したプロバイダーには、400 エラーの代わりに不透明なペイロードが渡されます。処理できると分かっている接続先だけに設定してください。 agentTaskRecoveryを有効にする。 実験的で、既定では無効です。ChatGPT バックエンド経由で、読み取れない暗号化されたNEW_TASK、MESSAGE、FOLLOWUP_TASK、FINAL_ANSWERの各項目を回復しますが、クォータと遅延、非公開の動作への依存という代償を伴います。コンボの回復は生成された子ターンに限られ、分割トークンの断片は引き続きサポートされません。
各方式の詳細はサブエージェント サーフェス、設定はエージェント設定を参照してください。
このページが不要になるとき
Section titled “このページが不要になるとき”上流リリースで ChatGPT ネイティブの親がルーティングされた子のタスクを平文で出力するようになれば、現在の既定値の理由はなくなります。その時点で既定値は base に戻り、確認表示は停止し、このページは助言ではなく履歴になります。
モードを変更する
Section titled “モードを変更する”Dashboard、Models、Subagents には同じ v1/base/v2 スイッチがあり、いずれも base または v2 の前に確認を求めます。CLI では次を実行します。
ocx v2 statusocx v2 mode v1CLI は確認を求めません。同じ設定を変更するため、このページの内容を理解したうえで選んでください。

