Skip to content

Sandboxes

OpenMA treats the execution environment as a replaceable backend. A Session keeps the same Managed Agents API shape no matter which driver provides its compute; the Managed Runtime Host owns the lifecycle, /workspace, outputs, and fencing on top.

This page maps the landscape: seven classes of agent execution environment, and the OpenMA drivers that implement each. Every conformance claim below is generated from the machine-readable table in packages/managed-runtime-host/src/provider-conformance.ts (MANAGED_RUNTIME_PROVIDER_CONFORMANCE).

Compute on the same host (or host cluster) as the control plane, no external sandbox service.

DriverWhat it is
node-dockerpackages/managed-runtime-node — a Docker CLI adapter (docker create, exec, rm). The host’s composition manages the container lifecycle.
liteboxSANDBOX_PROVIDER=litebox (alias boxlite) — an embedded BoxLite microVM on the host via sandbox-adapter-litebox. Host-local retained boxes.
boxrunSANDBOX_PROVIDER=boxrun — BoxLite through the official REST client (sandbox-adapter-boxrun).
subprocessTest-only local-subprocess adapter. Rejected outside NODE_ENV=test; the production server fails closed rather than run agent commands on the API host.

Pick this when you want a fully self-hosted box with no third-party dependency — at the cost of weaker isolation (containers share the host kernel) and no suspend/resume on the plain Docker driver.

Dedicated dev-box platforms that keep a named sandbox alive between turns and can suspend and resume it.

DriverService
e2bE2B sandboxes. Provider suspend/resume plus a provider memory snapshot (still not an OpenMA checkpoint).
daytonaDaytona workspaces: stable names, ownership labels, stop/start, portable filesystem snapshots, activity-renewal lease.
litebox / boxrunSee class 1 — BoxLite retained boxes also implement suspend/resume, but their storage is best-effort, host-local.

Pick this when you want long-lived, resumable dev boxes without operating Kubernetes.

On-demand sandbox APIs that bill per second and keep a durable filesystem per sandbox.

DriverServiceNotes
modalModal sandboxesMounts a pre-created Volume v2 session subpath at /workspace, syncs before detach, recreates compute over the durable volume.
spritesFly SpritesProvider-persistent ext4 filesystem, automatic pause/wake, native network policy.
vercelVercel SandboxPersistent named sandbox with automatic snapshot restore. Its deny-by-default firewall is a provider feature, not OpenMA credential egress. ama_worker lane only.
blaxelBlaxelStable Session identity, archive/unarchive retained filesystem. Its native proxy firewall and secret injection are provider features, not OpenMA credential egress — workspace durability is best-effort.
superserveSuperserveRetained pause/resume that preserves processes and files, token-rotating reconnect. Its provider-side secret proxy is a provider feature, not OpenMA credential egress.

Pick this when you want zero-ops, pay-per-use compute with per-sandbox durable storage.

Sandboxed containers that run next to the Cloudflare control plane.

DriverWhat it is
cloudflarepackages/managed-runtime-cloudflare — Cloudflare Workers Containers. The only driver whose credential egress is enforced: the sandbox can only reach the OpenMA egress proxy (credentialMode: "live", intercepted protocols http/https).
cloudflare-bridgepackages/managed-runtime-cloudflare-bridge — a Node control plane reaching an operator-deployed official Cloudflare Sandbox Bridge over HTTP. ama_worker lane only.

Pick this when credential interception is a hard requirement, or when you are already deploying on Cloudflare. No suspend/resume on either driver.

A Kubernetes SandboxClaim resolved by the cluster’s agent-sandbox controller.

packages/environment-dispatch-gke implements the poll_unacked_then_dispatch strategy for GKE: the dispatcher reaps stale SandboxClaims, binds one warm pod from the configured warmPool (a real K8s agent-sandbox warm pool — the only warm-pool integration that exists in code today), and lets the in-pod runtime take over Work heartbeats.

Pick this when you already run Kubernetes and want sandbox lifetime owned by a cluster controller.

A VM per session, launched on demand.

packages/environment-activation-aws implements the acquire_then_session_poll strategy: a durable activation-intent queue drives an AwsMicrovmLauncherPort, and the in-VM worker polls, claims, heartbeats, and stops Work itself. A VM created after ownership loss is reaped as an orphan.

A general warm-pool / fork model across providers is planned, not implemented.

environment: { type: "none" } creates a sandbox-free session — the agent runs on the host without tool isolation. Hosted OpenMA and the Node server support it. Useful for chat-only agents and lightweight tool use; see the README’s sandbox-free session example.

The source of truth is MANAGED_RUNTIME_PROVIDER_CONFORMANCE. Every managed-runtime driver below advertises hardTerminate: supported, orphanReap: host-managed, and runtimeCheckpoints: [] — there is no process-memory checkpoint/restore on any driver.

DriverLanesSuspend/resumeWorkspaceCredential egress
node-dockerama_worker, openma_supervisedunsupporteddurableunsupported (oma-vault env proxy is advisory)
cloudflareama_worker, openma_supervisedunsupporteddurableenforced — live, http/https
cloudflare-bridgeama_workerunsupporteddurableunsupported
e2bama_worker, openma_supervisedsupporteddurableunsupported
daytonaama_worker, openma_supervisedsupporteddurableunsupported
liteboxama_worker, openma_supervisedsupportedbest_effortunsupported
boxrunama_worker, openma_supervisedsupportedbest_effortunsupported
blaxelama_worker, openma_supervisedsupportedbest_effortunsupported
spritesama_worker, openma_supervisedsupporteddurableunsupported
vercelama_workersupporteddurableunsupported
modalama_worker, openma_supervisedsupporteddurableunsupported
superserveama_worker, openma_supervisedsupporteddurableunsupported

Notable sandboxPortFacts per driver (what the raw adapter can and cannot do):

DriverHasLacks
node-dockerduplex_process, workspace_file_ioprovider_suspend_resume
cloudflareduplex_process, workspace_backup, session_output_mountruntime_scoped_resume, process_memory_checkpoint
cloudflare-bridgehttp_bridge, argv_sse_process, workspace_file_io, workspace_tar_checkpointinteractive_stdin_without_pty, provider_lease, process_memory_checkpoint
e2bduplex_process, provider_suspend_resume, provider_memory_snapshotprocess_memory_checkpoint
daytonaprovider_activity_lease, stable_name_with_ownership_labels, retained_filesystem_stop_start, portable_filesystem_snapshot, duplex_session_processprocess_memory_checkpoint, durable_output_mount
liteboxstable_get_or_create, detached_retained_filesystem, duplex_process, native_network_allowlist, native_secret_substitutionportable_workspace_checkpoint, process_memory_checkpoint
boxrunofficial_boxlite_rest_client, stable_get_or_create, detached_retained_filesystem, duplex_processportable_workspace_checkpoint, process_memory_checkpoint
blaxelstable_name_external_id_and_ownership_labels, archive_unarchive_retained_filesystem, duplex_named_process, native_proxy_firewall_and_secret_injection, optional_persistent_volumeportable_workspace_checkpoint, process_memory_checkpoint
spritesstable_name_and_ownership_labels, persistent_ext4_filesystem, automatic_pause_and_wake, duplex_process, native_network_policyportable_workspace_checkpoint, process_memory_checkpoint
vercelstable_name_and_ownership_tags, persistent_filesystem_with_automatic_snapshot_restore, detached_process_logs, deny_by_default_network_policy, path_scoped_header_transform_and_forward_proxystreaming_process_stdin, portable_workspace_checkpoint, process_memory_checkpoint
modalstable_name_and_ownership_tags, session_scoped_volume_v2_subpath, volume_sync_before_detach, duplex_process, native_domain_and_cidr_allowlist, compute_recreate_over_durable_volumeportable_workspace_checkpoint, stable_process_memory_checkpoint
superservestable_name_and_ownership_metadata, pause_resume_preserves_processes_and_files, transparent_token_rotation_and_auto_resume, duplex_process, deny_by_default_network_policy, provider_side_secret_proxy_and_auditportable_workspace_checkpoint, stable_process_memory_checkpoint
  1. Decide whether credential interception is a hard requirement. If it is, the choice today is the cloudflare driver (or an operator-injected CredentialEgressPort on another driver).
  2. Decide whether sessions must suspend and resume with retained compute. That rules out node-docker, cloudflare, and cloudflare-bridge.
  3. Decide how durable the workspace must be. litebox, boxrun, and blaxel are best-effort; the rest are durable.
  4. Match the remaining drivers to your infrastructure: Docker host, a dev-box service, a serverless sandbox API, Cloudflare, GKE, or AWS VMs.

Per-driver setup guides: