Nine LLM analyses predict how a neutral adjudicator would rule, $1 USDC over x402
Machines can now pay each other. An agent publishes what it does and what it charges, another agent finds it, pays in seconds over x402, and the whole exchange completes with no account, no invoice and no human anywhere in the loop. What machines cannot do is disagree productively about what happened next.
Consider the ordinary version of this. An agent advertises document translation on its agent card, priced per page. Your agent pays two dollars for forty pages, and what comes back is thirty pages, machine-translated, with the tables dropped. Was that the advertised service? A person would say obviously not. But the payment settled the moment it was authorised, there is no chargeback because x402 has no refund primitive, and an identity layer like ERC-8004 can record who both parties are and collect feedback about them without ever deciding who was right about this one transaction. The money is gone, and the only remedy is a bad review.
Ask Trivium is the missing verdict. It is an adjudication service that machines can call: you describe the dispute, in plain language, and you get back a reasoned decision about whether the service was rendered on the terms that were advertised.
The same call works for the entirely human version, which is where we tested it. A laptop screen fails two months after purchase, the retailer refuses a refund and blames accidental damage without ever producing an inspection report. You paste in the timeline and the correspondence and you get the same thing: a decision, a score, and the reasoning behind both.
That answer is produced by nine independent analyses, not one. Three frontier models from three different vendors each examine the dispute from three different perspectives, one strict about what the buyer can actually prove, one attentive to consumer protection, one reasoning from how similar cases resolve. You get back a single verdict, and all nine analyses that produced it.
The spread between them is the real product. A lone model announcing "user wins, 72 out of 100" tells you nothing about how close the call was. Nine analyses landing between 58 and 84 tell you this one is genuinely arguable and worth a human's attention; nine landing within three points of each other tell you it is not, and can be actioned automatically. Every one of the nine ships its own score, its own confidence, and its own written reasoning, so a decision that costs somebody money can be read and challenged rather than merely accepted. When the nine will not converge, the panel says so and escalates instead of manufacturing a decision it cannot support.
Where this goes is escrowed machine commerce. The adjudication service is the hard part and the part that exists; the natural thing to build on it is x402 payments that are held rather than immediately released, with the funds returned to the buyer when the service demonstrably was not rendered on the advertised terms. Adjudication is what turns a clawback into something other than whoever shouts loudest. That escrow layer is the roadmap, not this submission. What ships today is the verdict, callable and priced.
Using it takes one line. It runs as a plain CLI in your terminal, and as an MCP server that any agent can call as a tool mid-workflow, so an agent that has just been shortchanged can ask for a ruling without a human noticing there was a problem. A real analysis costs one dollar in USDC, paid automatically over x402 on Base, with no account, no API key and no signup: the CLI holds the wallet, answers the payment challenge and settles on chain inside the same call that returns the answer. Mock mode is free, offline, needs no wallet, and replays a real captured analysis, which is where anyone should start.
One design commitment is worth stating plainly, because it is enforced in code rather than promised in a pitch: all nine analyses must succeed or the call is free. Nine independent analyses is what is advertised. Delivering six and charging for it would be exactly the failure this service exists to adjudicate.
Ask Trivium is a TypeScript CLI that acts as a bridge. To your agent it is a local stdio MCP server; to the closed analysis engine running on Fly.io it is a payment-aware MCP client. It renders panels and it holds the wallet. It never averages the nine cells, never derives the verdict, and never sees the prompt text behind the three perspectives.
Scope and why this is submitted to the Continuity track. The analysis engine predates the hackathon and is not the deliverable. What was built here is everything between an agent and that engine: the MCP surface an agent connects to, the x402 payment client, the wire contract the two sides agree on, the terminal renderer, and an offline mock tier so the whole thing demonstrates itself with no wallet. The engine gained one thing on its own side, an MCP server that emits a progress event per completed cell, because a bridge with nothing to stream is a bridge that just blocks for two minutes. Everything else on the engine side is prior work.
Why a bridge exists at all: no MCP client in circulation speaks x402. None of them will answer a PaymentRequired and retry. So the wallet lives here, and your agent never has to hold one.
Payment rides inside the JSON-RPC meta layer, not as an HTTP 402 paywall. One Streamable HTTP session carries both the MCP handshake and the tool call over the same endpoint, so charging at the HTTP layer would charge for the handshake too. Verification happens before the work and settlement after, both inside one request, which means paying never gates the stream: progress notifications arrive while the nine analyses run. A real panel took 111 seconds on a measured run, with 22 progress notifications, because a blocking call with a live cadence beats job polling for something an agent is sitting and waiting on.
The stack, and what each piece actually bought us:
Four things that cost real money to get wrong. All are written down in the repo's wire contract, because each one was a trap we had to find rather than something the documentation warns you about:
One thing that is notably hacky, in the sense of being the deliberate answer to a problem with no clean one. The output form is chosen by asking whether stdout is a terminal. An agent shelling out to the CLI gets a parseable envelope without being told to ask for one; a human gets a rendered panel. It surprises everyone the first time they pipe to less, so --panel and --format name the form explicitly.
Tests drive the built binary as a real subprocess with piped stdio, because the failures that actually matter here only appear at a process boundary: a stray byte on stdout corrupting the JSON-RPC stream, a panel truncated through a pipe. The suite needs no network. The backend leg runs against a stand-in MCP server on loopback, so both legs are exercised over real transports without depending on a deployment being up, with the tests that hit the live one behind a flag.

