Imported from mitchuski/agentprivacy-harness (
SKILL.md). Install upstream withnpx skills add mitchuski/agentprivacy-harness. Copyright stays with the author (Apache-2.0).
Dual-agent harness
A two-agent loop where the agent that proposes changes and the agent that validates them are architecturally held apart. Between them sits the Gap: verification witnesses are derived by hashing the proposal itself, so the proposer cannot have optimised for them and the prover cannot be accused of choosing them.
Use it whenever a single agent would otherwise propose a change, run its own check, and declare victory. That loop produces mirages — candidates that pass the author's own probe and fail the real gate. This harness makes the mirage a named verdict rather than a surprise.
When to use
- Setting up an optimization loop (make X smaller/faster/cheaper subject to a constraint that must not break).
- Setting up an autoresearch loop (produce a claim, then prove it against evidence the producer did not select).
- Any time an AI-proposed change needs held-out validation before a human signs off.
Build recipe
- Define the Gap first. If you cannot say how held-out witnesses derive from a proposal by hashing, you do not have a harness yet — you have a to-do list. Everything else follows from this.
- Name the objective, the gate, and the hard constraint. The gate is a factor in a product: any zero collapses the result at any score. The hard constraint is validity no score can override.
- Give the proposer at least two blind lenses. For a product objective, one lens per factor, plus a cliff-watcher in the prover.
- Copy
templates/harness.config.mjs, fill every TODO, bundle it withtools/bundle.mjs, run it. - Fold as the keystone, in the main session, with
conform.mjsgreen before and after.
Hard rules
- A candidate is not a result. Only a full-gate pass, hard constraint intact,
and a frontier beat is
VALIDATED. - Witnesses never come from the proposer. A validation on proposer-suggested witnesses is void.
- A probe pass that fails the full gate is a
MIRAGE. Name it; never soften it. - Negative results are filed as prominently as wins.
- The door is the First Person's. Push, submit, publish, send — the harness stops in front of these and lists them. It never opens them.
κ as state — the holon layer
A validated result seals into a κ-addressed holon: a record whose address is
sha256(canonicalJson(itself, minus the κ field)) — the City Key / sigil Law L5
(never trusted, only re-derived). The mint produces them, the runtime feed
self-addresses, and tools/holon_audit.mjs re-derives the whole mesh. Because
verifying content-addressed holons is enumerable, that verifier is an auditor,
not a harness: the harness mints the holons, the auditor verifies the mesh. One
κ law (tools/kappa.mjs), computed identically everywhere, is the interoperability
substrate — a holon minted here re-derives byte-for-byte anywhere else. See
HOLONS.md.
Map
RESEARCH.md (the contribution — problem, claim, evidence, limits) ·
PRACTICES.md (the 2024–26 field surveyed against this harness, every claim
traced through SOURCES.md) ·
AGENTS.md (the tool-neutral boot protocol; CLAUDE.md imports it) ·
HOLONS.md (κ-addressed interoperability, and why it is an auditor) ·
TRUSTS.md (the constitution — six trusts, and where each one bites) ·
GROUND_RULES.md (GR-1..GR-10) · SEAT_CONTRACT.md (the config interface) ·
seats/ (seven cards) · engine/dual_agent_loop.mjs (the loop) ·
engine/conform.mjs (the gate that proves the algebra rather than asserting
it) · examples/field-guide/ (a runnable spar) · SPECIALISATION.md
(personas, spells, and the Game of 42 station pattern) · HARNESS_PATHS.md
(the origin fleet — fifteen real instances, grouped by how much of the loop
each runs; evidence, not part of the system you adopt) ·
WIKI.md (the Observe lane — auto-populating a federated wiki + the
knowledge-graph asset for agents) ·
tools/console.mjs (the live workshop console) · tools/frontier.html (the
interactive, contributable frontier, per workshop).