Anthropic がエージェントループを管理し、サンドボックスでツールを実行するインテグレーションについては、Claude Managed Agents を参照してください。
前提条件
開始する前に、次のものを用意してください。SANDBOX_USERaction が付与された CoreWeave API アクセストークン。- ターミナルインターフェースを使用する場合は、Claude アカウント、または Claude Code でサポートされる API 認証情報。Remote Control を使用する場合は、Claude Pro、Max、Team、または Enterprise のサブスクリプション。APIキーおよび
claude setup-tokenで発行したトークンでは Remote Control を認証できません。 - サンドボックスがクローンできるリポジトリの URL。この例では公開リポジトリを使用しています。非公開リポジトリを使用する場合は、サンドボックス内に Git の認証情報が必要です。
cws-agent では --lifetime 24h を指定します。ソフトウェア開発キット (SDK) の例では、Python の max_lifetime_seconds または TypeScript の maxLifetimeSeconds を 24 * 3600 に設定します。
cws-agent のクイックスタート
cws-agent でサンドボックスを作成する場合は、このセットアップ手順を選択してください。クライアントライブラリで直接作成する場合は、Sandboxes SDK でのセットアップに進んでください。どちらの手順でも、いずれのインターフェースも使用できます。
cws-agent のインストール手順に従ってください。このツールは、ファイルシステムスナップショットでWorkspaceを保存、リストアするためのスナップショットボリュームを設定します。
Claude が開く前に、cws-agent がインポート対象のローカルスキルと Model Context Protocol (MCP) サーバーのプレビューを表示する場合があります。このガイドでは、インポートのプロンプトで Enter を押してスキップしてください。インポートは、後でエージェントツールのガイダンスに従って設定できます。
次のいずれかのインターフェースを選択してください。[SANDBOX-NAME] を cws-agent セッション名に、[REPOSITORY-URL] を公開リポジトリの URL に置き換えてください。セッション名には、小文字の英字、数字、ハイフンを 1~40 文字で使用し、英字または数字で始めてください。
ターミナルインターフェースを使用する
Anthropic APIキーを使用するには、サンドボックスを起動またはリストアする前に、ローカルターミナルのANTHROPIC_API_KEY に読み込んでください。cws-agent はこの変数をサンドボックスに渡します。APIキーによる認証では、ブラウザーでのサインインは必要ありません。Claude Code の認証を参照してください。
Claude Code を起動し、ローカルターミナルを接続します。
cws-agent login [SANDBOX-NAME] を実行し、そこで /login を完了してください。
--permission-mode native オプションは Claude 自身の承認設定を使用します。このオプションを指定しない場合、cws-agent はデフォルトでこれらの承認プロンプトを省略します。権限モードを参照してください。
APIキーを設定済みにもかかわらず Claude が Not logged in と表示し、キーの承認を求めるプロンプトも表示されない場合は、/exit で終了してから、オンボーディングを有効にして再接続してください:
Remote Control を使用する
デタッチされたサンドボックスを作成し、ターミナルを接続してサブスクリプションでサインインします。IS_DEMO の設定を解除します。詳細は Claude Code の環境変数を参照してください。
Claude 内で、Claude サブスクリプションのアカウントを使用して /login を完了し、プロジェクトの信頼に関するプロンプトを承認します。/remote-control を実行して初回使用時の確認を承認したら、/exit で Claude を終了します。デタッチされたサーバーを起動する前に確認に応答できるよう、このステップはインタラクティブに実行してください。
ローカルのターミナルから、Claude 自身の承認設定を使用して Remote Control を起動します。
tmux セッションからサーバーを再起動してください。cws-agent rc コマンドは出力をログにリダイレクトするため、既存のセッションにアタッチしてもプロンプトは表示されません。
ローカルのターミナルで、待機中のサーバーを停止し、代わりのセッションを開きます。
tmux 内で Remote Control を起動し、セッションでプロジェクトディレクトリが使用されるようにします。
tmux に表示されます。セッションに戻るには、cws-agent connect [SANDBOX-NAME] --cmd 'tmux attach -t cws-remote-control' を実行します。
Sandboxes SDK で設定する
この代替手段では、Sandboxes SDK を使用して、どちらのインターフェースにも対応するサンドボックスを作成します。この方法はcws-agent に依存せず、スナップショットも設定しません。
このガイドで作成した仮想環境で Python スニペットを実行します。TypeScript スニペットを、クライアントをインストールした project 内の .mts ファイルとして保存し、npx tsx [FILENAME].mts で実行します。
サンドボックスを作成する
クライアントを選択し、ローカルにインストールします。- Python
- TypeScript
Python 3.11 以降と
uv を使用します。tmux をインストールし、コマンドラインで指定したリポジトリをクローンします。
どちらのスクリプトも、apt-get でパッケージをインストールし、/root/.local/bin/claude を使用するため、コンテナーを root として実行する必要があります。ランナーのポリシーで、このユーザーを許可しておいてください。
- Python
- TypeScript
create_claude_sandbox.py
[REPOSITORY-URL] を公開リポジトリの URL に置き換えて実行します。
- Python
- TypeScript
Session またはコンテキストマネージャーでラップすると、このクリーンアップの動作が変わります。
ターミナルを接続する
SDK を使用して、同じ CoreWeave 認証情報でローカルターミナルを接続します。このスクリプトはキー入力をサンドボックスのシェルに転送し、シェルの終了時にターミナルを元の状態に戻します。- Python
- TypeScript
macOS または Linux では、次のコードを
attach_sandbox.py として保存します:attach_sandbox.py
[SANDBOX-ID] を出力された ID に置き換えて、次を実行します:
- Python
- TypeScript
cwsandbox sh [SANDBOX-ID] を使用することもできます。追加依存関係の cli をインストールし、CWSANDBOX_API_KEY には、そのサンドボックスで使用した CoreWeave API アクセストークンを設定しておいてください。
これで、ターミナルがサンドボックス内のシェルに接続されました。次のいずれかのインターフェースを選択して Claude Code を起動します。
ターミナルインターフェースを起動する
API キー認証の場合は、Claude を起動する前にサンドボックスの Bash シェルでキーを入力してください。入力は非表示になり、コマンド履歴にも記録されません:Remote Control を開始する
このインターフェースでは、Claude のサブスクリプションでサインインしてください。以前にこのサンドボックスで APIキーを使用していた場合は、サインインする前に、シェルと Claude のすべての設定からその APIキーを削除してください。tmux セッションを開きます。
tmux で Claude を起動します:
/exit で Claude を終了してから、同じディレクトリで Remote Control サーバーを起動します。
--spawn same-dir オプションを指定すると、リモートセッションでプロジェクトディレクトリが使用されます。確認を求められた場合は、初回使用時の確認を承認してください。表示された Claude Code の URL を、同じ Claude アカウントでサインインしているブラウザーで開きます。
接続を確認できたら、Ctrl-b、続けて d を押して tmux からデタッチし、サンドボックスのシェルを終了します。サーバーは tmux セッション内で実行され続けます。再接続するには、アタッチ用スクリプトを再実行してから tmux attach -t claude-remote を実行します。
セッションを確認する
ターミナルインターフェースの場合は、アタッチ済みの Claude Code TUI でプロンプトを送信します。Remote Control の場合は、同じアカウントで、ブラウザーから claude.ai/code にアクセスするか、Claude のモバイルアプリまたは Desktop アプリでセッションを開きます。 一意で、機密情報ではないテスト値を選択し、次のプロンプト内の[PROOF-VALUE] をその値に置き換えます。
/exit で Claude を終了し、SDK でセットアップした場合はさらに exit でサンドボックスのシェルを終了します。ローカルのターミナルから、使用しているセットアップに応じたコマンドで結果を検証します。
- cws-agent
- Sandboxes SDK
実行中のサンドボックスに戻る
Claude を終了したりターミナルを閉じたりしても、サンドボックスは実行されたままです。別のターミナルやマシンから戻るには、同じクライアントをインストールし、そのサンドボックスにアクセスできる認証情報で認証します。cws-agent の場合は、名前でセッションを検索して、新しい Claude ターミナルを開きます。
connect コマンドは、既存のサンドボックスとファイルを使用します。以前の会話は再開されません。保存済みの会話を続行するには、まずその会話を実行していた元の Claude プロセスを終了します。次に履歴をリスト表示し、[CONVERSATION-ID] を再開したい会話の ID に置き換えます。
tmux または cws-agent の worktree セッションを使用してください。
再接続しても、サンドボックスの有効期間はリセットされません。サンドボックスがすでに停止している場合は、代わりに保存済みのWorkspaceをリストアしてください。
結果を保持して停止する
長時間のセッションでは、有効期間の終了間際まで待たずに、途中で進捗を保存してください。cws-agent を使用する場合は、Claude の書き込みが終わるのを待ち、Workspaceに書き込むほかのプロセスを一時停止してから、サンドボックスを停止せずに /workspace ディレクトリを取得します。
READY のスナップショットを報告するまで待ちます。スナップショットは、その時点のファイルを取得します。それ以降の編集を保存するには、改めてスナップショットを作成する必要があります。取得の動作と保存済みの認証情報については、スナップショットのガイダンスを参照してください。有効期間の終了による有効期限切れで最新の変更が保存されることを前提にしないでください。
ローカルのターミナルで、検証済みのテキスト結果をお使いのマシンにコピーします。
down コマンドは、スナップショットを確定してから停止します。スナップショットの作成に失敗した場合、サンドボックスは実行中のままになります。cws-agent status [SANDBOX-NAME] を確認し、失敗の原因を解決してから再試行してください。現在の変更を保存せずに停止するには、cws-agent down [SANDBOX-NAME] --no-snapshot を使用します。
SDK を直接使用する場合、この例には永続マウントがありません。リストア可能なWorkspaceが必要な場合は、作成時にファイルシステムスナップショットを設定してください。ファイル操作で結果をコピーしてから、サンドボックスを停止します。
- Python
- TypeScript
cws-agent で保存したWorkspaceに戻るには、新しいサンドボックスにリストアします。skills/MCP のインポートを求めるプロンプトが表示された場合は、Enter を押してスキップしてください。
/exit で終了してから、cws-agent connect 以降のサインインとサーバー起動の手順をもう一度実行します。サンドボックスはリストア時にすでに作成されているため、起動コマンドは実行不要です。保存済みの会話や並列 worktree については、cws-agent セッションガイドを参照してください。
トラブルシューティング
よくある問題を解決するには、以下の点を確認してください。- サンドボックスの作成に失敗する場合は、CoreWeave API アクセストークンと認証設定を確認してください。
- インストール、クローン、またはモデルへのリクエストが失敗する場合は、アウトバウンドの接続性と、該当するプロバイダーの認証情報を確認してください。CoreWeave Kubernetes Service (CKS) への配置では、ランナーのポリシーでこれらの送信先を許可しておく必要があります。
- ターミナルが切断された場合は、サンドボックスの実行中に再度アタッチしてください。ターミナルが切断されてもプロセスを維持するには、
tmuxなどのターミナルマルチプレクサー内でプロセスを実行してください。 - Remote Control で認証が拒否される場合は、Claude サブスクリプションでサインインしてください。また、リモート環境または Claude の設定から、競合する API キーの認証情報を削除してください。
- Remote Control が利用できない場合は、Anthropic のトラブルシューティングガイドを参照して、組織設定、カスタム API エンドポイント、および必須の機能チェックを無効にしている環境変数を確認してください。
- サンドボックスの有効期限が切れた場合は、新しいサンドボックスを作成してください。有効期間は作成後に延長できません。また、この SDK の例ではファイルシステムが自動的に保存されることはありません。
データの処理
コマンドはサンドボックス内で実行され、モデルへのリクエストは設定済みのプロバイダーに送信されます。Remote Control は、プロンプト、ツールのアクティビティ、会話の内容を Anthropic に送信するとともに、接続されたデバイス間で同期するためにトランスクリプトを保存します。詳細については、Remote Control のセキュリティおよび Claude Code のデータ使用を参照してください。次のステップ
詳細については、次のガイドを参照してください。- インタラクティブシェルと TTYでは、SDK からのターミナルへのアクセスについて説明します。
- サンドボックスのライフサイクルでは、待機、再接続、停止について説明します。
- Claude Code ドキュメントでは、エージェント設定と認証について説明します。