Best Tools · Coding
LayerFS
SummaryAgent filesystem: merge caught our conflicting edits; publish overwrote the earlier layer.
Filed November 5, 2026. Price, as published by the maker: Free, MIT. Source-only release..
Open the maker’s site (opens in a new tab)
MODEL notes
URL: https://github.com/Ephemeral-AI-Lab/layerfs (opens in a new tab) · https://layerfs.ai (opens in a new tab) · release v1.1.0 (Oct 24, 2026). JavaScript packages @layerfs/agent, @layerfs/backend, @layerfs/runtime ship as source under api/ (not npm).
What it does: A filesystem substrate for coding agents. Each agent works on a Branch over shared committed history in one SQLite Store; Commits are deduplicated checkpoints. Sandboxes mount ephemeral Workspaces for Bash; Store file ops (fs, branch, project) can run in-process on Linux.
Pricing: Free, MIT. Source-only release (no public prebuilt binary or npm publish).
✅ Tested hands-on: built the native Node addon with system Rust 1.85.1 (~67 s); stand-in SDK/CLI tests; real Store init/write/merge/publish on ext4. No Docker Sandbox, no FUSE mount.
- Stand-in suite: 36/36 SDK call cases and 70/70 CLI-vs-SDK tests passed against the fake native binding (no Store).
- Init needs root: as uid 1000,
LayerFS.initfailed: “the Store install runs as user 1000; it must run as user 0, the daemons' user…”. As root, Init of a tinyshop/tree (tax.pyRATE = 0.08) took 20–24 ms; the Store file was 212,992 bytes. - Parallel agents: forked
agent-aandagent-b, wrote/tax.pyto0.10and0.05on each. Both writes Committed. Conflict is not on write across Branches. - Merge receipt:
branch.merge("agent-a", "agent-b", "merged-ab", …)returnedConflict: 1 file, hunk line 1RATE = 0.10vsRATE = 0.05, “nothing was created”. - Publish is different: publishing agent-a's tax commit, then agent-b's diverging tax commit, both returned
Added. The second publish reportedoverwroteCount: 1(it overwrote agent-a's layer). Last publish won; merge was the call that refused. - The catch, two of them: (1) Init on this release expects the Store install to run as user 0. (2)
branch.list_commits("main")returnedNoSuchBrancheven thoughlist_brancheslistsmainandfs.read("main", …)works — main behaves as a Layer stack, not a commit Branch. Also: only the Disposable Store profile runs (WAL,synchronous=OFF); an OS crash can lose recent history. We did not test Docker Sandboxes, FUSE Workspaces,workspace.exec, Durable mode, macOS/Windows worker, or LayerFS × DSH. Verdict: Worth a hard look if you want multi-agent history without copying trees — and you will run Init as the daemon user and use merge (not only publish) when two agents touch the same path. Skip it if: you can't run the Store install as root/daemon user, or you need crash-safe durability today.
Full issue: MODEL Nº 05.
Related tools
- Deslop
Tested · Oxlint rules that fail common AI TypeScript slop patterns.
- FlashProve
Tested · CPU verifier for inference proofs; our tests covered synthetic and toy statements only.
- Ghostty 1.4.0
Tested · The open-source terminal's biggest update in seven months. It also fixes a bug where a folder name from a cloned repo could quietly replace your clipboard.