sandbox-agent/examples/cloudflare
Nathan Flurry 35840facdd SDK: Add ensureServer() for automatic server recovery
Add ensureServer() to SandboxProvider interface to handle cases where the
sandbox-agent server stops or goes to sleep. The SDK now calls this method
after 3 consecutive health-check failures, allowing providers to restart the
server if needed. Most built-in providers (E2B, Daytona, Vercel, Modal,
ComputeSDK) implement this. Docker and Cloudflare manage server lifecycle
differently, and Local uses managed child processes.

Also update docs for quickstart, architecture, multiplayer, and session
persistence; mark persist-* packages as deprecated; and add ensureServer
implementations to all applicable providers.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-15 20:29:12 -07:00
..
frontend Configure lefthook formatter checks (#231) 2026-03-10 23:03:11 -07:00
src Configure lefthook formatter checks (#231) 2026-03-10 23:03:11 -07:00
tests SDK: Add ensureServer() for automatic server recovery 2026-03-15 20:29:12 -07:00
.gitignore docs: add Cloudflare Sandbox SDK deployment guide (#57) 2026-02-03 02:15:34 -08:00
Dockerfile chore(release): update version to 0.3.0 2026-03-07 18:54:35 -08:00
package.json chore: simplify cloudflare compatibility (#191) 2026-02-23 19:31:54 +00:00
README.md fix(cloudflare): fix streaming responses 2026-02-25 01:39:27 -08:00
tsconfig.json docs: add Cloudflare Sandbox SDK deployment guide (#57) 2026-02-03 02:15:34 -08:00
vite.config.ts docs: add Cloudflare Sandbox SDK deployment guide (#57) 2026-02-03 02:15:34 -08:00
vitest.config.ts SDK: Add ensureServer() for automatic server recovery 2026-03-15 20:29:12 -07:00
wrangler.jsonc docs: add mcp and skill session config (#106) 2026-02-09 10:13:25 +00:00

Cloudflare Sandbox Agent Example

Deploy sandbox-agent inside a Cloudflare Sandbox.

Prerequisites

  • Cloudflare account with Workers Paid plan
  • Docker running locally for wrangler dev
  • ANTHROPIC_API_KEY or OPENAI_API_KEY for the coding agents

Setup

  1. Install dependencies:
pnpm install
  1. Create .dev.vars with your API keys:
echo "ANTHROPIC_API_KEY=your-api-key" > .dev.vars

Development

Start the development server:

pnpm run dev

Test the endpoint:

curl http://localhost:8787

Test prompt routing through the SDK with a custom sandbox fetch handler:

curl -N -X POST "http://localhost:8787/sandbox/demo/prompt" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"agent":"codex","prompt":"Reply with one short sentence."}'

The response is an SSE stream with events:

  • session.created
  • session.event
  • prompt.completed
  • done

Troubleshooting: only two events

If you only see:

  • outbound session/prompt
  • inbound prompt result with stopReason: "end_turn"

then ACP session/update notifications are not flowing. In Cloudflare sandbox paths this can happen if you forward AbortSignal from SDK fetch init into containerFetch(...) for long-lived ACP SSE requests.

Use:

const sdk = await SandboxAgent.connect({
  fetch: (input, init) =>
    sandbox.containerFetch(
      input as Request | string | URL,
      {
        ...(init ?? {}),
        // Avoid passing AbortSignal through containerFetch; it can drop ACP SSE updates.
        signal: undefined,
      },
      PORT,
    ),
});

Without session/update events, assistant text/tool deltas will not appear in UI streams.

Deploy

pnpm run deploy

Note: Production preview URLs require a custom domain with wildcard DNS routing. See Cloudflare Production Deployment for details.