@readmodelmag
MODEL

Best Tools · Coding

Tested

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.init failed: “the Store install runs as user 1000; it must run as user 0, the daemons' user…”. As root, Init of a tiny shop/ tree (tax.py RATE = 0.08) took 20–24 ms; the Store file was 212,992 bytes.
  • Parallel agents: forked agent-a and agent-b, wrote /tax.py to 0.10 and 0.05 on each. Both writes Committed. Conflict is not on write across Branches.
  • Merge receipt: branch.merge("agent-a", "agent-b", "merged-ab", …) returned Conflict: 1 file, hunk line 1 RATE = 0.10 vs RATE = 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 reported overwroteCount: 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") returned NoSuchBranch even though list_branches lists main and fs.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.

  • 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.