Verify before you trust.

Xerify checks AI claims against bounded evidence through a different invocation provider. Use LLM verifiers or Jev typed decisions and receive a consistent verdict your software can act on. Born inside Deckent, available as a standalone CLI, library, and MCP server.

npm install --global xerify-cli v0.3.1 · MIT · Node 20 or 24
Two illustrative routes: an LLM verifier returns refuted; a Jev decision below the configured thresholds returns unclear. One target per run.
LLM review or Jev decision. One target per run. Illustrative values.

New in 0.3.0

Jev decisions. Xerify boundaries.

TypeSafe’s Jev joins the verification backends. Keep the same bounded evidence, different-provider rule, and confirmed / refuted / unclear contract. Inspect the returned probabilities, confidence, model, and decision policy in JSON.

Below the configured thresholds, Xerify returns unclear. Jev does not generate an explanation or citations. A documentation/code consistency check and ten additional live scenarios matched expectations. These are integration checks, not an accuracy or speed benchmark.

Set up Jev →
verify with Jevxerify-cli@0.3.1
git diff --cached | xerify --json verify \
  --from openai:AUTHOR_MODEL \
  --to jev \
  --claim "This migration preserves existing data"

Set TYPESAFE_API_KEY in the process environment before invoking.

ask & verify

One verification contract across different providers.

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. Provider separation measures the invocation service, not model-lineage independence.

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, TypeSafe’s Jev decision API, 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.