> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Claude Code

> CoreWeave のサンドボックスで Claude Code を実行し、ターミナル、Claude アプリ、または claude.ai から操作します。

CoreWeave のサンドボックスで Claude Code を実行し、操作方法を選択できます。ターミナルユーザーインターフェース (TUI) を使う場合は、ローカルのターミナルからサンドボックス内の Claude Code を操作します。Remote Control を使う場合は、Claude モバイルアプリ、Claude Desktop、または [claude.ai/code](https://claude.ai/code) から操作します。どちらの場合も、エージェントのプロセス、ツール、Workspaceはサンドボックス内で実行されます。モデルへのリクエストは、設定済みのモデルプロバイダーに送信されます。

| インターフェース | 操作する場所 | Claude の認証 |
| - | - | - |
| Terminal (TUI) | サンドボックスに接続したローカルのターミナル | Claude アカウントまたはサポートされている API 認証情報 |
| Remote Control | Claude モバイルアプリ、Claude Desktop、または claude.ai/code | `/login` でサインインした Claude サブスクリプション |

Anthropic がエージェントループを管理し、サンドボックスでツールを実行するインテグレーションについては、[Claude Managed Agents](/ja/products/sandboxes/agents/claude-managed-agents) を参照してください。

<h2 id="prerequisites">
  前提条件
</h2>

開始する前に、次のものを用意してください。

* `SANDBOX_USER` action が付与された [CoreWeave API アクセストークン](/ja/products/sandboxes/placement#choose-and-get-credentials)。
* ターミナルインターフェースを使用する場合は、Claude アカウント、または Claude Code でサポートされる API 認証情報。Remote Control を使用する場合は、Claude Pro、Max、Team、または Enterprise のサブスクリプション。APIキーおよび `claude setup-token` で発行したトークンでは Remote Control を認証できません。
* サンドボックスがクローンできるリポジトリの URL。この例では公開リポジトリを使用しています。非公開リポジトリを使用する場合は、サンドボックス内に Git の認証情報が必要です。

このガイドの手順を実行するターミナルで、CoreWeave API アクセストークンをエクスポートします。

```bash theme={"system"}
export CWSANDBOX_API_KEY="[API-ACCESS-TOKEN]"
```

Remote Control を使用するには、Team アカウントおよび Enterprise アカウントで Owner がこの機能を有効にする必要があります。また、組織が Remote Control のトランスクリプトの保存を許可している必要があります。Zero Data Retention の要件がある組織では、この機能を有効にできません。Anthropic の [Remote Control の要件](https://code.claude.com/docs/en/remote-control#requirements)を確認してください。

接続には送信方向の HTTPS を使用するため、サンドボックスの公開エンドポイントや受信ポートは不要です。

どちらのセットアップ方法でも、1 日の作業時間に合わせてサンドボックスのライフタイムを 8 時間に設定します。有効期間は作成時点から始まり、セットアップ時間やアイドル時間も含まれます。また、延長することはできません。有効期間が切れると、Claude が作業中であってもサンドボックスは停止し、セッションも終了します。作業が完了したら、有効期間が切れる前に[結果を保存してサンドボックスを停止](#keep-results-and-stop)してください。

夜間にわたって作業する場合は、作成時に 24 時間を選択してください。`cws-agent` では `--lifetime 24h` を指定します。ソフトウェア開発キット (SDK) の例では、Python の `max_lifetime_seconds` または TypeScript の `maxLifetimeSeconds` を `24 * 3600` に設定します。

<h2 id="quick-start-with-cws-agent">
  cws-agent のクイックスタート
</h2>

`cws-agent` でサンドボックスを作成する場合は、このセットアップ手順を選択してください。クライアントライブラリで直接作成する場合は、[Sandboxes SDK でのセットアップ](#set-up-with-the-sandbox-sdk)に進んでください。どちらの手順でも、いずれのインターフェースも使用できます。

[`cws-agent` のインストール手順](https://github.com/coreweave/cws-agent#install)に従ってください。このツールは、[ファイルシステムスナップショット](/ja/products/sandboxes/file-system-snapshots#start-a-sandbox-with-a-snapshot-mount)でWorkspaceを保存、リストアするためのスナップショットボリュームを設定します。

Claude が開く前に、`cws-agent` がインポート対象のローカルスキルと Model Context Protocol (MCP) サーバーのプレビューを表示する場合があります。このガイドでは、インポートのプロンプトで **Enter** を押してスキップしてください。インポートは、後で[エージェントツールのガイダンス](/ja/products/sandboxes/agents#use-tools-efficiently)に従って設定できます。

次のいずれかのインターフェースを選択してください。`[SANDBOX-NAME]` を `cws-agent` セッション名に、`[REPOSITORY-URL]` を公開リポジトリの URL に置き換えてください。セッション名には、小文字の英字、数字、ハイフンを 1～40 文字で使用し、英字または数字で始めてください。

<h3 id="use-the-terminal-interface">
  ターミナルインターフェースを使用する
</h3>

Anthropic APIキーを使用するには、サンドボックスを起動またはリストアする前に、ローカルターミナルの `ANTHROPIC_API_KEY` に読み込んでください。`cws-agent` はこの変数をサンドボックスに渡します。APIキーによる認証では、ブラウザーでのサインインは必要ありません。[Claude Code の認証](https://code.claude.com/docs/en/authentication)を参照してください。

Claude Code を起動し、ローカルターミナルを接続します。

```bash theme={"system"}
cws-agent launch [SANDBOX-NAME] --repo-url [REPOSITORY-URL] --lifetime 8h --permission-mode native
```

Claude Code はサンドボックスの project ディレクトリで開きます。Workspaceの信頼に関するプロンプトに従ってください。APIキー認証の場合は、プロンプトが表示されたらキーを承認してください。アカウント認証が必要な場合は、Claude を終了して `cws-agent login [SANDBOX-NAME]` を実行し、そこで `/login` を完了してください。

`--permission-mode native` オプションは Claude 自身の承認設定を使用します。このオプションを指定しない場合、`cws-agent` はデフォルトでこれらの承認プロンプトを省略します。[権限モード](https://github.com/coreweave/cws-agent/blob/main/docs/permissions.md)を参照してください。

APIキーを設定済みにもかかわらず Claude が `Not logged in` と表示し、キーの承認を求めるプロンプトも表示されない場合は、`/exit` で終了してから、オンボーディングを有効にして再接続してください：

```bash theme={"system"}
cws-agent connect [SANDBOX-NAME] --cmd 'unset IS_DEMO; exec claude'
```

このコマンドは Claude 自身の承認設定を使用します。続行する前に、Workspaceの信頼と API キーに関する確認に同意してください。

[セッションを確認する](#check-the-session)に進み、プロンプトを送信して結果を検証してください。

<h3 id="use-remote-control">
  Remote Control を使用する
</h3>

デタッチされたサンドボックスを作成し、ターミナルを接続してサブスクリプションでサインインします。

```bash theme={"system"}
cws-agent launch [SANDBOX-NAME] --repo-url [REPOSITORY-URL] --lifetime 8h --detach
cws-agent connect [SANDBOX-NAME] --cmd 'unset IS_DEMO CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC CLAUDE_CODE_OAUTH_TOKEN ANTHROPIC_API_KEY; exec claude'
```

接続コマンドは、サブスクリプションによるサインインや Remote Control 機能のチェックの妨げとなる設定をクリアします。また、オンボーディングを有効にするため `IS_DEMO` の設定を解除します。詳細は [Claude Code の環境変数](https://code.claude.com/docs/en/env-vars)を参照してください。

Claude 内で、Claude サブスクリプションのアカウントを使用して `/login` を完了し、プロジェクトの信頼に関するプロンプトを承認します。`/remote-control` を実行して初回使用時の確認を承認したら、`/exit` で Claude を終了します。デタッチされたサーバーを起動する前に確認に応答できるよう、このステップはインタラクティブに実行してください。

ローカルのターミナルから、Claude 自身の承認設定を使用して Remote Control を起動します。

```bash theme={"system"}
cws-agent rc [SANDBOX-NAME] --permission-mode native
```

セッション URL が表示されたら、その URL を開きます。プロセスの開始を示すメッセージが表示されただけでは、接続できたとは言えません。Web、モバイル、またはデスクトップのクライアントからプロンプトを送信し、[セッションを確認する](#check-the-session)の手順に従って結果を検証してください。

URL が表示されない場合は、リモートのログを確認します。

```bash theme={"system"}
cws-agent exec [SANDBOX-NAME] 'cat /workspace/home/remote-control.log'
```

再試行する前に、サインインエラーや利用資格に関するエラーを解決してください。サーバーがインタラクティブプロンプトへの入力を待機している場合は、同じサンドボックス内でアタッチした `tmux` セッションからサーバーを再起動してください。`cws-agent rc` コマンドは出力をログにリダイレクトするため、既存のセッションにアタッチしてもプロンプトは表示されません。

ローカルのターミナルで、待機中のサーバーを停止し、代わりのセッションを開きます。

```bash theme={"system"}
cws-agent exec [SANDBOX-NAME] 'tmux kill-session -t cws-remote-control'
cws-agent connect [SANDBOX-NAME] --cmd 'tmux new-session -s cws-remote-control'
```

`tmux` 内で Remote Control を起動し、セッションでプロジェクトディレクトリが使用されるようにします。

```bash theme={"system"}
unset IS_DEMO CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC CLAUDE_CODE_OAUTH_TOKEN ANTHROPIC_API_KEY
cd /workspace/project
claude remote-control --spawn same-dir
```

表示されるプロンプトに応答し、表示された Claude Code の URL を開きます。接続を確認できたら、**Ctrl-b** に続けて **d** を押してデタッチし、サーバーを実行したままにします。置き換え後のセッションでは、ログは更新されず、出力は `tmux` に表示されます。セッションに戻るには、`cws-agent connect [SANDBOX-NAME] --cmd 'tmux attach -t cws-remote-control'` を実行します。

<h2 id="set-up-with-the-sandbox-sdk">
  Sandboxes SDK で設定する
</h2>

この代替手段では、Sandboxes SDK を使用して、どちらのインターフェースにも対応するサンドボックスを作成します。この方法は `cws-agent` に依存せず、スナップショットも設定しません。

このガイドで作成した仮想環境で Python スニペットを実行します。TypeScript スニペットを、クライアントをインストールした project 内の `.mts` ファイルとして保存し、`npx tsx [FILENAME].mts` で実行します。

<h3 id="create-the-sandbox">
  サンドボックスを作成する
</h3>

クライアントを選択し、ローカルにインストールします。

<Tabs>
  <Tab title="Python">
    Python 3.11 以降と `uv` を使用します。

    ```bash theme={"system"}
    uv venv --python 3.11
    source .venv/bin/activate
    uv pip install 'cwsandbox>=1.14.2'
    ```
  </Tab>

  <Tab title="TypeScript">
    Node.js 22 以降を使用します。プロジェクトにクライアントと TypeScript ランナーをインストールします。

    ```bash theme={"system"}
    npm install @coreweave/cwsandbox@0.5.0-beta.0 tsx
    ```
  </Tab>
</Tabs>

使用する言語のスクリプトを、記載のファイル名で保存します。このスクリプトは Claude Code と `tmux` をインストールし、コマンドラインで指定したリポジトリをクローンします。

どちらのスクリプトも、`apt-get` でパッケージをインストールし、`/root/.local/bin/claude` を使用するため、コンテナーを root として実行する必要があります。ランナーのポリシーで、このユーザーを許可しておいてください。

<Tabs>
  <Tab title="Python">
    ```python title="create_claude_sandbox.py" theme={"system"}
    import sys

    from cwsandbox import Sandbox

    bootstrap = """
    set -o pipefail
    apt-get update -qq
    DEBIAN_FRONTEND=noninteractive apt-get install -y -qq tmux >/dev/null
    curl -fsSL https://claude.ai/install.sh | bash
    mkdir -p /workspace
    """

    sandbox = Sandbox.run(
        container_image="node:22-bookworm",
        resources={"cpu": "2", "memory": "4Gi"},
        max_lifetime_seconds=8 * 3600,
        tags=["claude-code"],
    )
    try:
        sandbox.wait()
        commands = [
            ["bash", "-ec", bootstrap],
            ["git", "clone", "--", sys.argv[1], "/workspace/project"],
        ]
        for command in commands:
            result = sandbox.exec(command, timeout_seconds=900).result()
            if result.returncode != 0:
                raise RuntimeError(result.stderr or result.stdout)
    except BaseException:
        sandbox.stop().result()
        raise

    print(f"Sandbox ID: {sandbox.sandbox_id}")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript title="create_claude_sandbox.mts" theme={"system"}
    import { createSandboxClientFromEnv } from "@coreweave/cwsandbox/node";

    const repository = process.argv[2];
    if (!repository) throw new Error("Pass a repository URL.");

    const bootstrap = `
    set -o pipefail
    apt-get update -qq
    DEBIAN_FRONTEND=noninteractive apt-get install -y -qq tmux >/dev/null
    curl -fsSL https://claude.ai/install.sh | bash
    mkdir -p /workspace
    `;

    const client = createSandboxClientFromEnv();
    const sandbox = await client.create({
      containerImage: "node:22-bookworm",
      resources: { cpu: "2", memory: "4Gi" },
      maxLifetimeSeconds: 8 * 3600,
      waitUntilRunning: false,
      tags: ["claude-code"],
    });
    try {
      await sandbox.wait();
      const commands = [
        ["bash", "-ec", bootstrap],
        ["git", "clone", "--", repository, "/workspace/project"],
      ];
      for (const command of commands) {
        await sandbox.commands.run(command, { timeoutMs: 900_000, check: true });
      }
    } catch (error) {
      await sandbox.stop();
      throw error;
    }
    console.log(`Sandbox ID: ${sandbox.sandboxId}`);
    ```
  </Tab>
</Tabs>

`[REPOSITORY-URL]` を公開リポジトリの URL に置き換えて実行します。

<Tabs>
  <Tab title="Python">
    ```bash theme={"system"}
    python create_claude_sandbox.py [REPOSITORY-URL]
    ```
  </Tab>

  <Tab title="TypeScript">
    ```bash theme={"system"}
    npx tsx create_claude_sandbox.mts [REPOSITORY-URL]
    ```
  </Tab>
</Tabs>

出力されたサンドボックス ID を控えておいてください。これらのスタンドアロンの例では、スクリプトが終了してもサンドボックスは実行されたままです。サンドボックスは、停止するか 8 時間の有効期間が切れるまで実行され続けます。Python では、サンドボックスを `Session` またはコンテキストマネージャーでラップすると、このクリーンアップの動作が変わります。

<h3 id="attach-your-terminal">
  ターミナルを接続する
</h3>

SDK を使用して、同じ CoreWeave 認証情報でローカルターミナルを接続します。このスクリプトはキー入力をサンドボックスのシェルに転送し、シェルの終了時にターミナルを元の状態に戻します。

<Tabs>
  <Tab title="Python">
    macOS または Linux では、次のコードを `attach_sandbox.py` として保存します:

    ```python title="attach_sandbox.py" theme={"system"}
    import os
    import shutil
    import sys
    import termios
    import threading
    import tty

    from cwsandbox import Sandbox

    if not sys.stdin.isatty() or not sys.stdout.isatty():
        raise SystemExit("Run this script in an interactive terminal.")

    sandbox = Sandbox.from_id(sys.argv[1]).result()
    size = shutil.get_terminal_size()
    terminal = sandbox.shell(["/bin/bash"], width=size.columns, height=size.lines)
    fd = sys.stdin.fileno()
    saved = termios.tcgetattr(fd)

    def forward_input():
        while data := os.read(fd, 1024):
            terminal.stdin.write(data).result()
        terminal.stdin.close().result()

    try:
        tty.setraw(fd)
        threading.Thread(target=forward_input, daemon=True).start()
        for chunk in terminal.output:
            sys.stdout.buffer.write(chunk)
            sys.stdout.buffer.flush()
        result = terminal.result()
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, saved)
        terminal.stdin.close().result()

    raise SystemExit(result.returncode)
    ```
  </Tab>

  <Tab title="TypeScript">
    次のコードを `attach_sandbox.mts` として保存します:

    ```typescript title="attach_sandbox.mts" theme={"system"}
    import { createSandboxClientFromEnv } from "@coreweave/cwsandbox/node";

    if (!process.stdin.isTTY || !process.stdout.isTTY) {
      throw new Error("Run this script in an interactive terminal.");
    }
    const sandboxId = process.argv[2];
    if (!sandboxId) throw new Error("Pass a sandbox ID.");
    const client = createSandboxClientFromEnv();
    const sandbox = await client.fromId(sandboxId);
    const terminal = await sandbox.shell({
      command: ["/bin/bash"],
      cols: process.stdout.columns || 80,
      rows: process.stdout.rows || 24,
    });
    const wasRaw = process.stdin.isRaw;
    const forwardInput = (chunk: Buffer) => {
      void terminal.stdin.write(chunk).catch((error) => {
        console.error(error);
        void terminal.cancel();
      });
    };

    try {
      process.stdin.setRawMode(true);
      process.stdin.on("data", forwardInput);
      process.stdin.resume();
      for await (const chunk of terminal.output) {
        process.stdout.write(chunk);
      }
      const result = await terminal.wait();
      process.exitCode = result.exitCode;
    } finally {
      process.stdin.off("data", forwardInput);
      process.stdin.setRawMode(wasRaw);
      process.stdin.pause();
      await terminal.stdin.close();
    }
    ```
  </Tab>
</Tabs>

`[SANDBOX-ID]` を出力された ID に置き換えて、次を実行します:

<Tabs>
  <Tab title="Python">
    ```bash theme={"system"}
    python attach_sandbox.py [SANDBOX-ID]
    ```
  </Tab>

  <Tab title="TypeScript">
    ```bash theme={"system"}
    npx tsx attach_sandbox.mts [SANDBOX-ID]
    ```
  </Tab>
</Tabs>

代わりに `cwsandbox sh [SANDBOX-ID]` を使用することもできます。追加依存関係の `cli` をインストールし、`CWSANDBOX_API_KEY` には、そのサンドボックスで使用した CoreWeave API アクセストークンを設定しておいてください。

これで、ターミナルがサンドボックス内のシェルに接続されました。次のいずれかのインターフェースを選択して Claude Code を起動します。

<h3 id="start-the-terminal-interface">
  ターミナルインターフェースを起動する
</h3>

API キー認証の場合は、Claude を起動する前にサンドボックスの Bash シェルでキーを入力してください。入力は非表示になり、コマンド履歴にも記録されません:

```bash theme={"system"}
read -r -s -p 'Anthropic API key: ' ANTHROPIC_API_KEY
export ANTHROPIC_API_KEY
printf '\n'
```

サンドボックス内で、クローンしたリポジトリから Claude を起動します。

```bash theme={"system"}
cd /workspace/project
/root/.local/bin/claude
```

APIキーを使用する場合は、その使用を承認してください。それ以外の場合は、アカウントへのサインインを完了してください。次に、Workspaceの信頼を確認するプロンプトを承認し、[セッションを確認する](#check-the-session)に進んでください。

<h3 id="start-remote-control">
  Remote Control を開始する
</h3>

このインターフェースでは、Claude のサブスクリプションでサインインしてください。以前にこのサンドボックスで APIキーを使用していた場合は、サインインする前に、シェルと Claude のすべての設定からその APIキーを削除してください。

```bash theme={"system"}
unset ANTHROPIC_API_KEY CLAUDE_CODE_OAUTH_TOKEN
```

サンドボックス内で、project に名前付きの `tmux` セッションを開きます。

```bash theme={"system"}
cd /workspace/project
tmux new-session -s claude-remote
```

`tmux` で Claude を起動します：

```bash theme={"system"}
/root/.local/bin/claude
```

サブスクリプションでのサインインを完了し、Workspaceの信頼確認プロンプトを承認します。`/exit` で Claude を終了してから、同じディレクトリで Remote Control サーバーを起動します。

```bash theme={"system"}
/root/.local/bin/claude remote-control --name "CoreWeave sandbox" --spawn same-dir
```

`--spawn same-dir` オプションを指定すると、リモートセッションでプロジェクトディレクトリが使用されます。確認を求められた場合は、初回使用時の確認を承認してください。表示された Claude Code の URL を、同じ Claude アカウントでサインインしているブラウザーで開きます。

接続を確認できたら、**Ctrl-b**、続けて **d** を押して `tmux` からデタッチし、サンドボックスのシェルを終了します。サーバーは `tmux` セッション内で実行され続けます。再接続するには、アタッチ用スクリプトを再実行してから `tmux attach -t claude-remote` を実行します。

<h2 id="check-the-session">
  セッションを確認する
</h2>

ターミナルインターフェースの場合は、アタッチ済みの Claude Code TUI でプロンプトを送信します。Remote Control の場合は、同じアカウントで、ブラウザーから claude.ai/code にアクセスするか、Claude のモバイルアプリまたは Desktop アプリでセッションを開きます。

一意で、機密情報ではないテスト値を選択し、次のプロンプト内の `[PROOF-VALUE]` をその値に置き換えます。

```text theme={"system"}
テキスト [PROOF-VALUE] を一字一句そのまま /workspace/project/sandbox-proof.txt に書き込み、その内容を読み取って表示してください。
```

確認を求められた場合は、ファイルの書き込みを承認します。ターミナルインターフェースを使用した場合は `/exit` で Claude を終了し、SDK でセットアップした場合はさらに `exit` でサンドボックスのシェルを終了します。ローカルのターミナルから、使用しているセットアップに応じたコマンドで結果を検証します。

<Tabs>
  <Tab title="cws-agent">
    ```bash theme={"system"}
    cws-agent exec [SANDBOX-NAME] 'cat /workspace/project/sandbox-proof.txt'
    ```
  </Tab>

  <Tab title="Sandboxes SDK">
    <Tabs>
      <Tab title="Python">
        ```python theme={"system"}
        from cwsandbox import Sandbox

        sandbox = Sandbox.from_id("[SANDBOX-ID]").result()
        result = sandbox.exec(["cat", "/workspace/project/sandbox-proof.txt"], check=True).result()
        print(result.stdout, end="")
        ```
      </Tab>

      <Tab title="TypeScript">
        ```typescript theme={"system"}
        import { createSandboxClientFromEnv } from "@coreweave/cwsandbox/node";

        const client = createSandboxClientFromEnv();
        const sandbox = await client.fromId("[SANDBOX-ID]");
        const result = await sandbox.commands.run(["cat", "/workspace/project/sandbox-proof.txt"], { check: true });
        process.stdout.write(result.stdout);
        ```
      </Tab>
    </Tabs>
  </Tab>
</Tabs>

値が一致すれば、作成したサンドボックスに Claude が書き込んだことを確認できます。

<h2 id="return-to-a-running-sandbox">
  実行中のサンドボックスに戻る
</h2>

Claude を終了したりターミナルを閉じたりしても、サンドボックスは実行されたままです。別のターミナルやマシンから戻るには、同じクライアントをインストールし、そのサンドボックスにアクセスできる認証情報で認証します。

`cws-agent` の場合は、名前でセッションを検索して、新しい Claude ターミナルを開きます。

```bash theme={"system"}
cws-agent list
cws-agent status [SANDBOX-NAME]
cws-agent connect [SANDBOX-NAME] --permission-mode native
```

`connect` コマンドは、既存のサンドボックスとファイルを使用します。以前の会話は再開されません。保存済みの会話を続行するには、まずその会話を実行していた元の Claude プロセスを終了します。次に履歴をリスト表示し、`[CONVERSATION-ID]` を再開したい会話の ID に置き換えます。

```bash theme={"system"}
cws-agent session history [SANDBOX-NAME]
cws-agent session resume [SANDBOX-NAME] [CONVERSATION-ID] --permission-mode native
```

SDK を使用する場合は、同じサンドボックス ID を指定して[ターミナル接続スクリプト](#attach-your-terminal)を再実行してから、Claude を再度起動します。サンドボックスの有効期間が 24 時間より長くても、1 つの SDK シェルセッションは 24 時間で終了します。サンドボックス自体は実行され続けるため、スクリプトを再実行すれば再接続できます。Remote Control の場合は、サーバーが実行されている間にセッション URL を再度開いてください。

サンドボックスへの接続とエージェントプロセスの有効期間は、それぞれ独立しています。切断後もターミナルのエージェントに作業を続けさせる必要がある場合は、`tmux` または `cws-agent` の worktree セッションを使用してください。

再接続しても、サンドボックスの有効期間はリセットされません。サンドボックスがすでに停止している場合は、代わりに保存済みのWorkspaceをリストアしてください。

<h2 id="keep-results-and-stop">
  結果を保持して停止する
</h2>

長時間のセッションでは、有効期間の終了間際まで待たずに、途中で進捗を保存してください。`cws-agent` を使用する場合は、Claude の書き込みが終わるのを待ち、Workspaceに書き込むほかのプロセスを一時停止してから、サンドボックスを停止せずに `/workspace` ディレクトリを取得します。

```bash theme={"system"}
cws-agent snapshot [SANDBOX-NAME]
```

コマンドが `READY` のスナップショットを報告するまで待ちます。スナップショットは、その時点のファイルを取得します。それ以降の編集を保存するには、改めてスナップショットを作成する必要があります。取得の動作と保存済みの認証情報については、[スナップショットのガイダンス](https://github.com/coreweave/cws-agent/blob/main/docs/usage.md#snapshots)を参照してください。有効期間の終了による有効期限切れで最新の変更が保存されることを前提にしないでください。

ローカルのターミナルで、検証済みのテキスト結果をお使いのマシンにコピーします。

```bash theme={"system"}
cws-agent exec [SANDBOX-NAME] 'cat /workspace/project/sandbox-proof.txt' > sandbox-proof.txt
```

コードの変更については、[Get changes back](https://github.com/coreweave/cws-agent/blob/main/docs/usage.md#get-changes-back) を参照してください。スナップショットはリモートのWorkspaceを保持するもので、ファイルをローカルマシンにコピーするものではありません。

作業を終了するときは、実行中のタスクとWorkspaceへの書き込みが完了するまで待ってから、Workspaceを保存してコンピュートを停止します。

```bash theme={"system"}
cws-agent down [SANDBOX-NAME]
```

`down` コマンドは、スナップショットを確定してから停止します。スナップショットの作成に失敗した場合、サンドボックスは実行中のままになります。`cws-agent status [SANDBOX-NAME]` を確認し、失敗の原因を解決してから再試行してください。現在の変更を保存せずに停止するには、`cws-agent down [SANDBOX-NAME] --no-snapshot` を使用します。

SDK を直接使用する場合、この例には永続マウントがありません。リストア可能なWorkspaceが必要な場合は、作成時に[ファイルシステムスナップショット](/ja/products/sandboxes/file-system-snapshots)を設定してください。[ファイル操作](/ja/products/sandboxes/client/guides/file-operations)で結果をコピーしてから、サンドボックスを停止します。

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from cwsandbox import Sandbox

    sandbox = Sandbox.from_id("[SANDBOX-ID]").result()
    sandbox.stop().result()
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={"system"}
    import { createSandboxClientFromEnv } from "@coreweave/cwsandbox/node";

    const client = createSandboxClientFromEnv();
    const sandbox = await client.fromId("[SANDBOX-ID]");
    await sandbox.stop();
    ```
  </Tab>
</Tabs>

Claude を終了しただけでは、サンドボックスは停止せずに実行され続けます。サンドボックスを停止すると、Remote Control を含むエージェントのプロセスが終了します。スナップショットからファイルをリストアしても、そのプロセスは復元されません。必要に応じてサインインし、Remote Control を再度起動してください。

`cws-agent` で保存したWorkspaceに戻るには、新しいサンドボックスにリストアします。skills/MCP のインポートを求めるプロンプトが表示された場合は、**Enter** を押してスキップしてください。

```bash theme={"system"}
cws-agent restore [SANDBOX-NAME] --lifetime 8h --connect --permission-mode native
```

Remote Control を使用する場合は、リストアした Claude TUI を `/exit` で終了してから、`cws-agent connect` 以降の[サインインとサーバー起動の手順](#use-remote-control)をもう一度実行します。サンドボックスはリストア時にすでに作成されているため、起動コマンドは実行不要です。保存済みの会話や並列 worktree については、[`cws-agent` セッションガイド](https://github.com/coreweave/cws-agent/blob/main/docs/sessions.md)を参照してください。

<h2 id="troubleshoot">
  トラブルシューティング
</h2>

よくある問題を解決するには、以下の点を確認してください。

* サンドボックスの作成に失敗する場合は、CoreWeave API アクセストークンと認証設定を確認してください。
* インストール、クローン、またはモデルへのリクエストが失敗する場合は、アウトバウンドの接続性と、該当するプロバイダーの認証情報を確認してください。[CoreWeave Kubernetes Service (CKS) への配置](/ja/products/sandboxes/get-started-cks)では、ランナーのポリシーでこれらの送信先を許可しておく必要があります。
* ターミナルが切断された場合は、サンドボックスの実行中に再度アタッチしてください。ターミナルが切断されてもプロセスを維持するには、`tmux` などのターミナルマルチプレクサー内でプロセスを実行してください。
* Remote Control で認証が拒否される場合は、Claude サブスクリプションでサインインしてください。また、リモート環境または Claude の設定から、競合する API キーの認証情報を削除してください。
* Remote Control が利用できない場合は、[Anthropic のトラブルシューティングガイド](https://code.claude.com/docs/en/remote-control#troubleshooting)を参照して、組織設定、カスタム API エンドポイント、および必須の機能チェックを無効にしている環境変数を確認してください。
* サンドボックスの有効期限が切れた場合は、新しいサンドボックスを作成してください。有効期間は作成後に延長できません。また、この SDK の例ではファイルシステムが自動的に保存されることはありません。

<h2 id="data-handling">
  データの処理
</h2>

コマンドはサンドボックス内で実行され、モデルへのリクエストは設定済みのプロバイダーに送信されます。Remote Control は、プロンプト、ツールのアクティビティ、会話の内容を Anthropic に送信するとともに、接続されたデバイス間で同期するためにトランスクリプトを保存します。詳細については、[Remote Control のセキュリティ](https://code.claude.com/docs/en/remote-control#connection-and-security)および [Claude Code のデータ使用](https://code.claude.com/docs/en/data-usage)を参照してください。

<h2 id="next-steps">
  次のステップ
</h2>

詳細については、次のガイドを参照してください。

* [インタラクティブシェルと TTY](/ja/products/sandboxes/client/guides/interactive-shells)では、SDK からのターミナルへのアクセスについて説明します。
* [サンドボックスのライフサイクル](/ja/products/sandboxes/client/guides/sandbox-lifecycle)では、待機、再接続、停止について説明します。
* [Claude Code ドキュメント](https://code.claude.com/docs/en/overview)では、エージェント設定と認証について説明します。

claude.ai/code で新しいクラウドセッションを開始するたびにワーカーサンドボックスをプロビジョニングする方法については、[Claude Code クラウドセッション](/ja/products/sandboxes/agents/claude-code-cloud)を参照してください。
