[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-72146":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},72146,"sandbox","agent-infra\u002Fsandbox","agent-infra","All-in-One Sandbox for AI Agents that combines Browser, Shell, File, MCP and VSCode Server in a single Docker container.","https:\u002F\u002Fsandbox.agent-infra.com",null,"Python",5012,442,31,59,0,96,143,385,288,38.94,"Apache License 2.0",false,"main",[26,27,28,29,30,5,31],"agent","all-in-one","browser","filesystem","mcp","shell","2026-06-12 02:02:59","# AIO Sandbox - All-in-One Agent Sandbox Environment\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fwebsite\u002Fdocs\u002Fpublic\u002Faio-icon.png\" alt=\"logo\" width=\"200\"\u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>🌐 Browser | 💻 Terminal | 📁 File | 🔧 VSCode | 📊 Jupyter | 🤖 MCP\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cdiv align=\"center\">\n\u003Cp>\n        🌐 \u003Ca href=\"https:\u002F\u002Fsandbox.agent-infra.com\u002F\">Website\u003C\u002Fa>&nbsp&nbsp\n        | &nbsp&nbsp🔌 \u003Ca href=\"https:\u002F\u002Fsandbox.agent-infra.com\u002Fapi\">API\u003C\u002Fa>&nbsp&nbsp\n        | &nbsp&nbsp📑 \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fpdf\u002F2509.02544#S2.SS2\">Paper\u003C\u002Fa>&nbsp&nbsp\n        | &nbsp&nbsp🌟 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\u002Ftree\u002Fmain\u002Fexamples\">Examples\u003C\u002Fa>&nbsp&nbsp\n        | &nbsp&nbsp📊 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\u002Ftree\u002Fmain\u002Fevaluation\">Evaluation\u003C\u002Fa> &nbsp&nbsp\n\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fagent-infra\u002Fsandbox\" alt=\"Release\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fagent-infra\u002Fsandbox\" alt=\"License\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fagent-sandbox\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fagent-sandbox\" alt=\"PyPI\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@agent-infra\u002Fsandbox\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@agent-infra\u002Fsandbox\" alt=\"npm\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n![](.\u002Fwebsite\u002Fdocs\u002Fpublic\u002Fimages\u002Faio-index.png)\n\n## 🚀 Quick Start\n\nGet up and running in 30 seconds:\n\n```bash\ndocker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 ghcr.io\u002Fagent-infra\u002Fsandbox:latest\n```\n\nFor users in mainland China:\n\n```bash\ndocker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 enterprise-public-cn-beijing.cr.volces.com\u002Fvefaas-public\u002Fall-in-one-sandbox:latest\n```\n\nUse a specific version in the format `agent-infra\u002Fsandbox:${version}`, for example, to use version 1.0.0.150:\n\n```bash\ndocker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 ghcr.io\u002Fagent-infra\u002Fsandbox:1.0.0.150\n# or users in mainland China\ndocker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 enterprise-public-cn-beijing.cr.volces.com\u002Fvefaas-public\u002Fall-in-one-sandbox:1.0.0.150\n```\n\nOnce running, access the environment at:\n- 📖 **Documentation**: http:\u002F\u002Flocalhost:8080\u002Fv1\u002Fdocs\n- 🌐 **VNC Browser**: http:\u002F\u002Flocalhost:8080\u002Fvnc\u002Findex.html?autoconnect=true\n- 💻 **VSCode Server**: http:\u002F\u002Flocalhost:8080\u002Fcode-server\u002F\n- 🤖 **MCP Services**: http:\u002F\u002Flocalhost:8080\u002Fmcp\n\n## 🎯 What is AIO Sandbox?\n\nAIO 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.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"website\u002Fdocs\u002Fpublic\u002Fimages\u002Faio-sandbox.png\" alt=\"AIO Sandbox Architecture\" width=\"600\"\u002F>\n\u003C\u002Fp>\n\n### Why Choose AIO Sandbox?\n\nTraditional sandboxes are **single-purpose** (browser, code, or shell), making file sharing and functional coordination extremely challenging. AIO Sandbox solves this by providing:\n\n- ✅ **Unified File System** - Files downloaded in browser are instantly available in Shell\u002FFile operations\n- ✅ **Multiple Interfaces** - VNC, VSCode, Jupyter, and Terminal in one unified environment\n- ✅ **Secure Execution** - Sandboxed Python and Node.js execution with safety guarantees\n- ✅ **Zero Configuration** - Pre-configured MCP servers and development tools ready to use\n- ✅ **Agent-Ready** - MCP-compatible APIs for seamless AI agent integration\n\n## 📦 Installation\n\n### SDK Installation\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd>\n\n**Python**\n```bash\npip install agent-sandbox\n```\n\n\u003C\u002Ftd>\n\u003Ctd>\n\n**TypeScript\u002FJavaScript**\n```bash\nnpm install @agent-infra\u002Fsandbox\n```\n\n\u003C\u002Ftd>\n\u003Ctd>\n\n**Golang**\n```bash\ngo get github.com\u002Fagent-infra\u002Fsandbox-sdk-go\n```\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n### Basic Usage\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd>\n\n**Python Example**\n```python\nfrom agent_sandbox import Sandbox\n\n# Initialize client\nclient = Sandbox(base_url=\"http:\u002F\u002Flocalhost:8080\")\nhome_dir = client.sandbox.get_context().home_dir\n\n# Execute shell commands\nresult = client.shell.exec_command(command=\"ls -la\")\nprint(result.data.output)\n\n# File operations\ncontent = client.file.read_file(file=f\"{home_dir}\u002F.bashrc\")\nprint(content.data.content)\n\n# Browser automation\nscreenshot = client.browser.screenshot()\n```\n\n\u003C\u002Ftd>\n\u003Ctd>\n\n**TypeScript Example**\n```typescript\nimport { Sandbox } from '@agent-infra\u002Fsandbox';\n\n\u002F\u002F Initialize client\nconst sandbox = new Sandbox({ baseURL: 'http:\u002F\u002Flocalhost:8080' });\n\n\u002F\u002F Execute shell commands\nconst result = await sandbox.shell.exec({ command: 'ls -la' });\nconsole.log(result.output);\n\n\u002F\u002F File operations\nconst content = await sandbox.file.read({ path: '\u002Fhome\u002Fgem\u002F.bashrc' });\nconsole.log(content);\n\n\u002F\u002F Browser automation\nconst screenshot = await sandbox.browser.screenshot();\n```\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## 🌟 Key Features\n\n### 🔗 Unified Environment\nAll components run in the same container with a shared filesystem, enabling seamless workflows:\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"website\u002Fdocs\u002Fpublic\u002Fimages\u002Faio-index.png\" alt=\"Unified Environment\" width=\"600\"\u002F>\n\u003C\u002Fp>\n\n### 🌐 Browser Automation\nFull browser control through multiple interfaces:\n- **VNC** - Visual browser interaction through remote desktop\n- **CDP** - Chrome DevTools Protocol for programmatic control\n- **MCP** - High-level browser automation tools\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"website\u002Fdocs\u002Fpublic\u002Fimages\u002Fbrowser.png\" alt=\"Browser Automation\" width=\"600\"\u002F>\n\u003C\u002Fp>\n\n### 💻 Development Tools\nIntegrated development environment with:\n- **VSCode Server** - Full IDE experience in browser\n- **Jupyter Notebook** - Interactive Python environment\n- **Terminal** - WebSocket-based terminal access\n- **Port Forwarding** - Smart preview for web applications\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"website\u002Fdocs\u002Fpublic\u002Fimages\u002Fcode-server.png\" alt=\"VSCode Server\" width=\"600\"\u002F>\n\u003C\u002Fp>\n\n### 🤖 MCP Integration\nPre-configured Model Context Protocol servers:\n- **Browser** - Web automation and scraping\n- **File** - File system operations\n- **Shell** - Command execution\n- **Markitdown** - Document processing\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"website\u002Fdocs\u002Fpublic\u002Fimages\u002Fmcp.png\" alt=\"MCP Integration\" width=\"600\"\u002F>\n\u003C\u002Fp>\n\n## 📚 Complete Example\n\nConvert a webpage to Markdown with embedded screenshot:\n\n```python\nimport asyncio\nimport base64\nfrom playwright.async_api import async_playwright\nfrom agent_sandbox import Sandbox\n\nasync def site_to_markdown():\n    # Initialize sandbox client\n    c = Sandbox(base_url=\"http:\u002F\u002Flocalhost:8080\")\n    home_dir = c.sandbox.get_context().home_dir\n\n    # Browser: Automation to download HTML\n    async with async_playwright() as p:\n        browser_info = c.browser.get_info().data\n        page = await (await p.chromium.connect_over_cdp(browser_info.cdp_url)).new_page()\n        await page.goto(\"https:\u002F\u002Fexample.com\", wait_until=\"networkidle\")\n        html = await page.content()\n        screenshot_b64 = base64.b64encode(await page.screenshot()).decode('utf-8')\n\n    # Jupyter: Convert HTML to markdown in sandbox\n    c.jupyter.execute_code(code=f\"\"\"\nfrom markdownify import markdownify\nhtml = '''{html}'''\nscreenshot_b64 = \"{screenshot_b64}\"\n\nmd = f\"{{markdownify(html)}}\\\\n\\\\n![Screenshot](data:image\u002Fpng;base64,{{screenshot_b64}})\"\nwith open('{home_dir}\u002Fsite.md', 'w') as f:\n    f.write(md)\nprint(\"Done!\")\n\"\"\")\n\n    # Shell: List files in sandbox\n    list_result = c.shell.exec_command(command=f\"ls -lh {home_dir}\")\n    print(f\"Files in sandbox: {list_result.data.output}\")\n\n    # File: Read the generated markdown\n    return c.file.read_file(file=f\"{home_dir}\u002Fsite.md\").data.content\n\nif __name__ == \"__main__\":\n    result = asyncio.run(site_to_markdown())\n    print(f\"Markdown saved successfully!\")\n```\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"website\u002Fdocs\u002Fpublic\u002Fimages\u002Fexample.png\" alt=\"Example Output\" width=\"600\"\u002F>\n\u003C\u002Fp>\n\n## 🏗️ Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    🌐 Browser + VNC                        │\n├─────────────────────────────────────────────────────────────┤\n│  💻 VSCode Server  │  🐚 Shell Terminal  │  📁 File Ops   │\n├─────────────────────────────────────────────────────────────┤\n│              🔗 MCP Hub + 🔒 Sandbox Fusion               │\n├─────────────────────────────────────────────────────────────┤\n│         🚀 Preview Proxy + 📊 Service Monitoring          │\n└─────────────────────────────────────────────────────────────┘\n```\n\n## 🛠️ API Reference\n\n### Core APIs\n\n| Endpoint | Description |\n|----------|-------------|\n| `\u002Fv1\u002Fsandbox` | Get sandbox environment information |\n| `\u002Fv1\u002Fshell\u002Fexec` | Execute shell commands |\n| `\u002Fv1\u002Ffile\u002Fread` | Read file contents |\n| `\u002Fv1\u002Ffile\u002Fwrite` | Write file contents |\n| `\u002Fv1\u002Fbrowser\u002Fscreenshot` | Take browser screenshot |\n| `\u002Fv1\u002Fjupyter\u002Fexecute` | Execute Jupyter code |\n\n### MCP Servers\n\n| Server | Tools Available |\n|--------|----------------|\n| `browser` | `navigate`, `screenshot`, `click`, `type`, `scroll` |\n| `file` | `read`, `write`, `list`, `search`, `replace` |\n| `shell` | `exec`, `create_session`, `kill` |\n| `markitdown` | `convert`, `extract_text`, `extract_images` |\n\n## 🚢 Deployment\n\n### Docker Compose\n\n```yaml\nversion: '3.8'\nservices:\n  sandbox:\n    container_name: aio-sandbox\n    image: ghcr.io\u002Fagent-infra\u002Fsandbox:latest\n    volumes:\n      - \u002Ftmp\u002Fgem\u002Fvite-project:\u002Fhome\u002Fgem\u002Fvite-project\n    security_opt:\n      - seccomp:unconfined\n    extra_hosts:\n      - \"host.docker.internal:host-gateway\"\n    restart: \"unless-stopped\"\n    shm_size: \"2gb\"\n    ports:\n      - \"${HOST_PORT:-8080}:8080\"\n    environment:\n      PROXY_SERVER: ${PROXY_SERVER:-host.docker.internal:7890}\n      JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY:-}\n      DNS_OVER_HTTPS_TEMPLATES: ${DNS_OVER_HTTPS_TEMPLATES:-}\n      WORKSPACE: ${WORKSPACE:-\"\u002Fhome\u002Fgem\"}\n      HOMEPAGE: ${HOMEPAGE:-}\n      BROWSER_EXTRA_ARGS: ${BROWSER_EXTRA_ARGS:-}\n      TZ: ${TZ:-Asia\u002FSingapore}\n      WAIT_PORTS: ${WAIT_PORTS:-}\n```\n\n### Kubernetes\n\n```yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: aio-sandbox\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: aio-sandbox\n  template:\n    metadata:\n      labels:\n        app: aio-sandbox\n    spec:\n      containers:\n      - name: aio-sandbox\n        image: ghcr.io\u002Fagent-infra\u002Fsandbox:latest\n        ports:\n        - containerPort: 8080\n        resources:\n          limits:\n            memory: \"2Gi\"\n            cpu: \"1000m\"\n```\n\n## 🤝 Integration Examples\n\n### Browser Use Integration\n\n```python\nimport asyncio\n\nfrom agent_sandbox import Sandbox\nfrom browser_use import Agent, Tools\nfrom browser_use.browser import BrowserProfile, BrowserSession\nfrom browser_use.llm import ChatOpenAI\n\nsandbox = Sandbox(base_url=\"http:\u002F\u002Flocalhost:8080\")\nprint(\"sandbox\", sandbox.browser)\ncdp_url = sandbox.browser.get_info().data.cdp_url\n\nbrowser_session = BrowserSession(\n    browser_profile=BrowserProfile(cdp_url=cdp_url, is_local=True)\n)\ntools = Tools()\n\n\nasync def main():\n    agent = Agent(\n        task='Visit https:\u002F\u002Fduckduckgo.com and search for \"browser-use founders\"',\n        llm=ChatOpenAI(model=\"gcp-claude4.1-opus\"),\n        tools=tools,\n        browser_session=browser_session,\n    )\n\n    await agent.run()\n    await browser_session.kill()\n\n    input(\"Press Enter to close...\")\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n### LangChain Integration\n\n```python\nfrom langchain.tools import BaseTool\nfrom agent_sandbox import Sandbox\n\nclass SandboxTool(BaseTool):\n    name = \"sandbox_execute\"\n    description = \"Execute commands in AIO Sandbox\"\n\n    def _run(self, command: str) -> str:\n        client = Sandbox(base_url=\"http:\u002F\u002Flocalhost:8080\")\n        result = client.shell.exec_command(command=command)\n        return result.data.output\n```\n\n### OpenAI Assistant Integration\n\n```python\nfrom openai import OpenAI\nfrom agent_sandbox import Sandbox\nimport json\n\nclient = OpenAI(\n    api_key=\"your_api_key\",\n)\nsandbox = Sandbox(base_url=\"http:\u002F\u002Flocalhost:8080\")\n\n\n# define a tool to run code in the sandbox\ndef run_code(code, lang=\"python\"):\n    if lang == \"python\":\n        return sandbox.jupyter.execute_code(code=code).data\n    return sandbox.nodejs.execute_nodejs_code(code=code).data\n\n\n# Use OpenAI\nresponse = client.chat.completions.create(\n    model=\"gpt-4\",\n    messages=[{\"role\": \"user\", \"content\": \"calculate 1+1\"}],\n    tools=[\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"run_code\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"code\": {\"type\": \"string\"},\n                        \"lang\": {\"type\": \"string\"},\n                    },\n                },\n            },\n        }\n    ],\n)\n\n\nif response.choices[0].message.tool_calls:\n    args = json.loads(response.choices[0].message.tool_calls[0].function.arguments)\n    print(\"args\", args)\n    result = run_code(**args)\n    print(result['outputs'][0]['text'])\n```\n\n### MiniMax Integration\n\nMiniMax provides an OpenAI-compatible API, so you can use the same `openai` SDK with a different `base_url`:\n\n```python\nfrom openai import OpenAI\nfrom agent_sandbox import Sandbox\nimport json\n\nclient = OpenAI(\n    api_key=\"your_minimax_api_key\",\n    base_url=\"https:\u002F\u002Fapi.minimax.io\u002Fv1\",\n)\nsandbox = Sandbox(base_url=\"http:\u002F\u002Flocalhost:8080\")\n\n\ndef run_code(code, lang=\"python\"):\n    if lang == \"python\":\n        return sandbox.jupyter.execute_code(code=code).data\n    return sandbox.nodejs.execute_code(code=code).data\n\n\nresponse = client.chat.completions.create(\n    model=\"MiniMax-M2.7\",\n    messages=[{\"role\": \"user\", \"content\": \"calculate 1+1\"}],\n    tools=[\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"run_code\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"code\": {\"type\": \"string\"},\n                        \"lang\": {\"type\": \"string\"},\n                    },\n                },\n            },\n        }\n    ],\n    temperature=0.01,  # MiniMax requires temperature > 0\n)\n\n\nif response.choices[0].message.tool_calls:\n    args = json.loads(response.choices[0].message.tool_calls[0].function.arguments)\n    result = run_code(**args)\n    print(result.outputs[0].text)\n```\n\nSee the full [minimax-integration example](examples\u002Fminimax-integration) for more details.\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## 📄 License\n\nAIO Sandbox is released under the [Apache License 2.0](LICENSE).\n\n## 🙏 Acknowledgments\n\nBuilt with ❤️ by the Agent Infra team. Special thanks to all contributors and the open-source community.\n\n## 📞 Support\n\n- 📖 [Documentation](https:\u002F\u002Fsandbox.agent-infra.com)\n- 💬 [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\u002Fdiscussions)\n- 🐛 [Issue Tracker](https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\u002Fissues)\n\n---\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Ready to revolutionize your AI development workflow?\u003C\u002Fstrong>\u003Cbr\u002F>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\">⭐ Star us on GitHub\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fsandbox.agent-infra.com\">📚 Read the Docs\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagent-infra\u002Fsandbox\u002Fissues\">🐛 Report Issues\u003C\u002Fa>\n\u003C\u002Fp>\n","AIO Sandbox 是一个集成了浏览器、Shell、文件系统、MCP 操作和 VSCode 服务器的全功能 AI 代理沙箱环境，封装于单一 Docker 容器中。其核心功能包括提供统一且安全的执行环境，支持多工具集成如网页浏览、终端操作、文件管理以及代码开发等，基于云原生轻量级沙箱技术构建。特别适用于需要在隔离环境中测试或运行 AI 代理及应用程序的场景，例如教育、研究与开发等领域。",2,"2026-06-11 03:40:35","high_star"]