🏖️ SandAgent

Server Sandbox Architecture

Cloud sandbox integration for production deployments

Why Server Sandboxes

AspectLocalSandboxServer Sandbox
IsolationLocal processIsolated containers
Access to user codePossibleFully isolated
Resource controlSharedDedicated CPU/memory
PersistenceLocal filesystemVolume or platform-managed
Best forDevelopmentProduction

High-Level Architecture

Client (Web UI / CLI)
    ↓ HTTP Stream
Server (Next.js API → SandAgent SDK → Sandbox Adapter)
    ↓ exec
Cloud Sandbox (sandagent CLI → Claude Agent SDK → /workspace)

Supported Providers

All providers implement the same SandboxAdapter contract.

E2B

import { E2BSandbox } from "@sandagent/sandbox-e2b";

const sandbox = new E2BSandbox({
  template: "sandagent-claude-researcher",
  timeout: 3600,
  name: "my-agent",
  workdir: "/workspace",
  env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
});

Daytona

import { DaytonaSandbox } from "@sandagent/sandbox-daytona";

const sandbox = new DaytonaSandbox({
  snapshot: "sandagent-claude-researcher:0.1.0",
  name: "my-agent",
  volumeName: "my-agent-volume",
  autoStopInterval: 15,
  workdir: "/workspace",
  env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
});

Sandock

import { SandockSandbox } from "@sandagent/sandbox-sandock";

const sandbox = new SandockSandbox({
  image: "sandockai/sandock-code:latest",
  memoryLimitMb: 2048,
  cpuShares: 2,
  workdir: "/workspace",
  env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
});

SDK Integration Example

import { createSandAgent } from "@sandagent/sdk";
import { E2BSandbox } from "@sandagent/sandbox-e2b";
import { streamText } from "ai";

const sandbox = new E2BSandbox({
  template: "sandagent-claude-researcher",
  workdir: "/workspace",
  env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
});

const sandagent = createSandAgent({ sandbox });

const result = streamText({
  model: sandagent("claude-sonnet-4-20250514"),
  prompt: "Write a Python crawler and run it",
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

Troubleshooting

IssueCauseFix
Invalid API keyMissing provider keyCheck env vars
Template not foundNot deployedDeploy with make e2b/daytona
TimeoutLong-running taskIncrease timeout

On this page