···11+MIT License
22+33+Copyright (c) 2026 laulauland
44+55+Permission is hereby granted, free of charge, to any person obtaining a copy
66+of this software and associated documentation files (the "Software"), to deal
77+in the Software without restriction, including without limitation the rights
88+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
99+copies of the Software, and to permit persons to whom the Software is
1010+furnished to do so, subject to the following conditions:
1111+1212+The above copyright notice and this permission notice shall be included in all
1313+copies or substantial portions of the Software.
1414+1515+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1616+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1717+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1818+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1919+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2020+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121+SOFTWARE.
+28-10
README.md
···44> protocol, on-disk format, and CLI surface may change. Don't use it for
55> data you can't regenerate. Back up your repos.
6677-jj workspaces over the network. One server, many agents, real files.
77+jj workspaces over the network. One server, many agents in many vms, real files.
8899```
1010tandem serve --listen 0.0.0.0:13013 --repo ~/project # server
···3232## How it works
33333434```
3535-┌──────────┐ Cap'n Proto RPC ┌──────────────┐
3636-│ Agent A │◄────────────────────────►│ │
3737-│ (tandem) │ │ Server │
3838-└──────────┘ │ (tandem │
3939-┌──────────┐ Cap'n Proto RPC │ serve) │
4040-│ Agent B │◄────────────────────────►│ │──► git push
4141-│ (tandem) │ │ jj+git repo │
4242-└──────────┘ └──────────────┘
3535+┌──────────────┐ ┌──────────────────────────┐
3636+│ Agent A │ Cap'n Proto RPC │ │
3737+│ (Machine B) │◄─────────────────────────►│ tandem serve │
3838+│ │ │ (Machine A) │
3939+│ ~/work-a/ │ │ │
4040+│ src/auth.rs │ │ ┌────────────────────┐ │
4141+│ src/lib.rs │ │ │ Content-Addressed │ │
4242+└──────────────┘ │ │ Store │ │
4343+┌──────────────┐ │ │ │ │
4444+│ Agent B │ Cap'n Proto RPC │ │ jj+git repo │ │
4545+│ (Machine C) │◄─────────────────────────►│ │ operations │ │──► git push
4646+│ │ │ │ views │ │
4747+│ ~/work-b/ │ │ │ op heads (CAS) │ │
4848+│ src/api.rs │ │ └────────────────────┘ │
4949+└──────────────┘ │ │
5050+┌──────────────┐ │ │
5151+│ Agent C │ Cap'n Proto RPC │ │
5252+│ (Machine D) │◄─────────────────────────►│ │
5353+│ │ │ │
5454+│ ~/work-c/ │ └──────────────────────────┘
5555+│ tests/*.rs │
5656+└──────────────┘
4357```
5858+5959+Each agent has a full working copy on its local disk (fast reads/writes).
6060+The commit store lives on the server. When Agent A commits, Agent B sees it
6161+instantly in `tandem log` — no fetch, no pull, no merge.
44624563The `tandem` binary has two modes:
4664···197215198216### Remote machines: sprites.dev / exe.dev / SSH
199217200200-The real thing. Server on one machine, agents on others.
218218+Server on one machine, agents on others.
201219202220```bash
203221# Machine 1 — server (your laptop, a VPS, etc.)