Code as strands, not files.
Strand is a substrate where many AI agents author one codebase in parallel — definitions are identified by the hash of their structure, the type-checker is the gate, and the only conflict left is two agents binding the same name to different content.
Identity is structure
A definition's name is never its identity; its hash is. Two agents writing the same logic converge on the same hash.
References are pinned
Callers reference the hash, so rebinding a name can never silently break them.
Park, don't block
The one true conflict — same name, different content — parks that name; everything else merges.
Two planes
Agents author a content-addressed graph: every definition hashed, every reference pinned. Humans read a distilled TypeScript projection of the same graph — one substrate, two planes.
def rowOk (g: Grid) (row: Int) (v: Int) -> Bool = rowHasFrom g row 0 v == falseThe green-gate
Nothing enters the namespace unless the whole namespace type-checks after it; correctness is the gate's job, not the agent's. A bad agent output is rejected and retried with the compiler's actual error — it can never corrupt the store.
A live swarm built this
A queue of 22 dependency-gated tasks, provider-agnostic workers, and a real claude model authored a complete Sudoku generator through the gate — every task landed green on its first attempt.
The solver was then verified against a known puzzle by an oracle sharing zero code with the swarm, in both execution engines.
The proof, running
The solver below is the swarm's own output — Strand transpiled to TypeScript, running in your browser.
Quickstart
strand init
strand submit --as you --intent "add" --code "def double (n: Int) -> Int = n * 2"
strand merge
strand eval "double 21"
strand-swarm plan && strand-swarm work --as w1 --provider claude