wigwam sync

Live. Every workspace. Every device.

As you and your agents work, AgentFS captures the history and wigwam sync replicates it. Open the same project on your laptop or phone and see where the work stands — end-to-end encrypted, readable only on your devices.

This is not git. There is no push, no pull, no commit to wait for. A write an agent makes on one machine is on your other machines as it happens, in every workspace.

this machineAgentFS makes the writewritesrc/auth/session.rsclaude-code:7f3a91 · +87 Bsealed herekey stays onyour deviceslive · no pushrelay▮▮▮▮ ▮▮▮▮▮▮ ▮▮▮▮▮▮▮▮▮ ▮▮ ▮▮▮▮▮▮▮ ▮▮▮▮▮▮▮ ▮▮▮▮▮▮▮▮▮ ▮▮▮ ▮▮▮▮▮cannot read itstill sealedyour laptopthere before you lookafs diff task-a → +87 Byour phoneopened in the browser IDEtask-a · session.rs · live
A write AgentFS made on one machine is sealed there, pushed as it happens, and stored on the relay in a form the relay cannot read — not the file, not the path, not the project's name. Your other machines and the browser IDE hold the key and open it locally. Nothing is copied by hand and nothing is pushed or pulled.

01

One source of truth, live everywhere

The project is one thing: one record, every write in it. Every machine you own works on that same thing, live. Start on the desktop, sit down at the laptop and keep going — the edit from a second ago is there, in the same workspace. There is nothing to push and nothing to pull, so there is nothing to conflict.

gitwigwam sync
when it moveswhen you pushas the write happens
what movescommits you chose to makeevery write, staged or not
which branchesthe ones you pushedevery branch and every workspace
on the other machineafter you pullalready there, before you look
who did itthe committerthe harness, session and command, per write

02

Every workspace, every device

Three agents on your desktop, each in its own workspace, mid-task. Your phone sees all three — each write, as it is made, in the workspace it was made in — and so does your laptop. Not a summary when they finish: the work, while it is happening.

my-projectlive · desktop
14:02:11 task-a src/auth/session.rs +87 B claude-code:7f3a91
14:02:11 task-c src/db/migrate.rs +1.2 KB claude-code:b40d17
14:02:10 task-b src/api/routes.rs +312 B codex:c21e08
14:02:09 task-a src/auth/tests/expiry.rs new claude-code:7f3a91
14:02:08 task-c Cargo.toml +24 B claude-code:b40d17
14:02:08 task-b src/api/v1.rs → routes.rs rename codex:c21e08
What your phone shows while the agents work. Open task-a and the tree is that agent's tree, right now; afs diff task-a on your laptop says the same thing it says on the desktop.

The record, not a folder

Nothing watches files or copies directories. What replicates is the AgentFS record — every write, snapshot and integrate, with the writer attached — and each machine rebuilds the same tree from it. Whatever git ignores never leaves the machine; wigwam sync --ignored lists what stays behind.

Offline, and two machines on one thing

Offline, work continues locally and catches up on reconnect. History is appended in order, so two machines writing to one workspace hold the same history. A head move on main that lost a race replays, the way afs integrate does — nothing merges silently.

03

Sealed before it leaves

Every write, snapshot and file is encrypted on your machine, with keys the relay never holds. The relay stores and routes sealed data; it cannot read a file, a path, a message, or even the project's name — it lists opaque ids. Your other machines and your browser hold the key and open everything locally.

What the relay holds

Sealed history and snapshots, under opaque project ids, with sizes and timestamps. Enough to hand the project to your next machine. Lose a laptop, and wigwam sync get on the next one brings the whole project back, history included.

What it cannot see

File contents, paths, workspace and branch names, stage messages, or which agent wrote what. The same key that protects your terminals protects this — see encryption.

04

Using it

# this machine: the project should sync
$ wigwam sync add my-project
╭─ Syncing my-project · 4 branches · 22 old workspaces · 184 MB
│
│   ✓ Uploading project      184 MB · 12,431 changes                 41 s
│   ✓ Available to get                                               43 s
│   ✓ Uploading history      22 old workspaces · in parallel         93 s
│
╰─   Synced in 1:35 · 340 MB · avg 3.6 MB/s

# any other machine: get it, full history, mounted and ready
$ wigwam sync get my-project @~/Repos/my-project

# from then on it just stays in step
$ wigwam sync status
my-project
  state  syncing
  push   4 branches · in step

Every replica keeps the full history by default; --history heads keeps only the current state. The project has to be an AgentFS project first — afs adopt makes one from any repo. Linux and macOS today.

05

Good to know

Which machine is the source of truth?

The project is. There is one record, and every machine holds all of it, live. Add from any of them, get on any of them, work from whichever is in front of you.

So where does git fit?

Wherever you want it. Sync never waits on a commit; git stays what it is. afs push on any replica turns main into an ordinary commit in your repo.

What about my phone?

The built-in IDE opens the project straight from the relay and decrypts it on the device. Nothing to install.

How do I stop?

wigwam sync remove stops this machine; every copy stays. wigwam sync delete removes the project from the relay for every machine — local copies still stay.

Get Started