In October I decided Charlie should have its own computer.
(Quick disclaimer, since you're probably wondering who Charlie is: I'm building Char, an AI notepad. Charlie is the assistant that lives inside it and works with you to get things done.)
Anyway, back to the computer. Not the user's Mac — its own. A place to keep files, run Python, and keep working after you close the laptop.
I thought picking the box would take an afternoon. It took a month. Along the way we tested three providers for real, priced thirteen, and made most of the mistakes available.
Everyone building agents is asking the same question right now: which sandbox should I use? Most of the answers are written by someone selling a sandbox. Here's ours — and why I think the answer depends on what you're building and how it should feel, not on the price page.
Why an agent needs a computer at all
The moment an agent can run bash, Python or a browser, it's running code nobody reviewed. That code needs somewhere to live — and it isn't your server, and it isn't your user's laptop.
A box does three jobs. It contains the damage, so a bad command breaks only the box. It holds the tools: Python, ffmpeg, a browser, files. And it keeps working while the user is away.
You might not need one. If your agent only calls APIs and writes text, skip it. If it only browses, a managed browser is cheaper — that's what we use for Charlie's browsing.
How we got here
What we needed. The box had to live in the US, next to our server in San Jose. It had to keep a user's files between tasks. And nothing inside it could ever reach our keys.
Boat looked perfect — until we measured it. It was the cheapest per hour by far, with a desktop built in. But it runs only in the EU, so every action paid 148 ms crossing the Atlantic. Each wake also counted as a start, and the $20 plan would have capped us at a few dozen daily users.
We went with Fly.
Fly was cheap, but isolation was on us. Our first firewall wasn't enough: root inside a box could still reach Fly's own API. So we gave every computer its own app and private network, in a separate org. It worked — and it was work.
Then came the question that changed the answer. Every sandbox startup was pitching "a dedicated machine per agent." I asked: isn't that just a Fly machine per agent? Mostly, yes. What actually matters is where the agent loop lives, and what that does to the experience.
Then I found the leaderboard everyone shares, battleships.dev. Boat was #1. Boat also runs it.
So we ran our own numbers. Thirteen vendors, three scales, list prices. For our design at the time — loop on our server, box only for tools — Fly was about 2× cheaper than anything else.
Each user here gets 2 vCPU / 4 GB, 20 active hours and 5 GB of storage a month, at October 2026 list prices. Boat is cheapest but EU-only, and Prized is our estimate from its docs. Sprites, Vercel and Cloudflare bill busy CPU, so their low ends assume an agent that is busy 10% of the time.
But cheap wasn't the experience we wanted. We wanted Charlie to come back mid-task, exactly where it left off — not restore a home folder and start over. That takes a VM per session that can pause with its memory.
Only E2B had a memory pause that's free while parked, plus fork, SOC 2 and a US West region. We picked it that afternoon and had it running the same day. Charlie's computer starts fresh in 6–10 seconds and comes back from a pause in about 2.
What I learned
- Design picks the box, not the price page. Fly was 2× cheaper for our design at every scale we modeled. We still switched, because our next design put the loop inside the box. The answer flipped on architecture, not scale.
- Idle is the bill. At 20 active hours a month, compute was $0.84 per user. The disk sitting idle was $0.75 — 45% of the bill. Suspending machines instead of deleting them made it worse, not better.
- Measure from where your users are. Every resume number on every pricing page is a vendor claim, and nobody independent has measured resume-from-pause for any of them. Ours were often nothing like the brochure — one Boat create took 501 seconds.
- Read the limits, not the rates. Boat's start cap. E2B's free tier ending every session after an hour. The cheapest box per hour can be the one you can't actually ship on.
- Keep your keys out of the box. If the loop lives outside, no model key ever enters the VM. If it lives inside, you need secret injection at the egress proxy before you move.
- The box is the easy half. The hard part is an agent loop that survives crashes and deploys: checkpoints, resume, wake on events. Most of what these vendors sell is operations — fast memory restore, dense idle packing, a fork that works.
How to pick yours
Start from what you're building and how it should feel. One question does most of the work: does your agent loop run inside the box or outside it?
Picks 1–3 and 7 rest on our own tests and cost model; 4–6 are reasoned from vendor docs, not tested by us.
| What you're building | Pick | Runner-up |
|---|---|---|
| 1. Throwaway box for model-written code | E2B | Vercel Sandbox, which bills CPU only while busy |
| 2. A computer per user, loop on your server | Fly Machines | Fly Sprites |
| 3. A VM per session, loop inside | E2B | Blaxel |
| 4. Multiplayer: people and agents in one live workspace | An always-on box plus a realtime layer (Durable Objects, Rivet) | Freestyle |
| 5. Orchestration: agents fan out and report back | An E2B fleet, with your own database as the bus | Morph |
| 6. Browser-only tasks | A managed browser (we use Kernel) | — |
| 7. Past 20,000–50,000 active users | Self-host E2B's open-source stack, or run E2B in your own cloud | Negotiated E2B Enterprise |
That's how we ended up on E2B. Not because it was cheapest — it wasn't — but because it fit the experience we wanted Charlie to have.
Yours should follow what you're building and what you want it to feel like. Start there. Then measure from your own region.
Appendix: the numbers
List prices for a 2 vCPU / 4 GB box as of October 2026. Idle cost assumes a 5 GB home kept all month.
| Vendor | Price per active hour | Idle per month | Memory pause | US West | SOC 2 |
|---|---|---|---|---|---|
| Boat | $0.018 + $20/mo plan | Free 14 days, then deleted | No, disk only | No, EU only | In progress |
| Fly Machines | $0.042 shared; $0.109 performance | $0.75 volume | Suspend, not durable | Yes | Yes |
| Northflank | $0.067 | $0.75 volume | No | Yes | Yes |
| Vercel Sandbox | $0.085 RAM + $0.128 per busy vCPU-hour | ~$0.40 snapshot | No, files only | Yes | Yes |
| Morph | ~$0.10 | ~$0.07 | Yes | Undocumented | None found |
| Prized | $0.131 | ~$1 paused | Unclear | Yes | None claimed |
| Freestyle | $0.132 + $50/mo plan | Storage only | Yes | Undocumented | Not checked |
| Cloudflare | ~$0.20 for 2 vCPU / 6 GiB fully busy | Disk lost on stop | No, files only | No pinning | Unverified |
| Fly Sprites | Up to $0.165, billed on use | ~$0.10 | No, RAM lost on sleep | Undocumented | Unstated |
| E2B | $0.166 + $150/mo Pro | $0 | Yes, plus fork | Yes, by default | Yes |
| Daytona | $0.166 | Up to $0.39 | VM sandboxes only | "us" only | Yes |
| Blaxel | $0.166, billed on RAM | ~$1.40 | Yes | Yes | Self-claimed |
| Modal | $0.238; $0.416 in us-west | Volume, 1 TiB free | Alpha, 7-day expiry | At 1.75× | Yes |
| Runloop | $0.317 | $1.25 disk | Suspend needs $250/mo Pro | Undocumented | Yes |
