Auditable peer disagreement for agents.
A thin governance layer for LLM agents that disagree, negotiate, and resolve work under human authority — without a central orchestrator.
v1.0.0 released, the Minimal Governance Profile freeze. 46 promoted PRDs, 48 registry-tracked. The eight-step eval-gated implementation loop runs end-to-end with builder/reviewer separation across three heterogeneous agents (Claude, Codex, Gemini), surviving Opus 4.6, Fable 5, Opus 4.7, and Opus 4.8 without protocol migration. The v1 Minimal Governance Profile (PRD-043) defines a fresh-adopter cutline that runs without reading historical PRDs; the new portable CLI (PRD-048, node tools/turnfile.mjs) initializes a session in any repo.
Why Turnfile exists
Agent platforms can already produce work. Turnfile focuses on the harder governance surface: what happens when peer agents disagree, drift, collide, or need human authority without turning one model into the boss. Turnfile is a Structured Negotiation of Autonomous Peers (SNAP) — a thin, file-based protocol for auditable disagreement, resolution, and handoff.
Peers, no hierarchy
Agents propose within owned lanes. No orchestrator commands another model. File-level ownership and transaction locks keep shared state coherent.
Adversarial by design
Counter-recommendations are first-class. Disagreement is signal, not error — it is routed, bounded, and resolved without hiding dissent.
Audit-visible by default
Every decision lives in plain markdown. Mailbox messages, worklogs, PRD gates, and the Turnfile itself are recoverable without specialized tooling.
What Turnfile rejects — and what it chooses instead
| Common pattern | Turnfile’s answer |
|---|---|
| Orchestrator-led pipelines | Peer agents with owned lanes |
| Shared-memory merge hell | File-level lane ownership |
| Silent consensus | Counter-recommendations as first-class events |
| Hidden state in runtime memory | Append-only markdown, readable without tools |
| Human as copy-paste relay | Human as arbiter, holding intent and veto |
| Provider-locked runtimes | Runtime-agnostic across Claude, Codex, and beyond |
v1 Minimal Governance Profile
Turnfile v1 (PRD-043) introduces a Minimal Governance Profile so a fresh adopter can run a conforming session without reading the historical PRD shelf. The v1 contract is a thin governance layer: three core artifacts in working-session/, peer apply-or-counter review, and a maintainer who holds final authority.
Two participation tiers
| Tier | Required artifacts | Required PRDs | Use |
|---|---|---|---|
| v1-minimal | TURNFILE.yaml · MAILBOX.md · WORKLOG.md |
The 9 core-v1 PRDs (authority, message lifecycle, locks, A1 review) | Lesser-level participation. Suitable for agents whose runtime does not load skill bundles. |
| v1-full | v1-minimal + skill-bundle integrity | v1-minimal + PRD-012/PRD-033 (skill-bundle profile) | Full participation: PRD authorship, eval authoring, required-reviewer roles. |
v1 docs (no historical PRDs required)
MINIMUM_VIABLE_TURNFILE.md— full v1 reference with an open → mid-turn → close worked example, under 250 lines.SPEC.md— normative v1 contract.DEFINITIONS.md— canonical vocabulary.CONFORMANCE.md— verifier-anywhere claims, named optional profiles.FRESH_CONTEXT_CONFORMANCE_PROBE.md— five-question operational test for "fresh adopter can explain v1".PRD_SHELF_RECONCILIATION.json— every PRD classified as core-v1, optional-profile, historical, deferred, or superseded.templates/v1-minimal/— copy-and-go starter.
Validate a v1 session
node tools/validate-v1-profile.mjs --root . --format json
Pass means the three required artifacts are present, the MAILBOX.md inbox snapshot matches the open queue, TURNFILE.yaml validates against schemas/v1/turnfile-v1.schema.json with major version 1, and nothing in the minimal profile depends on historical PRD documents.
Optional profiles (not required for v1-minimal)
Tokenese, heartbeat stewards, concurrent-shards task aggregation, agent onboarding vetting, unified terminal transport, public-surface snapshot reconciliation, skill-bundle integrity, multi-agent-resilience (stale-agent reconciliation). A v1-minimal session can run with none of these. Each profile maps to one or more historical PRDs in the reconciliation registry.
Run your own session
Turnfile is a protocol standard, not a centralized runtime. You clone the repo, copy the working-session templates, and point each agent at its onboarding guide. The shared Turnfile and mailbox coordinate the work; the human maintainer arbitrates.
Clone and scaffold
git clone https://github.com/snapsynapse/turnfile cd turnfile # Copy the working-session templates cp -r templates/working-session/ my-session/ # Each agent reads its onboarding guide # docs/LLM_ONBOARDING.md # skills/claude/SKILL.md # skills/codex/SKILL.md # .agents/skills/turnfile-protocol-gemini/SKILL.md
No SDK, no runtime to install. The protocol lives in markdown and YAML.
Validate coordination state
npm install # ajv + js-yaml only # Lint the Turnfile against the JSON Schema node tools/turnfile-lint.mjs # Check mailbox invariants node tools/validate-mailbox-invariants.mjs # Verify PRD promotion gates node tools/validate-prd-promotion.mjs
Validators are plain Node scripts. No hidden orchestrator, no network calls.
The core protocol files
# Invariant rules + handoff format docs/PROTOCOL_CORE.md # Mailbox format + 5-status lifecycle docs/NOTIFICATION_PROTOCOL.md # Escalation + counter-recommendations docs/CONFLICT_RESOLUTION.md # Maintainer role + approval bands docs/HUMAN_GOVERNANCE.md
The current PRD shelf
# 46 promoted PRDs, 48 registry-tracked PRDs PRD-001 Maintainer interaction model PRD-002 Deferred archive PRD-003 Message lifecycle + SLA PRD-004 Maintainer decision contract PRD-005 Protocol data schema PRD-006 Session promotion pipeline + A1 loop PRD-007 Trust + provenance layer PRD-008 Cross-sandbox handoff PRD-009 Cross-document reconciliation PRD-010 Shared-file transaction locking PRD-011 Session resumption PRD-012 Protocol skills pack PRD-013 Turnfile coordination format PRD-014 Session closeout + boot handoff PRD-015 Agent onboarding + vetting PRD-016 Session rotation trigger PRD-017 Boot sequence + docs PRD-018 Maintainer approval matrix PRD-019 Mailbox-first cadence PRD-020 Superseded archive PRD-021 Conflict loop bound PRD-022 Decision-mirror delivery PRD-023 Out-of-band reconciliation PRD-024 Human-legibility invariant PRD-025 Converged into PRD-014 A1 PRD-026 Review-cycle closure PRD-027 Tokenese A/B pilot PRD-028 Tokenese dual-artifact sync PRD-029 Pre-write state derivation PRD-030 Session heartbeat management PRD-031 Concurrent multi-agent coordination PRD-032 Session orientation tool PRD-033 Skill ownership integrity guard PRD-034 Public + agent-surface reconciliation PRD-035 Tokenese integration + upstream sync PRD-036 PRD eval runner PRD-037 Boot simplification PRD-038 Read-only heartbeat stewards PRD-039 Perplexity Computer onboarding deltas PRD-040 Heartbeat loop prompt contract PRD-041 Unified terminal transport + deterministic projection PRD-042 Qwen 3.6 35b MLX onboarding deltas
See it in action
The inception archive is the unedited record of two LLM agents — Claude Opus 4.6 and OpenAI Codex 5.3 — building this protocol together across 11 sessions. No human wrote their messages. No orchestrator commanded them. Zero file collisions.
The protocol has since run across 27 real collaboration sessions and grown to three heterogeneous agents — Claude (Anthropic, Claude Code), Codex (OpenAI GPT-5, Codex desktop), and Gemini (Google, Gemini 3.5 Flash (High), Antigravity IDE; full-active since session 21 under PRD-015). The current snapshot: 48 registry-tracked PRDs (46 promoted), zero active open questions, and the eight-step eval-gated implementation loop run end-to-end across many lanes with builder/reviewer separation — PRD-017/021/022/023/024/026/028/029/030/032/033/036 implemented, PRD-031 Phase 1 (per-agent shards + derived aggregates) and the PRD-014 closeout amendment landed, plus a live Tokenese A/B pilot scored by a deterministic checker. The Claude lane ran across Opus 4.6, Fable 5, and Opus 4.8 on one unmodified protocol.
Start with WORKLOG.md for the session-by-session narrative, or jump straight to MAILBOX.md to read the actual agent-to-agent messages — proposals, reviews, and counter-recommendations.
Models that have run the protocol
| Model | Surface | Lane | Status |
|---|---|---|---|
| Claude Opus 4.6 | Anthropic Claude Code | Claude | Inception + early sessions |
| Claude Fable 5 | Anthropic Claude Code | Claude | Session 14 |
| Claude Opus 4.8 | Anthropic Claude Code | Claude | Sessions 14–27 (current) |
| Codex 5.3 | OpenAI Codex CLI | Codex | Inception co-author |
| OpenAI Codex (GPT-5) | OpenAI Codex | Codex | Sessions 12–13 |
| Codex 5.5 | OpenAI Codex desktop | Codex | Sessions 14–27 (current) |
| Gemini 3.5 Flash (High) | Google Antigravity | Gemini | Full-active since session 21 |
| Perplexity Computer | Perplexity | — | Observer; PRD-039 accepted |
| Qwen 3.6 35b MLX | Local (oMLX) | — | PRD-042 proposed; blocked on runtime |
Three active lanes, two onboarding candidates, one unmodified protocol across nine model versions.