Product Launch · Xiaohu's Take

Cloudflare Launches @cloudflare/computer, a "Virtual Computer" for Every AI Agent

Most tasks run in a millisecond-fast lightweight environment; only the heavy lifting gets a container. Benchmark in the repo shows: deleting files is faster than a real disk, but copying a large file is 41x slower.
TL;DR
  • Cloudflare has moved the shell where Agents work out of Linux, rewriting grep, sed, awk, and other commands in JavaScript.
  • Lightweight tasks stay in a millisecond-fast sandbox; only tough jobs switch to a container. Both can modify the same files, but they access them in completely different ways.
  • The repository includes benchmarks: some operations are faster than a real disk, while others are 41 times slower.
This article is primarily based on the official Cloudflare blog. The claim that "containers aren't enough" and the architectural approach are their own conclusions. Performance figures, capability limits, and restrictions cited here are taken from their open-source repository cloudflare/computer (accessed August 4, 2026) and represent their self-reported results, which have not been independently verified.
The Problem

The Core Problem & Context

Cloudflare has released @cloudflare/computer: instead of spinning up a traditional container for every AI Agent, it gives each one a "virtual computer."

Agents need a "computer" to get work doneWriting code, running tests, handling files, and managing git repos all require a real environment to execute in. Today's standard approach is to provision a separate Linux container—essentially, a dedicated mini-server.
Compute doesn't scaleEach container consumes its own slice of memory and disk and takes seconds to boot. When you start counting Agents in the "hundreds of millions online simultaneously" range, that multiplication problem becomes unsolvable.

Across all clouds and all hyperscalers, the world's combined compute power isn't enough for every company to give each of its users' Agents a containerized computing environment.

Cloudflare

That's why the industry is scrambling for CPU capacity, not just GPUs.

That causal chain holds up. But there's another side to acknowledge: this argument conveniently points to Cloudflare's only truly differentiating asset. They bet on Workers a decade ago and Durable Objects six years ago; they never had hyperscaler-sized CPU fleets. "Containers don't scale" is a real observation and a self-serving thesis. Both can be true; you decide the balance.

Agent loop in lightweight environment, calling out to MCP, browser, and container sandbox
Today's typical setup: the loop-running code lives in a lightweight environment, calling out to MCP, browsers, and container sandboxes. Tasks like git clone, writing files, and running node are all delegated to the container in the bottom right. Source: Cloudflare
The Solution

Cloudflare's Solution: A "Personal Computer" for Your Agent

The idea: don't hand the Agent a clunky container; give it an abstracted "computer"—a file system stored in the cloud, plus a few execution environments that can operate on those files. This "computer" rests on three pillars.

1. Two Types of "Workers" Divide the Labor

Isolate · LightThe execution unit of Workers. Boots in milliseconds, uses minimal memory, can hibernate when idle, and can store its own state. Good for lightweight tasks like reading/writing files, data processing, and managing git repos.
Container · HeavyFull-featured, with a complete Linux environment including npm, node, package managers, and real binaries. Slower to start and resource-intensive, but necessary for heavy tasks that require it.
How Big Is the Difference?

A container is like building a separate kitchen for every guest—plumbing, stove, the works. It takes time to build and takes up space. An isolate is like reserving a non-overlapping section of a communal kitchen counter for each person: it takes milliseconds to assign, and the space is freed the moment the person leaves. The catch? There's no oven at the counter. If you need to bake, you'll have to queue up for the real kitchen.

That logic leads to Cloudflare's architectural roadmap. On the left, earlier this year: Agent, config secrets, and tools all in one container. In the middle, today: the loop layer has moved into an isolate, config and tools stay in the container. On the right, the goal: config and tools also move into the isolate, leaving only the heavy, non-negotiable tasks in the container.

BEFORE / TODAY / NEXT three-column architecture evolution diagram
Three-column evolution: BEFORE shows everything in a container; TODAY moves the loop layer into an isolate; NEXT moves config secrets and tools in as well, leaving only heavy tasks in the container. The right column is Cloudflare's plan for the next step, not the current state. Source: Cloudflare

No Linux in the Isolate. How Does It Work?

This is the easiest layer to overlook, and arguably the most valuable. The shell in the isolate runs thanks to something called just-bash.

just-bash is an open-source project from Vercel Labs that reimplements bash syntax and roughly 80 Unix commands in pure JavaScript. grep (searching for keywords in files), sed (batch editing text), awk, jq, sort, find, tar, diff, sqlite3 — each one is a JavaScript function, not a binary program. Pipes, redirection, &&, variables, globbing, if, for, while, and custom functions are all implemented too.

Text Processing · All JS Functions
grepsedawkcutsortuniqheadtailtrwcdiffxargsrgsha256sum
Files & Directories
lscatcpmvrmmkdirstatfindtreelndutargzip
Data Formats
jqyqsqlite3xanbase64
Disabled by Cloudflare by Default
python3js-execcurl

That's exactly why it fits in an isolate: no processes, no forks, no kernel—just JavaScript functions passing strings.

The trade-off is a hard boundary. Cloudflare's package source shows the default shell environment disables three just-bash capabilities: Python, JavaScript execution, and networking. The first two aren't even a choice—they rely on node:worker_threads, a module unsupported in Cloudflare's runtime, so they can't be installed. Disabling networking means curl simply doesn't exist in the isolate.

So how does git clone succeed? The isolate's shell has no network access, so git is a fake command. It delegates to the host-side Durable Object, which makes the actual request and writes the fetched files straight into the shared file system. The isolate never touches the network.

Isolate · No network of its own just-bash git clone (Fake command) 1. Delegate Host Durable Object Makes request via isomorphic-git Code Host Only accepts HTTPS URLs 2. Files written back Shared File System /workspace 3. Isolate sees files directly
Typing git clone in the isolate: the command itself can't make network requests, so it delegates the task to the host. The host fetches the code, writes it to the shared file system, and the isolate reads it directly. Diagram based on the repository's git-command.ts.

The Agent Chooses Which Environment to Use

For each command, the Agent weighs the boundary:

Handled in Isolate
  • ~80 text and file commands, including grep sed awk jq sqlite3
  • git clone / status / diff / log, delegated to the host
  • Read, write, edit files; walk directories
  • Full bash syntax: pipes, loops, functions, variables
Requires Container
  • Installing packages—npm install won't run
  • Running node or python
  • Any real binary, e.g., pandoc, ffmpeg
  • Making network requests—curl doesn't exist

Frontier models handle this well, falling back to the container only when needed. The tool descriptions fed to the model explicitly state that the container side has "a full Linux userspace: npm, node, package managers, test frameworks, and real binaries on the $PATH," allowing it to choose accordingly.

Here's a real trace. A user asked the Agent to update dependencies for the cloudflare/computer repo. Next to each command in the UI, a tag indicates where it ran:

Screenshot of Agent conversation trace with ISOLATE or CONTAINER tags next to commands
A real conversation trace. git clone is tagged ISOLATE·GIT, ls is tagged ISOLATE, read took 0 ms, webfetch 216 ms, apply_patch 0 ms. In the entire sequence, only npm install is tagged CONTAINER, installing 665 packages and taking 56 seconds. Source: Cloudflare

In that entire sequence, only the package installation truly needed Linux, and it alone consumed 56 seconds. Everything else was millisecond-fast.

A Closer Look at the Numbers

Cloudflare's target: containers handle under 10% of the work; coding, audio/video, and document generation all stay in isolates. This is a goal, not the current state. Comparing that ambition to the capability table above shows how far off it is. Today's isolate has no Python, no node, no network, and no package installation. There's no viable path for audio/video yet, and that 10% number isn't backed by any measurement.

2. The Shared File System

Files themselves live in the SQLite database that comes with the Durable Object—that's the single source of truth. Whether the Agent operates from the isolate or the container, it sees this one version. No copying back and forth, no re-initialization.

But each side reaches it very differently.

From the IsolateEvery shell read/write hits SQLite directly via a Workers binding. There's no second copy, no sync round-trip—it's operating on the one true version.
From the ContainerThis isn't possible, because a program like pandoc in the container needs to open a file as a regular file to work. So Cloudflare installs its own daemon, computerd, inside the container, which mounts the files as a FUSE file system. Programs in the container read/write this mount point, and changes are synced back via an RPC channel.

FUSE mount: a mechanism that lets regular programs treat "things that aren't really disks" as if they were disk directories. Programs in the container think they're reading a normal file, but every read/write is actually forwarded to the remote Durable Object.

Durable Object SQLite inside Single source of truth The container's path FUSE mount Split into 512 KiB chunks Hash each chunk RPC Sync Container npm · pandoc Every file read/write must traverse the entire sequence above The isolate's path A single Workers binding, direct connection No second copy, no sync round-trip Isolate just-bash
Two paths to the same file. The top path is for the container: every read/write goes through FUSE, chunking, hashing, then syncs back. The bottom path is for the isolate: a single direct connection to the source of truth. Diagram based on the repo README and official architecture diagram.

Why chunk and hash? So the Durable Object only needs to sync the chunks that actually changed, and identical content is automatically deduplicated. The trade-off shows up directly in throughput.

Here's the full structure:

Virtual file system in Durable Object with pluggable execution runtimes
The big picture: both the virtual file system and the execution runtimes live on the same Durable Object. Files can be ingested from external sources like cloud storage, code repos, or archives. Source: Cloudflare
Comparison diagram showing Workspace connections to two execution runtimes
This diagram highlights the asymmetry best: the container side has its own copy of the file system, synced via push/pull with the source of truth. The isolate side has only a thin adapter layer, reading/writing the source directly via a binding. The right side of the diagram labels "a small computed binary," which, based on the repository, should be the computerd daemon—likely a typo in the original diagram. Source: Cloudflare

The official tutorial's example best illustrates how this division of labor saves work: you POST a dish name, the Agent finds the recipe, writes a card.md on the host side, then runs pandoc card.md -o card.pdf in a container to convert it to PDF, and finally uploads it to R2, giving you a link that expires in a day. Writing markdown is plain file work, done on the host without spinning up a container. pandoc is a real binary, so it must go into a container. The container sees the same /workspace via the mount, so it reads the file just created, and the resulting PDF can be written back.

The Cost of This Design: Faster for Small Files, Slower for Large Ones

Cloudflare ran a comparison between the FUSE mount and the container's own ext4 disk using a standard-2 container instance: 1 vCPU, 6 GiB RAM, 12 GB disk.

The results split into two categories. Tasks involving many small files are faster than a real disk; sequential read/write of large files is painfully slow.

Delete 1000 small files
0.66×
Walk directory tree
0.72×
git init + commit
0.72×
stat 1000 files
0.91×
Full npm install
1.95×
Write 64 MiB file
16.9×
Copy 64 MiB file
41.5×

Bar lengths are scaled by time multiplier. Green indicates faster than the container's real disk; orange indicates slower. A multiplier below 1 means faster.

ScenarioFUSE MountContainer ext4 DiskMultiplier
Delete 1000 files827.7 ms1281.8 ms0.66×
Walk directory tree find1813.6 ms4404.2 ms0.72×
git init + commit 100 files459.2 ms635.4 ms0.72×
Create 10×10×10 directory tree1597.5 ms3034.7 ms0.74×
git shallow clone (~1 MB)549.1 ms576.2 ms0.84×
stat 1000 files1971.9 ms2659.3 ms0.91×
npm init + small install598.5 ms630.7 ms0.95×
Create 1000 files560.6 ms303.2 ms1.85×
Full npm install (854 packages, 36,675 files)124.7 s63.9 s1.95×
Write 64 MiB230.6 ms16.8 ms16.9×
Read only 64 MiB263.1 ms8.5 ms30.3×
Copy only 64 MiB852.9 ms22.0 ms41.5×

The faster half has a clear cause: the file index lives in memory, so operations like "browse directory, check status, delete small files" skip the disk seek overhead. The slower half is also clearly caused by that long chunk-and-hash path above: every write requires re-hashing, which looks terrible on raw dd-style throughput.

Cloudflare's Own Explanation

The eight faster scenarios cover the things that actually consume time in everyday development—git status, module resolution, incremental builds. Large-file sequential reads and writes are rare in real development loads. The evidence is in the table: "npm init + small install" is nearly identical to a real disk (0.95×), even though the same mount point is 30x slower for "read only 64 MiB."

3. Control & Security

Every step the Agent takes has a gate, an audit trail, and observability. Here's the breakdown:

Can't access your secretsCode running in the isolate sees only the explicit environment variable snapshot passed by the caller. The Durable Object's own environment is never merged in. Host bindings, credentials, and storage objects are not accessible to user code.
No outbound network by defaultThe isolate blocks outbound requests by default; you have to explicitly configure an exception.
Read/write permissions pre-setExternally mounted directories are read-only by default; writes are rejected. The host checks whether the backend has write permission on every mutation.
Path traversal blockedOut-of-bounds paths and every symlink component within a path are checked before an operation.
Configurable limits everywhereCPU time, wall-clock deadlines, source size, and input/output bytes all have independent limit parameters.

There are two caveats worth knowing before you dive in.

First, the path check is not a security boundary. It isn't atomic "resolve to below root," so you can't use a single isolate's capability against another higher-privilege entity that might concurrently swap paths. To defend against such adversarial concurrency, you'd need a future transactional foundation, or simply use separate workspace identities for each side.

Second, "audit logging" is inconsistent across the three backends. The isolate JavaScript variant writes an execution ledger to the workspace database, retaining events and results until you explicitly clear them. However, the isolate shell version explicitly does not retain cross-request events and cannot resume by ID. For supervised process behavior, the official recommendation is to use the container path.

Also, if execution fails or is cancelled, file changes already written to disk are not rolled back.

Getting Started

How to Use It (Developer's Perspective)

Installation & Setup

The package itself is MIT-licensed, free, and open-source. You can install it with npm install @cloudflare/computer. The current version is 0.1.1, first published to npm on July 29.

Once installed, a workspace can be attached to any Durable Object. If you're using Cloudflare's own Agent framework, @cloudflare/think, the setup is even more concise. It comes with a set of AI SDK-compatible tools, providing Agents with basic tools like read, write, edit, ls, and exec, where exec takes a backend parameter—that's the selection line we discussed earlier.

Three Available Runtimes Out of the Box

Cloudflare's blog says two, but both the repo README and the npm package entry point list three:

01
Container Shell
Full Linux environment, real binaries, real network; files via FUSE mount. Slow, but can do anything.
02
Isolate Shell
just-bash running in a temporary Worker, directly connected to the file system. Fast, but no Python, no network, can't install packages.
03
Isolate JavaScript
Lets the model write a JavaScript module directly and run it in a temporary Worker, with node:fs/promises connected to the same files.

The third is the embodiment of Code Mode thinking: instead of having the model type shell commands one by one, let it write code directly.

Pricing

The package is free, but running it for real will immediately hit the free tier's limits:

What You NeedFree TierWorkers Paid ($5/month)
Container backendNot available; the official pricing table lists N/A for this column.Includes 375 vCPU-minutes (over 6 hours of single-core time) + 25 GiB-hours of memory
CPU time per isolate invocation10 ms, practically useless for running a shell30 seconds default, up to 5 minutes max
Max workspace size1 GB10 GB

For local development, you'll also need Docker, because wrangler needs to build the container image locally. It comes with 8 runnable examples, one of which is a step-by-step tutorial starting from an empty directory—the same recipe-to-PDF example mentioned earlier.

Not Production-Ready Yet

For now, this is for experimentation, exploration, and prototyping. It's not suitable for production: the API is unstable and the design is subject to change. Even the design spec is forward-looking, describing intent rather than the current state of the code. Three hard limitations:

LimitationWhat It Means
Max ~10 GBShares the storage quota with Durable Objects. Paid plans have a 10 GB limit per SQLite-based Durable Object; the free tier has only 1 GB.
Container-side file system is in memoryNot suitable for very large directory trees. Their words: the goal is Agent-scale workspaces, not a whole monorepo.
Container uses FUSEHeavy I/O workloads, like large node_modules installs or extracting large archives, will incur a measurable performance penalty.
🧰 Quick Start · @cloudflare/computer
PricingThe package itself is MIT-licensed and free/open-source; the container backend requires Workers Paid, starting at $5/month
PrerequisitesYou need to know Workers / Durable Objects; local dev requires Docker; the free tier can't run containers, and the isolate gets only 10 ms of CPU time
Value

Value & Summary

Value for developers: the low-level dirty work is handled for youPreviously, to have an Agent that could both manipulate files quickly and run real programs when needed, you had to build your own sandbox, write your own file sync between the two sides, and decide which command goes where yourself. This package encapsulates all that; you just attach a workspace and hand the Agent a few tools.
Value for the industry and compute: it half-demolishes the "one Agent, one container" default assumptionIn the real trace above, the container was only used for 56 seconds; everything else was millisecond-fast. Containers are billed per active 10ms. The $5 plan includes 375 vCPU-minutes. With the same quota, you could run this task roughly 400 times (illustrative calculation: 375 minutes ÷ 56 seconds). Under the old model, a container would be occupied for the entire session—a completely different order of magnitude.
Value for Cloudflare itself: a decade-old bet starts paying offThey don't have the hyperscaler CPU fleets. The isolate is their only viable card. This package repositions Workers and Durable Objects from "running websites" to "running Agents."

In concrete scenarios, Cloudflare says they already have internal Agents completing entire workflows using only isolates: building, testing, and deploying JavaScript apps with modern toolchains, generating custom docs for each customer, and completing complex tasks in a browser. Previously, all of these required containers.

In one sentence: let Agents work in an ultra-lightweight, cost-saving mode most of the time, switching to a heavy-duty mode only for tough problems—making large-scale Agent operation both fast and cheap.

Today it's a 0.1.1 preview, not production-ready. But it lays out the "how much compute does an Agent actually need" math openly, including the ugly numbers.

Also on this site · Someone's already doing this
camelAI moved its Agent from VMs to run on Cloudflare's edge nodes
A company that actually moved its coding Agent from VMs into Durable Objects, and what happened to cost and latency—worth reading alongside this official take.
Source
Your Agent Needs a Computer, Not a ContainerThe Cloudflare Blog·Original Article·2026-08-03
Site Notes
The five color images in this article are from Cloudflare's original post. The two line diagrams (the git delegation path and the two access path comparison) were created by this site based on the repo source and official architecture diagram. Benchmark numbers, capability limits (Python/JavaScript/network disabled by default), the three runtimes, security mechanisms and their two caveats, and the 10 GB/memory limits are from the cloudflare/computer repo (accessed 2026-08-04) and are not mentioned in Cloudflare's blog; pricing and CPU time limits are from Cloudflare's official docs. The blog states "two runtimes out of the box," which conflicts with the repo's three; this site follows the repo's count and flags both. "400 tasks" is an illustrative calculation by this site based on the official pricing table; it doesn't appear in the original article.