A task arrives and two agents both claim the same piece of it. Something has to settle that, and the usual answers are a wired graph somebody drew once or a load balancer that knows nothing about the work. AgenTroMatic specifies a third: agents bid, overlaps are detected, the contenders argue, peers vote, and a quorum policy chosen per capability decides what counts as settled. Five agent interoperability protocols were scored against six governance dimensions in June 2026 and voting came back absent in every one of them. Voting is what this specification is about. It is a specification. None of it has run.
Five agent interoperability protocols were scored against six governance dimensions in June 2026. Voting came back absent in every one of them. Voting is what this specification is about.
How should agents allocate contested work?
:majority, :unanimous, :weighted by reputation at a 0.7 threshold, and :human_in_the_loop — and a policy binds a different one per capability, so trade execution and reporting are not settled by the same rule.R⁻, and it is a different document. Claiming the dimension outright would have been the easy sentence and the wrong one.{:escalate, :requires_human_approval} instead of a verdict; the mechanism is an escalation target named in the policy, with a round cap. A headline on this page says no human routing is required — that is a claim about routine work, and the escalation path exists precisely because some work is not routine.:human_in_the_loop · §3.1 escalationspec, exactly as the band at the top of this page says, and a specification that covers a gap is not a system that closes it. Second, on G6 audit the trace is append-only but not tamper-evident: there is no hash chain in it, and the paper's definition asks for one. Merkle-chained evidence is specified next door at Deliberatic and is not implemented there either.This is the worked example from the specification. It is an illustration and not a recording — no system produced it, the agent names are invented for the example, and the confidences are figures in a document. The section header used to read “Live Deliberation Trace”, which was the one word on this page that could be read as a running system, and it is corrected here rather than left in place.
phase 1 — capability bidding legal-analyst 0.87 "Indemnification clauses map to my training domain" finance-scorer 0.82 "Can quantify financial exposure from risk clauses" summarizer 0.91 "Executive summary is my core capability" data-extractor 0.34 "Low relevance — I'll abstain" phase 2 — overlap detected sub-task "risk classification" claimed by Legal and Finance → negotiation required phase 3 — negotiation Legal "Risk classification requires understanding clause intent, not just numerical exposure. I should lead — Finance can score after." Finance "Risk without quantification is just a label. The user asked about financial risk specifically." phase 4 — peer vote summarizer → Legal "Classification should precede quantification" data-extractor → Legal "Clause semantics are the harder subtask" phase 5 — consensus reached legal-analyst elected leader for "risk classification" finance-scorer → support role · summarizer → executive summary data-extractor abstained · Raft term #47
Every task triggers the full cycle. There is no hard-coded assignment anywhere in the specification: the agents organise themselves against each task, and the escalation path in §9 is what happens when they cannot.
The task arrives over A2A and is sent to every agent in the cluster. spec §3.1
Each agent self-assesses: confidence, reasoning, claimed sub-tasks, cost. A bid is a structure, not a number on its own.
The engine identifies where two or more agents have bid on the same sub-task with high confidence. That overlap is the contest this whole document is about.
The competing agents argue their case and peers evaluate and cast votes. The argument is retained, which is what separates this from a blind auction.
Winners become leaders, runners-up take support roles, and a Raft term is assigned through Ra. spec §5.2 Ra state machine
Agents work via A2A tasks and results are committed only when the quorum policy validates them. spec §9
Bid accuracy is tracked against outcome and capability scores adjust, so an agent that consistently over-bids loses weight. spec §6 reputation
This is the whole quorum module as the specification states it. It is 21 lines — counted, after an earlier draft of this section said “forty” because forty sounded like the right size. It needs no cluster to try, which is why it is the thing this page asks you to implement.
defmodule AgenTroMatic.Quorum do @doc "Validates results against quorum policy." def validate(results, :majority) do approvals = Enum.count(results, & &1.approved) if approvals > length(results) / 2, do: :ok, else: {:escalate, :no_majority} end def validate(results, :unanimous) do if Enum.all?(results, & &1.approved), do: :ok, else: {:escalate, :not_unanimous} end def validate(results, :weighted) do weighted_sum = Enum.sum(for r <- results, r.approved, do: r.voter_reputation) total_weight = Enum.sum(for r <- results, do: r.voter_reputation) if weighted_sum / total_weight >= 0.7, do: :ok, else: {:escalate, :below_threshold} end def validate(_results, :human_in_the_loop) do {:escalate, :requires_human_approval} end end
A domain template binds a different rule per capability. In the specification's financial-services example the default is :weighted, risk_assessment is :unanimous, trade_execution is :human_in_the_loop, and reporting is :majority — with an escalation target and a round cap alongside. That last clause is G5 in the place it actually lives: a rule that returns an escalation instead of a verdict.
When agent capabilities overlap and evolve, a hard-wired graph breaks and nobody notices until the output is wrong. These are the four comparisons the specification makes, stated as positions rather than as results — none of them has been benchmarked, by us or by anyone.
Formal argumentation semantics (Dung, Potyka), weighted bipolar attack and support graphs, constitutional guardrails and Merkle-chained evidence logs. The decision science behind every bid.
Per-capability scores, bid calibration tracking, peer endorsements and trend detection. Over-confident agents lose weight; quiet performers gain it.
Watch a deliberation as it happens; click any output to see the full trace of who bid, who argued and how it resolved; replay it with a changed input.
All inter-agent communication travels over A2A, and Agent Cards are extended with reputation metadata and bid history.
Per-step consensus — majority, unanimous, weighted, human-in-the-loop — with domain templates for finance, legal and healthcare.
Deliberatic constitutions define hard boundaries and soft preferences; vindicated dissent is tracked and can trigger an amendment vote. The deliberation trace is intended to be the compliance artifact.
The rung is spec. A specification has nothing to run, so this page does not offer a button that pretends otherwise — that rule is enforced by the publication gate, which refuses to emit a page whose calls to action its rung has not earned.
spec.A launch date and an email box used to stand here. The date was Q2 2026 and it passed; the box was wired to nothing at all, so every address typed into it went straight to the floor. Both are gone rather than quietly refreshed to a later quarter.
That paragraph is frozen. The publication gate re-extracts it from this page on every run and compares its SHA-256 against a digest taken at the commit before this redesign; a single changed character refuses the build. A footer mailto: also went in this revision — Cloudflare was rewriting it at the edge for obfuscation, which is the entire reason the served page measured 159 bytes larger than the file in this repository.
Nothing here has run, so the most useful thing a visitor can send is a hole in the specification — a quorum rule a real adversary walks straight through, an allocation an honest bidder can game, or a number on this page you think is wrong.
This box is not that one, and the paragraph above is unedited. It is frozen by digest and describes what used to stand here; that is still true of the old one. This is a plain <form action method="POST"> posting to formspree.io when you press Send, so it delivers with scripting switched off entirely; the script that upgrades it to an inline reply prints “sent” only after the endpoint returns a 2xx, and prints what went wrong otherwise. Ruled 2026-08-17: the same endpoint computedriven.com uses. The publication gate still refuses any address link anywhere on this page.