Cloudflare Launches @cloudflare/computer, a "Virtual Computer" for Every AI Agent
- 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.
cloudflare/computer (accessed August 4, 2026) and represent their self-reported results, which have not been independently verified.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."
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.
git clone, writing files, and running node are all delegated to the container in the bottom right. Source: CloudflareCloudflare'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
npm, node, package managers, and real binaries. Slower to start and resource-intensive, but necessary for heavy tasks that require it.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.
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.
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.
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:
- ~80 text and file commands, including
grepsedawkjqsqlite3 git clone/status/diff/log, delegated to the host- Read, write, edit files; walk directories
- Full bash syntax: pipes, loops, functions, variables
- Installing packages—
npm installwon't run - Running
nodeorpython - Any real binary, e.g.,
pandoc,ffmpeg - Making network requests—
curldoesn'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:
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: CloudflareIn that entire sequence, only the package installation truly needed Linux, and it alone consumed 56 seconds. Everything else was millisecond-fast.
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.
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.
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:
computerd daemon—likely a typo in the original diagram. Source: CloudflareThe 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.
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.
| Scenario | FUSE Mount | Container ext4 Disk | Multiplier |
|---|---|---|---|
| Delete 1000 files | 827.7 ms | 1281.8 ms | 0.66× |
Walk directory tree find | 1813.6 ms | 4404.2 ms | 0.72× |
| git init + commit 100 files | 459.2 ms | 635.4 ms | 0.72× |
| Create 10×10×10 directory tree | 1597.5 ms | 3034.7 ms | 0.74× |
| git shallow clone (~1 MB) | 549.1 ms | 576.2 ms | 0.84× |
stat 1000 files | 1971.9 ms | 2659.3 ms | 0.91× |
| npm init + small install | 598.5 ms | 630.7 ms | 0.95× |
| Create 1000 files | 560.6 ms | 303.2 ms | 1.85× |
| Full npm install (854 packages, 36,675 files) | 124.7 s | 63.9 s | 1.95× |
| Write 64 MiB | 230.6 ms | 16.8 ms | 16.9× |
| Read only 64 MiB | 263.1 ms | 8.5 ms | 30.3× |
| Copy only 64 MiB | 852.9 ms | 22.0 ms | 41.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.
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:
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.
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:
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 Need | Free Tier | Workers Paid ($5/month) |
|---|---|---|
| Container backend | Not 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 invocation | 10 ms, practically useless for running a shell | 30 seconds default, up to 5 minutes max |
| Max workspace size | 1 GB | 10 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:
| Limitation | What It Means |
|---|---|
| Max ~10 GB | Shares 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 memory | Not suitable for very large directory trees. Their words: the goal is Agent-scale workspaces, not a whole monorepo. |
| Container uses FUSE | Heavy I/O workloads, like large node_modules installs or extracting large archives, will incur a measurable performance penalty. |
Value & Summary
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.
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.Cloudflare Rewrote the Agent's Command Line in JavaScript
Open-source package @cloudflare/computer: ~80 Unix commands moved out of Linux. Here's where it's fast and where it's slow.
↓ One page, one animated diagram
AI Agents need a "computer" to write code, run tests, and manage files. The standard today is opening a Linux container—a mini-server with a pre-configured environment. Cloudflare's argument is that this doesn't scale: each container hogs memory and disk, takes seconds to boot, and when you multiply that by "hundreds of millions of Agents online," the world's CPU supply runs out.
Their August 3rd open-source package @cloudflare/computer takes a different approach: most of the time, no container is needed. Just a millisecond-fast isolate (a small, isolated execution space carved out of the same JavaScript engine).
Boot: seconds
Dedicated memory + disk
Held for the entire session
Boot: milliseconds
Hibernates when idle
Only tough jobs hit the container
This chain of reasoning holds up, but there's another side: Cloudflare doesn't have the hyperscaler CPU fleets. They bet on the isolate a decade ago. "Containers don't scale" is both a real observation and their most favorable argument.
Thanks to an open-source project called just-bash (by Vercel Labs), which reimplements bash syntax and about 80 Unix commands in pure JavaScript. grep (search for keywords), sed (batch edit text), jq, find, tar—each one is now a JavaScript function, not a program to launch. No processes, no kernel—just functions passing strings to each other. That's why it fits in an isolate, and also why it can't run npm or Python.
git clone / status / diffnpm install won't run) · run node, run python · any real program, e.g., pandoc, ffmpeg · make network requests, curl doesn't existgit is a fake command: the isolate has no network, so it delegates the task to the host, which fetches code and writes it into the shared file system.The Agent decides where to run each command. In one official real trace, only
npm install went to the container in the entire sequence, installing 665 packages in 56 seconds. Everything else was millisecond-fast.Files live in a Durable Object (a long-lived object on Cloudflare with its own SQLite database that survives restarts)—the single source of truth. Both the isolate and the container modify this one copy, but they reach it in completely different ways.
Cloudflare ran a comparison between the FUSE mount and the container's real disk. The results split into two categories. On the same mount point, browsing directories is faster than a real disk; copying a large file is 41x slower.
The dividing line is here: browsing directories, checking status, and deleting small files benefit from an in-memory file index that skips disk seek. Large-file sequential I/O, however, has to chunk and hash its way through, which cripples raw throughput. Cloudflare's argument is that the former is where real development actually spends its time.
The package is installable: npm install @cloudflare/computer. It's MIT-licensed, free, and open-source. Current version is 0.1.1. But the repo itself says PREVIEW ONLY.
Also, the widely-cited "containers will ultimately handle less than 10% of the work" is a goal Cloudflare has set, not a measured outcome. Today's isolate has no Python, no network, and can't install packages. They mention audio/video processing, but there isn't even a viable path for that yet.
One Container
- × Boot in seconds
- × Dedicated memory
and disk - × Held for the
whole session
All the CPUs in the world aren't enough for one per Agent.
This math
stops adding up
Cloudflare took a different route: light tasks stay in a millisecond-fast isolate, powered by an open-source project called just-bash.
Unix commands
rewritten
in JavaScript
grep, sed, awk, jq
each one is now
a single JS function
The isolate has no network, can't install packages, and can't run python. In the official trace, only npm install went to the container: 665 packages, 56 seconds. Everything else was millisecond-fast.
Both sides modify the same copy, but the paths to reach it are wildly different. All performance differences stem from this.
Copy a 64 MiB file: 852.9 ms.
Real disk: 22.0 ms.
is faster
1813.6 ms
Real disk: 4404.2 ms
File index is in memory,
skipping disk seek
The package is installable, MIT-licensed, free and open-source, currently at 0.1.1. The repo's homepage says PREVIEW ONLY: the API is unstable and the design will change.
- × Free tier:
no containers - × Per call:
10 ms CPU - × Workspace:
~10 GB max - × Containers:
from $5/month
The rest has been moved into a millisecond-fast isolate—at the cost of large-file I/O being dozens of times slower.
Benchmarks are Cloudflare's own self-reported data from their repo; not yet independently reproduced.
