sandbox is a free, open source browsers & extensions project written in Python and released under Apache-2.0. It has 5,943 GitHub stars, 533 forks and 71 open issues, and was last pushed 4 days ago. On this registry it ranks #54 of 101 tracked projects in Browsers & Extensions, with 5 head-to-head comparisons available.

What is sandbox?

AIO Sandbox is an all-in-one sandbox environment that puts a browser, a shell, file operations, MCP services, a VSCode Server, Jupyter and a terminal inside a single Docker container, built for AI agent developers and teams that need one unified, secure execution environment instead of several single-purpose ones.

What it is

AIO Sandbox ships as a Docker image, ghcr.io/agent-infra/sandbox, and combines browser, shell, file, MCP and VSCode Server functionality in one container. It is built on cloud-native lightweight sandbox technology and provides a unified, secure execution environment for AI agents and developers. The project is written in Python under the Apache-2.0 licence, and it carries client libraries for three languages: pip install agent-sandbox for Python, npm install @agent-infra/sandbox for TypeScript and JavaScript, and go get github.com/agent-infra/sandbox-sdk-go for Go. Its topic list reflects the same shape — agent, all-in-one, browser, filesystem, mcp, sandbox, shell.

The concrete problem it solves is fragmentation. Traditional sandboxes are single-purpose, handling only a browser, only code, or only a shell, which makes file sharing and functional coordination between them extremely challenging. AIO Sandbox replaces that collection of separate environments with one container and one unified file system, so a file downloaded in the browser is instantly available to shell and file operations. Multiple interfaces — VNC, VSCode, Jupyter and Terminal — live in the same environment, and the MCP servers and development tools arrive pre-configured, which is what the project describes as zero configuration.

Key capabilities

  • MCP services exposed at http://localhost:8080/mcp, with API documentation at http://localhost:8080/v1/docs.
  • VNC browser reachable at /vnc/index.html?autoconnect=true, with browser automation available from the SDK.
  • VSCode Server at /code-server/, alongside JupyterLab and a terminal in the same container.
  • Unified file system shared across browser, shell and file operations, so artefacts do not need copying between tools.
  • Shell command execution through the SDK, for example client.shell.exec_command(command="ls -la"), with file reads such as client.file.read_file(file=...).
  • Sandboxed Python and Node.js execution with the project's stated safety guarantees.
  • Optional API key authentication through SANDBOX_API_KEY, supporting three methods: the X-AIO-API-Key header, an Authorization: Bearer header, and the ?api_key= query parameter.

Who uses it and how

  • AI agent developers who wire agents to browser, shell and file operations over MCP-compatible APIs, using the Python, TypeScript or Go SDK.
  • Teams that need browsing, file handling and shell work in one place rather than coordinating several single-purpose sandboxes.
  • Operators deploying to cloud, who keep port 8080 private and publish it through a reverse proxy or Ingress.
  • Users in mainland China pulling the mirror enterprise-public-cn-beijing.cr.volces.com/vefaas-public/all-in-one-sandbox:1.11.0.
  • Reproducible deployment workflows that pin a release tag, such as ghcr.io/agent-infra/sandbox:1.11.0, instead of tracking latest.

Getting started

Run the container directly: docker run --security-opt seccomp=unconfined --rm -it -e SANDBOX_API_KEY=your-secret-key -p 127.0.0.1:8080:8080 ghcr.io/agent-infra/sandbox:latest, then open the documentation, VNC browser, VSCode Server and MCP endpoints on port 8080. Client SDKs install with pip install agent-sandbox, npm install @agent-infra/sandbox or go get github.com/agent-infra/sandbox-sdk-go.

How it compares

No list of paid products replaced by this project is provided, and the facts name no directly comparable tools, so AIO Sandbox stands alone in this registry. Its distinguishing position within its own documentation is the all-in-one container: browser, shell, file, MCP and VSCode Server in one image rather than the single-purpose sandboxes it describes as the alternative.

When to use it — and when not to

A self-hoster must run Docker with --security-opt seccomp=unconfined and should set SANDBOX_API_KEY, because without that variable the API, JupyterLab and VNC services remain open, and for cloud use port 8080 should stay private behind a reverse proxy or Ingress. Anyone unwilling to relax the container's seccomp profile, or who needs a hardened multi-tenant boundary out of the box, should look elsewhere. Pinning a release tag rather than latest is advisable for anything beyond local experimentation.

project readme (upstream, from github) — read inline

AIO Sandbox - All-in-One Agent Sandbox Environment

🌐 Browser | 💻 Terminal | 📁 File | 🔧 VSCode | 📊 Jupyter | 🤖 MCP

🌐 Website   |   🔌 API   |   📑 Paper   |   🌟 Examples   |   📊 Evaluation   

Release License PyPI npm

🚀 Quick Start

Get up and running in 30 seconds:

# Recommended: Enable API Key authentication (protects all services: API, JupyterLab, VNC)
# - Supports three methods: X-AIO-API-Key header, Authorization: Bearer header, ?api_key= query parameter
# - Without SANDBOX_API_KEY, services remain open (backward compatible)
docker run --security-opt seccomp=unconfined --rm -it \
  -e SANDBOX_API_KEY=your-secret-key \
  -p 127.0.0.1:8080:8080 ghcr.io/agent-infra/sandbox:latest

For users in mainland China:

docker run --security-opt seccomp=unconfined --rm -it \
  -e SANDBOX_API_KEY=your-secret-key \
  -p 127.0.0.1:8080:8080 enterprise-public-cn-beijing.cr.volces.com/vefaas-public/all-in-one-sandbox:1.11.0

For reproducible deployments, pin a release tag. Replace 1.11.0 with the release you want:

docker run --security-opt seccomp=unconfined --rm -it \
  -p 127.0.0.1:8080:8080 ghcr.io/agent-infra/sandbox:1.11.0
# or use the pinned mainland China mirror
docker run --security-opt seccomp=unconfined --rm -it \
  -p 127.0.0.1:8080:8080 enterprise-public-cn-beijing.cr.volces.com/vefaas-public/all-in-one-sandbox:1.11.0

These examples intentionally bind the host side to 127.0.0.1 because the sandbox listens on 0.0.0.0 inside the container. For cloud deployment, keep port 8080 private and publish it through a reverse proxy or Ingress: Cloud Deployment Guide.

Once running, access the environment at:

🎯 What is AIO Sandbox?

AIO Sandbox is an all-in-one agent sandbox environment that combines Browser, Shell, File, MCP operations, and VSCode Server in a single Docker container. Built on cloud-native lightweight sandbox technology, it provides a unified, secure execution environment for AI agents and developers.

Why Choose AIO Sandbox?

Traditional sandboxes are single-purpose (browser, code, or shell), making file sharing and functional coordination extremely challenging. AIO Sandbox solves this by providing:

  • Unified File System - Files downloaded in browser are instantly available in Shell/File operations
  • Multiple Interfaces - VNC, VSCode, Jupyter, and Terminal in one unified environment
  • Secure Execution - Sandboxed Python and Node.js execution with safety guarantees
  • Zero Configuration - Pre-configured MCP servers and development tools ready to use
  • Agent-Ready - MCP-compatible APIs for seamless AI agent integration

📦 Installation

SDK Installation

Python

pip install agent-sandbox

TypeScript/JavaScript

npm install @agent-infra/sandbox

Golang

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

Basic Usage

Python Example

from agent_sandbox import Sandbox

# Initialize client
client = Sandbox(base_url="http://localhost:8080")
home_dir = client.sandbox.get_context().home_dir

# Execute shell commands
result = client.shell.exec_command(command="ls -la")
print(result.data.output)

# File operations
content = client.file.read_file(file=f"{home_dir}/.bashrc")
print(content.data.content)

# Browser automation
screenshot = client.browser.screenshot()

TypeScript Example

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

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

// Execute shell commands
const result = await sandbox.shell.exec({ command: 'ls -la' });
console.log(result.output);

// File operations
const content = await sandbox.file.read({ path: '/home/gem/.bashrc' });
console.log(content);

// Browser automation
const screenshot = await sandbox.browser.screenshot();

🌟 Key Features

🔗 Unified Environment

All components run in the same container with a shared filesystem, enabling seamless workflows:

🌐 Browser Automation

Full browser control through multiple interfaces:

  • VNC - Visual browser interaction through remote desktop
  • CDP - Chrome DevTools Protocol for programmatic control
  • MCP - High-level browser automation tools

💻 Development Tools

Integrated development environment with:

  • VSCode Server - Full IDE experience in browser
  • Jupyter Notebook - Interactive Python environment
  • Terminal - WebSocket-based terminal access
  • Port Forwarding - Smart preview for web applications

🤖 MCP Integration

Pre-configured Model Context Protocol servers:

  • Browser - Web automation and scraping
  • File - File system operations
  • Shell - Command execution
  • Markitdown - Document processing

📚 Complete Example

Convert a webpage to Markdown with embedded screenshot:

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

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

    # Browser: Automation to download HTML
    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: Convert HTML to markdown in sandbox
    c.jupyter.execute_code(code=f"""
from markdownify import markdownify
html = '''{html}'''
screenshot_b64 = "{screenshot_b64}"

md = f"{{markdownify(html)}}\\n\\n![Screenshot](data:image/png;base64,{{screenshot_b64}})"
with open('{home_dir}/site.md', 'w') as f:
    f.write(md)
print("Done!")
""")

    # Shell: List files in sandbox
    list_result = c.shell.exec_command(command=f"ls -lh {home_dir}")
    print(f"Files in sandbox: {list_result.data.output}")

    # File: Read the generated markdown
    return c.file.read_file(file=f"{home_dir}/site.md").data.content

if __name__ == "__main__":
    result = asyncio.run(site_to_markdown())
    print(f"Markdown saved successfully!")

🏗️ Architecture

┌─────────────────────────────────────────────────────────────┐
│                    🌐 Browser + VNC                        │
├─────────────────────────────────────────────────────────────┤
│  💻 VSCode Server  │  🐚 Shell Terminal  │  📁 File Ops   │
├─────────────────────────────────────────────────────────────┤
│              🔗 MCP Hub + �

readme truncated — read the full docs on github

Frequently asked questions

Is sandbox free to use?

sandbox is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does sandbox do?

All-in-One Sandbox for AI Agents that combines Browser, Shell, File, MCP and VSCode Server in a single Docker container.

What is sandbox written in?

sandbox is primarily written in Python. Its source is publicly available at https://github.com/agent-infra/sandbox, and it has 5,943 GitHub stars.