Chain-of-Verification + Self-RAG + Constitutional AI. Warrant takes a finished piece of text, a source corpus, and a rulebook, and returns per-claim verdicts — supported / partially_supported / contradicted / unsupported / not_verifiable — with citations, plus rule violations, and a final PASS / PASS_WITH_WARNINGS / BLOCK decision.
It is a gate, not a rewriter. It tells you which passages are a problem. It never edits your document.
- Pre-publish check on regulated communications — earnings releases, financial promotions, medical/pharma claims, insurance wording.
- Hallucination insurance for someone else's LLM feature — sits between a model and its user.
- RFP / security-questionnaire answers verified against your own docs.
- Marketing-claim substantiation — every superlative traced to a source or flagged.
- The claim taxonomy routes verification. "Fastest CRM" (comparative), "40% lift" (numeric), "SOC 2 Type II" (factual_internal), "sales should be simple" (opinion), and "next year we'll ship…" (forward_looking) are five different kinds of claim checked five different ways. A flat 1–10 truth scorer collapses them into mush.
- Two corpora, never mixed. The subject document is untrusted and under review. The evidence corpus is the source of truth. Warrant refuses to let a claim be "verified" against the very document that made it.
warrant validate config.yaml # config sanity — no LLM calls, no spend
warrant check config.yaml # run the gate
warrant diff old.json new.json # what changed between drafts
warrant explain verdict.json c-018 # the evidence chain for a claim
Exit codes: 0 PASS, 1 PASS_WITH_WARNINGS, 2 BLOCK. That single line is what turns this from a demo into infrastructure — warrant check drops into a GitHub Action or a pre-commit hook with no glue code.
The pipeline runs end-to-end — decompose → plan (CoVe) → verify (corpus/web) → grade (Self-RAG) → adjudicate → policy check → gate → report. It runs at $0
against built-in offline fakes (--provider fake), and against real providers
(anthropic | openai) and a keyword or embedding retriever behind optional
extras. The domain/ core — models, adjudication, the gate, savings — is pure
and fully unit-tested with no network. See docs/ for the architecture, the
claim taxonomy, and the load-bearing design decisions.
uv sync # install (core is network-free; LLM/retrieval are extras)
uv run warrant validate configs/example_marketing_claims.yaml
uv run pytest
uv run ruff check .
uv run mypy