--- title: "Quickstart" description: "Start the server and send your first message." icon: "rocket" --- ```bash npx skills add rivet-dev/skills -s sandbox-agent ``` ```bash bunx skills add rivet-dev/skills -s sandbox-agent ``` Each coding agent requires API keys to connect to their respective LLM providers. ```bash export ANTHROPIC_API_KEY="sk-ant-..." export OPENAI_API_KEY="sk-..." ``` ```typescript import { Sandbox } from "@e2b/code-interpreter"; const envs: Record = {}; if (process.env.ANTHROPIC_API_KEY) envs.ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY; if (process.env.OPENAI_API_KEY) envs.OPENAI_API_KEY = process.env.OPENAI_API_KEY; const sandbox = await Sandbox.create({ envs }); ``` ```typescript import { Daytona } from "@daytonaio/sdk"; const envVars: Record = {}; if (process.env.ANTHROPIC_API_KEY) envVars.ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY; if (process.env.OPENAI_API_KEY) envVars.OPENAI_API_KEY = process.env.OPENAI_API_KEY; const daytona = new Daytona(); const sandbox = await daytona.create({ snapshot: "sandbox-agent-ready", envVars, }); ``` ```bash docker run -p 2468:2468 \ -e ANTHROPIC_API_KEY="sk-ant-..." \ -e OPENAI_API_KEY="sk-..." \ rivetdev/sandbox-agent:0.3.1-full \ server --no-token --host 0.0.0.0 --port 2468 ``` Use `sandbox-agent credentials extract-env --export` to extract your existing API keys (Anthropic, OpenAI, etc.) from local Claude Code or Codex config files. Use the `mock` agent for SDK and integration testing without provider credentials. For per-tenant token tracking, budget enforcement, or usage-based billing, see [LLM Credentials](/llm-credentials) for gateway options like OpenRouter, LiteLLM, and Portkey. Install and run the binary directly. ```bash curl -fsSL https://releases.rivet.dev/sandbox-agent/0.3.x/install.sh | sh sandbox-agent server --no-token --host 0.0.0.0 --port 2468 ``` Run without installing globally. ```bash npx @sandbox-agent/cli@0.3.x server --no-token --host 0.0.0.0 --port 2468 ``` Run without installing globally. ```bash bunx @sandbox-agent/cli@0.3.x server --no-token --host 0.0.0.0 --port 2468 ``` Install globally, then run. ```bash npm install -g @sandbox-agent/cli@0.3.x sandbox-agent server --no-token --host 0.0.0.0 --port 2468 ``` Install globally, then run. ```bash bun add -g @sandbox-agent/cli@0.3.x # Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()). bun pm -g trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64 sandbox-agent server --no-token --host 0.0.0.0 --port 2468 ``` For local development, use `SandboxAgent.start()` to spawn and manage the server as a subprocess. ```bash npm install sandbox-agent@0.3.x ``` ```typescript import { SandboxAgent } from "sandbox-agent"; const sdk = await SandboxAgent.start(); ``` For local development, use `SandboxAgent.start()` to spawn and manage the server as a subprocess. ```bash bun add sandbox-agent@0.3.x # Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()). bun pm trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64 ``` ```typescript import { SandboxAgent } from "sandbox-agent"; const sdk = await SandboxAgent.start(); ``` If you're running from source instead of the installed CLI. ```bash cargo run -p sandbox-agent -- server --no-token --host 0.0.0.0 --port 2468 ``` Binding to `0.0.0.0` allows the server to accept connections from any network interface, which is required when running inside a sandbox where clients connect remotely. Tokens are usually not required. Most sandbox providers (E2B, Daytona, etc.) already secure networking at the infrastructure layer. If you expose the server publicly, use `--token "$SANDBOX_TOKEN"` to require authentication: ```bash sandbox-agent server --token "$SANDBOX_TOKEN" --host 0.0.0.0 --port 2468 ``` Then pass the token when connecting: ```typescript import { SandboxAgent } from "sandbox-agent"; const sdk = await SandboxAgent.connect({ baseUrl: "http://your-server:2468", token: process.env.SANDBOX_TOKEN, }); ``` ```bash curl "http://your-server:2468/v1/health" \ -H "Authorization: Bearer $SANDBOX_TOKEN" ``` ```bash sandbox-agent --token "$SANDBOX_TOKEN" api agents list \ --endpoint http://your-server:2468 ``` If you're calling the server from a browser, see the [CORS configuration guide](/cors). Supported agent IDs: `claude`, `codex`, `opencode`, `amp`, `pi`, `cursor`, `mock`. To preinstall agents: ```bash sandbox-agent install-agent --all ``` If agents are not installed up front, they are lazily installed when creating a session. ```typescript import { SandboxAgent } from "sandbox-agent"; const sdk = await SandboxAgent.connect({ baseUrl: "http://127.0.0.1:2468", }); const session = await sdk.createSession({ agent: "claude", sessionInit: { cwd: "/", mcpServers: [], }, }); console.log(session.id); ``` ```typescript const result = await session.prompt([ { type: "text", text: "Summarize the repository and suggest next steps." }, ]); console.log(result.stopReason); ``` ```typescript const off = session.onEvent((event) => { console.log(event.sender, event.payload); }); const page = await sdk.getEvents({ sessionId: session.id, limit: 50, }); console.log(page.items.length); off(); ``` Open the Inspector UI at `/ui/` on your server (for example, `http://localhost:2468/ui/`) to inspect sessions and events in a GUI. Sandbox Agent Inspector ## Next steps Configure in-memory, Rivet Actor state, IndexedDB, SQLite, and Postgres persistence. Deploy your agent to E2B, Daytona, Docker, Vercel, or Cloudflare. Use the latest TypeScript SDK API.