New:Upstash has a remote MCP server
·27 min read

AI Agent Sandboxes Compared: 15 Providers on Isolation, Persistence, Agent Tooling, and Cost (2026)

Ali Tarık ŞahinAli Tarık ŞahinSoftware Engineer @Upstash
https://upstash.com/blog/ai-agent-sandbox-providers-compared-2026
Summary

A side-by-side comparison of 15 AI agent sandboxes in September 2026, checked against each provider's docs and pricing pages (sources at the end).

  • The short answer. For coding agents and per-user agents that wait on a model most of the time, Upstash Box is the pick: a built-in agent, git-to-PR helpers, a managed browser, cron schedules, secrets kept off the box, active-CPU billing with memory free, no platform fee. Pick something else if you need a separate kernel per tenant, a GPU, or your own cloud.
  • Billing is the biggest hidden difference. Most providers bill wall-clock CPU and memory, while Box, Vercel, Cloudflare, Sprites, and Tensorlake meter CPU by actual use and only Box also leaves memory free. An hour of agent work that mostly waits is about $0.017 on Box, and 2.6x to 19x that on the other providers in the worked example below.
  • Isolation is three designs, not a ranking. Hardware VMs with their own kernel (E2B, Vercel, Tensorlake, Sprites, Koyeb, Blaxel, Namespace, Kata on Northflank), gVisor's userspace kernel (Modal, Beam), and hardened containers (Box, Daytona by default).

This post compares 15 popular AI agent sandbox providers side by side, from the same angles for each: capabilities, agent-native features, deployment, developer experience, and cost. Every row has a source at the end.

At a glance

ProviderIsolationCold start (claimed)Billing basisIdle costSession capWhat survives a pauseAgent built in
Upstash BoxContainer: own fs, process tree, network namespace~2.5s create to first command, ~0.4s resume (measured by us from Europe)Active CPU only, memory free$0 compute, $0.10/GB-mo storageNone (auto-pause, keep-alive, or 3-day ephemeral TTL)Filesystem, env, git stateYes: Claude Code, Codex, OpenCode, Cursor, custom
E2BFirecracker microVM~150ms (case study)Wall-clock vCPU + RAM$0 paused1h Hobby, 24h Pro; pause resets itFilesystem + memory + processesNo (docs for running agents inside)
DaytonaContainer by default; VM and Windows classesunder 90msWall-clock vCPU + RAMDisk only when stoppedNone documentedFilesystem (containers), memory (VMs)No (guides)
ModalgVisor (VM option)Sub-secondWall-clock, max(request, actual)No pause state24hNothing; snapshots insteadNo (examples)
Vercel SandboxFirecracker microVM"Milliseconds"Active CPU + provisioned memorySnapshot storage $0.08/GB-mo45m Hobby, 24h Pro per session; unbounded across sessionsFilesystem, auto-snapshot on stop and auto-resume on the next callCLIs preinstalled, no run API
Cloudflare SandboxContainer in its own VM1–3sActive CPU + provisioned memory, while awake$0 compute; R2 for backupsNone; sleeps after 10m idleNothing by default; directory backups to R2No
RunloopVM on custom hypervisor"A few seconds" (docs)Wall-clock CPU + RAMStorage only when suspended (Pro plan)1h default, configurableDisk onlyPartly: Broker runs and manages an agent process
BlaxelmicroVM~25ms resume from standbyMemory-based (GB-s) while active$0 compute, $0.20/GB-mo snapshotNone; 7–30d retention on low tiersFilesystem + memory + processesNo
NamespacemicroVM on own bare metal0.8s to agent connectedWall-clock units (1 vCPU + 2 GB per minute)Stopped: no units3h / 5h / 24h by planFilesystem (devbox volumes)No
BeamgVisor + runc1–3sWall-clock CPU + RAMNo pause; billed until TTLNoneNothing in place; fs and memory snapshotsNo
TensorlakeFirecracker / Cloud Hypervisor"A few hundred ms"Active CPU (allocated-vCPU fallback) + RAM + diskSnapshot storage $0.07/GB-mo2h Free, 24h Credits, unlimited ProFilesystem + memory + processesNo
NorthflankKata + Cloud Hypervisor, or gVisor"Under 1 second"Wall-clock vCPU + RAMVolume storage onlyNoneFilesystem (volumes)No
FreestyleKVM Linux VM~65ms provisionWall-clock vCPU + RAMStorage onlyNoneFilesystem on stop; memory and processes via snapshotNo
Fly SpritesFirecracker microVM1–2s create; 100–500ms warm wakeActual CPU and RAM use, while active$0 computeNoneFilesystem (100 GB); memory while warmCLIs preinstalled, no run API
KoyebmicroVM on bare metalunder 250msWall-clock per instance size$0 when scaled to zero24h auto-delete maxNothing (ephemeral)CLIs preinstalled, no run API

What each column is telling you:

Isolation is three designs, not a ranking: a VM with its own kernel, gVisor's userspace kernel, or a hardened container. Most providers run a VM and a box is a container, so this is where Box is the weaker choice if you need a kernel per tenant.

Cold start is what vendors lead with and what matters least, since booting is a fraction of the time a task spends cloning, installing, and calling a model. The figures are not like for like: they mix create-to-first-command, resume-from-standby, and time-until-an-agent-connects, and each is the vendor's own claim except the Box row, which we measured with five runs from Europe.

Billing basis is the one that surprises people at scale. Wall-clock charges for every second the sandbox is up, including the minutes it waits on a model; active CPU charges only for what the code burns, and only Box also leaves memory free.

Idle cost is what you pay between sessions, usually storage for the saved disk. Providers with no pause state keep charging the full rate until the sandbox is deleted.

Session cap is easy to miss until it bites: an hour is fine for a code interpreter, wrong for a long task, and the longer cap is often a paid plan away. Seven of the fifteen, Box included, have no cap at all.

What survives a pause decides how you structure a session: filesystem only means restarting processes, memory as well means a loaded model is still there, nothing means starting from a snapshot each time. Box, E2B, Vercel, Blaxel, and Tensorlake are the ones built around pausing and coming back.

Agent built in separates platforms that run an agent behind an API you call with a prompt from those that only let you install one. "CLIs preinstalled" is the middle ground; Box and Runloop are the only two on the yes side.

Capabilities

ProviderSnapshot / forkCustom imagesEgress controlBuilt-in tooling
Upstash BoxDisk snapshots incl. agent config; fan out to N boxesNode, Python, Go, Ruby, Rust images; custom Docker images plannedOpen default; deny-all; domain + CIDR allow, CIDR deny; changeable on a running box; private ranges always blockedCoding agent, headless Chromium with AI actions and recordings, git with createPR, cron schedules, authenticated public URLs, PTY sessions, SSH, per-run cost and logs, skills and MCP servers for the agent, remote MCP server, CLI
E2BMemory + fs snapshots; fork() up to 100Any Docker image or DockerfileOpen default; allow/deny by domain, CIDR, IP (allow wins); runtime updates; header injection (beta)Code interpreter (Python, JS, R, Java, Bash), Desktop/VNC, cloud browsers, MCP Gateway, git integration, public URLs, webhooks
DaytonaDisk snapshots; VM snapshots with memory; experimental VM forkAny image, Dockerfile, declarative builderRestricted on Tiers 1–2, open on 3–4; CIDR (max 10) and domain (max 100) allowlists, block-allGit, LSP, PTY, MCP server, Computer Use desktop, VNC, SSH, signed preview URLs, audit logs, Windows VMs
ModalFs snapshots; memory snapshots alphaAny registry image or DockerfileOpen default; block-all, CIDR allowlist, domain allowlist (beta, 443 only)Tunnels, secrets, OIDC identity; Claude Code and OpenCode as examples
Vercel SandboxPersistent by default; disk snapshots; fork from snapshot; 30-day default expiry, configurable to indefiniteAny OCI image via Vercel registry, Dockerfile; managed imagesOpen default; deny-all; domain + CIDR allow, CIDR deny; live updates; credential brokeringPreinstalled opencode, Claude Code, Codex, pi; preview URLs; per-agent Linux users; persistent Drives (beta); Harbor evals
Cloudflare SandboxDirectory backups to R2 onlyDockerfile or Docker Hub image, 20 GB disk maxOpen default; disable internet; host allow/deny globs and CIDRs; HTTP/HTTPS only; secrets from the WorkerPersistent code interpreter, PTY, preview URLs and tunnels, bucket mounts
RunloopDisk snapshots, fan-outBlueprints (Dockerfile on Runloop base), Docker-in-DockerUnrestricted default; hostname allowlist; deny-all; no CIDR rulesPlaywright browser with live view, Ubuntu desktop, tunnels with bearer auth, MCP Hub, Agent Gateways, Broker, PTY, SSH, benchmarks and evals
BlaxelMemory + disk + process snapshots; forkDockerfile that embeds Blaxel's binary; 20+ templatesDomain allow/deny with wildcards; no CIDR; MITM secrets proxyMCP server per sandbox, codegen tools, preview URLs with custom domains, PTY, browser and Jupyter templates, cron via Batch Jobs
NamespaceMarketing mentions snapshot and clone; no SDK methodsDockerfile (Linux); managed macOS imagesOpt-in policies: BLOCK mode with domain allow rules, secret-header injection (needs deep packet inspection)SSH, exec, ingress URLs with custom domains, Docker, nested KVM, macOS and Windows machines
BeamFs + memory snapshots; forkAny registry image, DockerfileOpen default; block-all; CIDR allowlist (max 10); no domain rulesAuthenticated port URLs, fs and process APIs, Volumes, S3 mounts
TensorlakeFs or memory snapshots; clone from running or suspendedDockerfile, SDK image builder, any OCI imageOpen default; allow/deny by domain, IP, CIDR; air-gap modePublic URLs, PTY, VNC image, warm pools, durable workflows
NorthflankSnapshot API exists; semantics not documentedAny OCI imageOpen default; IP/CIDR/FQDN policies on BYOC onlyPublic DNS per port, exec API, cron jobs, databases and queues on the same platform
FreestyleMemory + disk snapshots; fork a running VM without pausingBase snapshots up to 64 vCPU / 128 GiB; custom snapshots; no Dockerfile baseDeny-by-default; allow rules only (CIDR, VM, VPC, port); no domain rulesstyle.dev domains with TLS, forward auth, SSH, PTY, VPCs, WireGuard
Fly SpritesDisk-only checkpoints, restore in place; no forkFixed Ubuntu imageUnrestricted default; optional DNS domain allowlist; private IPs blockedPreinstalled Claude, Gemini, Codex, Cursor CLIs; private-by-default URL; Connectors credential gateway; hosted remote MCP
KoyebNoneAny Docker image, private registriesBlock-all or IP/CIDR allowlist; open otherwiseDefault image with Codex, Gemini, OpenCode CLIs; expose_port URLs, TCP proxy

Snapshot / fork makes parallel work cheap: set up once, snapshot, then start ten sandboxes from that state. Whether it carries memory as well as disk decides whether those ten start warm or cold, and Box snapshots are disk-only but keep the agent configuration.

Custom images move setup to build time. Most providers take any Docker image or Dockerfile; Box offers per-runtime images plus snapshots today, with custom images planned.

Egress control is the column to read closely if the sandbox runs code you did not write. Almost every provider starts open, Freestyle is the only one that starts closed, and Box, E2B, Vercel, and Beam let you change the policy on a running sandbox.

Built-in tooling is the gap between a machine and a runtime. Most providers stop at a code interpreter; Box is at the other end, which the next section breaks down.

GPUs inside the sandbox: Modal, Daytona, Beam, Northflank, and Koyeb. Box, E2B, Blaxel, Namespace, and Sprites are CPU-only.

Agent-native features

A sandbox that only runs commands leaves you to build the agent loop, the git flow, the browser, the scheduler, and the secret handling yourself. These columns are what turn a sandbox into an agent runtime.

ProviderRun a coding agent with one callTyped outputScheduled runs in the sandboxSecrets kept off the sandboxManaged browserGit-to-PR helperMCP: control / tools
Upstash BoxYes: box.agent.run() with Claude Code, Codex, OpenCode, Cursor, or a custom harnessYes (Zod or Pydantic schema)Yes: box.schedule.exec and box.schedule.agent on a cronYes: Attach Headers, injected on the hostYes: headless Chromium, AI actions, recordings, live view, CDPYes: git.clone, commit, push, createPRControl: yes. Tools: yes
E2BNo (docs for Claude Code, Codex, OpenCode inside)NoNoYes: header injection via egress proxy (beta)Yes: cloud browsers, Desktop/VNCGit integration, no PR helperControl: no. Tools: yes (MCP Gateway)
DaytonaNo (guides)NoNoYes: placeholder substitution in an outbound proxy, with response scrubbingComputer Use / VNC onlyGit ops, no PR helperControl: yes. Tools: no
ModalNo (examples)NoNo (cron is for Functions)NoNoNoNo
Vercel SandboxCLIs preinstalled, no run APINoNoYes: credential brokering in the firewallNogit and gh in imageNo
Cloudflare SandboxNoNoNo (Cron Triggers are separate)Yes: handlers in the WorkerNoNoNo
RunloopPartly: Broker starts the agent process, orders turns, auto-resumes; you wire the event streamsNoNoYes: Agent Gateways and MCP HubYes: Playwright with live viewNoControl: yes (CLI MCP server). Tools: yes (MCP Hub)
BlaxelNoNoCron via Batch JobsYes: MITM proxy injectionVia templatesNoControl: yes. Tools: no
NamespaceNoNoNoYes: INJECT rules from Vault (needs deep packet inspection)NoNoNo
BeamNoNoPlatform @schedule, not per sandboxNoNoNoNo
TensorlakeNoNoNoNoVNC imageNoNo
NorthflankNoNoPlatform cron jobsNoNoNoNo
FreestyleNoNoNoNoNoNoNo
Fly SpritesCLIs preinstalled, no run APINoNoYes: Connectors gatewayNoNoControl: yes (hosted remote MCP). Tools: no
KoyebCLIs preinstalled, no run APINoNoNoNoNoNo

Run a coding agent with one call has three levels: you bring the agent, the CLIs are preinstalled and you parse stdout, or the platform runs the process for you. Only Box returns it as a method call with a typed result.

Typed output lets one agent's answer feed the next step without a parser in between. Box takes a Zod or Pydantic schema in the SDK and returns a validated object; elsewhere it comes from the agent or framework you run inside.

Scheduled runs in the sandbox suit agents that work on a cadence rather than on a request. Only Box has cron inside the sandbox; Blaxel, Beam, and Northflank schedule at the platform level.

Secrets kept off the sandbox matters because the obvious approach is the unsafe one: an environment variable is readable by the code the model just wrote. A host-side proxy that injects the credential keeps it out of reach, which Box does with Attach Headers.

Managed browser decides whether web work is a feature or a Chromium install you maintain. Box, E2B, and Runloop ship one; Daytona and Tensorlake give you a VNC desktop instead.

Git-to-PR helper is the difference between a finished task and a diff sitting in a container. Several providers wrap git operations, but only Box opens the pull request.

MCP is two questions in one heading: driving the sandbox from an MCP client, and giving the agent inside MCP tools. Box and Runloop are the only two that do both.

The practical test for this table is how much code a full task takes. Clone, branch, run the agent, commit, push, open the pull request, with the run's cost attached:

import { Agent, Box } from "@upstash/box"
 
const box = await Box.create({
  runtime: "node",
  agent: { harness: Agent.ClaudeCode, model: "anthropic/claude-fable-5" },
  git: { token: process.env.GITHUB_TOKEN },
  attachHeaders: { "api.stripe.com": { Authorization: `Bearer ${process.env.STRIPE_KEY}` } },
})
 
await box.git.clone({ repo: "https://github.com/your-org/your-repo", branch: "main" })
await box.cd("your-repo")
await box.git.exec({ args: ["checkout", "-b", "fix/null-token"] })
 
const run = await box.agent.run({ prompt: "Fix the null-token bug in src/auth.ts and add tests" })
 
await box.git.commit({ message: "fix: handle null token in auth" })
await box.git.push({ branch: "fix/null-token" })
const pr = await box.git.createPR({ title: "Fix null token bug", base: "main" })
 
console.log(pr.url, run.cost.totalUsd)

On providers without the git and agent helpers, the same flow is your own code around exec: shell out to git, stream the agent's output, parse it, then call the GitHub API yourself.

Deployment

ProviderHostingRegionsCompliance
Upstash BoxManaged; SDKs and CLI open sourceAWS us-east-1; regional requirements on EnterpriseSOC 2 for Upstash Redis on Pro and Enterprise (trust center); HIPAA covers Redis; both in progress for Box
E2BManaged on GCP; BYOC on AWS and GCP (Enterprise); Apache-2.0 open coreus-west1; EU and APAC on Pro+SOC 2 Type II; HIPAA BAA (Enterprise); GDPR DPA
DaytonaManaged shared and dedicated regions; BYOC; open-source repo unmaintained since June 2026us, euSOC 2 Type II, HIPAA, GDPR, ISO 27001
ModalManaged only19 narrow regions plus US/EU/AP; 1.15x–1.75x price multipliersSOC 2 Type II; HIPAA BAA (Enterprise)
Vercel SandboxManaged only; SDK Apache-2.019–20 regions, iad1 defaultSOC 2 Type II; Vercel-wide ISO 27001, HIPAA BAA, GDPR, PCI
Cloudflare SandboxManaged only; SDK Apache-2.0"Region: Earth", no selectionCloudflare-wide SOC 2 Type II, ISO 27001, PCI, HIPAA BAA
RunloopManaged; Enterprise deploy to VPCNot documentedSOC 2 Type II, HIPAA, GDPR
BlaxelManaged; bring-your-own-metal and private VPC interconnect, control plane stays managedOregon, Virginia, London, FrankfurtSOC 2, HIPAA ($250/mo add-on), ISO 27001
NamespaceManaged on own hardwareNot enumerated; residency on EnterpriseSOC 2 Type 2
BeamManaged; BYOC; self-host via Beta9 (AGPL-3.0)US default; "30+" claimedSOC 2 Type II; HIPAA BAA (Enterprise); GDPR DPA
TensorlakeManaged; BYOC on AWS, GCP, Azure, CoreWeave, Nebius, bare metalNot documentedSOC 2 Type 2; HIPAA BAA on Pro and above
NorthflankManaged; self-serve BYOC on AWS, GCP, Azure, OCI, CoreWeave, Nebius; bring your own KubernetesUS West/Central/East, EU West, Asia East; 600+ via BYOCSOC 2 Type 2; HIPAA BAA (Enterprise)
FreestyleManaged onlyNot documentedNot documented
Fly SpritesManaged onlyNearest Fly region, not selectableFly-wide SOC 2 Type 2; HIPAA BAA
KoyebManaged onlyFRA, WAS, SIN, TYO, PAR, aws-us-east-1, SFOISO 27001, SOC 2 (Enterprise)

Hosting rules providers out rather than ranking them. For your own cloud account the list is Northflank, E2B (Enterprise), Tensorlake, Beam, Daytona, and Blaxel; Box is managed-only.

Regions is the same kind of hard filter. If data has to stay in the EU it is E2B (Pro), Daytona, Modal, Vercel, Blaxel, and Koyeb; Box is us-east-1 only.

Compliance is where you read the scope rather than the badge. Most of these cells describe the parent company's certification, not an audit scoped to the sandbox.

Developer experience

ProviderSDKsDocumented framework integrationsConcurrency
Upstash BoxTypeScript, Python (sync and async), CLI, remote MCP serverVercel AI SDK, LangChain Deep Agents, Eve, TanStack, CrewAI and Pydantic AI (custom harness), Herdr, OpenClaw, Hermes10 Free; 1,000 Pay-as-you-go (soft); custom Enterprise
E2BPython, JS/TS, CLIOpenAI Agents SDK, Vercel AI SDK, LangChain Deep Agents, CrewAI, Mastra, Letta20 Hobby, 100 Pro, up to 1,100
DaytonaTypeScript, Python, Ruby, Go, Java, CLIOpenAI Agents SDK, LangChain, LangGraph, Vercel AI SDK, Mastra, Google ADK, MCPvCPU pools 10 → 500 by tier; 4 vCPU / 8 GB per sandbox
ModalPython; JS/TS and Go (beta)OpenAI Agents SDK, LangGraph, Claude Managed Agents100 Starter, 5,000 Team
Vercel SandboxTypeScript, Python, CLI, RESTVercel AI SDK, LangChain, OpenAI and Anthropic SDKs, TanStack AI, Claude Agent SDK10 Hobby, 10,000 Pro
Cloudflare SandboxTypeScript onlyOpenAI Agents SDK, Codex, Workers AI1,500 concurrent vCPU per account
RunloopPython, TypeScript, CLIOpenAI Agents SDK and Agents API, OpenCode, Browserbase, Claude Code via Broker3 on trial; paid caps not documented
BlaxelTypeScript, Python, Go, CLILangChain/LangGraph, OpenAI Agents SDK, Vercel AI SDK, CrewAI, Mastra, Pydantic AI10 Tier 0 up to 100k+
NamespaceGo, TypeScript, gRPC, CLIClaude Managed Agents, Cursor Cloud Agents, Devin32 / 64 / 160 vCPU pools
BeamPython, TypeScript (rc), CLILangChain example30 CPU Developer; 1,000 Team
TensorlakePython, TypeScript, CLIClaude Managed Agents, Harbor, OpenCode1 Free, 100 Credits, 1,000 Pro
NorthflankREST, CLI, JavaScript clientNot documentedUnlimited on pay-as-you-go
FreestyleTypeScript, CLINot documented10 Free, 40 Hobby, 400 Pro
Fly SpritesPython, JS/TS, Go, ElixirOpenAI Agents SDK, Google ADK, TanStack AI, OpenEnv, Claude Managed Agents, Cursor Cloud Agents20 to 2,000 active by plan; cold unlimited
KoyebPython, JS/TSClaude Agent SDK, Codex tutorials100 CPU Pro; 1,000 Scale

SDKs decide whether the sandbox fits your stack without a REST wrapper of your own. TypeScript and Python are near-universal; Cloudflare is TypeScript-only.

Documented framework integrations show how much glue the provider has already written and tested. The Vercel AI SDK, LangChain, and the OpenAI Agents SDK are the common ones; Northflank and Freestyle document none.

Concurrency is a plan limit rather than a technical one. Free tiers sit around 10 to 30 and paid ceilings vary by three orders of magnitude.

Cost

List prices, pay-as-you-go. Many providers have a plan with no monthly fee but gate features behind a paid one: E2B Pro ($150/mo) for 24h sessions, Runloop Pro ($250/mo) for suspend and resume, Namespace Team ($100/mo) for 5h instances, Tensorlake Pro ($250 per cycle, which includes $250 of usage) for the lower rates. Cloudflare needs the $5/mo Workers Paid plan. Freestyle's docs and pricing page disagree on whether persistent VMs need Hobby ($50/mo).

ProviderBilling basisCPUMemoryFree tierIdle cost
Upstash BoxActive core-hours only$0.10 / $0.20 / $0.40 per active CPU-hour for small (2 vCPU), medium (4), large (8)Free10 boxes, 5 CPU-h/mo, $1 LLM budget, no cardPaused: $0 compute, $0.10/GB-mo storage. Keep-alive flat $8 / $16 / $32 per month
E2BWall-clock per second$0.0504/vCPU-h$0.0162/GiB-h$100 one-time credit, 20 concurrent, 1h sessionsPaused: $0
DaytonaWall-clock per second$0.0504/vCPU-h$0.0162/GiB-h$200 creditStopped: disk only
ModalWall-clock, max(request, actual)~$0.142 per physical core-h (2 vCPU); 3x its Function rate~$0.024/GiB-h$30/mo creditNo pause state
Vercel SandboxActive CPU + provisioned memory$0.128/active vCPU-h$0.0212/GB-h5 active CPU-h, 420 GB-h, 10 concurrentStopped: snapshot storage only
Cloudflare SandboxActive CPU + provisioned memory and disk, while awake$0.072/vCPU-h$0.009/GiB-hNone on Free planSleeping: $0 compute
RunloopWall-clock per second$0.108/CPU-h$0.0252/GB-h$50 trial creditSuspended: storage only (Pro-only)
BlaxelMemory-based per second while activeNo vCPU line item$0.0414/GB-hUp to $200 credit, 10 concurrentStandby: $0 compute
NamespaceWall-clock per minute in 1 vCPU + 2 GB units~$0.09/unit-h overage, ~$0.06 prepaidIncluded in unit30-day trialStopped: no units
BeamWall-clock per second$0.135 per physical core-h (2 vCPU)$0.023/GiB-h$30/mo credit (per Beam's blog)No pause
TensorlakeActive CPU (allocated fallback); RAM and disk wall-clock$0.07/core-h Credits; $0.042 Pro$0.015/GB-h Credits; $0.009 Pro1 sandbox, 1 vCPU / 1 GB, 2h sessionsSuspended: snapshot storage only
NorthflankWall-clock per second$0.01667/vCPU-h$0.00833/GB-h2 free servicesScaled to zero: volume only
FreestyleWall-clock per second$0.04032/vCPU-h$0.0129/GiB-h200 vCPU-h, 400 GiB-h per month; persistent VMs listed on Free in the docs, paid-only on the pricing pagePaused: storage only
Fly SpritesActual CPU and RAM use, while active$0.07/CPU-h$0.04375/GB-h$30 trial creditWarm or cold: $0 compute
KoyebWall-clock per instance sizelarge (4 vCPU / 4 GB) $0.0576/hBundledNone for sandboxesScaled to zero: $0

CPU and memory are the per-core-hour and per-GB-hour rates, and billing basis and idle cost repeat from At a glance because they decide whether those rates apply all hour or only to the busy seconds. Free tier is usually a one-off credit, not a monthly allowance.

The rate card is the wrong thing to compare. Agent work comes in bursts: the CPU is busy for a few seconds per tool call and idle while the model thinks. What matters is what you pay for the idle time.

One hour on a 2 vCPU / 4 GB sandbox with about 10 core-minutes of real CPU use, usage charges only, relative to Box's ~$0.017:

ProviderFormulaCostvs Box
Upstash Box (small)0.167 core-h × $0.10~$0.0171x
Tensorlake0.167 × $0.07 + 4 × $0.015 (Credits); Pro 0.167 × $0.042 + 4 × $0.009; disk extra~$0.072 (Credits), ~$0.043 (Pro)4.3x, 2.6x
Koyeb (large; the 2 vCPU / 4 GB eco-large is $0.0288/h but not verified for sandboxes)1h × $0.0576~$0.0583.5x
Northflank2 × $0.01667 + 4 × $0.00833~$0.0674.0x
Cloudflare (standard-3, 2 vCPU / 8 GiB / 16 GB; custom shapes need 3 GiB per vCPU)0.167 × $0.072 + 8 × $0.009 + 16 × $0.000252~$0.0885.3x
Vercel Sandbox0.167 × $0.128 + 4 × $0.0212~$0.1066.4x
Freestyle2 × $0.04032 + 4 × $0.0129~$0.1327.9x
E2B, Daytona2 × $0.0504 + 4 × $0.0162~$0.1669.9x
Blaxel4 × $0.0414 if kept active; less with auto-standbyup to ~$0.166up to 9.9x
Namespace2 units × 60 min × $0.0015~$0.1810.8x
Fly Sprites0.167 × $0.07 + 4 × $0.04375 if all 4 GB are in use~$0.18711.2x
Beam1 physical core × $0.135 + 4 × $0.023~$0.22713.6x
Modal1 physical core × $0.142 + 4 × $0.024~$0.23814.3x
Runloop2 × $0.108 + 4 × $0.0252~$0.31719.0x

Examples, not quotes. Storage is excluded except where shown, as are egress and creation fees.

The spread is workload-shaped, so run the formulas on your own numbers before trusting the order. The more time the agent spends waiting on a model, the wider the gap between the two billing models gets. Saturate the CPU for the full hour and it mostly closes: Box, for instance, rises to about $0.20 and lands mid-table. A second thing the table hides is what you pay for the model itself, which every provider here leaves to you except Box, which meters it and includes a small monthly budget.

How to choose

Start with Upstash Box if you are building a coding agent, a per-user agent that lives for weeks, or any agent loop that waits on a model most of the time. It is the only row with every agent-native column filled in, it bills active CPU with memory free, and the free tier needs no card. Move to another provider when one of these applies:

  1. A separate kernel per untrusted tenant. E2B, Vercel, Tensorlake, Freestyle, or Sprites. Modal and Beam use gVisor, a userspace kernel on a shared host kernel. Box and Daytona containers do not give you a separate kernel.
  2. A GPU in the sandbox. Modal, Daytona, Beam, Northflank, or Koyeb.
  3. Your own cloud. Northflank, E2B (Enterprise), Tensorlake, Beam, Daytona, or Blaxel (bring-your-own-metal).
  4. State that must survive in RAM. E2B, Blaxel, Tensorlake, or Freestyle.
  5. The sandbox has to live inside your platform. Vercel Sandbox, Cloudflare, or Modal.
  6. Evals and compliance built in for coding agents. Runloop.
  7. The cheapest wall-clock compute with your own agent. Northflank or Koyeb.

Try Box

import { Agent, Box } from "@upstash/box"
 
const box = await Box.create({
  runtime: "node",
  agent: { harness: Agent.ClaudeCode, model: "anthropic/claude-fable-5" },
})
 
const run = await box.agent.run({
  prompt: "Write a /health endpoint in server.js and start it on port 3000",
})
 
console.log(run.result, run.cost.totalUsd)

The free tier is 10 concurrent boxes, 5 CPU-hours a month, and a $1 model budget, with no card and no platform fee. The quickstart takes a few minutes.

Sources

Checked in September 2026. Compliance cells repeat what the provider states.

Upstash Box (pricing) · E2B (persistence, egress) · Daytona (isolation, persistence) · Modal (sandboxes, networking) · Vercel Sandbox (concepts, firewall) · Cloudflare (limits, outbound) · Runloop (lifecycle, Broker, CLI) · Blaxel (overview, bring-your-own-metal, Baseten) · Namespace (egress policy) · Beam (security) · Tensorlake (lifecycle) · Northflank (sandboxes) · Freestyle (limits) · Fly Sprites (lifecycle) · Koyeb (sandboxes, instances)

If a cell is out of date, open an issue or tell us on X. Providers ship changes every week, and we would rather fix a row than argue about it.