On 15 March, the product phrase was “local and cloud teleportation.” Nice phrase. Slightly dangerous.

Meeting-room version is easy: start work in the cloud, continue it on the laptop, send it back when the laptop is no longer the right place. People want that. Agents want the private service on localhost, the native toolchain, the GPU, the VPN, the browser profile, the quick loop. They also want the laptop to sleep without killing a two-hour run.

Unfortunately, “teleportation” can mean two very different things. Move the execution and the product feels flexible. Move the files and the product has created a second truth.

Host handoff is not file handoff

Fabric already had a runtime profile for the first half of the problem. A run can start. A host can register. A host can send heartbeats. A handoff can be prepared and completed:

runtime/run.start
runtime/host.register
runtime/host.heartbeat
runtime/handoff.prepare
runtime/handoff.complete

Those verbs made the useful boundary visible. A laptop can become a host. It can say “I am here.” It can prove it is still alive. It can accept a run. None of that says the laptop now owns the workspace.

That distinction saved the design. Podium owns runtime admission, process lifecycle, host coordination, agent event forwarding, and workspace bindings. Chronicle owns workspace reads and writes, search, checkpoints, sync feeds, content fetch, and materialized views. Diminuendo shows the client a stable product surface. Fabric names the shared contract between them.

After that, local mode stopped being a second workspace. It became a place where execution could happen.

Barrier as receipt

Chronicle made the file side less negotiable.

In the Phase 2 sync test, an agent Chronicle mount starts in replication mode, three files are written before the sandbox exists, a sandbox Chronicle mount connects to the agent socket, and .chronicle/barrier becomes the blocking sync point. Only after that does the test inspect the sandbox side.

File contents are almost comically plain:

test1.txt          Hello from agent
test2.txt          Second file
subdir/nested.txt  Nested file

Plain is good. A sync system that cannot move “Hello from agent” without ambiguity has no business carrying an agent workspace. The same script then writes live_test.txt, waits on the barrier again, updates test1.txt, and checks the new content on the sandbox mount.

That sequence changed the product claim. “Continue locally” could no longer mean “pretend two directories are one project.” It had to mean: local execution sees the same Chronicle-backed workspace contract, and the system has a receipt when the view has converged.

Reconnects need memory

A second Chronicle test caught the failure that usually appears later, after everyone is tired.

If the WebSocket bridge drops during initial sync, the sandbox receiver must resume from a persisted watermark. Otherwise the agent re-ships from sequence zero on reconnect, and the sandbox reprocesses history it already handled.

Regression coverage pushes 1,000 file events into the agent, resumes from the current sequence minus 400, and asserts that the agent sends only the tail. Another branch sets the ring buffer to 64, pushes 200 events, resumes too far back, and expects FullResyncRequired. A third check writes watermark 600 into SQLite, restarts the worker, reads 600 back, and verifies that an explicit 0 reset works after a full resync.

These are not glamorous tests. They are the difference between “the bridge reconnected” and “the bridge reconnected without lying about what both sides have already seen.”

What the UI can honestly say

Once the runtime and file receipts were separated, the interface became less mystical.

In product terms, the control is not asking the user to choose a consistency model. It is asking where the work should run next. Continue here. Continue there. Same project, same Chronicle history, different execution place.

Several bits of machinery still have to behave for that sentence to be true: request and acknowledgement, host readiness, drain phases, rollback, heartbeats, client blocking while no runtime is available, barriers for sync, and watermarks for resume. Boring list. Necessary list.

Coding agents are very willing to implement state transitions before the states are properly named. If the authority boundary is vague, the code will invent one by accident, and the user will discover it at the worst possible time.

A painterly editorial collage for cloud execution and local files, showing the concrete objects and system relationships around runtime switch, file authority, and handoff states.
Runtime switch, file authority, and handoff states.

Local and cloud both matter in AI development environments. Local has private services, native tools, fast loops, and the muscle memory of a real machine. Cloud has long-running work, isolation, reproducibility, remote agents, and the pleasant fact that a laptop can sleep.

Good products will let work move between them.

They have to move the right thing.

Chris Chabot · March 2026