Use when navigating the codebase for the first time, adding a new client method, adding a new container handler/service, or understanding how a request flows from Worker through the Sandbox DO into the container. Covers the three-layer architecture, client pattern, container runtime structure, and monorepo layout. (project)
85
77%
Does it follow best practices?
Impact
100%
1.33xAverage score across 3 eval scenarios
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./.agents/skills/architecture/SKILL.md@cloudflare/sandbox (packages/sandbox/) — Public SDK published to npm
Sandbox class: Durable Object that manages the container lifecycleCommandClient, FileClient, ProcessClient, …)CodeInterpreter: high-level API for Python/JS with structured outputsproxyToSandbox(): request handler for preview URL routing@repo/shared (packages/shared/) — Internal shared utilities
packages/shared/src/errors/) and logging@repo/sandbox-container (packages/sandbox-container/) — Container runtime
core/container.tsPrimary control path:
Worker
→ Sandbox DO (packages/sandbox)
→ ContainerControlClient (packages/sandbox/src/container-control/)
→ capnweb over /rpc WebSocket
→ SandboxControlAPI (packages/sandbox-container/src/control-plane/)
→ container services
→ Shell commands / filesystemRoute-based compatibility path:
Worker
→ Sandbox DO (packages/sandbox)
→ SandboxClient / clients/transport
→ Container HTTP API on port 3000 (packages/sandbox-container)
→ Router / handlers
→ container services
→ Shell commands / filesystemErrors flow back the same path: container → Sandbox DO → Worker, using the custom error classes in packages/shared/src/errors/ keyed by the ErrorCode enum.
The primary Sandbox Durable Object to container control path is the container-control/control-plane path:
packages/sandbox/src/container-control/packages/sandbox-container/src/control-plane//rpc WebSocket routeControl-channel/transport-layer capabilities belong in this path. Treat capnweb/RPC as the current implementation detail, not the architectural boundary.
The shared @repo/shared SandboxAPI interface remains named SandboxAPI because it defines the current control API contract used by both sides.
packages/sandbox/src/clients/)packages/sandbox/src/clients/ and packages/sandbox/src/clients/transport/ implement the HTTP and custom WebSocket route-based compatibility API. Maintain these for compatibility, debugging, local development, fallback behavior, and bug fixes, but do not add new control-plane capabilities there by default.
The route-based client pattern is:
BaseHttpClient — abstract route-based HTTP/WebSocket client with shared request/response handlingSandboxClient — compatibility aggregator that exposes all specialized route-based clientsCommandClient — exec / execStreamFileClient — read, write, list, deleteProcessClient — start, stop, list, signalPortClient — expose / preview URLsGitClient — clone, checkout, statusUtilityClient — ping, metadataInterpreterClient — code interpreter sessionsWhen maintaining route-based compatibility, add or extend specialized clients under packages/sandbox/src/clients/. DO-to-container control capabilities belong in packages/sandbox/src/container-control/ and packages/sandbox-container/src/control-plane/.
packages/sandbox-container/src/)core/container.ts) — manages service lifecycle and wiringcontrol-plane/) — primary container-side API called by the Sandbox DOhandlers/) — route-based compatibility handlers, thin layer that parses requestsservices/) — business logic (CommandService, FileService, ProcessService, …)managers/) — stateful coordinators (ProcessManager, PortManager)Entry point: packages/sandbox-container/src/index.ts starts a Bun HTTP server on port 3000.
When adding a new container control operation:
services/ for the business logic.packages/sandbox-container/src/control-plane/.packages/sandbox/src/container-control/.Only add a route handler in handlers/ and a route-based SDK client in packages/sandbox/src/clients/ when maintaining HTTP/WebSocket compatibility.
Uses npm workspaces + Turbo:
packages/sandbox — main SDK package (published)packages/shared — shared types and utilities (internal)packages/sandbox-container — container runtime (internal, bundled into image)examples/ — working example projectstooling/ — shared TypeScript configsturbo.json orchestrates dependency-aware builds.
*.yourdomain.com); .workers.dev does not support the required subdomain patterns.The container runtime uses Ubuntu 22.04 with:
When modifying packages/sandbox/Dockerfile:
f03920a
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.