Tandem is a forge without a repository web UI. You can think of it as “jj workspaces over the wire”. Each checkout is a workspace; published updates in one workspace are synced and visible in the others.
Quick start
$ curl -fsSL https://tandem.land/install | sh # make sure ~/.local/bin is on your PATH $ td clone https://tandem.land/you/my-project my-project --workspace agent-a $ cd my-project $ td daemon
td daemon watches this workspace, snapshots file changes, and publishes them to the shared repository. Leave it running while you work.
1. Edit a file in agent A’s workspace
After editing hello.txt in agent A’s workspace, inspect the change:
$ td diff --git
diff --git a/hello.txt b/hello.txt
new file mode 100644
index 0000000000..f5ccd1bacb
--- /dev/null
+++ b/hello.txt
@@ -0,0 +1,1 @@
+hello from agent-a
The daemon snapshots the edit and publishes it to the shared repository.
2. Read it from agent B’s workspace
Give agent B its own workspace and a scoped credential for the same repository.
After A’s snapshot is published, B can read the file from shared history:
$ td file show --ignore-working-copy -r 'agent-a@' hello.txt
hello from agent-a
B reads A’s published file. B’s own working files stay unchanged.
Run your own server
Run the same native Rust host with your own S3-compatible bucket and HTTPS proxy. One supervised process serves the website, installer and repository API. Its local jj caches are disposable; the bucket keeps namespace ownership, the repository catalog and published history.
The self-hosting guide includes a source build, a systemd service, S3 configuration and a local Docker S3 example. Preserve your signing secret outside the cache and run one active host.