コンテンツにスキップ
17.3k

サブエージェントの既定サーフェスが v1 である理由

OpenCodex をインストールすると、サブエージェントのサーフェスは v1 に設定されます。Dashboard、Models、Subagents の各ページでは、base または v2 に移る前に確認を求め、その確認からこのページにリンクします。CLI では確認は表示されません。

理由は明確です。v2 では、ChatGPT ネイティブモデルからルーティングされたモデルへ渡すタスクを、受け取ったモデルが読めません。GPT の親から Grok、Claude、GLM の子を作るのは一般的な委任方法ですが、v2 では毎回失敗します。

空の子タスクを黙って作る代わりに、生成が拒否されます。

{
"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 が返され、暗号文は応答に含まれません。読めないペイロードを転送すると、子は空の指示から自信ありげな誤答を返しかねないため、安全側で拒否します。

同じ委任を 2 つの経路で比較。v1 では ChatGPT の親が平文のタスクを OpenCodex 経由で送り、プロバイダーの境界を越えた子が読める。v2 では親が ChatGPT バックエンドで生成された encrypted_content を送り、OpenCodex は復号できないため、境界で止まり unreadable_encrypted_agent_task で失敗する。

v1 では親が子のタスクを平文として出力します。OpenCodex がそれを読み、ルーティングし、子は実行可能な内容を受け取ります。

v2 では親が ChatGPT バックエンドで生成された encrypted_content としてタスクを出力します。鍵はそのバックエンドに残ります。OpenCodex は鍵を持っていないため、プロキシが復号したり書き換えたりすることはできません。値はフラグの裏に隠れた平文ではなく、本物の暗号文です。そのため設定ミスではなく構造上の問題であり、プロキシ側の設定では修正できません。

影響を受けない構成は 3 つあります。失敗する境界を理解するために区別してください。

構成 v1 v2
ChatGPT の親からルーティングされた子 動作する 失敗する
ルーティングされた親からルーティングされた子 動作する 動作する
ChatGPT の親から ChatGPT の子 動作する 動作する。バックエンドが自ら生成した内容を復号できる

バックエンドは自らの暗号文を常に読めます。破綻するのは境界を越える場合だけです。

まだです。少なくとも必要な送信側は未対応です。上流でマージされた openai/codex#35845 は、平文の協調メッセージの受信側に対応しました。すでに生成された平文は処理できますが、OpenAI の親が平文を生成するようにはなりません。

送信側の課題は #36376 と #37197 で引き続き公開されています。前者は Windows、macOS、Linux の CLI 0.146~0.151 で再現され、後者は不足している送信側の配信ポリシーを直接指摘しています。どちらにもメンテナーの対応確約や予定日はありません。

OpenCodex は結果を #92 に記録し、対応予定なしとして閉じました。このリポジトリ内では修正できないため、ここでの作業待ちではなく、上流の作業への参照です。

モード サーフェス 選ぶ場合
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 を実行してそのサーフェスを再起動します。

一般的に試す順に 4 つの方法があります。

  1. ChatGPT を v1 に維持する。 v2 内で keepNativeChatGptOnV1 を有効にすると、Sol と Terra は v1 のままで Grok や Claude の子を作れ、ルーティングされた親には v2 が適用されます。両方を使うのに最も近い設定です。
  2. 同じプロバイダー内で委任する。 ルーティングされた親からルーティングされた子へのタスクは v2 でも平文で、通常どおり動作します。
  3. 直接キー認証の Responses リレーを信頼する。 allowEncryptedV2AgentTasks: true を明示的に設定したプロバイダーには、400 エラーの代わりに不透明なペイロードが渡されます。処理できると分かっている接続先だけに設定してください。
  4. agentTaskRecovery を有効にする。 実験的で、既定では無効です。ChatGPT バックエンド経由で、読み取れない暗号化された NEW_TASK、MESSAGE、FOLLOWUP_TASK、FINAL_ANSWER の各項目を回復しますが、クォータと遅延、非公開の動作への依存という代償を伴います。コンボの回復は生成された子ターンに限られ、分割トークンの断片は引き続きサポートされません。

各方式の詳細はサブエージェント サーフェス、設定はエージェント設定を参照してください。

上流リリースで ChatGPT ネイティブの親がルーティングされた子のタスクを平文で出力するようになれば、現在の既定値の理由はなくなります。その時点で既定値は base に戻り、確認表示は停止し、このページは助言ではなく履歴になります。

Dashboard、Models、Subagents には同じ v1/base/v2 スイッチがあり、いずれも base または v2 の前に確認を求めます。CLI では次を実行します。

Terminal window
ocx v2 status
ocx v2 mode v1

CLI は確認を求めません。同じ設定を変更するため、このページの内容を理解したうえで選んでください。