AIエージェントを開発するとき、ブラウザ自動化・ターミナル・ファイル操作・MCPサーバーを個別にセットアップしていないだろうか。AIO Sandbox(agent-infra/sandbox)は、これら6つの機能を単一のDockerコンテナに統合し、docker run 1回で完結する実行環境を提供する。GitHub Stars 4,200超、Apache 2.0ライセンスで公開されているOSSだ。

この記事で学べること
・AIO Sandboxが統合する6つの機能と設計思想
・Docker 1コマンドでの起動手順とアクセス方法
・Python / TypeScript SDKでの基本的な操作例
・MCPサーバー統合とREST APIエンドポイントの使い方
・Docker Compose / Kubernetesでの本番運用構成

この記事ではAIエージェントに特化して解説します。AIエージェント全般は AIエージェントフレームワーク比較2026年版 をご覧ください。

AIO Sandboxとは:AIエージェント向け統合サンドボックス環境

AIO Sandboxは、AIエージェントの実行に必要な機能を1つのDockerコンテナに集約するオープンソースプロジェクトだ。従来のサンドボックスはブラウザ特化(Browserless)やシェル特化など単一目的だったが、AIO Sandboxはブラウザ自動化(VNC/CDP)、シェル、ファイルシステム、MCPサーバー、VSCode Server、Jupyter Notebookの6つを統合する。

統合の最大のメリットはファイルシステムの共有にある。ブラウザでダウンロードしたファイルをシェルでそのまま処理し、Jupyterで分析する。コンテナ内のファイルシステムが一つだからこそ可能なワークフローだ。

従来は機能ごとに別コンテナを立て、ボリュームマウントやネットワーク共有でファイルを受け渡していた。AIO Sandboxでは1コンテナ・1ファイルシステムで完結するため、データ連携の設計負荷が激減する。特にAIエージェントが「スクレイピング → 解析 → レポート生成」のような連鎖タスクを実行する際、この統合性が開発スピードを左右する。

graph TB A["docker run
1コマンドで起動"] --> B["AIO Sandbox コンテナ"] B --> C["ブラウザ自動化
VNC / CDP"] B --> D["シェル / ターミナル
WebSocket接続"] B --> E["ファイル操作
統一インターフェース"] B --> F["MCPサーバー
4種類プリセット"] B --> G["VSCode Server
Web IDE"] B --> H["Jupyter Notebook
対話的実行"] I["共有ファイルシステム"] --- C I --- D I --- E I --- F I --- G I --- H
この章のポイント
AIO SandboxはAIエージェントに必要な6機能(ブラウザ・シェル・ファイル・MCP・VSCode・Jupyter)を単一Dockerコンテナに統合し、共有ファイルシステムでシームレスなデータ連携を実現する。

クイックスタート:Docker 1コマンドで起動する手順

起動はDockerコマンド1つで完了する。

docker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 ghcr.io/agent-infra/sandbox:latest

起動後、以下のURLでサービスにアクセスできる。

サービス URL 用途
APIドキュメント http://localhost:8080/v1/docs REST APIリファレンス
VNCブラウザ http://localhost:8080/vnc/index.html?autoconnect=true ブラウザ画面をリモート表示
VSCode Server http://localhost:8080/code-server/ Webベースのコードエディタ
MCPサービス http://localhost:8080/mcp MCPサーバーエンドポイント

特定バージョンを指定する場合は、イメージタグにバージョン番号を付与する。

docker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 ghcr.io/agent-infra/sandbox:1.0.0.150

--security-opt seccomp=unconfined はブラウザ(Chromium)がサンドボックス内で起動するために必要な指定だ。Chromiumはユーザーネームスペースやseccomp-bpfを使うため、デフォルトのDockerプロファイルでは制限に引っかかる。本番運用では専用のseccompプロファイルを作成して絞り込むのが望ましい。

初回起動時はイメージプル(約1.5GB)が発生するため、ネットワーク帯域を確認しておくとよい。起動後の内部サービスは以下の順で準備される。

  1. ベースプロセス(supervisord)の起動
  2. VNC / noVNCサーバーの起動
  3. code-server(VSCode Server)の起動
  4. Jupyter Notebookサーバーの起動
  5. MCPエンドポイントの公開
  6. REST APIゲートウェイの待受開始

http://localhost:8080/v1/sandbox にGETリクエストを送り、200レスポンスが返れば全サービスの準備完了だ。起動ログは docker logs <container> で確認できる。

この章のポイント
docker runコマンド1つで全サービスが起動し、ポート8080経由でAPI・VNC・VSCode・MCPにアクセスできる。seccomp=unconfinedはブラウザ起動のために必須で、本番では専用プロファイルで絞り込む。

Python / TypeScript SDKでエージェントから操作する

AIO SandboxはPython、TypeScript、Goの3言語でSDKを公式提供している。SDKを通じてシェル実行、ファイル操作、ブラウザ自動化をプログラムから制御できる。

SDKのインストールは以下の通り。

# Python
pip install agent-sandbox

# TypeScript / JavaScript
npm install @agent-infra/sandbox

# Go
go get github.com/agent-infra/sandbox-sdk-go

Python SDKでシェルコマンドの実行とファイル読み込みを行う基本例を示す。

from agent_sandbox import Sandbox

# クライアント初期化
client = Sandbox(base_url="http://localhost:8080")
home_dir = client.sandbox.get_context().home_dir

# シェルコマンド実行
result = client.shell.exec_command(command="ls -la")
print(result.data.output)

# ファイル読み込み
content = client.file.read_file(file=f"{home_dir}/.bashrc")
print(content.data.content)

# ブラウザのスクリーンショット取得
screenshot = client.browser.screenshot()

TypeScriptでも同等の操作が可能だ。

import { Sandbox } from '@agent-infra/sandbox';

const sandbox = new Sandbox({ baseURL: 'http://localhost:8080' });

// シェルコマンド実行
const result = await sandbox.shell.exec({ command: 'ls -la' });
console.log(result.output);

// ファイル読み込み
const content = await sandbox.file.read({ path: '/home/gem/.bashrc' });
console.log(content);

// ブラウザのスクリーンショット取得
const screenshot = await sandbox.browser.screenshot();

OpenHandsのようなAIコーディングエージェントを構築する際に、このSDKを通じてサンドボックス内でコード実行やファイル操作を安全に行える。SDKはすべて同じREST APIを叩く薄いラッパーなので、言語を跨いだ挙動の差異はほぼない。チームのスキルセットに合わせて自由に選べる。

SDKが提供する主なモジュールは以下の4カテゴリに整理される。

モジュール 代表的なメソッド 想定ユースケース
sandbox get_context, health 初期化・ヘルスチェック
shell exec_command, create_session コマンド実行・インタラクティブシェル
file read_file, write_file, list ファイル操作・検索
browser screenshot, get_info, navigate ブラウザ自動化・CDP接続情報取得
jupyter execute_code, get_kernel Jupyterカーネル経由のコード実行

エージェントの実装では、LLMのfunction callingスキーマにこれらのメソッドを登録して呼び出す形が一般的だ。ツールごとの入出力が明確なので、Claude / GPT / Geminiのどのモデルでも扱いやすい。

この章のポイント
Python / TypeScript / Goの3言語でSDKが公式提供され、シェル・ファイル・ブラウザ・Jupyterの操作を統一APIで呼び出せる。すべてREST API経由のため言語による挙動差がない。

MCPサーバー統合:4つのプリセットツールで即座に接続

AIO Sandboxには4種類のMCPサーバーがプリセットで組み込まれている。エージェントはMCPプロトコル経由でブラウザ操作、ファイル管理、シェル実行、ドキュメント変換を利用できる。MCPサーバーの仕組みを理解していれば、追加のMCPサーバーを接続することも可能だ。

MCPサーバー 提供ツール 主な用途
browser navigate, screenshot, click, type, scroll Web自動化・スクレイピング
file read, write, list, search, replace ファイルシステム操作
shell exec, create_session, kill コマンド実行
markitdown convert, extract_text, extract_images ドキュメント処理

MCPエンドポイントは http://localhost:8080/mcp で公開される。Claude DesktopやClineなどのMCPクライアントから接続すれば、エージェントがサンドボックス内のリソースに安全にアクセスできる。

Claude Desktopから接続する場合の設定例は以下の通り。

{
  "mcpServers": {
    "aio-sandbox": {
      "url": "http://localhost:8080/mcp",
      "transport": "sse"
    }
  }
}

SSE(Server-Sent Events)トランスポートでMCPエンドポイントに接続すれば、Claude Desktopから直接ブラウザ・シェル・ファイル操作をツールとして呼び出せる。ローカルのClaude Desktopに「この画面をスクショして」「このディレクトリをlsして」と指示するだけで、サンドボックス内の操作が実行される。

この章のポイント
AIO Sandboxは4種類のMCPサーバー(browser/file/shell/markitdown)を内蔵しており、Claude Desktopなど既存のMCPクライアントからSSE接続するだけでツール群を利用できる。

実践例:Webページをスクレイピングしてマークダウンに変換

公式READMEに記載されている実践的な例として、Webページをブラウザで取得し、Jupyter上でマークダウンに変換するワークフローがある。ブラウザ・Jupyter・シェル・ファイル操作の4機能を横断する処理が、共有ファイルシステムのおかげでシームレスに動作する。

import asyncio
import base64
from playwright.async_api import async_playwright
from agent_sandbox import Sandbox

async def site_to_markdown():
    c = Sandbox(base_url="http://localhost:8080")
    home_dir = c.sandbox.get_context().home_dir

    # ブラウザ: CDPでページを取得しスクリーンショットを撮影
    async with async_playwright() as p:
        browser_info = c.browser.get_info().data
        page = await (await p.chromium.connect_over_cdp(
            browser_info.cdp_url
        )).new_page()
        await page.goto("https://example.com", wait_until="networkidle")
        html = await page.content()
        screenshot_b64 = base64.b64encode(
            await page.screenshot()
        ).decode('utf-8')

    # Jupyter: HTML→マークダウン変換をサンドボックス内で実行
    c.jupyter.execute_code(code=f"""
from markdownify import markdownify
md = markdownify('''{html}''')
with open('{home_dir}/site.md', 'w') as f:
    f.write(md)
print("変換完了")
""")

    # シェル: 生成ファイルを確認
    list_result = c.shell.exec_command(command=f"ls -lh {home_dir}")
    print(list_result.data.output)

    # ファイル: 生成したマークダウンを取得
    return c.file.read_file(file=f"{home_dir}/site.md").data.content

asyncio.run(site_to_markdown())

この例では、CDP(Chrome DevTools Protocol)でブラウザを操作し、取得したHTMLをJupyter Notebookで変換し、シェルとファイルAPIで結果を確認している。すべてが1コンテナ内で完結するため、ファイルパスの受け渡しに外部ストレージは不要だ。

このワークフローを別の構成(例: Playwright専用コンテナ + Jupyterコンテナ)で組む場合、共有ボリュームの設計、ネットワーク分離、タイムアウト設定など考慮すべき項目が一気に増える。AIO Sandboxなら同じファイルシステムを全機能が参照するため、/home/gem/site.md のような絶対パス1つですべての機能が協調動作する。

この章のポイント
ブラウザ・Jupyter・シェル・ファイルの4機能を横断する実践ワークフローが、共有ファイルシステムとCDP接続により1コンテナで完結する。外部ストレージやネットワーク設計が不要になり、開発速度が大きく向上する。

Docker Compose / Kubernetes本番デプロイ構成

開発環境から本番環境まで、Docker ComposeとKubernetesの両方に対応している。

Docker Composeで永続化ボリュームとメモリ制限を設定した構成例を示す。

version: '3.8'
services:
  sandbox:
    container_name: aio-sandbox
    image: ghcr.io/agent-infra/sandbox:latest
    volumes:
      - /tmp/gem/workspace:/home/gem/workspace
    security_opt:
      - seccomp:unconfined
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: "unless-stopped"
    shm_size: "2gb"
    ports:
      - "${HOST_PORT:-8080}:8080"
    environment:
      TZ: Asia/Tokyo
      WORKSPACE: "/home/gem"

Kubernetesで2レプリカのデプロイメントを構成する場合は以下の通り。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aio-sandbox
spec:
  replicas: 2
  selector:
    matchLabels:
      app: aio-sandbox
  template:
    metadata:
      labels:
        app: aio-sandbox
    spec:
      containers:
      - name: aio-sandbox
        image: ghcr.io/agent-infra/sandbox:latest
        ports:
        - containerPort: 8080
        resources:
          limits:
            memory: "2Gi"
            cpu: "1000m"

複数エージェントを同時に運用する場合は、Kubernetesのレプリカ数を増やすだけで独立したサンドボックス環境を水平スケールできる。ForgeCodeのようなAIコーディングツールのバックエンドとして、サンドボックスを複数並列実行する運用にも向いている

本番運用では以下の観点を押さえておくとよい。

観点 推奨設定 理由
メモリ上限 2〜4GB/コンテナ ブラウザとJupyterが同時稼働するため
shm_size 2GB以上 Chromiumの共有メモリが枯渇するとクラッシュ
永続化ボリューム /home/gem/workspace エージェント成果物の保全
ネットワーク分離 専用VPC / NetworkPolicy 外向き通信の制御
リソース監視 Prometheus exporter併設 CPU / メモリスパイク検知

特にshm_sizeは指定を忘れると数時間で「Chromium crashed」エラーが頻発するため、最初に必ず設定しておきたい。

この章のポイント
Docker Compose / Kubernetesに対応し、レプリカ数を増やすだけで水平スケールが可能。shm_size 2GB以上の指定、永続化ボリューム、ネットワーク分離の3点を本番運用では必ず設定する。

競合比較:単機能サンドボックスとの違い

AIO Sandboxの最大の差別化ポイントは「統合度」にある。従来のサンドボックスは単一機能に特化していたが、AIO Sandboxはエージェント開発に必要な要素をすべて1つのイメージに統合する。

比較項目 AIO Sandbox Browserless E2B LocalStack
ブラウザ自動化 VNC + CDP CDP 限定的 なし
シェル実行 WebSocket対応 なし Python/JS AWS CLI
ファイルシステム共有 全サービス共有 なし 分離 S3互換
MCP統合 4サーバー内蔵 なし なし なし
VSCode Server 内蔵 なし なし なし
Jupyter 内蔵 なし 内蔵 なし
SDK Python/TS/Go REST API Python/TS Python/TS
ライセンス Apache 2.0 SSPL/有料 有料プラン 一部有料

Browserlessはブラウザ特化で高性能だが、シェル・ファイル操作との連携には別サービスが必要になる。E2Bはコード実行環境としては優秀だが、ブラウザ自動化が限定的でMCP統合もない。AIO Sandboxは「すべてを1コンテナに」というアプローチで、エージェントのブラウザ自動化からファイル操作まで統合的に扱える点が強みだ。

どのツールを選ぶべきかは、ユースケースによって変わる。

  • ブラウザ単機能で高スケールが必要→Browserless
  • コード実行サンドボックスのSaaSで楽をしたい→E2B(有料)
  • AWSリソースをローカルで模倣したい→LocalStack
  • AIエージェント向けの統合環境をセルフホストしたい→AIO Sandbox

「複数機能 × セルフホスト × 商用利用可(Apache 2.0)」という組み合わせを満たすのはAIO Sandboxのみだ。特にオンプレ要件やデータ主権要件がある企業では、SaaS型のE2Bが使えないケースが多く、AIO Sandboxの価値が際立つ。

この章のポイント
AIO Sandboxの差別化ポイントは「6機能統合 × 共有ファイルシステム × Apache 2.0」の組み合わせ。セルフホスト必須の企業や、ブラウザ+コード実行を同時に必要とするエージェント開発で最適解となる。

REST APIエンドポイント一覧

AIO SandboxはREST APIを提供しており、SDKを使わずにHTTPリクエストで操作できる。

エンドポイント メソッド 用途
/v1/sandbox GET 環境情報の取得
/v1/shell/exec POST シェルコマンド実行
/v1/file/read POST ファイル読み込み
/v1/file/write POST ファイル書き込み
/v1/browser/screenshot POST スクリーンショット取得
/v1/jupyter/execute POST Jupyterコード実行

APIドキュメントは起動後に http://localhost:8080/v1/docs で確認できる。OpenAPI仕様に準拠しているため、任意のHTTPクライアントやLLMのfunction callingから利用可能だ。

sequenceDiagram participant Agent as AIエージェント participant SDK as Python / TS SDK participant API as REST API
:8080 participant Browser as ブラウザ
VNC / CDP participant Shell as シェル participant File as ファイルシステム participant MCP as MCPサーバー Agent->>SDK: タスク実行指示 SDK->>API: POST /v1/browser/screenshot API->>Browser: スクリーンショット取得 Browser-->>API: 画像データ API-->>SDK: レスポンス SDK->>API: POST /v1/shell/exec API->>Shell: コマンド実行 Shell->>File: 結果をファイル保存 Shell-->>API: 出力 API-->>SDK: レスポンス Agent->>MCP: MCPツール呼び出し MCP->>File: ファイル操作 File-->>MCP: 結果 MCP-->>Agent: ツールレスポンス

OpenAPI仕様に準拠しているため、LLMのfunction callingに直接流し込んで利用することも可能だ。/v1/docs のJSON定義をツール定義に変換すれば、エージェントが能動的にサンドボックスを操作できる。

この章のポイント
REST APIはOpenAPI準拠で、SDKを使わずHTTPリクエストだけでも全機能を操作できる。LLMのfunction callingに流し込めば、エージェントが能動的にサンドボックスを制御する構成が簡単に作れる。

📌 まとめ:AIエージェント開発環境の選び方

AIO Sandboxは「AIエージェントに必要な実行環境を、Docker 1コマンドで手に入れる」という明確なコンセプトを持つ。ブラウザ自動化・シェル・ファイル・MCP・VSCode・Jupyterの6機能が単一コンテナで動作し、共有ファイルシステムにより機能間のデータ連携もシームレスだ。

Python / TypeScript / GoのSDKが揃っており、既存のエージェントフレームワークとの統合も容易になっている。Apache 2.0ライセンスで商用利用も可能なため、プロトタイプから本番環境まで一貫して使える選択肢となる。

導入を検討する際のチェックリストをまとめておく。

  • セルフホスト要件があるか(SaaS禁止ならAIO Sandbox一択)
  • ブラウザ自動化とコード実行を同時に必要とするか
  • MCPクライアントとの接続を想定しているか
  • Docker Compose / Kubernetesでの運用体制があるか
  • shm_size 2GB以上を確保できるホストか
  • 成果物の永続化ボリュームを用意できるか

これらを満たすなら、AIO Sandboxはエージェント開発環境の有力な第一候補となる。まずはローカルで docker run 1コマンドを試し、SDKから基本操作を確認してから本番構成に進むのが定石だ。

この章のポイント
AIO Sandboxは6機能統合・Apache 2.0・Docker 1コマンド起動という特徴を持つAIエージェント実行環境。プロトタイプから本番運用まで一貫して使え、特にセルフホスト要件がある企業で優位性が高い。

参照ソース