cloudrouter について
cloudrouter は、クラウド開発サンドボックスを管理し、リモート環境にアクセスするための CLI スキルです。ローカルディレクトリの同期、GPU サンドボックス、ブラウザー自動化に加え、VS Code、Jupyter Lab、ターミナルからの利用に対応します。
主な機能
- 01クラウド開発サンドボックスの作成と管理
- 02ローカルディレクトリのサンドボックスへの同期
- 03GPU とコンピューティングリソースの設定
- 04VS Code・Jupyter Lab・ターミナルからのアクセス
- 05サンドボックス内の Chrome ブラウザー自動化
活用シーン
- 01ローカルプロジェクトのクラウド環境での開発
- 02GPU ワークロード向け開発環境の構築
- 03リモート IDE や Jupyter Lab の利用
- 04サンドボックスでのブラウザー操作と検査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ manaflow-ai/ cloudrouter --skill cloudrouterインストール後、Claude Code で/cloudrouterを入力して読み込まれたか確認します。
詳細
cloudrouter - 開発用クラウドサンドボックス
cloudrouter は開発用のクラウドサンドボックスを管理します。これらのコマンドを使って、GPU サポートとブラウザー自動化に対応したリモート開発環境を作成、管理、利用できます。
このスキルが呼び出されたとき
ユーザーが特定のタスクを指定せずに /cloudrouter または /cr を呼び出した場合は、利用可能なモードを提示します。
cloudrouter - Cloud Development Sandboxes
Modes:
cloudrouter start . Sync current directory to a cloud sandbox
cloudrouter start --size small . Smaller sandbox (2 vCPU, 8 GB)
cloudrouter start --gpu T4 . Sandbox with T4 GPU (16GB VRAM)
cloudrouter start --gpu A100 . Sandbox with A100 GPU (40GB VRAM)
cloudrouter start --gpu H100 . Sandbox with H100 GPU (80GB VRAM)
Manage:
cloudrouter ls List all sandboxes
cloudrouter code <id> Open VS Code in browser
cloudrouter jupyter <id> Open Jupyter Lab in browser
cloudrouter pty <id> Open terminal session
cloudrouter vnc <id> Open VNC desktop
cloudrouter stop <id> Pause sandbox
cloudrouter resume <id> Resume paused sandbox
Browser automation:
cloudrouter browser snapshot -i <id> Get interactive elements
cloudrouter browser open <id> <url> Navigate to URL
cloudrouter browser screenshot <id> Take screenshot
Run "cloudrouter start --help" for all options.
セットアップ
ほかの作業を始める前に、cloudrouter のタスクを開始するたび、必ずこのコマンドを実行してください。 ユーザーには確認せず、自動的に実行してください。
npm install -g @manaflow-ai/cloudrouter # Install/update CLI
これは冪等であり、すでに最新の状態でも安全に実行できます。これにより、エージェントは常に最新の CLI を利用できます。
これにより、cloudrouter と cr(短縮形)の両方が CLI コマンドとしてインストールされます。
次に、認証します。
cloudrouter login
ユーザーがまだログインしていない場合は、ほかのコマンドを使う前に cloudrouter login を実行するよう案内してください。
クイックスタート
cloudrouter login # Authenticate (opens browser)
cloudrouter start . # Create sandbox from current directory
cloudrouter start --gpu T4 . # Create sandbox with GPU
cloudrouter start --size small . # Create smaller sandbox
cloudrouter code <id> # Open VS Code
cloudrouter jupyter <id> # Open Jupyter Lab
cloudrouter pty <id> # Open terminal session
cloudrouter ls # List all sandboxes
推奨: ローカルディレクトリをクラウドサンドボックスに同期するには、常に
cloudrouter start .またはcloudrouter start <local-path>を使用してください。Git リポジトリからクローンするよりも、このワークフローが推奨されます。
コマンド
認証
cloudrouter login # Login (opens browser)
cloudrouter logout # Logout and clear credentials
cloudrouter whoami # Show current user and team
サンドボックスの作成
# Standard sandbox (syncs local directory) — DO NOT pass --size, default is large (8 vCPU, 32 GB)
cloudrouter start . # Create from current directory (recommended)
cloudrouter start ./my-project # Create from a specific local directory
cloudrouter start -o . # Create and open VS Code immediately
cloudrouter start -n my-sandbox . # Create with a custom name
# Size presets — only use if the user specifically requests a different size
cloudrouter start --size small . # 2 vCPU, 8 GB RAM, 20 GB disk — only if user asks
cloudrouter start --size medium . # 4 vCPU, 16 GB RAM, 40 GB disk — only if user asks
cloudrouter start --size large . # 8 vCPU, 32 GB RAM, 80 GB disk (DEFAULT — no flag needed)
cloudrouter start --size xlarge . # 16 vCPU, 64 GB RAM, 160 GB disk — only if user asks
# With GPU (auto-selects Modal provider)
cloudrouter start --gpu T4 . # T4 GPU (16GB VRAM)
cloudrouter start --gpu L4 . # L4 GPU (24GB VRAM)
cloudrouter start --gpu A10G . # A10G GPU (24GB VRAM)
cloudrouter start --gpu A100 . # A100 GPU (40GB VRAM) - requires approval
cloudrouter start --gpu H100 . # H100 GPU (80GB VRAM) - requires approval
cloudrouter start --gpu H100:2 . # Multi-GPU: 2x H100
# With custom resources (override --size values)
cloudrouter start --cpu 12 --memory 49152 . # Custom CPU and memory
cloudrouter start --disk 100 . # Custom disk size (GB)
cloudrouter start --image ubuntu:22.04 . # Custom container image
# From git repo (URL as positional arg or --git flag)
cloudrouter start https://github.com/user/repo # Clone git repo directly
cloudrouter start --git user/repo # Clone via shorthand
cloudrouter start --git user/repo -b main # Clone specific branch
# Provider selection
cloudrouter start -p e2b . # Use E2B provider (default)
cloudrouter start -p modal . # Use Modal provider
# Custom timeout (default: 600s = 10 min)
cloudrouter start --timeout 1800 . # 30-minute timeout — good for standard tasks
cloudrouter start --timeout 7200 --gpu T4 . # 2-hour timeout — USE FOR GPU/TRAINING TASKS
サイズのプリセット
| サイズ | vCPU | RAM | ディスク | 備考 |
|---|---|---|---|---|
| small | 2 | 8 GB | 20 GB | 軽いタスク |
| medium | 4 | 16 GB | 40 GB | 標準的な開発 |
| large | 8 | 32 GB | 80 GB | デフォルト |
| xlarge | 16 | 64 GB | 160 GB | 高負荷のワークロード |
ユーザーが特定のサイズを明示的に求めない限り、--size を指定しないでください。 デフォルトは large(8 vCPU、32 GB)で、ほとんどのタスクに適しています。必要もないのに --size small を使うと、ビルドが遅くなり、メモリ不足が発生する可能性があります。
個別のリソースフラグ(--cpu、--memory、--disk)を指定すると、--size の値が上書きされます。
GPU オプション
| GPU | VRAM | 最適な用途 | 利用可能性 |
|---|---|---|---|
| T4 | 16GB | 推論、小規模モデルのファインチューニング | セルフサービス |
| L4 | 24GB | 推論、画像生成 | セルフサービス |
| A10G | 24GB | 中規模モデルのトレーニング | セルフサービス |
| L40S | 48GB | 推論、動画生成 | 承認が必要 |
| A100 | 40GB | 大規模モデル(7B-70B)のトレーニング | 承認が必要 |
| A100-80GB | 80GB | 非常に大規模なモデル | 承認が必要 |
| H100 | 80GB | 高速トレーニング、研究 | 承認が必要 |
| H200 | 141GB | 最大メモリ容量 | 承認が必要 |
| B200 | 192GB | 最新世代、最先端モデル | 承認が必要 |
承認が必要な GPU については、[email protected] までお問い合わせください。
マルチ GPU:GPU タイプの後ろに :N を追加します。たとえば、H100 を 2 枚使う場合は --gpu H100:2 と指定します。
start の全フラグ
-n, --name <name> Name for the sandbox
-o, --open Open VS Code after creation
--size <preset> Machine size: small, medium, large (default), xlarge
--gpu <type> GPU type (T4, L4, A10G, L40S, A100, H100, H200, B200)
--cpu <cores> CPU cores (overrides --size)
--memory <MiB> Memory in MiB (overrides --size)
--disk <GB> Disk size in GB (overrides --size)
--image <image> Container image (e.g., ubuntu:22.04)
--git <repo> Git repository URL or user/repo shorthand
-b, --branch <branch> Git branch to clone
-p, --provider <name> Sandbox provider: e2b (default), modal
-T, --template <id> Template ID — DO NOT use template names from `cloudrouter templates`; use --gpu flags instead
--timeout <secs> Sandbox timeout in seconds (default: 600 = 10 minutes; use 7200+ for GPU tasks)
警告: テンプレート名(例:
cmux-devbox-base)を-Tフラグに指定しないでください。これらは表示名であり、有効なテンプレート ID ではありません。
エイリアス:
cloudrouter start、cloudrouter create、cloudrouter newはすべて同じ処理を実行します。
サンドボックスの管理
cloudrouter ls # List all sandboxes
cloudrouter ls -p modal # List only GPU sandboxes
cloudrouter ls -p e2b # List only Docker sandboxes
cloudrouter status <id> # Show sandbox details and URLs
cloudrouter stop <id> # Pause sandbox (preserves state, can resume)
cloudrouter pause <id> # Same as stop — alias
cloudrouter resume <id> # Resume a paused sandbox
cloudrouter extend <id> # Extend sandbox timeout (default: +1 hour)
cloudrouter extend <id> --seconds 7200 # Extend by 2 hours
cloudrouter delete <id> # Delete sandbox permanently
cloudrouter templates # List available templates
重要:
stopとpauseは同じコマンドで、サンドボックスの状態を保持します。一時停止したサンドボックスを再開するにはresumeを使います。サンドボックスを完全に削除するにはdelete(エイリアス:rm、kill)を使います。
extendでは--timeoutを使わないでください。フラグは--secondsです。
サンドボックスへのアクセス
cloudrouter code <id> # Open VS Code in browser
cloudrouter jupyter <id> # Open Jupyter Lab in browser
cloudrouter vnc <id> # Open VNC desktop in browser
cloudrouter pty <id> # Interactive terminal session
サンドボックスでの作業
cloudrouter pty <id> # Interactive terminal session (use for ongoing work)
cloudrouter ssh <id> <command> # Execute a one-off command via SSH
cloudrouter ssh <id> "ls -la" # Run a command (always quote the command string)
cloudrouter pty-list <id> # List active PTY sessions
重要: 対話的な作業には
cloudrouter ptyを優先して使ってください。すぐに実行する単発のコマンドにはcloudrouter sshを使います。非常に重要:コマンド文字列は必ず引用符で囲んでください。
cloudrouter ssh <id> ls -laは、-laが cloudrouter のフラグとして解釈されるため、失敗します。必ずcloudrouter ssh <id> "ls -la"のように引用符で囲んでください。
重要:npm コマンドを実行する前に権限を修正する
新しいサンドボックスで npm install または npm コマンドを実行する前に、必ずこれを実行してください。
cloudrouter ssh <id> "sudo chown -R 1000:1000 /home/user/.npm"
これを実行しないと、.npm/_cacache に関する EACCES/ENOENT エラーが発生し、npm install が失敗します。これは各サンドボックスで、最初の npm 操作を行う前に一度実行する必要があります。この手順を省略しないでください。
ファイル転送
ローカルマシンとサンドボックスの間で、ファイルやディレクトリをアップロードおよびダウンロードします。
コマンドのシグネチャ:
cloudrouter upload <id> [local-path]— 位置引数を1~2個受け取ります:サンドボックス ID と省略可能なローカルパスcloudrouter download <id> [local-path]— 位置引数を1~2個受け取ります:サンドボックス ID と省略可能なローカルパス- デフォルト以外のリモートディレクトリを指定するには、
-r <remote-path>フラグを使用します(デフォルト:/home/user/workspace) - リモートパスを位置引数として渡さないでください — エラーになります。必ず
-rフラグを使用してください。
# Upload (local -> sandbox)
cloudrouter upload <id> # Upload current dir to /home/user/workspace
cloudrouter upload <id> ./my-project # Upload directory to workspace
cloudrouter upload <id> ./config.json # Upload single file to workspace
cloudrouter upload <id> . -r /home/user/app # Upload to specific remote path
cloudrouter upload <id> . --watch # Watch and re-upload on changes
cloudrouter upload <id> . --delete # Delete remote files not present locally
cloudrouter upload <id> . -e "*.log" # Exclude patterns
cloudrouter upload <id> . --dry-run # Preview without making changes
# Download (sandbox -> local)
cloudrouter download <id> # Download workspace to current dir
cloudrouter download <id> ./output # Download workspace to ./output
cloudrouter download <id> ./output -r /home/user/app # Download specific remote dir to ./output
警告:
-rフラグには、ファイルパスではなくディレクトリパスを指定します。単一のファイルをダウンロードするには、その親ディレクトリをダウンロードしてから、ローカルでファイルにアクセスしてください。よくある間違い:
cloudrouter download <id> /remote/path /local/path— 位置引数を3個渡すため、失敗します。代わりにcloudrouter download <id> /local/path -r /remote/pathを使用してください。
ブラウザーの自動化(cloudrouter browser)
agent-browser を介して、サンドボックス内の Chrome ブラウザーを操作します。cloudrouter browser コマンドは agent-browser をラップし、SSH 経由でサンドボックス内のコマンドを実行します。
起動時の遅延: サンドボックスの作成直後は、ブラウザーがまだ準備できていない場合があります。
cloudrouter startの直後にbrowserコマンドが失敗した場合は、数秒待ってから再試行してください。
ナビゲーション
cloudrouter browser open <id> <url> # Navigate to URL
cloudrouter browser back <id> # Navigate back
cloudrouter browser forward <id> # Navigate forward
cloudrouter browser reload <id> # Reload page
cloudrouter browser url <id> # Get current URL
cloudrouter browser title <id> # Get page title
ページの確認
cloudrouter browser snapshot -i <id> # Interactive elements only (RECOMMENDED)
cloudrouter browser snapshot <id> # Full accessibility tree
cloudrouter browser snapshot -c <id> # Compact output
cloudrouter browser screenshot <id> # Take screenshot (base64 to stdout)
cloudrouter browser screenshot <id> out.png # Save screenshot to file
cloudrouter browser screenshot <id> --full # Full page screenshot
要素の操作
cloudrouter browser click <id> @e1 # Click element by ref
cloudrouter browser click <id> "#submit" # Click by CSS selector
cloudrouter browser dblclick <id> @e1 # Double-click element
cloudrouter browser fill <id> @e2 "[email protected]" # Clear input and fill value
cloudrouter browser type <id> @e3 "some text" # Type without clearing (appends)
cloudrouter browser press <id> Enter # Press key (Enter, Tab, Escape, etc.)
cloudrouter browser hover <id> @e4 # Hover over element
cloudrouter browser focus <id> @e5 # Focus element
cloudrouter browser scroll <id> down 500 # Scroll (up/down/left/right, optional px)
cloudrouter browser scrollintoview <id> "#element" # Scroll element into view (CSS selector only, NOT @e refs)
cloudrouter browser select <id> @e7 "option-value" # Select dropdown option
cloudrouter browser check <id> @e8 # Check checkbox
cloudrouter browser uncheck <id> @e9 # Uncheck checkbox
cloudrouter browser upload <id> @e10 /tmp/file.pdf # Upload file to file input
cloudrouter browser drag <id> @e1 @e2 # Drag and drop
待機コマンド
cloudrouter browser wait <id> @e1 # Wait for element to appear
cloudrouter browser wait <id> 2000 # Wait milliseconds
情報の取得
cloudrouter browser get-text <id> @e1 # Get element text content
cloudrouter browser get-value <id> @e2 # Get input value
cloudrouter browser get-attr <id> @e3 href # Get specific attribute
cloudrouter browser get-html <id> @e4 # Get innerHTML
cloudrouter browser get-count <id> ".item" # Count matching elements
cloudrouter browser get-box <id> @e5 # Get bounding box
cloudrouter browser is-visible <id> @e1 # Check if element is visible
cloudrouter browser is-enabled <id> @e1 # Check if element is enabled
cloudrouter browser is-checked <id> @e1 # Check if checkbox is checked
セマンティックロケーター(refs の代替)
要素の ref が信頼できない場合(動的なページなど)は、セマンティックロケーターを使用してください。
cloudrouter browser find <id> text "Sign In" click # Find by visible text and click
cloudrouter browser find <id> label "Email" fill "[email protected]" # Find by label and fill
cloudrouter browser find <id> placeholder "Search" type "query" # Find by placeholder
cloudrouter browser find <id> testid "submit-btn" click # Find by data-testid
注:
find <id> role button clickはページ上の最初のボタンを見つけます。ボタン名で絞り込むことはできません。表示されているテキストで特定のボタンを指定するには、find <id> text "Button Name" clickを使用してください。--nameフラグはありません。
JavaScript とコンソール
cloudrouter browser eval <id> "document.title" # Evaluate JavaScript
cloudrouter browser console <id> # View console messages
cloudrouter browser errors <id> # View JavaScript errors
タブとフレーム
cloudrouter browser tab-list <id> # List open tabs
cloudrouter browser tab-new <id> "https://..." # Open new tab
cloudrouter browser tab-switch <id> 2 # Switch to tab by index
cloudrouter browser tab-close <id> # Close current tab
cloudrouter browser frame <id> "#iframe-selector" # Switch to iframe
cloudrouter browser frame <id> main # Switch back to main frame
Cookie とストレージ
cloudrouter browser cookies <id> # List cookies
cloudrouter browser cookies-set <id> name value # Set a cookie
cloudrouter browser cookies-clear <id> # Clear all cookies
cloudrouter browser storage-local <id> # Get all localStorage
cloudrouter browser storage-local <id> key # Get specific key
cloudrouter browser storage-local-set <id> k v # Set localStorage value
cloudrouter browser storage-local-clear <id> # Clear localStorage
状態管理
cloudrouter browser state-save <id> /tmp/auth.json # Save cookies, storage, auth state
cloudrouter browser state-load <id> /tmp/auth.json # Restore saved state
ブラウザーの設定
cloudrouter browser set-viewport <id> 1920 1080 # Set viewport size
cloudrouter browser set-device <id> "iPhone 14" # Emulate device
cloudrouter browser set-geo <id> 37.7749 -122.4194 # Set geolocation
cloudrouter browser set-offline <id> on # Toggle offline mode
cloudrouter browser set-media <id> dark # Emulate color scheme (dark/light)
ネットワークのインターセプト
cloudrouter browser network-route <id> "**/api/*" # Intercept requests
cloudrouter browser network-route <id> "**/ads/*" --abort # Block requests
cloudrouter browser network-unroute <id> # Remove all routes
cloudrouter browser network-requests <id> # List tracked requests
ダイアログ
cloudrouter browser dialog-accept <id> # Accept alert/confirm/prompt
cloudrouter browser dialog-accept <id> "answer" # Accept prompt with text
cloudrouter browser dialog-dismiss <id> # Dismiss dialog
要素セレクター
要素を選択する方法は2つあります。
- スナップショットの要素 refs:
@e1、@e2、@e3...(推奨 —cloudrouter browser snapshot -iから取得) - CSS セレクター:
#id、.class、button[type="submit"]
スナップショットの出力では refs は [ref=e1] のように表示されますが、コマンドで使用するときは、@ を先頭に付けます。例:@e1。
効果的なブラウザー自動化のヒント
-
フラグはサンドボックス ID より前に指定してください。 これは非常に重要です。
cloudrouter browser snapshot -i <id>は動作します。cloudrouter browser snapshot <id> -iは、エラーを表示せずに空または誤った結果を返します。-i、-c、--fullなどのフラグは、必ずサンドボックス ID より前に指定してください。 -
操作する前に必ずスナップショットを取得してください。 先に
cloudrouter browser snapshot -i <id>を実行せずに@e1を使用しないでください。スナップショットを取得するまでは、参照は存在しません。 -
DOM の変更後は必ずスナップショットを再取得してください。 ページ遷移、ドロップダウンの表示、フォームの送信、動的コンテンツの読み込みを引き起こすクリックの後は、必ず再度スナップショットを取得してください。古い参照は別の要素を指している可能性があります。
-
異なるスナップショットモードを混在させないでください。 通常の
snapshotとsnapshot -iでは、同じ要素にも異なる参照番号が割り当てられます。-iでスナップショットを取得した場合は、必ずその-iスナップショットの参照を使って操作してください。最後に-iを実行した後に通常のスナップショットの参照を使ったり、その逆を行ったりしないでください。 -
snapshot -i(操作可能な要素のみ)を使用してください。-iフラグは、操作可能な要素(ボタン、入力欄、リンク)のみを返すため、アクセシビリティツリー全体よりもはるかに効率的です。すべての操作で-iを使用してください。 -
フォームフィールドには
typeではなくfillを使用してください。fillは既存の内容を消去してから入力するため、ほとんどの場合はこちらが適しています。typeは既存の内容に追記します。 -
ページ遷移後は待機してください。 リンクのクリック後やフォームの送信後は、
cloudrouter browser wait <id> 2000を使用するか、特定の要素が表示されるまで待ってからスナップショットを取得し、ページが完全に読み込まれるようにしてください。 -
url/titleでページ遷移を確認してください。 リンクのクリック後やフォームの送信後に、想定したページに移動したことを確認してください。 -
認証状態を保存して再利用してください。 ログイン後、
cloudrouter browser state-save <id> /tmp/auth.jsonを使用して Cookie とストレージを保存してください。今後のセッションではstate-loadで読み込みます。 -
セマンティックロケーターに切り替えてください。 ページの動的な変化が激しく、参照がすぐに無効になる場合は、参照の代わりに
cloudrouter browser find <id> text "Submit" clickを使用してください。
注:
cloudrouter browserコマンドは、SSH 経由でサンドボックス内の agent-browser を実行します。ブラウザー自動化には、必ずcloudrouter browserコマンドを使用してください。
サンドボックス ID
サンドボックス ID は cr_abc12345 のような形式です。コマンドを実行するときは、完全な ID を使用してください。ID は cloudrouter ls または cloudrouter start の出力から取得できます。
一般的なワークフロー
サンドボックス内で作成・開発する(推奨:ローカルからクラウドへ)
cloudrouter start ./my-project # Creates sandbox, uploads files
cloudrouter ssh cr_abc123 "sudo chown -R 1000:1000 /home/user/.npm" # ⚠ MUST run before any npm command
cloudrouter ssh cr_abc123 "cd /home/user/workspace && npm install" # Install dependencies
cloudrouter code cr_abc123 # Open VS Code
cloudrouter pty cr_abc123 # Open terminal (e.g. npm run dev)
GPU ワークフロー:ML トレーニング
GPU タスクでは必ず長いタイムアウトを設定してください。 トレーニングジョブには数時間かかることもあります。最低でも
--timeout 7200(2 時間)を使用してください。必要に応じて、後からcloudrouter extend <id>で延長できます。
cloudrouter start --gpu A100 --timeout 7200 ./ml-project # 2-hour timeout for training
cloudrouter pty cr_abc123 # Open terminal
# Inside: pip install -r requirements.txt && python train.py
cloudrouter extend cr_abc123 # Extend +1 hour if needed
cloudrouter download cr_abc123 ./checkpoints # Download trained model
Jupyter ワークフロー
cloudrouter start ./notebooks # Create sandbox
cloudrouter jupyter cr_abc123 # Open Jupyter Lab in browser
ファイル転送ワークフロー
cloudrouter upload cr_abc123 ./my-project # Push local files to sandbox
# ... do work in sandbox ...
cloudrouter download cr_abc123 ./output # Pull files from sandbox to local
ブラウザー自動化:ウェブサイトにログインする
cloudrouter browser open cr_abc123 "https://example.com/login"
cloudrouter browser snapshot -i cr_abc123
# Output: @e1 [input type="email"] placeholder="Email"
# @e2 [input type="password"] placeholder="Password"
# @e3 [button] "Sign In"
cloudrouter browser fill cr_abc123 @e1 "[email protected]"
cloudrouter browser fill cr_abc123 @e2 "password123"
cloudrouter browser click cr_abc123 @e3
cloudrouter browser wait cr_abc123 2000 # Wait for navigation
cloudrouter browser snapshot -i cr_abc123 # Re-snapshot after navigation!
cloudrouter browser screenshot cr_abc123 /tmp/result.png
ブラウザー自動化:データをスクレイピングする
cloudrouter browser open cr_abc123 "https://example.com/data"
cloudrouter browser wait cr_abc123 2000
cloudrouter browser snapshot -i cr_abc123 # Get interactive elements
cloudrouter browser get-text cr_abc123 @e5 # Extract specific element text
cloudrouter browser screenshot cr_abc123 # Visual capture
一時停止と再開のワークフロー
cloudrouter stop cr_abc123 # Pause (preserves state)
# ... later ...
cloudrouter resume cr_abc123 # Resume where you left off
サンドボックスのライフサイクルとクリーンアップ
同時実行数の上限: ユーザーが同時に実行できるサンドボックスは最大 10 個です。ユーザーがこの上限に近づいている場合は、警告し、使っていないサンドボックスのクリーンアップを提案してください。より高い上限が必要な場合は、[email protected] に連絡するよう案内してください(上限に達したときは CLI にもこのメッセージが表示されます)。
クリーンアップのルール — 慎重に、よく確認して実行してください:
-
このセッションで作成したサンドボックスだけを操作してください。 自分が作成していない、または認識できないサンドボックスは、決して停止したり削除したりしないでください。
cloudrouter lsに見覚えのないサンドボックスが表示された場合は、そのままにしてください。ユーザーまたは別のワークフローが使用している可能性があります。 -
クリーンアップの前に延長してください。 自分が作成したサンドボックスを停止または削除する前に、ユーザーがその内容を確認したいかどうか検討してください。ユーザーに見せるべきもの(実行中のアプリ、トレーニング済みモデル、ブラウザー自動化の結果など)を作成した場合は、ユーザーが確認できるよう、
cloudrouter extend <id>でサンドボックスの有効期間を延長してください。アクセスできるよう、関連する URL(VS Code、VNC、Jupyter など)を共有してください。--seconds <N>を使うと、期間をカスタム設定できます(デフォルトは 3600 = 1 時間です)。--timeoutは使用しないでください — このフラグはextendにはありません。- 例:
cloudrouter extend cr_abc123 --seconds 1800は 30 分延長します。
-
デフォルトでは削除せず、停止(一時停止)してください。 サンドボックスが明らかに使い捨ての場合(例:成果物のない簡単なテスト)を除き、
cloudrouter delete <id>よりもcloudrouter stop <id>を優先してください。停止したサンドボックスはcloudrouter resume <id>で再開できますが、削除したものは復元できません。cloudrouter stopが失敗した場合(VM が停止している可能性があります)、サンドボックスはすでに停止している可能性があります。ユーザーがサンドボックスの枠を空ける必要がある場合は、cloudrouter delete <id>でクリーンアップできますが、先回りして削除しないでください。ユーザーがより多くの空き容量を必要としている場合、または明示的に依頼した場合に限って削除してください。 -
作業が終わったらクリーンアップしてください。 タスクが完了し、ユーザーがサンドボックスを必要としなくなったら、停止してください。サンドボックスを無期限に実行したままにしないでください。同時実行数の上限にカウントされます。
-
同時実行数を監視してください。 新しいサンドボックスを作成する前に
cloudrouter lsを実行し、実行中の数を確認してください。アクティブなサンドボックスが 8 個以上ある場合は、別のサンドボックスを作成する前に停止できるものがあるかユーザーに警告して確認してください。上限に達するまで黙って進めないでください。 -
上限に達した場合: 同時実行できるサンドボックスの上限である 10 個に達したことをユーザーに伝えてください。不要になったサンドボックスの停止を提案してください。より多くの容量が必要な場合は、上限の引き上げを依頼するため [email protected] に連絡するよう案内してください。
クリーンアップのワークフロー:
cloudrouter ls # Check running sandboxes and count
cloudrouter extend cr_abc123 # Extend by 1 hour (default)
cloudrouter extend cr_abc123 --seconds 3600 # Extend by custom duration
# ... share URLs, let user verify ...
cloudrouter stop cr_abc123 # Pause when done (can resume later)
cloudrouter delete cr_abc123 # Delete only if clearly disposable
URL とスクリーンショットの提示
信頼の構築や進捗の確認に役立つ場合は、認証済みのサンドボックス URL やスクリーンショットを積極的にユーザーに提示してください。ユーザーはサンドボックス内で何が起きているか確認できないため、作業の証拠を見せることが重要です。
URL を提示するタイミング:
- サンドボックスの作成後、または環境のセットアップ後に、ワークスペースを確認できるよう VS Code の URL(
cloudrouter code <id>)を共有します - サービスのデプロイ後、または起動後に、稼働状況を確認できるよう VNC の URL(
cloudrouter vnc <id>)を共有します - Jupyter の実行中は、ノートブックを確認できるよう Jupyter の URL(
cloudrouter jupyter <id>)を共有します - ユーザーがサンドボックスを自分で確認、調査、操作したいと思われる場合はいつでも共有します
スクリーンショットを撮影して共有するタイミング:
- 視覚的なタスク(例:UI の変更、Web アプリのデプロイ)の完了後は、
cloudrouter browser screenshot <id> /tmp/out.pngでスクリーンショットを撮影して提示します - 問題があるように見える場合や、予期しない動作が起きた場合は、ユーザーに確認してもらうためにスクリーンショットを撮影します
- ブラウザーの自動操作で目に見える結果が生じた後(フォームの送信、ページの移動、ログインフローなど)
- ユーザーから視覚的な確認や検証を依頼された場合
一般ルール: 作業の証拠を見せるとユーザーの役に立つと思われる場合は、URL またはスクリーンショットを提示してください。少なく提示するよりも多く提示するようにしてください。信頼の構築につながり、ユーザーに進捗を共有できます。
セキュリティ:開発サーバーの URL
重要:E2B のポートフォワード URL をそのまま共有、または出力してはいけません。
サンドボックス内で開発サーバーが実行されると(例:ポート 5173 の Vite、ポート 3000 の Next.js)、E2B は https://5173-xxx.e2b.app のような、一般公開される URL を作成します。これらの URL には認証がありません。リンクを知っている人なら誰でも、実行中のアプリケーションにアクセスできます。
ルール:
https://5173-xxx.e2b.app、https://3000-xxx.e2b.app、またはhttps://<port>-xxx.e2b.app形式の URL を絶対に出力してはいけません- サンドボックスのメタデータから E2B のポート URL を構築したり、推測したりしてはいけません
- 開発サーバーは必ず VNC 経由で表示するようユーザーに案内してください:
cloudrouter vnc <id> - VNC はトークン認証(
?tkn=)で保護されており、開発サーバーの出力を表示するための安全な唯一の方法です - 認証済み URL(VS Code の
cloudrouter code <id>、VNC のcloudrouter vnc <id>、Jupyter のcloudrouter jupyter <id>)は必ず共有してください。これらは適切なトークン認証で保護されており、提示しても安全です
開発サーバーを起動したとき:
Dev server running on port 5173
View it in your sandbox's VNC desktop: cloudrouter vnc <id>
(The browser inside VNC can access http://localhost:5173)
絶対にしてはいけないこと:
Frontend: https://5173-xxx.e2b.app <- WRONG: publicly accessible, no auth
よくある問題と解決方法
| 問題 | 解決方法 |
|---|---|
npm install が EACCES/ENOENT エラーで失敗する | 新しいサンドボックスで npm コマンドを実行する前に、必ず cloudrouter ssh <id> "sudo chown -R 1000:1000 /home/user/.npm" を実行してください |
cloudrouter ssh <id> ls -la が「unknown flag」で失敗する | コマンドを必ず引用符で囲んでください:cloudrouter ssh <id> "ls -la" |
snapshot <id> -i の結果が空、または正しくない | フラグは ID の前に指定してください:snapshot -i <id> |
start の直後にブラウザーコマンドが失敗する | 数秒待ってください。Chrome の起動には時間がかかります |
find ... role button click が間違ったボタンをクリックする | 表示されているテキストで対象を指定するには、find ... text "Button Name" click を使用してください |
extend --timeout 300 が失敗する | --seconds を使用してください:extend <id> --seconds 300 |
snapshot の参照が snapshot -i の参照と一致しない | モードを混在させないでください。操作には snapshot -i を使用してください |
| 開発サーバーは実行中だがアクセスできない | cloudrouter browser open <id> "http://localhost:PORT" を使用してください。E2B ポートの URL は公開しないでください |
実行時間の長い ssh コマンドがハングする | インタラクティブなコマンドや実行時間の長いコマンドには cloudrouter pty を使用してください。ssh は短時間で完了するコマンド用です |
scrollintoview @e1 が「Unsupported token」で失敗する | scrollintoview と highlight が受け付けるのは CSS セレクター(例:"#id"、".class")のみで、@e 参照は使用できません |
pkill -f によって SSH セッションが終了する(終了コード 143/255) | pkill -f のパターンが SSH セッションに一致することがあります。復旧するには、別の ssh コマンドを実行してください |
pdf コマンドがリモートパスに保存する | ファイルはサンドボックス内(例:/tmp/page.pdf)に保存されます。ローカルに取得するには cloudrouter download を使用してください |
storage-local <id> key が値ではなく「Done」と表示する | 特定の localStorage 値を確実に取得するには、eval <id> "localStorage.getItem('key')" を使用してください |
| DOM の変更後に古い参照のエラーが発生する | クリックやフォーム送信の後は、必ずスナップショットを再取得してください。「timed out」というエラーは参照が古いことを意味します |
cloudrouter stop が失敗する/サンドボックスに到達できない | VM が停止した可能性があります。サンドボックスの枠を空ける必要がある場合は、cloudrouter delete <id> で削除してください |
create-next-app が ssh 経由でハングする | ssh ではインタラクティブなプロンプトを使用できません。インタラクティブなインストーラーには pty を使用するか、入力をパイプしてください |
グローバルフラグ
-t, --team <team> Team slug (overrides default)
-v, --verbose Verbose output