Oct 23, 2026
Say you start 1,000 coding agents on the same codebase. In the first minute, every one of them clones the repo. Then they read files, run git status, search, edit and run tests, over and over. A few minutes in, the first results come back, and dozens of agents try to save their answer to the same file.
The storage most of us use was built for people. A developer opens a few files, thinks for a while, and saves now and then. Agents do the same work much faster, from many machines at once, and you can’t fully trust any of those machines.
The title looks far ahead. This post stays with what can be checked today: a swarm of about 1,000 agents. At that size, storage has to do several jobs at once. Each agent needs a private workspace. The swarm needs shared code and a way to pass results around. Work has to survive crashed sandboxes. And agents need to coordinate without blocking each other. Each of these has decent answers on its own. Covering all of them together is the hard part, and that combination is what we mean by an agent drive.
We’ve looked at how teams handle this today. This post covers what we found: what people use, where it breaks, what it costs, and a few ideas that look promising.
How agents use storage differently
Agents differ from people in a few ways that matter for storage. They’re short-lived and you can’t trust them. A sandbox might run code the agent wrote a minute ago, and it can be paused or killed at any time. You don’t want to give it long-lived passwords or keys. They’re fast. Something a person does once, like listing a folder, an agent loop might do thousands of times an hour. They write at the same time. If one agent is slow or crashes, agents working on other things shouldn’t have to wait for it. You need to know who did what. When a swarm produces a result, you want to know which agent changed which file, and whether anything shared was tampered with. And they run on someone else’s computers. Most agent sandboxes are small virtual machines; E2B, for example, uses Firecracker. Firecracker can’t share a folder from the host machine with the VM, and that isn’t on its roadmap. So anything shared has to travel over the network. All that reading shows up on the bill. S3 and similar services charge for every request, and some file services charge for every byte read. A command that’s free on your laptop shows up on the bill when 1,000 agents run it every minute. Try the numbers below. The first preset assumes the repo sits in a bucket mounted as a folder, with nothing cached, so looking up each of 5,000 files costs two requests. Real setups cache some of those lookups, and real agents don’t rungit status every minute. But notice that on both S3 and R2, listing a folder costs over ten times as much as reading a file. When you pay per request, chatty agents cost you money directly.
”Shared storage” is really three things
When people ask for shared storage for agents, they usually mean three different things, with a fourth hiding underneath. Each one gets used differently and costs differently, so we’ll take them one at a time.Each agent’s workspace
Sandbox providers already handle much of this. Most can save a sandbox and start new sandboxes from it:- E2B can pause, snapshot and fork sandboxes, memory included.
- Modal has filesystem, directory and memory snapshots.
- Daytona has snapshots and archiving.
- Vercel made saved sandboxes generally available in May 2026.
- Cloudflare’s Sandbox SDK can back up a single directory to R2.
- Google’s GKE Agent Sandbox has Pod Snapshots in preview.
- AWS added session storage to Bedrock AgentCore in March 2026.
Shared folders
The obvious fix is one folder that every sandbox mounts. There are four kinds of options. Run your own shared file system. JuiceFS keeps the list of files in a database and the file contents in object storage, so checking whether a file exists doesn’t cost an S3 request. Fly.io built its Sprites on a modified version of it. CephFS behaves most like a local disk, but to do that it has to keep clients in step, and a stuck client can hold up other clients using the same files for about a minute before it’s flagged. Mount a bucket as a folder. Tools like Mountpoint for S3, s3fs and gcsfuse store each file as an object, so every file operation turns into requests. Mountpoint can’t rename files in a regular bucket or change part of a file, so git doesn’t work on it. With s3fs and similar tools, if two machines write the same file, one of them silently wins. Use a managed file service. EFS in its default Elastic mode charges $0.03 for every GB read and $0.06 for every GB written. It also rounds small operations up: each data read or write counts as at least 32 KiB, and each metadata operation, like looking up a file, as at least 4 KiB. Other services charge for size and speed instead of usage, and slow you down when you go over: EFS in Bursting or Provisioned mode, FSx for OpenZFS, Filestore and Azure Files. Two services launched this year with agents in mind. Amazon S3 Files (April) lets you use an S3 bucket like a network drive. Changes take about a minute to reach the bucket, and if the two disagree, the bucket wins. Google’s Filestore agent volumes (September) give you up to a million separate network drives in one region. Each one attaches to a sandboxed GKE pod in milliseconds, several pods can write to the same drive, and file locks work across machines. It’s only open to approved customers so far, but it shows the big clouds now treat agent storage as its own problem. Use the sandbox platform’s volumes. Their docs list the limits. E2B’s volumes are in private beta: file locks can hang, and a sandbox isn’t told when another one changes a file. Modal saves changes in the background every few seconds and again when a container shuts down, but other containers only see them after they reload the volume, and if two containers write the same file, the last write wins. Daytona says its volumes are “not transactional”. Vercel Drives became generally available in October, with forks that let parallel workers each change their own copy; Vercel’s guide describes one sandbox writing to a drive at a time, with others getting read-only snapshots. All of these run into the same old problem: two writers, one file. There are a few usual ways to handle it:- Let the last write win. Most volumes do this.
- Take a lock. Only agents that need the same file wait, but if the holder gets stuck, they can wait a long time. How long depends on whether the system notices a dead holder and frees the lock.
- Take a lease, which is a lock that expires. That caps the wait. But a holder that was paused can wake up after its lease ran out and still write, unless the storage checks a lease number and refuses old ones.
- Save only if unchanged. The save goes through only if the file is still the version the agent read. If it isn’t, the save is refused, and the agent has to read the file again, redo its change and retry.
Shared code
For code, almost everyone uses git. Most coding agents hand their work back as a commit or a pull request. Codex, Cursor’s cloud agents and Devin each work in their own sandbox and return a branch. Claude Code agent teams share one working directory by default; the docs warn that two teammates editing the same file overwrite each other and suggest giving each teammate its own files, with git worktrees as a separate option. In Anthropic’s C compiler experiment, 16 agents shared one repo and claimed tasks by pushing small lock files. Whoever’s push landed first got the task. The two teams that have written in detail about running agents at this scale both ran into trouble with how the agents shared work. Anthropic’s agents did well while they worked on separate tests. When they all moved on to compiling the Linux kernel, every agent hit the same bug, fixed it, and overwrote the others’ fixes, so 16 agents did no better than one. The fix was to give each agent different files to work on. Later in the project, new commits often broke features that already worked, so every push had to pass a test suite first. Merge conflicts came up often, but the agents resolved them on their own. Cursor tried several setups:- Equal agents sharing a task file, with locks. Throughput dropped to that of two or three agents. Agents held locks too long, never released them, crashed while holding them, or edited the file without taking one.
- Writes that fail if the file has changed. This was more reliable, but the agents started avoiding hard tasks and making small, safe changes.
- A separate agent that merged everyone’s work. It became a bottleneck and was dropped, since workers could resolve conflicts themselves.
- Planners that hand out tasks, and workers that each stick to one task. This worked. Hundreds of workers pushed to the same branch with few conflicts.
- A thousand agents cloning at once is a lot of work for the server, which has to package a copy for each one. Git’s bundle URIs let a clone download most of the history as a plain file from object storage or a CDN, then fetch only what’s new. GitLab supports this. Putting a recent copy of the repo inside the sandbox image avoids most of the download.
- Swarms create many forks of the same repo. GitLab, GitHub and Bitbucket all store shared history once across forks. Cleaning up that shared history is hard: GitHub has written about how careful it has to be.
- Sooner or later everyone wants to merge into
main. Merge queues line those merges up one at a time. GitLab has merge trains, GitHub has a merge queue, and Gerrit users run Zuul. - An agent should only be able to push its own branches, and only while its run lasts. Git hosts give out tokens to users and bots, so this usually needs something extra on top.
- It keeps plain git repos on local disks, but treats them as a cache. Each push is first saved to a log in S3-compatible object storage, and it isn’t acknowledged until that save completes.
- Any machine can rebuild a repo from the log. So there’s no database tracking where each repo lives, and no copy that has to be nursed back to health after a failure.
- Pushes to the same branch are ordered by a conditional write to the log. A push that loses fetches again, rebases and retries.
- Cursor measured about 120 pushes per second with S3 Standard underneath, and over 300 with S3 Express One Zone. At that rate, git’s own repacking was the limit.
- The post contrasts this with GitHub’s older Spokes design, which keeps three full copies of every repo and needs most of them to agree on each push. That gets slower as copies are added, and it’s wasteful for large numbers of small, mostly idle agent repos.
- Commits, rebases and merges happen on the server. There’s nothing to push.
- A commit lists the files that changed, each pointing to content stored by its hash. No full copy of the repo exists anywhere, not even on the server.
- Clients fetch only the files they need, and many jobs never check out the repo at all.
- Branch names are discouraged except for
mainand release branches. Moving one is a single conditional database update. - Merges don’t take a global lock. Tests run after merging and before deploying, and Claude resolves most conflicts.
- Caches sit on each machine and in each region, and over 99% of reads hit the regional cache. Content never changes, so any cache can serve it.
- Cloudflare Artifacts puts each repo in its own Durable Object and charges per operation.
- Entire was started by GitHub’s former CEO.
Results and other outputs
Not everything an agent makes belongs in a repo. Test reports, built binaries, evaluation scores and data files need three things:- They shouldn’t change once saved, so nobody reads half a result.
- You need a way to refer to one specific result.
- You need to send them to one agent, a group, or everyone.
best or latest that can only move with a conditional save. Sending a result to another agent then just means giving it permission and telling it the result is there. Nothing gets copied.
Coordination
Under all of this is a small amount of information that has to be right: who claimed which task, which resultbest points to, who can read what, and what changed since an agent last checked. Today it lives in lock files on shared storage, in the orchestrator’s database, or in a key-value store.
There’s an old lesson here. A lease that expires doesn’t stop a paused agent from waking up later and writing anyway. The usual fix is to give each new holder a number that goes up every time, and have the storage reject writes that carry an old number. Agents make this more pressing, because their sandboxes get paused, killed and replaced all the time.
The databases people reach for don’t all behave well when things fail. In Jepsen’s tests:
- etcd’s reads and writes behaved correctly, but its locks could not guarantee that only one client held a lock at a time.
- An Amazon RDS for PostgreSQL Multi-AZ cluster gave inconsistent answers from its read replicas, so anything that makes a decision should read from the primary.
- NATS JetStream lost data it had confirmed under its default settings.
Where the money goes
Request charges get the attention, but with a swarm, moving data usually costs more. The calculator below compares storage options for a fleet of agents under three made-up workloads. Network charges are easy to miss, so the calculator lets you pick where the sandboxes run:- Next to the storage: no transfer charges.
- Outside AWS: reading storage hosted in AWS is billed as data leaving for the internet.
- In AWS, behind a NAT gateway: reaching storage outside AWS is charged for every GB that passes through the gateway, in both directions.
What’s still unsolved
- Merging. It’s easy to copy a sandbox, a volume or a bucket. Combining two copies back into one is harder. Vercel’s drives can be forked, but the forks are independent copies. Tools exist for some formats: git merges text, Dolt merges database tables, nbdime merges Jupyter notebooks, and CRDT libraries like Automerge merge JSON-like documents. Nothing covers the whole mix of files a swarm produces.
- Cleaning up after crashes. Agents crash while holding locks, halfway through uploads, or before giving up a task. Most systems either wait for a timeout or need a person to step in.
- Bad shared data. An agent fooled by a prompt injection can write instructions or bad data that other agents then trust. Anthropic’s docs for Claude Managed Agents memory warn about this for shared memory. Recording who wrote what, read-only access and review steps help, but there’s no standard answer yet.
- Moving between providers. Snapshots, volumes and access keys are all tied to one sandbox provider. A swarm that runs on several has to keep its storage somewhere neutral.
- Limits on sandbox count. E2B’s Pro plan allows 100 sandboxes at once by default, so 1,000 agents means a bigger plan. Other platforms have similar limits.
- Real data at scale. Published studies of agents working together use 2 to 16 agents. Anything said about 1,000 agents, this post included, is an educated guess.
Products built for agents
A few products now sell storage made for agents. Two come up often. Archil offers disks backed by S3 or another bucket that several machines can mount. In shared mode, a machine “checks out” a folder to write to it, and everyone else can still read it. A machine that crashes keeps its folders checked out until someone forces a takeover, which throws away its unfinished writes. A third mode lets every machine write anywhere, but the docs don’t say what happens when two write the same file. Archil also charges for data sent to compute outside Archil, which matters when sandboxes run elsewhere. Mesa offers versioned folders that agents mount (on Linux, through FUSE) or open from an SDK. Each folder has a history of snapshots and named branches. Mounts on the same branch see each other’s edits within seconds, and when two agents edit the same file in the same second, Mesa keeps both versions, with conflict markers in the file. Mesa says it is built for thousands of agents reading and writing at once. Both cover parts of the combination from the start of this post: private workspaces and shared files. Their docs leave the rest unclear:- neither publishes tests with hundreds or thousands of agents writing at once;
- neither describes task claiming or a feed of changes for coordination;
- sending a result to one agent or a group comes down to access settings you configure yourself;
- recovery after a crash is documented for Archil and not for Mesa;
- both need FUSE inside the sandbox, or Mesa’s SDK, which rules out some sandboxes.
A field that’s changing fast
Most of the products in this post didn’t exist eighteen months ago.
Sandbox companies are adding volumes and snapshots. AWS and Google are shipping file systems meant for agents. Git hosting is being rebuilt for machines instead of people. Startups are selling file systems for agents, and researchers have started measuring how agents share work.
We haven’t found a product that does all of it together and shows it working at a thousand agents: private workspaces that move between providers, shared git, results you can hand to other agents, recovery from crashed sandboxes, and coordination that doesn’t block, at a price that doesn’t climb with every file read. Most of the parts exist, and they change month to month.
If you run large groups of agents and have hit any of this, we’d like to hear how you dealt with it.

