Fork your data
like code.
High-performance file systems for parallel AI workloads.
- forks
- 2
- bytes copied
- 0 B
of a 4.2 TB workspace
- stored once
- shared by reference
- written by a fork
Picture: a 4.2 TB workspace called main, drawn as a sheet of solid blocks. Two forks of it, fork-a3f2 and fork-9c41, are stacked with it: fork-a3f2 behind it, up and to the left, and fork-9c41 in front of it, down and to the right. Each fork is drawn as outlines of main's blocks, because it shares them and holds no copy. The few solid blocks in a fork are the ones that fork has written. Bytes copied: 0.
Amulet in four numbers
- mount, any size
- <100ms
- copied per fork
- 0B
- p99 read
- 1.9ms
- sustained per mount
- 8.4GB/s
Built by researchers and engineers from
Buckets were not built for parallel agents.
Run a fleet on one and you get two bad choices. Copy the data for every agent, or let them share it and overwrite each other.
14:02:11.204agent-01PUT results/eval.jsonl200 OK
14:02:11.911agent-02PUT results/eval.jsonl200 OK
14:02:12.050agent-01GET results/eval.jsonlagent-02's bytes
- copy per agentCopies are slow.
- Give each agent its own copy and every run waits on 4.2 TB before it starts.
- one shared prefixShared writes are last-writer-wins.
- Two agents write the same key. Both get 200 OK. The later write replaces the earlier one.
A faster foundation for parallel AI.
Built for the work that cannot wait
Snapshot, branch, and roll back instantly
Freeze a clean dataset, branch in milliseconds, and merge or roll back without copying.
Diagram: a base checkpoint as a stack of four slabs of blocks. Three training runs branch off it. Each run is a thin, nearly empty plate holding only the few blocks it changed. Keep every worker on the same data
People and agents share one live workspace, so every run picks up where the last one ended.
Diagram: one workspace as a slab of blocks, with four workers above it, vm-01 to vm-04. Each is tied straight down to the same workspace: one writable namespace, four writers. Experiment freely. Keep your data safe.
Work survives interruptions, failures, and restarts—ready when you return.
Diagram: a workspace as a slab of blocks, with three sandboxes above it. One is running. One has been torn down and is drawn dashed; the blocks it wrote are still lit in the workspace. A new one has just mounted the workspace, in under 100 ms. Reach any dataset instantly
Open what you need fast, from a few gigabytes to an entire data estate.
Diagram: three stores of data side by side, one of gigabytes, one of terabytes and one a whole data estate, each a taller stack of blocks than the last. One agent sits above them with a line straight to a single lit block in each. p99 read is 1.9 ms.
Mount. Fork. Work. Publish. Restore.
Each step is the operation itself: what was run, what came back, and what changed.
01/ 05Mount
Mount in under 100 ms.
A workspace mounts as an ordinary Linux filesystem in under 100 ms. Its size does not change that.
p99 read 1.9 ms · 8.4 GB/s per mount
- mount
- <100ms
- p99 read
- 1.9ms
- per mount
- 8.4GB/s
agent-01 $ amulet mount corpus ./corpus &mounted# 4.2 TB in < 100 msagent-01 $ ls ./corpuscheckpoints datasets evals runsDiagram: the branch main, 4.2 TB, at revision v-0214, mounted at the path ./corpus. 02/ 05Fork
Fork it. Copy nothing.
A fork takes milliseconds and copies 0 bytes. Each agent gets a writable workspace; blocks stay shared until a fork writes.
2 forks · 0 B copied
sbx-a3f2 $ amulet mount corpus@fork-a3f2 ./work &mounted# 0 B copiedsbx-9c41 $ amulet mount corpus@fork-9c41 ./work &mounted# 0 B copiedagent-01 $ amulet branches corpusfork-a3f2 fork-9c41Diagram: two branches leave main at v-0214, fork-a3f2 and fork-9c41. Each copied 0 B. 03/ 05Work
Every change is a commit.
Agents read and write plain paths. Each change lands as an immutable, content-addressed commit that records who produced it.
agent · session · run
sbx-a3f2 $ python eval.py --suite regress --out ./work/evalswrote ./work/evals/regress-0412.jsonl wrote ./work/evals/summary.json# commit c-41d7sbx-a3f2 $ ls ./work/evalsregress-0412.jsonl summary.jsonDiagram: fork-a3f2 gains commits c-9f2c and c-41d7, and fork-9c41 gains c-7be0. Commit c-41d7 changed three blocks, and records agent eval-runner, session s-51c2 and run r-0412. 04/ 05Publish
Publish. Conflicts are explicit.
Publishing is conflict-checked. A stale writer gets an explicit conflict, never a silent overwrite.
no last-writer-wins
Commit history of main, newest first Revision Change Agent Session Run State 1v-0215 publish fork-a3f2address 9f2c41d7…e0b3 eval-runner s-51c2 r-0412 published 2— publish fork-9c41base v-0214 · head v-0215address 7be05a19…c44f trainer s-88d0 r-0413 conflict v-0214 baselineaddress 2d6e88f0…1a7c ingest s-17aa r-0398 published - publish fork-a3f2mainv-0215 published
- publish fork-9c41mainconflict: base v-0214, head v-0215
- fork-a3f2 lands on main as v-0215.
- fork-9c41 started from v-0214, so its write is refused. Nothing is overwritten.
- Each commit names its agent, session and run.
3commit c-41d7
- agent
- eval-runner
- session
- s-51c2
- run
- r-0412
- parent
- v-0214
- address
- 9f2c41d7…e0b3
Diagram: fork-a3f2 is published and main moves to v-0215. fork-9c41, still based on v-0214, tries to publish. Its write is wiped back and flagged as a conflict: base v-0214, head v-0215. 05/ 05Restore
Restore any revision, exactly.
Any published revision can be restored exactly. The same content address means the same bytes.
same address, same bytes
Commit history of main, newest first Revision Change Agent Session Run State 2v-0216 restore v-0214identical to v-0214address 2d6e88f0…1a7c ops s-9e31 r-0414 restored v-0215 publish fork-a3f2address 9f2c41d7…e0b3 eval-runner s-51c2 r-0412 published 1v-0214 baselineaddress 2d6e88f0…1a7c ingest s-17aa r-0398 published - restore v-0214mainv-0216, identical to v-0214
- Pick any published revision.
- main returns to it as v-0216.
- Same content address: the same bytes.
3restore exact
- v-0216
- 2d6e88f0…1a7c
- v-0214
- 2d6e88f0…1a7c
- difference
- 0 B
Diagram: main is restored to v-0214 as a new revision, v-0216, with the same content address.
Agents never hold bucket keys.
An agent gets a path and a token. The credentials and the data stay in the cell.
- Short-lived tokens
- An agent mounts with a token that expires and is scoped to one workspace.
- An ordinary path
- The agent sees a filesystem path. Its tools need no storage adapter.
- No bucket keys
- Agents never hold object-store credentials. No bucket key reaches a sandbox.
- Data stays in the cell
- Hot and cold data both stay inside the Amulet cell.
Five questions, answered.
Pricing is on its own page01What is Amulet?
A high-performance file system for parallel AI workloads. Workspaces mount as ordinary Linux filesystems, fork without copying data, and keep every change as a versioned commit.
02How fast are mounts and forks?
A mount completes in under 100 ms, regardless of workspace size. A fork takes milliseconds and copies 0 bytes: data is shared until a fork writes.
03How does versioning work?
Every change is an immutable, content-addressed commit that records the agent, session and run behind it. Publishing is conflict-checked, and any published revision can be restored exactly.
04Do agents need cloud credentials?
No. Agents mount with short-lived, workspace-scoped tokens and see an ordinary filesystem path. They never hold object-store credentials, and data stays in the Amulet cell.
05How do I get access?
Amulet is in private beta. Accounts are approved in small batches. Book a demo and tell us about your workload.
See it on your
own workload.
Amulet is in private beta. Accounts are approved in small batches.