サンドボックスで Codex を実行する方法を選択する
app server は、リモート CLI およびデスクトップ接続のためのエージェントバックエンドです。 エージェントを操作する場所を選択してください。
アタッチ型の CLI は
cws-agent を使用してサンドボックスを作成します。ローカル CLI とデスクトップ
アプリは、共通の SSH サンドボックスのセットアップを使用します。
モバイルからアクセスするには、Remote でスマートフォンをデスクトップホストとペアリングします。
スマートフォンはそのホストに接続し、ホストが SSH 経由でサンドボックスに接続します。デスクトップ
ホストはスリープさせず、オンラインの状態でアプリを起動したままにしてください。
Remote を介したモバイルと別のデスクトップを参照してください。
ローカルのターミナルユーザーインターフェース (TUI) は、入力の送信、出力の表示、承認の処理を
担います。リモートのエージェントセッションは app server が管理します。ラップトップ上で実行されている
エージェントからコマンドを 1 つずつ転送する仕組みではありません。
OpenAI app server ガイドを参照してください。
app server を起動しても、そのセッションがデスクトップアプリやモバイルアプリに登録されるわけではありません。
これらのインターフェースでは、デスクトップアプリとモバイルアプリを使用するで
説明する別途の接続セットアップを使用します。OpenAI の
Remote ドキュメントでは、このセルフホストセッションに Web サイトからアタッチするフローは
示されていません。ブラウザーからのアクセスは本ガイドのスコープ外です。
プログラムから利用する Agents API ワークフローは、別の実行モデルを使用します。
OpenAI Agents API レシピを参照してください。
前提条件
開始する前に、以下を準備してください。SANDBOX_USERaction が付与された CoreWeave API アクセストークン。CPU サンドボックス用のキャパシティも必要です。- Codex でサポートされている OpenAI アカウント、または OpenAI APIキー。このガイドの app server の例では、APIキー認証と API 請求を使用します。
- 公開リポジトリの URL。非公開リポジトリをクローンする場合は、サンドボックス内に Git の認証情報が必要です。
- OpenAI、パッケージレジストリ、および Git ホストへのアウトバウンド接続
[API-ACCESS-TOKEN] を CoreWeave API アクセストークンに置き換えてから、
サンドボックスの認証情報を読み込みます。
サンドボックスで Codex CLI を実行する
cws-agent を使用してサンドボックスを起動し、ターミナルをアタッチします。Codex TUI
とエージェントプロセスは、どちらもサンドボックス内で実行されます。
-
cws-agentのインストール手順に従います。 API キー認証を使用する場合は、起動前にローカルでOPENAI_API_KEYをエクスポートしておきます。 ツールがこのキーをサンドボックスに渡し、Codex のログインコマンドを使って保存します。 -
[SANDBOX-NAME]を、英小文字、数字、ハイフンからなる 1~40 文字で、 先頭が英小文字または数字の名前に置き換えます。[REPOSITORY-URL]は公開リポジトリの URL に置き換えます。スキルまたは Model Context Protocol (MCP) のインポートを確認するプロンプトが表示された場合、 この例では Enter を押してスキップします。Codex はサンドボックスの project ディレクトリで起動します。ワークスペースの 信頼と認証に関するプロンプトに従って操作します。--permission-mode nativeを指定すると、Codex 独自の権限設定がそのまま使用されます。指定しない場合、ラッパーは デフォルトで承認プロンプトをスキップします。詳しくは、cws-agentの権限モードを参照してください。 -
アカウントへのサインインが必要な場合は、TUI を終了してから、サンドボックス内で認証します。
Codex に表示されるログイン手順に従います。ヘッドレス環境でのデバイスサインインやワークスペースの 制限については、Codex の認証を参照してください。
-
セッションを確認するの手順を実行します。サンドボックスの実行中に後から再接続する場合は、
同じ
connectコマンドを使用します。保存済みの Codex 会話を再開する方法については、cws-agentのセッションを参照してください。
SSH でアクセス可能なサンドボックスを作成する
ローカル CLI とデスクトップアプリのどちらを使用する場合も、このセットアップを完了してください。この手順では Sandboxes ソフトウェア開発キット (SDK) を使用して、Codex がインストールされ、 root 以外の SSH ユーザーとして認証済みのサンドボックスを作成します。cws-agent は不要です。
このセットアップでは、Transport Layer Security (TLS) パススルーエンドポイント
と stunnel を使用して、エンドポイント経由で SSH 通信を転送します。生成された Python の
ProxyCommand が TLS 証明書を検証した後、SSH が
ユーザーのキーを認証し、ホストキーを検証します。app server は公開
リスナーを持ちません。この構成は OpenAI のネットワーク公開に関するガイダンスに準拠しています。
SSH クライアントを準備する
Python 3.12 以降、uv、OpenSSH がインストールされた macOS または Linux コンピューターを使用します。
デスクトップからアクセスする場合は、OpenAI の
SSH ホストの手順に記載されている、サポート対象のアプリとオペレーティングシステムを使用してください。
このセットアップでは、前提条件で用意したサンドボックスの認証情報と、
API 請求が有効な OpenAI APIキーを使用します。
[OPENAI-API-KEY] をお使いの OpenAI APIキーに置き換えます。
SSH サンドボックスを作成する
以下の内容をcreate_codex_ssh.py ファイルに保存します。このスクリプトは 8 時間有効なサンドボックスを作成し、
Codex 0.154.0 をインストールして、公開鍵による SSH
認証を使用する非 root の agent アカウントを設定します。OpenAI キーは標準入力 (stdin) 経由で codex login に渡されるため、
キーがサンドボックスの作成設定に保存されることはありません。Codex のログイン情報は
サンドボックス内に保存されます。
また、このスクリプトは有効期間 1 日の TLS 証明書を作成し、認証済みの Sandboxes SDK を使用して公開
証明書と SSH ホストキーを取得します。生成される
クライアント設定では、この両方が検証されます。再接続に必要なため、出力ディレクトリは削除せずに保持してください。
[REPOSITORY-URL] を公開 Git リポジトリの URL に置き換え、
リポジトリ外に新しい出力ディレクトリを選択します。
ssh_config ファイルの場所が出力され、
サンドボックスは実行中のままになります。出力ディレクトリには、sandbox-id、tls.crt、
known_hosts の各ファイルに加えて、tls_proxy.py フォワーダーも格納されます。サンドボックスの作成後にセットアップが失敗した場合、
スクリプトはサンドボックスの停止を試みます。停止にも失敗した場合は、
手動でクリーンアップできるよう、元のエラーにサンドボックス ID が含まれます。
Codex を接続する前に、SSH 接続を確認します。
agent、codex-cli 0.154.0、repository-ready が含まれていることを確認してください。
最初の接続に失敗した場合は、エンドポイントとサービスの起動が完了するのを待ってから
再試行してください。それでも接続に失敗する場合は、Sandboxes SDK を使用して /var/log/codex-sshd.log と
/var/log/codex-stunnel.log の各ファイルを確認してください。
SSH 接続を確認したら、
ローカル CLI または
デスクトップアプリとモバイルアプリ の手順に進みます。
ローカルの CLI を Codex app server に接続する
まず SSH でアクセス可能なサンドボックスを作成する を完了してください。サポートされている Node.js の長期サポート (LTS) リリースを使用して、同じバージョンの Codex をローカルにインストールします。npm パッケージでは、最小要件として Node.js 16 以降が指定されています。-
サンドボックスの project ディレクトリで app server を起動します。このコマンドを使用すると、app server が終了した場合でも起動時の
出力が保存されます。ターミナルは開いたままにしてください。
-tオプションによってリモートターミナルが割り当てられるため、Ctrl+C がリスナーに送られます。 -
2 つ目のターミナルで、ローカルポートをこのリスナーに転送し、
接続を維持します。
-
3 つ目のターミナルで、ローカルの TUI を接続し、リモートの
project ディレクトリを明示的に指定します。
-
TUI に
/workspace/projectが表示されていることを確認してから、 セッションを確認する の手順を実行します。接続に失敗した場合は、 保存されている起動時の出力を確認してください。
codex --remote コマンドを使用します。
このリスナーは、デスクトップアプリが管理する app server とは別のものです。
両者の間で会話を共有できるかどうかは検証されていません。OpenAI の
ローカル TUI 接続リファレンスを参照してください。
作業が終わったら TUI を終了し、リスナー用のターミナルと
転送用のターミナルで Ctrl+C を押します。
SSH サンドボックスへの再接続と停止
の手順に従って、ファイルを取得し、コンピュートを停止します。
デスクトップアプリとモバイルアプリを使用する
まず SSH でアクセス可能なサンドボックスを作成する の手順を完了してください。デスクトップアプリでサンドボックスを SSH projectとして追加したら、Remote を使用して ペアリング済みのスマートフォンから作業を続けられます。SSH 接続はデスクトップ側のホストが維持します。デスクトップアプリを接続する
サンドボックスをリモートprojectとして追加し、Codex がそのファイルシステムに書き込めることを確認します。-
~/.ssh/cw-codex-session/ssh_configファイルから、生成されたHost cw-codexブロックをコピーします。これを~/.ssh/configファイル内のHost *のデフォルト設定より前に貼り付けます。既存のHost cw-codexエントリがある場合は、重複して追加せずに置き換えてください。 -
ssh cw-codex 'codex --version'を実行します。認証エラーやホストキーのエラーが発生した場合は、解決してから次に進んでください。 -
デスクトップアプリで Settings > Connections を開き、
cw-codexSSH ホストを追加するか有効にします。 -
リモートprojectのフォルダーとして
/workspace/projectを選択し、projectを保存します。 -
そのリモートprojectを開いて会話を開始します。シークレットではない一意の値を
/workspace/project/sandbox-proof.txtファイルに書き込むよう、Codex に依頼します。 -
ターミナルから、結果を別途確認します。
Remote を介したモバイルや別のデスクトップからの接続
OpenAI の Remote 機能は、ペアリングされたホストを介して、サポートされているデスクトップアプリとモバイルアプリを接続します。 ドキュメントに記載されているモバイルのセットアップは、Mac または Windows ホスト上の ChatGPT デスクトップアプリから開始します。両方のデバイスで同じアカウントとワークスペースを使用してください。 組織設定やロールアウトの提供状況によっては、アクセスが制限される場合があります。 スマートフォンからサンドボックスで作業するには、まずそのデスクトップホストをサンドボックスの SSH project に接続します。 次に、スマートフォンをデスクトップホストとペアリングします。iOS または Android 版の ChatGPT で Remote を使用します。スマートフォンはデスクトップホストに接続し、そのデスクトップホストがサンドボックスに接続します。デスクトップアプリは起動したまま、スリープさせず、オンラインの状態を維持しておく必要があります。Control other devices が利用可能な場合は、サポートされている別の Mac または Windows デスクトップアプリからも同じホストに接続できます。 OpenAI の Remote セットアップ手順に従ってください。 app serverの WebSocket URL は、モバイルのペアリング用 URL ではありません。また、Agents API のcodex exec-server --remote 接続でも、モバイルデバイスはペアリングされません。
セッションの継続性とその他のエントリポイント
Remote では、接続先ホストのチャットをペアリング済みのデバイスから継続できます。ただし、codex --remote を直接実行する例で開始した会話が、
個別に設定したデスクトップの SSH project に表示されるとは限りません。
このセットアップでは、こうしたインターフェース間でのセッションの引き継ぎは未検証として扱ってください。
公開されている Remote のセットアップ手順には、モバイルクライアントとサポート対象のデスクトップクライアントが記載されています。
ChatGPT や Codex の Web サイトをこのサンドボックスセッションに接続する方法は記載されていません。Web サイトからの
アクセスは、このガイドで扱うインターフェースの対象外です。
一部の Codex ビルドでは、実験的な codex remote-control start コマンドと
codex remote-control pair コマンドが公開されています。これらはapp serverのデーモンとペアリングを管理するものですが、
公開されているモバイル向けの手順からは、ヘッドレスな Linux サンドボックスでのペアリングフローがサポートされているかどうかは確認できません。
このガイドでは、これらのコマンドを Claude Remote Control と同等の検証済み機能としては扱いません。
利用する前に、インストール済みの CLI のヘルプと OpenAI の最新のガイダンスを確認してください。
セッションを確認する
サンドボックスで Codex CLI を実行するまたは ローカル CLI を Codex app server に接続するの手順を実施した場合は、 Codex がサンドボックスのファイルシステムに書き込めることを検証します。デスクトップからアクセスする場合は、 デスクトップアプリを接続するの手順に従ってください。[PROOF-VALUE] を機密情報ではない一意の値に置き換えてから、接続済みの Codex TUI で次のプロンプトを
送信します。
- cws-agent
- SSH 経由のローカル CLI
SSH サンドボックスへの再接続と停止
サンドボックスの実行中は、引き続き同じcw-codex ホストとprojectを使用します。
SSH 接続やデスクトップアプリを閉じても、サンドボックスのコンピュートは停止しません。
サンドボックスを停止する前に、作業内容を Git に保存するか、必要なファイルをコピーしておいてください:
Host cw-codex ブロックを新しい
設定に置き換えてください。エンドポイント、TLS 証明書、SSH ホストキーはサンドボックスごとに新しく発行されます。
結果を保持して停止する
ローカルの CLI とデスクトップアプリの場合は、 SSH サンドボックスに再接続して停止するの手順に従ってください。cws-agent の場合は、ワークスペースのスナップショットを保存してから、コンピュートを停止します。
cws-agent down [SANDBOX-NAME] --no-snapshot を使用します。
TUI を終了してもコンピュートは停止しません。サンドボックスを停止するか有効期限が切れると、
そのプロセスは終了します。コンピュートを再開するには、保存済みのファイルをリストアしてから Codex を
再起動します。スナップショットには実行中のプロセスは保持されません。保持する内容を選択する際は、保存済みの Codex の
認証ファイルとセッションファイルを機密情報として扱ってください。
トラブルシューティング
よくある問題は、以下の項目を確認して解決してください。- 認証に失敗する: サンドボックスのプロビジョニング用認証情報、Codex のモデル認証、SSH キーを区別してください。これらはそれぞれ用途が異なります。
- app serverのフラグが拒否される: ローカルとサンドボックスで
codex --versionの出力を比較してください。ローカル CLI の例では、ドキュメントに記載されている WebSocket フラグが必要です。 - TUI は接続できるが処理が失敗する: モデルへのアクセス、請求、ワークスペースの 信頼設定、承認設定を確認してください。トランスポート接続が確立できても、それだけでモデルにアクセスできるとは限りません。
- 接続が切断される: サンドボックスの実行中に再接続してください。エンドポイントや トランスポートのタイムアウトによってサンドボックスの有効期間が延長されることはなく、処理中のターンが完了したことも保証されません。
- モバイルアプリでRemoteが利用できない: OpenAI のアカウント、ワークスペース、 ホスト、ロールアウトに関する要件を確認してください。app serverを起動するだけでは有効になりません。