You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Why “hybrid”: Overeasy is strong at Disk, weak at Mind. Sandy Tier A is strong at Mind (while warm), weak at Disk-after-kill. Fan-out needs Sandy/forkd either way — an Overeasy file-branch is not the same as N live children.
Analogy: Disk = the notebook on the desk. Mind = what’s in your head mid-sentence. Fan-out = cloning yourself to try two answers in parallel.
Overeasy (disk)
Public surface is CLI + Modal examples (implementation is the shipped oe binary, not open-sourced in-tree).
Overeasy = durable filesystem overlay (files survive kill/reboot; process memory does not).
Sandy = REPL / sandbox mind today (warm box + dill), later VM memory + disk checkpoints with in-guest branch/restore (Phase 3–4 — not built yet).
They are different layers of the stack, so a hybrid is possible (see below).
Feature matrix
Capability
Overeasy
Sandy today (Tier A)
Sandy planned (Tier B, Phases 3–4)
Persist files across sandbox kill
Yes (FUSE session → S2 log + S3)
Partial (sandbox must stay alive)
Yes (forkd checkpoint of workspace + more)
Persist Python / REPL locals
No
Yes (dill .rlm_state)
Yes (memory + disk checkpoint)
Pause / resume across hosts
Yes (remount same session id)
No (warm container on one host)
Yes (hibernate / restore)
Branch cheaply
Yes (oe session branch)
No
Yes (branch(checkpoint, n) via forkd CoW)
Revert / time-travel
Yes (branch --to <timestamp>)
No
Yes (restore(checkpoint_id))
Parallel live children from one warm state
No (FS branch ≠ N running VMs)
Fan-out via rlm_query (new children)
Yes — CoW fork-from-warm (~ms)
In-guest API (snapshot / restore / branch)
No (CLI / host: oe …)
No
Planned (next to rlm_query)
Ties into call-tree / provenance
No
Call tree for LLM/RLM calls
Planned: real checkpoint_id in JSONL
Substrate
FUSE + S2.dev + S3 (Modal-first)
Docker or forkd control plane
forkd / KVM required for full Tier B
Maturity
Experimental OSS (Aug 2026)
Tier A in main; Tier B no PR yet
Spec only
Overeasy
What it is
A virtual filesystem served as a FUSE mount over a base directory. Changes are copy-on-write under a session id. An append-only log (S2) + object storage (S3) make the session durable so you can pause, resume on another host, branch, or revert to a prior timestamp.
Features
oe session new / oe mount <session_id> / oe unmount
oe session branch and branch --to <timestamp> (revert = new branch from past event)
forkd parallel children (host reachability) — prerequisite for Tier B, not checkpoint API itself
Features (planned Tier B)
Incremental CoW checkpoint (memory + configurable disk scope)
Survive kill / eviction; hibernate idle sessions to storage
Real checkpoint_id (not a fake ckpt-{sandbox_id})
In-sandbox snapshot / restore / branch(n) for backtracking rollouts
Deterministic RL episodes from one warmed checkpoint
Pros
Keeps the “mind” of the agent (locals / warm context), not only files
Aligns with recursive RLM + call trees + parallel rollouts
Can become zero-cost idle (hibernate) instead of pinning a warm box
Differentiator vs backends that only keep a container alive or only sync files
Cons
Tier B is hard (forkd/KVM) and not implemented yet
Heavier ops than remounting a FUSE session
Full Tier B won’t land on Docker-only hosts
More moving parts (control plane, reaper, storage upload, readiness)
Hybrid: advantages of both
Yes — a hybrid is possible, because the two systems solve different layers. They are complementary, not mutually exclusive.
Layer split
Layer
Job
Tool
Disk
Files durable across kill/reboot; cheap FS branch/revert
Overeasy-like FUSE overlay on /workspace
Mind
Python locals, warm imports, RLM context_N
Dill today → forkd memory checkpoint later
Fan-out
N parallel live children from one warm point
forkd CoW (Overeasy branch alone is not enough)
Story: the agent writes under a mounted FS session → files survive host death. Separately, Sandy checkpoints the guest (or at least dill) so “where the REPL was” also comes back. Use Overeasy-style branch when you only need file divergence; use forkd branch when you need live parallel sandboxes with shared warm memory.
What you get
Overeasy’s pause/resume for files and Sandy’s warm mind
Idle hibernate without losing workspace artifacts
FS durability alone on Docker hosts where forkd isn’t available
What you don’t magically fix
Overeasy still doesn’t give parallel warm VMs — you still need forkd for that
Two systems to operate (FUSE + S2/S3 + forkd)
Restore order matters: remount FS, then restore memory (or memory won’t see the files it expects)
More latency/complexity if every turn touches both layers
Phased hybrid (practical)
Now: Sandy Tier A (warm + dill); optional FS overlay only for /workspace artifacts
Soon: Overeasy-style durability under /workspace for hibernate / kill-resume of files
Later: forkd memory+disk checkpoint; FS layer becomes backup / cross-host file sync, not the only source of truth
Bottom line for hybrid: files on an event-log overlay, mind on VM/REPL checkpoint, fan-out on CoW forks. Overeasy alone or Sandy Tier A alone each miss half; together they cover both if you accept the ops cost.
When to pick which
If you need…
Prefer
Files durable across kill/reboot, simple branch/revert
Filesystem in Userspace. A normal program acts as a filesystem: apps write to a mount; the kernel forwards those ops to the program. Overeasy uses this so every write can be logged and uploaded. Needs /dev/fuse (and usually fuse3) on Linux. Analogy: a proxy for the filesystem.
CoW
Copy-on-Write. Share one copy of data until someone changes it; only then copy the changed bits for that branch. Why forkd can spawn children in tens of ms and Overeasy can branch sessions cheaply — you don’t clone the whole world up front. Analogy: two people reading one doc until someone edits and gets their own changed pages.
REPL
Interactive Python environment inside the sandbox (locals, imports, variables). Sandy persists this with dill / planned VM checkpoints; Overeasy does not.
dill
Python serialization library (like pickle, but handles more object types). Sandy saves REPL locals to .rlm_state.dill across executes.
Tier A
Sandy’s shipped keep-alive persistence: sandbox stays warm; dill + RLM SupportsPersistence protocol. “Don’t hang up the phone.”
Tier B
Sandy’s planned forkd checkpoint/restore/branch of memory + disk. “Hang up, come back, or open 8 parallel worlds from a saved moment.” Not built yet.
forkd
Forking microVM / snapshot stack Sandy uses for fast CoW children (KVM). Prerequisite for full Tier B.
checkpoint
A saved point in time you can restore or branch from. Overeasy: durable FS stream position (oe checkpoint). Sandy Tier B: forkd checkpoint_id for memory+disk.
branch
Create a divergent path from a prior state. Overeasy: new FS session from log tail or timestamp. Sandy Tier B: N live CoW sandbox children from one warm checkpoint.
session id
Overeasy’s durable identity for a filesystem overlay across mounts / hosts.
RLM
Recursive Language Model pattern: agents spawn child sandboxes (rlm_query), keep call trees, often need warm context across turns.
call tree
Provenance graph of who called whom (parent/child sandboxes, depth, cost). Sandy records this; planned to bind real checkpoint ids to nodes.
hibernate
Stop paying for a live sandbox but keep enough state to resume later (files and/or mind).
warm
Sandbox (and often REPL) already running with state loaded — no cold start / re-import.