/harness · proofs · runtimes · sdk

One agent proposes.
Another proves.

The tests are drawn by hashing the proposal with a secret the proposer never sees, so the check an agent invents cannot be the check its work was built to survive. Below: one round from its real bytes, what the result costs to read afterwards, and what you can clone, run or commission.

(⚔️⊥⿻⊥🧙)😊 = neg ⊕ bnot → succ

It is a proving system with the roles mirrored. In cryptography the party that submits a claim is the prover and the party that checks is the verifier; here the proposer is that claimant and the seat that proves is the check — the verifier by another name. The test is a challenge hashed from the sealed proposal, the Fiat-Shamir step that underlies zero-knowledge proofs, so the claimant can never tune to it.

One round, from real bytes

Watch the Gap hold.

A practice bout shipped in the public repository: compress an emergency field guide while a held-out gate stays green. Every line below is quoted from the run's own files.

The spar, round one, proposal two
  1. measureThe field guide is counted by the rule in frontier.json: 730 words. Nothing is proposed yet."metric": 730
  2. propose 🧙The restructurer lens proposes one lever: rewrite the guide as telegraphic bullets. The proposal is serialised canonically; those bytes are the artefact.leverId p2-restructure-to-telegraphic-bullets
  3. hold-apart ⿻The Gap hashes the proposal's canonical bytes into a seed the proposer never saw, and draws eight facts from the original guide to ask about.seedHex 1ec8affb29623c553319588df2e8e0dad432f6e711bd92fec5dee3ada8437515 · draw F31 F15 F27 F21 F14 F20 F9 F12
  4. assay ⚔️The prover re-derives the seed from the saved bytes, answers all eight questions from the candidate text alone, and counts the words.VALIDATED · 526 words · gateResult 8/8
  5. criticThe round's two validated levers are classified: the line-editor's structural, the restructurer's probe-limited. The frontier does not move on its own.restructurer probe-limited (526); best still baseline 730
  6. keystone 😊The person folds. The frontier later records 526 under a second draw and a 32/32 census, then 472, sealed as an artefact whose address re-derives from its bytes.af-0f8625eec136 · κ sha256:f57406e1786ad34fdaf22bf1df6f1522d4aafae7ff8e2ad39253b9915dea2a91

Round r1: proposal p2-restructure-to-telegraphic-bullets; seed 1ec8affb…; draw F31 F15 F27 F21 F14 F20 F9 F12; verdict VALIDATED 526 words 8/8; the frontier folded to 526 under a 32/32 census and later to 472, sealed as af-0f8625eec136. the sealed artefact ↗ · the instance ↗

The harness on itself, round one: two mirages caught
  1. measureThe default distribution's README is counted: 1,088 words, every one of the 93 census witnesses present."metric":1088 · "census":93 · "passed":93
  2. propose 🧙Two lenses, blind to each other, on a 12B local model: a line-edit to 720 words and a table-first restructure to 379 words. Both answered leverId "1".proposer gemma3:12b
  3. hold-apart ⿻The engine hashes each proposal's canonical bytes with the run salt; the draw is the whole census, all 93 witnesses.seedHex 615c1d00d4e5ce4428a026d96d13065ad974f1552c9f9d5c7fd9eff63b44a23b · mode census · N 93
  4. assay ⚔️A 27B local model, a different model from the proposer, reads each candidate with the code-side census beside it: 80/93 and 49/93. Both MIRAGE.prover gemma3:27b · VALIDATED 0 · MIRAGE 2 · BLOCKED 0
  5. criticBoth kills structural: the first dropped the inscription, two tool names, the API key variable, the run-file names, Fiat-Shamir and the four rungs; the second dropped forty-four witnesses.K-1 · K-2 · K-3 in notes/KILLED_LEVERS.md
  6. keystone 😊No fold. The frontier stays at 1,088; the run is filed, the runner defect it found (#14: verdicts matched by a colliding lever id) is fixed, and the seeds re-derive.phiInference 1 · RUN VERIFIED

Round r1 on examples/self: proposer gemma3:12b, prover gemma3:27b, phiInference 1; measured 1088 words, census 93/93; two proposals, VALIDATED 0 · MIRAGE 2 · BLOCKED 0; candidates 720 words at 80/93 and 379 words at 49/93; seed 615c1d00…; no fold. the instance ↗

The harness on itself, round two: the first fold
  1. measureThe default README, re-baselined after it gained its title and a pathways pointer: 1,115 words, 95 of 95 census witnesses present."metric": 1115 · "census": 95 · "passed": 95
  2. propose 🧙The proposer's seat handed to two Claude Code subagents, one per lens, briefed on what the last two candidates lost. Their proposals are committed to a file before any seed derives.--proposals · proposer claude-opus-5 (Claude Code subagents, one per lens)
  3. hold-apart ⿻The engine hashes each committed proposal's canonical bytes with a fresh run salt; the draw is the whole census.mode census · N 95
  4. assay ⚔️A local 27B, a different model family from the proposer, judges the hard constraint with the code-side census beside it: 95/95 and 95/95. Both VALIDATED.prover gemma3:27b · VALIDATED 2 · MIRAGE 0 · BLOCKED 0
  5. criticBoth levers structural: one trimmed connective prose in seven sentences; the other deleted the inventory the box already carries and moved the two-model flags into the rung that introduces the second model.2 structural win(s)
  6. keystone 😊The restructurer's 1,069-word candidate re-checked and folded into the artefact and the default README template. A first attempt at this round had died of transport and was refused whole, its one VALIDATED verdict uncounted.1115 → 1069 · phiInference 1 · RUN VERIFIED

Round r2 on examples/self: proposer claude-opus-5 via Claude Code subagents (--proposals), prover gemma3:27b, phiInference 1; measured 1115 words, census 95/95; VALIDATED 2 · MIRAGE 0 · BLOCKED 0; candidates 1092 and 1069 words, both 95/95; folded 1115 → 1069. the instance ↗

The first evocation: the mission document, 1,998 → 1,573
  1. measureThe mission document, copied from the corpus: 1,998 words, all 64 census witnesses present — its numbers and ratios, every heading, every emphasised phrase, the named vocabulary."metric": 1998 · "census": 64
  2. propose 🧙Two Claude Code subagents, one per lens, blind to the census, committed before any seed derived. A line-edit to 1,875 words; a restructure to 1,573 that folds every list and table into inline lists.--proposals · proposer claude-opus-5 (Claude Code subagents, one per lens)
  3. hold-apart ⿻The engine hashes each proposal with a fresh salt; the whole census is the draw.mode census · N 64
  4. assay ⚔️A local 27B judges the hard constraint with the code-side census beside it: 64/64 and 64/64. Both VALIDATED.prover gemma3:27b · VALIDATED 2 · MIRAGE 0 · BLOCKED 0
  5. criticBoth structural. The census cannot see a table become a list; the prover accepted it under the hard constraint as written.2 structural win(s)
  6. keystone 😊Every one of the 27 appendix rows and the substance of all 60 original bullets confirmed present; the 1,573-word candidate folded into the evocation's artefact. Carrying it into the corpus is the keeper's door.1998 → 1573 · phiInference 1 · RUN VERIFIED · corpusFoldBack PENDING

Evocation primer r1: proposer claude-opus-5 via Claude Code subagents, prover gemma3:27b, phiInference 1; measured 1998 words, census 64/64; VALIDATED 2 · MIRAGE 0 · BLOCKED 0; candidates 1875 and 1573 words, both 64/64; folded 1998 → 1573; 27 appendix rows and 60 bullets confirmed. the board ↗

What it costs to read afterwards

Shorter, and still true.

A fold is paid for once and read forever. Tokens were not measured here; bytes are the proxy, and every later read, by a person or an agent, pays for the shorter text. The census is what made shorter safe.

What the artefact costs to read afterwards
730words before
→
472words after
4,403bytes before
→
2,912bytes after
The spar's field guide, before and after three audited folds. Every later read of the guide, by a person or an agent, pays for the shorter text; the census is what made shorter safe. Gate: 32/32 census · 8/8 held-out.
The largest saving is a harness you do not run~1.4Mtokens, spent once, filed so nobody pays twiceCount the claims first. Where every claim is enumerable, an auditor checks them all for zero adversarial tokens. The retired universe-builder spent about 1.4 million tokens learning this, and is kept in the catalogue so nobody pays twice.
Shared memory between agents that never talk

One frontier, one writer.

The proposer and the prover share three files they both read and neither writes: the frontier, the claims register, the kill ledger. Only the person folds. This is the spar's frontier, every fold with the detection probability its gate carried.

730baselinethe moving ceiling's start2026-07-09
573restructure-merge-terse-prosesample 8/32 · detection 0.252026-07-11
526telegraphic-bulletstwo disjoint draws + 32/32 census · detection 1.02026-07-11
472r4-compose-line-edit8/8 + exhaustive census · detection 1.02026-07-11

730 → 573 → 526 → 472; the sample fold carried detection 0.25, the census folds 1.0.

Proofs · runtimes · SDK

What you get, file by file.

Each card names the file that does it and whether it runs today. Nothing below is described that cannot be opened.

Proofs — what a run leaves behind
proof · runningThe axioms, re-proven every runThe algebra neg(bnot(x)) = succ(x) is computed for all sixty-four values on every run, from an independent copy of the axioms the engine does not share. A config still wearing a TODO, a frontier whose best exceeds its baseline, a sample gate where a census is owed: each is refused.engine/conform.mjs
proof · runningThe seed re-derives from the proposal's bytesEvery proposal's witnesses were drawn from sha256 of its canonical bytes plus a salt the proposer never saw. An offline, fail-closed verifier re-hashes the saved bytes; a mismatch voids the round. The run page shows the recorded seed beside the re-derived one.tools/verify_run.mjs · tools/render_run.mjs
proof · runningA sealed result carries its own addressA validated run is minted into an artefact: a κ-labelled record with byte copies of every proposal, seed, verdict and the chronicle. The label is excluded from its own preimage, so it is never trusted, only re-derived; the mesh auditor re-derives every κ in a tree.tools/kappa.mjs · tools/mint_artefact.mjs · tools/holon_audit.mjs
proof · runningOnly a signature mints an edgeA relation between two sealed results is a κ→κ reference. Walked from content it is a proposal; signed by the counterparty (ed25519 over source κ, target κ, relation; signer a did:key) it is a verifiable relationship credential, the shape credential specs already speak.tools/vrc.mjs · GRAPH.md
proof · runningA claim may not outrun its enforcementEvery load-bearing claim carries a tier and the mechanism that enforces it. A claim tiered PROVEN or DERIVED that is enforced only by a prompt, by discipline, or by nothing, fails the gate: it asserts more than it can make true.tools/check_claims.mjs · claims_register.md
proof · runningThe record re-derives, number by numberWhat the fleet has recorded is itself a knowledge base under a census: every number on this site traces to a quote in a file on disk, every number in prose to a claim, and a lane that moved shows as stale. The tables on the record page are rendered from it and stamped with its κ.soul_mage/tools/census.mjs
Runtimes — what drives the seats
runtime · runningThe seat driver interfaceThe engine is target-agnostic. It runs any driver that supplies five functions: agent, parallel, pipeline, phase and log. Which model holds which seat, on which machine, is the driver's business; the loop, the Gap and the ledgers are the engine's.engine/dual_agent_loop.mjs
runtime · runningThe reference runtime: a bundled workflowOne config plus the engine, concatenated into a single workflow file that Claude Code's Workflow tool executes, seven seats as seven agents. Every spar round on record ran this way.tools/bundle.mjs · examples/field-guide/harness.workflow.mjs
runtime · runningA local-model driver, your data at homeThe default distribution ships a deterministic stub that runs the whole loop with no model at all, and an Ollama driver where a model on your machine holds the seats. Nothing leaves the box. The runner persists every proposal's canonical bytes, seed, candidate and verdict so the run verifies offline.drivers/stub.mjs · drivers/ollama.mjs · drivers/run.mjs
runtime · runningThe workshop consoleA read-only window onto a running bout: the six-phase loop as evolving geometry, every seed re-derived per poll, the frontier as a moving ceiling, and a door panel that lists what software will never do for you.tools/console.mjs
runtime · runningThe acceptance runtime, across organisationsNo loop at all: a pinned digest manifest, a stranger who re-runs the orchestrator on their own machine and must byte-match it, and a human who admits the row. The prover's seat, taken from outside.HARNESS_PATHS.md §14 · the DTG verification registry
runtime · in buildSeats on separate machinesPrompt-based separation is topology plus discipline. Where a domain permits harder enforcement, the seats run as separate processes, separate models, separate machines, separate keys: the proposer where the data lives, the prover and the Gap elsewhere. The design allows it; the packaged runtime that does it by default is in build.RESEARCH.md · THREATS.md
SDK — what you clone and import
sdk · runningThe default distributionOne command emits the system alone: engine, seats, tools, templates, the constitution, the spar reset to its baseline. Every gate is re-proven inside the emitted tree before the tool hands it over. Node 18 or later, zero dependencies, Apache-2.0.tools/make_default.mjs · dist/default-harness
sdk · runningA new instance in five answersThe scaffolder copies the ledgers and a blank config and refuses to conform until every TODO is a real decision: the artefact, the number, the gate, the line it must never cross, the door. The front door prints your paths with your local state filled in.tools/new_instance.mjs · tools/adventure.mjs · ADOPTION.md
sdk · runningThe skill, and the library behind itThe harness ships as a skill in the open agent-skills format, so an agent client loads it the way it loads any other. Behind it sits the published library of skills and personas that dress the seats.SKILL.md · skills.agentprivacy.ai
sdk · runningThe graph you get for freeA running harness emits its ledgers as a typed graph, as a seating on the sixty-four-vertex lattice, and as a runtime feed. Consumers render; the harness never does.tools/spellweb.mjs · tools/star.mjs · tools/emit_feed.mjs
sdk · builtThree drivers and a runner, in the boxA round runs on a clean clone: with no model (the stub), with a model on your machine (Ollama), or with the Claude API over plain fetch, still zero dependencies. Two models in the two seats by flag; a split driver puts the proposer on the API and everything else local. Until 2026-09-12 the default shipped no driver.drivers/run.mjs · stub.mjs · ollama.mjs · anthropic.mjs
sdk · runningThree examples, three rungsThe auditor: your own documents under a census, no model needed. The spar: compress a field guide while a held-out gate stays green. The self-fold: the harness on its own newcomer path, so the README you read was folded under a census the writer could not tune to.examples/corpus · examples/field-guide · examples/self
sdk · runningThe optional layers, behind a doorThe origin's ecosystem documents ship behind optional/ with a README that says what they are, and the boot file tells any agent whose problem the instance is: the person who cloned it. The default's root documents measure 12,883 words in 14 files; the README 1,088.optional/ · AGENTS.md
Three ways to run it

Your data, your choice of where the seats sit.

01 · runningRun it yourself, data at homeClone the default distribution. Your data, your models, your machine. The stub driver runs the loop with no model; the Ollama driver puts a model on your box in the seats; nothing leaves it. Apache-2.0; no engagement needed.
02 · in buildWe run the runtimeYou bring the problem and the five answers; the lab seats the instance, runs the rounds and the inference, and returns κ-sealed artefacts with the run bytes, the kill ledger and a signed edge from the prover's seat. Durations are agreed per engagement; there are no list prices.
03 · in buildYour data stays home; we hold the Gap and the proverThe proposer runs where the data lives, on your models. The hold-apart seat and the prover run with the lab, on different models and machines, so the separation the trusts describe is physical. What crosses the wire is the proposal's canonical bytes and the verdict; the corpus never travels.
benchmark · proposedThe fold benchmark: models against each otherThe same instance, the same Gap, different models in the proposer and prover seats. Score a run by the frontier it reaches under a full gate, the rounds and kills it takes to get there, the mirages it produces, and the detection probability its gates carried. The conformance gate already names the case that scores zero: the same model in both seats.As recorded: Φ_inference ≈ 0 (D4b) when proposer and prover are the same model; detection 0.25 on a sample, 1.0 on a census; verdicts VALIDATED · MIRAGE · BLOCKED; the spar's runs declare no model.
evocations · openEvoke it against the corpusAn evocation is the harness called up against a document or a knowledge base: a proposer shortens it, the Gap draws the witnesses by hashing the proposal, a prover checks that every number, term, heading and emphasised phrase survived, a person folds. The Privacy is Value corpus is on the board with a frozen census and a measured baseline each: the mission primer, the Swordsman ⊥ Mage whitepaper, the 42 personas. Run one as a mage and bring the fold back through the City's Exchange; or run the same loop on your own documents, on your own models, with nothing leaving your machine. That is the shape a private knowledge base, a VPK or a VTA data room runs to reach consensus on what its documents say.The board ↗ · Evoke it in the City ↗

Durations are agreed per engagement; there are no list prices. Work with us · Begin a discovery · for agents.

The README, checked

Does it do what it says?

The repository's own gates and its default distribution were run on the day this page was rendered; each README claim below carries the verdict and the file it was checked against.

  • Every gate the repository has · holds · node tools/check.mjs: ALL 11 GATES PASS on 2026-09-11; ALL 14 GATES PASS on 2026-09-12 with the auditor and self-fold examples added; ALL 20 GATES PASS later on 2026-09-12 with the evocations board (personas, primer, whitepaper) conforming and its runs verified.
  • The default distribution, out of the box · holds · node tools/make_default.mjs emits the system alone and re-checks it inside the emitted tree: ALL 9 GATES PASS (1 skipped, the universe audit, absent by design).
  • A round, out of the box · holds · On 2026-09-11 the default shipped no driver and a round needed the Workflow tool. On 2026-09-12 drivers/ landed: a round runs on a clean clone with the stub, a local model or the Claude API, and the default re-proves 11 gates with them in.
  • Split into instances the right way · holds, with a gap · The skeleton, the examples and the fleet catalogue are separated: every instance under the tree conforms, the blank template must fail and does, and the fleet catalogue can be deleted with every gate still green. The gap: check.mjs discovers instances only under the repository and its examples, so the lanes that live beside it (the workshops, the soul mage) gate themselves.
  • The README's numbers · holds · 730 → 472 across three audited folds: holds against frontier.json. Fifteen embodiments: holds against the catalogue's 'Fifteen entries stand'.
  • The README's defect count · fixed · On 2026-09-11 the README said eleven defects while the chronicles recorded Defect #13; on 2026-09-12 the sentence points at the chronicles for the count, thirteen at the last count.
  • Which model held which seat · undeclared · The spar's runs do not record the model in each seat; the example config leaves seatOpts unset, so the conformance gate reports the caller default for both proposer and prover. The fold benchmark needs this declared before any comparison means anything.

The record: benchmarks by industry, document suites The source ↗