Ask another provider. Get a clear second opinion.

Xerify takes a claim one model already made and puts it through an independent check by a different provider. What comes back is a typed verdict and an exit code your shell can branch on — not a second opinion buried in prose.

npm install --global xverify-cli v0.2.0 · MIT · Node 20 or 24
A claim from provider A passes through bounded evidence and a different-provider gate; provider B checks it independently; Xerify returns a typed confirmed, refuted, or unclear result.
One claim, one independent check, one typed result.

ask & verify

Two commands, and a rule that no model checks its own work.

ask puts a question to a model. verify takes a claim that already exists and checks it against the evidence you supply. The provider that wrote the claim is refused as its own checker, so a second opinion is genuinely second.

askexit 0
git diff --cached | xerify ask \
  --to anthropic:MODEL_ID \
  --question "What is the highest-risk
  issue in this change?"

An answer, with usage and truncation reported honestly.

verifyexit 0 / 10 / 11
git diff --cached | xerify --json verify \
  --from openai:AUTHOR_MODEL \
  --to anthropic:VERIFIER_MODEL \
  --claim "This closes the race
  without a regression"

A verdict, findings, and the evidence the verifier actually used.

The typed contract

Three verdicts, and an exit code for everything that is not one.

Scripts branch on numbers, not sentences. A verification that never reached a model exits differently from one that reached it and came back unconvinced — so a pipeline can retry the first and must not retry the second.

0
confirmed

A second provider checked the claim against the evidence and found nothing against it.

10
refuted

The check found something in the evidence that contradicts the claim.

11
unclear

The evidence does not settle it. Not a failure — an honest abstention.

Exit Meaning
2 Invalid input or config, same provider, or unprovable provenance
3 Provider executable, endpoint, or authentication unavailable
4 Timeout or cancellation
5 Provider, process, or API transport failure
6 Invalid, incomplete, or schema-nonconforming provider response

Dogfooding record

We put our own claims about it through the same check. Two did not hold.

Five findings about Xerify were put through xerify verify against both the Codex and Cursor channels, twenty-six rounds in total. Only one finding passed on the first attempt. The full log, including every rejected envelope, ships with the docs.

26 rounds · codex + cursor docs/examples/dogfooding.md
9
confirmed
2
refuted
15
unclear

One of those checks overturned a claim we had already written down as fact. A scan had reported that all 86 source maps set a sourceRoot prefix. Two independent checks disagreed, and they were right: the scan used a truthiness test, and every one of the 86 values was the empty string.

Releasing 0.2.0 went the same way. Five rounds of independent checks sent the work back, and every round found something real — a credential shape that survived redaction, a token count that double-counted, a documented guarantee the code did not actually provide.

— from the shipped verification log

Channels

Bring the providers you already pay for.

Xerify shells out to the CLIs you have logged into, or calls an API with your key. It stores no credentials of its own. Codex CLI, Claude CLI, Cursor Agent, the OpenAI and Anthropic APIs, any OpenAI-compatible endpoint, and an explicitly configured command.

It also runs as an MCP server over stdio and Streamable HTTP, so an agent can call xerify_verify as a tool.

What it does not claim

  • This is a bounded cross-provider second opinion, not a formal proof.
  • confirmed means a second provider checked the claim against the evidence and found nothing against it. It does not mean the claim is true.
  • Provider identity measures channel diversity, not upstream model independence. Every Cursor Agent model is cursor, whatever it runs underneath.
  • Truncated evidence can never produce confirmed.

Documentation

Every guide, in six languages.

English is canonical. Turkish, German, Simplified Chinese, Spanish, and French are full translations held to the English structure by a contract test, not summaries.