What "persistent" means in agent sandboxes, and how ten providers answer it
Updated 27 October 2026; facts about other providers checked 26 October 2026
Most sandbox providers for AI agents now say their sandboxes persist. The word covers very different behavior. On one provider it means the memory and running processes survive a pause. On another, the disk is saved when the sandbox stops. On a third, you can take a snapshot before the sandbox is thrown away.
The differences decide whether an agent’s next job finds its repository and dependencies in place. They also decide what a failure loses. Below are eight questions that separate them, each answered from the providers’ own documentation. Ortam is one of the ten, and it’s in private beta. Its row comes from its own docs for a product you can’t buy yet. Some of its numbers aren’t published, such as how often it saves and how long a start takes. The facts about the others come only from their own docs and pricing pages, checked on 26 October 2026. Every source is linked at the end. The page doesn’t compare regions or SDKs.
Eight questions to ask
- What survives when the sandbox is off: the disk, the memory and processes, or both?
- When is the state saved: continuously while it runs, when it stops, or only when you ask?
- How long is saved state kept by default?
- What happens to work since the last save if the host fails?
- Is there a cap on how long a sandbox can run?
- How long does it take to come back?
- What does keeping it cost?
- Is it a VM or a container, and can the agent run Docker inside it?
Runloop is leaving. Its docs say it “is winding down its services”, with support for existing customers through 13 November 2026. Its answers stay listed for teams moving off it.
Each provider has its own word for the off state, and the words mean different things. Vercel and Daytona’s container sandboxes stop. E2B, Daytona’s VM sandboxes and Northflank pause. Fly.io’s Sprites pause too, first warm and then cold. Runloop suspends, Blaxel goes to standby, and Modal and Cloudflare sandboxes end. The answers below use each provider’s own word.
The answers, provider by provider
| Provider | Kept when off, by default | When it’s saved | Kept for, by default |
|---|---|---|---|
| Vercel Sandbox | Disk | On stop or timeout, and on request | 30 days after last use; configurable |
| Fly.io Sprites | Disk; memory only while warm | Disk synced continuously; checkpoints | Old automatic checkpoints are pruned |
| E2B | Disk and memory on pause; a timeout kills it unless auto-pause is on | On pause, or a snapshot | Indefinitely, once paused |
| Daytona | Containers (the default): disk. VM sandboxes: disk and memory on pause | Containers: disk stays on the runner. VMs: offloaded to storage. Snapshots on request | No auto-delete. Containers stop after 15 minutes idle and archive after 7 days stopped; VMs pause after 60 minutes idle |
| Modal Sandboxes | Nothing, unless you snapshot | Only on a snapshot you trigger | Filesystem 30 days, configurable; memory 7 days |
| Cloudflare Sandboxes | Nothing, unless you snapshot | Only on a snapshot your app takes (beta) | 30 days from creation or last restore |
| Runloop | Disk on suspend | On suspend, or a disk snapshot | Snapshots: indefinitely |
| Northflank | An attached volume | Not stated; the volume is a disk | No expiry stated |
| Blaxel | Disk, memory and processes on standby | On standby, and on request | No expiry; tiers 0 and 1 cap it at 7 and 30 days |
| Ortam (private beta) | Disk | On a schedule while it runs (interval not yet published), an attempted final save on Stop, and Snapshots on request | While your plan is active |
What survives: disk, memory, or both
Memory survives on E2B and Blaxel by default, on Daytona’s VM sandboxes when paused, and on Sprites while they are warm. A paused process picks up where it was. That suits work that is expensive to rebuild in memory, such as a loaded dataset or a long interactive session.
On Runloop, Daytona’s container sandboxes, Sprites once they are cold, and Ortam, the disk survives and the processes don’t. Vercel restores the filesystem, and its docs don’t describe keeping memory or processes. The next run boots from the saved disk and starts its services again. For coding agents, the disk holds most of the setup cost. The clone, the installed packages, the Docker images and the build caches are all files. Runloop’s docs state the consequence: “Daemons or other processes running at suspend time must be manually restarted after resuming.” On Ortam, services you enable with systemd start again at boot.
Northflank keeps only what is on an attached volume: “Anything written only to ephemeral storage is lost when the sandbox pauses.” Modal and Cloudflare keep nothing unless your code takes a snapshot. In that model the sandbox is disposable, and you build persistence from volumes or snapshots.
When the state is saved
This question decides what a crash can cost. If a sandbox saves only when it stops, nothing is saved while an agent works for hours. Vercel snapshots on stop or timeout. Calling snapshot() while it runs takes a snapshot and stops the session. E2B saves on pause. Runloop saves on suspend.
Sprites sync the disk continuously: “The filesystem syncs to it continuously, not as a snapshot taken at hibernation.” Ortam saves a running Sandbox on a schedule, and Stop attempts a final save. Its docs don’t publish the interval yet. They also say a save can lag, so the schedule doesn’t promise how much a failure can lose. If the final save fails, Ortam says so and recovers from the previous save.
How long saved state is kept
Expiry defaults vary more than anything else in the table. Vercel’s snapshots “expire 30 days after their last use by default”, and you can remove the expiry. Cloudflare’s snapshots expire “30 days after it is created or last restored”. Modal keeps filesystem snapshots 30 days by default and memory snapshots 7 days, which can’t be extended.
E2B keeps a paused sandbox “indefinitely”, and Runloop’s snapshots “persist indefinitely and continue to incur storage costs”. Daytona doesn’t delete by default. Unless you change its timers, it stops a container sandbox after 15 minutes without activity and archives it after 7 days stopped. It pauses a VM sandbox after 60 idle minutes. On Ortam, saved data “is kept until you delete it while your plan is active.”
If an agent’s environment sits unused for a month between jobs, check this default first.
If the host fails
Save timing tells you what the last save holds. It doesn’t tell you what a hardware failure loses. That also depends on where the disk lives while the sandbox runs. A disk only on the failed machine loses everything since the last save. A disk replicated elsewhere may lose nothing. The other providers’ pages don’t settle this, so ask them directly:
- Where does a running sandbox’s disk live, and does it survive the loss of its host?
- What is the most recent work a host failure can lose, and is that a promise?
- After a failure, does the sandbox come back on its own, and does anything rerun?
Ortam’s docs answer the first two only in part, because its save interval isn’t published yet. Changes after the last completed save can be lost, and “Ortam reports which save it recovered from and which commands were running.” Nothing reruns on its own, so your system decides what to run again. Saves and recovery covers the details.
How long it can run
Session caps matter for agents that run for hours. Vercel caps a session at 45 minutes on Hobby and 24 hours on Pro, but the limit “resets every time a sandbox stops and resumes”. E2B allows 1 hour of continuous runtime on Hobby and 24 hours on Pro, also reset by a pause. Modal sandboxes can run up to 24 hours. Runloop’s default lifetime is 1 hour and can be configured. Cloudflare states an inactivity timeout of up to 6 hours and “does not guarantee that an instance runs for a set time.”
Daytona has no cap by default, but its idle timer can stop an agent’s work. Its docs say “the process itself doesn’t count as ‘activity’”. A container sandbox whose job runs for more than 15 minutes without outside interaction can be stopped partway. For those, set the auto-stop interval to 0. Ortam’s docs say: “A Sandbox runs until you stop it or a published limit applies.” Sprites, Northflank and Blaxel don’t state a cap.
How long it takes to come back
A kept environment saves time only if starting it again is quicker than setting it up. Few providers publish a number, and those that do measure different things. Waking a paused sandbox with its memory is a different operation from booting one from a saved disk.
| Provider | Stated time | What it measures |
|---|---|---|
| Fly.io Sprites | 100–500 ms warm, 1–2 s cold | Waking with memory, and booting from the disk once memory is dropped |
| E2B | About 1 second to resume; pausing takes about 4 seconds per GiB of memory | Resuming with memory and disk |
| Blaxel | Under 25 ms from standby; going to standby takes about 15 seconds | Resuming with memory and processes |
| Northflank | “Under a second” | Booting a sandbox; a pause keeps only its volume |
| Cloudflare Sandboxes | Container cold starts “often” 1–3 seconds | Starting a container; restoring a snapshot isn’t stated |
| Runloop | “Seconds” on one page, 2–5 minutes on another | Resuming from the disk; its two pages disagree |
| Vercel Sandbox, Daytona, Modal | Not stated | Their pages describe resuming as fast without a number |
| Ortam (private beta) | Not published yet | Booting from the last save |
Restore time usually grows with disk size, and none of these pages give a number for a large disk. Measure it with a disk the size of yours before you rely on it.
What keeping it costs
Saved state is billed by the GB, and the rates differ by more than ten times. Prices are as each provider states them. Hourly rates are converted at 30.4 days a month.
| Provider | Stated price | 25 GB for a month |
|---|---|---|
| Vercel Sandbox | $0.08 per GB a month for snapshots, on Pro | $2.00 |
| Fly.io Sprites | About $0.02 per GB a month cold, $0.50 while awake | $0.50 cold |
| E2B | “Paused and killed sandboxes are not billed” | Not billed |
| Daytona | $0.000108 per GiB an hour after the first 5 GiB; archived sandboxes aren’t billed | $1.58 for 25 GiB, with 5 free |
| Modal Sandboxes | Not stated for snapshots | Not stated |
| Cloudflare Sandboxes | Not stated for snapshots | Not stated |
| Runloop | $0.000072 per GB an hour for snapshots, $0.00034236 for a suspended devbox’s disk | $1.31 as a snapshot, $6.25 suspended |
| Northflank | $0.11657 per GiB a month for a volume | $2.91 for 25 GiB |
| Blaxel | $0.20 per GB a month for snapshots | $5.00 |
| Ortam (private beta) | $0.01 per GB a month, measured after deduplication; a planned launch price | $0.25 |
For a few environments, none of these amounts matter. For hundreds of kept environments, or one per task, they add up. So does the difference between “kept by default” and “kept until it expires”.
VM or container, and Docker
Almost every provider here runs each sandbox in a VM or a microVM, a lightweight VM. Daytona runs containers by default, with VM sandboxes as an option, and Modal offers gVisor (a container runtime with an extra isolation layer) or a VM runtime. On Northflank’s cloud, CPU sandboxes run in microVMs and GPU sandboxes under gVisor.
Docker inside the sandbox works on most of them, often as Docker-in-Docker from a provided image or template. Vercel supports it as a process with system privileges, and Modal on its VM runtime. Ortam runs each Sandbox in its own VM, where the developer user has sudo and can run Docker. A save keeps Docker images and volumes with the rest of the disk.
Which kind fits your agents
- The environment is expensive to set up and jobs repeat. Look for a disk that is kept by default and saved while it runs, with an expiry longer than the gaps between jobs.
- The agent holds valuable state in memory. Look for memory snapshots or pause with memory, and check how long that state is kept.
- Each job must start clean, or runs untrusted code. A sandbox that keeps nothing, with snapshots you take on purpose, is the simpler model.
- Jobs run for many hours. Check the session or runtime cap, and whether a pause resets it.
Providers change these behaviors often. Several features above are marked beta or alpha in their docs, and some depend on the plan. Check the linked pages before you decide.
Sources
Checked on 26 October 2026. Quotes are from these pages.
- Daytona
- Sandboxes, Linux sandboxes, Snapshots, Billing, Pricing
- Modal
- Sandbox snapshots, Sandboxes
- Runloop
- Devbox lifecycle, Start and stop, Snapshots, Docker-in-Docker, Pricing, OpenAI Agents SDK tutorial
- Blaxel
- Sandboxes overview, Expiration, Docker, Pricing