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
New in 0.3.0
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 →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
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.
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.
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
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.
A second provider checked the claim against the evidence and found nothing against it.
The check found something in the evidence that contradicts the claim.
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
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.
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
sourceRootprefix. 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
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.
confirmed means a second provider checked the claim against the evidence and
found nothing against it. It does not mean the claim is true.
cursor, whatever it runs underneath.
confirmed.Documentation
English is canonical. Turkish, German, Simplified Chinese, Spanish, and French are full translations held to the English structure by a contract test, not summaries.