Examples
This section provides practical examples and integration guides for using AIO Sandbox in real-world scenarios.
Quick Examples
Terminal Integration
Learn how to integrate the WebSocket terminal into your applications:
Browser Automation
Explore browser automation capabilities:
Agent Integration
Build AI agents with AIO Sandbox:
Integration Patterns
Docker Compose Setup
version: '3.8'
services:
aio-sandbox:
image: ghcr.io/agent-infra/sandbox:v1
ports:
- "8080:8080"
volumes:
- sandbox_data:/workspace
restart: unless-stopped
volumes:
sandbox_data:
Kubernetes Deployment
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: sandbox
image: ghcr.io/agent-infra/sandbox:v1
ports:
- containerPort: 8080
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1000m"
---
apiVersion: v1
kind: Service
metadata:
name: aio-sandbox-service
spec:
selector:
app: aio-sandbox
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
SDK Examples
Python SDK
Install the Python SDK for AIO Sandbox:
Basic Configuration
Import and configure the Python client:
from aio_sandbox import AioClient
import asyncio
# Initialize the client
client = AioClient(
base_url="http://localhost:8080", # AIO Sandbox URL
timeout=30.0, # Request timeout in seconds
retries=3, # Number of retry attempts
retry_delay=1.0 # Delay between retries
)
Shell Operations
Execute shell commands and manage sessions:
async def shell_example():
# Execute a simple command
result = await client.shell.exec(command="ls -la")
if result.success:
print(f"Output: {result.data.output}")
print(f"Exit code: {result.data.exit_code}")
# Execute with session management
session_id = "my-session-1"
await client.shell.exec(
command="cd /workspace && pwd",
session_id=session_id
)
# Continue in the same session
result = await client.shell.exec(
command="ls",
session_id=session_id
)
# Asynchronous execution for long-running tasks
await client.shell.exec(
command="python long_script.py",
async_mode=True,
session_id=session_id
)
# View session output
view_result = await client.shell.view(session_id=session_id)
print(view_result.data.output)
# Run the example
asyncio.run(shell_example())
File Operations
Manage files and directories:
async def file_example():
# Write a file
await client.file.write(
file="/tmp/example.py",
content="""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.savefig('/tmp/plot.png')
print("Plot saved!")
""".strip()
)
# Read file content
content = await client.file.read(file="/tmp/example.py")
if content.success:
print(f"File content:\n{content.data.content}")
# List directory contents
files = await client.file.list(
path="/tmp",
recursive=True,
include_size=True
)
for file_info in files.data.files:
print(f"{file_info.name}: {file_info.size} bytes")
# Search in files
search_result = await client.file.search(
file="/tmp/example.py",
regex=r"import \w+"
)
if search_result.success:
for match in search_result.data.matches:
print(f"Line {match.line}: {match.content}")
# Find files by pattern
found_files = await client.file.find(
path="/tmp",
glob="*.py"
)
asyncio.run(file_example())
Code Execution
Execute Python and JavaScript code securely:
async def code_execution_example():
# Execute Python code in Jupyter kernel
jupyter_result = await client.jupyter.execute(
code="""
import pandas as pd
import numpy as np
# Create sample data
df = pd.DataFrame({
'x': np.random.randn(100),
'y': np.random.randn(100)
})
print(f"DataFrame shape: {df.shape}")
print(df.head())
""",
timeout=60,
session_id="data-analysis-session"
)
if jupyter_result.success:
print("Jupyter Output:")
for output in jupyter_result.data.outputs:
if output.output_type == "stream":
print(output.text)
elif output.output_type == "execute_result":
print(output.data.get("text/plain", ""))
# Execute Node.js code
nodejs_result = await client.nodejs.execute(
code="""
const fs = require('fs');
const path = require('path');
// Read package.json if it exists
try {
const packagePath = path.join(process.cwd(), 'package.json');
if (fs.existsSync(packagePath)) {
const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
console.log(`Project: ${pkg.name || 'Unknown'}`);
console.log(`Version: ${pkg.version || 'Unknown'}`);
} else {
console.log('No package.json found');
}
} catch (error) {
console.error('Error:', error.message);
}
""",
timeout=30
)
if nodejs_result.success:
print(f"Node.js Output: {nodejs_result.data.stdout}")
asyncio.run(code_execution_example())
MCP Integration
Work with Model Context Protocol services:
async def mcp_example():
# List available MCP servers
servers = await client.mcp.list_servers()
print("Available MCP servers:", servers.data)
# Get tools from a specific server
browser_tools = await client.mcp.list_tools(server_name="browser")
for tool in browser_tools.data.tools:
print(f"Tool: {tool.name}")
print(f"Description: {tool.description}")
# Execute a tool
screenshot_result = await client.mcp.execute_tool(
server_name="browser",
tool_name="screenshot",
arguments={
"url": "https://example.com",
"width": 1920,
"height": 1080
}
)
if screenshot_result.success:
# Save screenshot data
await client.file.write(
file="/tmp/screenshot.png",
content=screenshot_result.data.content[0].data, # Base64 image data
append=False
)
asyncio.run(mcp_example())
Error Handling and Best Practices
async def robust_example():
try:
# Always use context managers for resource cleanup
async with AioClient("http://localhost:8080") as client:
# Set up error handling
result = await client.shell.exec("potentially-failing-command")
if not result.success:
print(f"Command failed: {result.message}")
if hasattr(result, 'error_code'):
print(f"Error code: {result.error_code}")
# Check sandbox status
status = await client.sandbox.get_context()
print(f"Sandbox uptime: {status.data.uptime}")
print(f"Available packages: {len(status.data.packages)}")
except Exception as e:
print(f"Connection error: {e}")
asyncio.run(robust_example())
Node.js SDK
To install the SDK, use the following command:
npm install @agent-infra/sandbox
Basic Configuration
Start by importing the SDK and configuring the client:
import { AioClient } from "@agent-infra/sandbox";
const client = new AioClient({
baseUrl: `https://{aio.sandbox.example}`, //The Url and Port should consistent with the Aio Sandbox
timeout: 30000, // Optional: request timeout in milliseconds
retries: 3, // Optional: number of retry attempts
retryDelay: 1000, // Optional: delay between retries in milliseconds
});
Shell Execution
Execute shell commands within the sandbox:
const response = await client.shellExec({
command: "ls -la",
});
if (response.success) {
console.log("Command Output:", response.data.output);
} else {
console.error("Error:", response.message);
}
// Asynchronous rotation training results, suitable for long-term tasks
const response = await client.shellExecWithPolling({
command: "ls -la",
maxWaitTime: 60 * 1000,
});
File Management
List files in a directory:
const fileList = await client.fileList({
path: "/home/gem",
recursive: true,
});
if (fileList.success) {
console.log("Files:", fileList.data.files);
} else {
console.error("Error:", fileList.message);
}
Jupyter Code Execution
Run Jupyter notebook code:
const jupyterResponse = await client.jupyterExecute({
code: "print('Hello, Jupyter!')",
kernel_name: "python3",
});
if (jupyterResponse.success) {
console.log("Output:", jupyterResponse.data);
} else {
console.error("Error:", jupyterResponse.message);
}
Next Steps
Ready to implement these patterns? Choose your path:
For additional support: