Record an agent's decisions with reasons anyone can re-execute offline β verify recomputes them.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
When a machine says something was allowed, can you check why β without trusting the machine that allowed it?
Warrant is a small, signed, content-addressed decision record. It names what was decided, the exact policy bytes in force, the reasons and evidence, the actor, and the decisions that came before it. An executable reason can be re-run by the reader instead of trusted as a log entry.
The canonical body hash is the record's identity. Changing the decision, policy reference, reason, evidence or prior edge changes that identity. The signature says which key signed the body; whether that key belongs to the named actor is a separate trust-configuration question. A rejection is a durable record, not an absence.
Warrant is not an agent framework, blockchain or observability system. It is one file format and five filing verbs, designed to be boring.
The format is written up in The Reason Runs Again
(10.5281/zenodo.22172098, paper
v1.0.0, 2026-08-30 β deposited, not peer reviewed; see
papers/).
Every file used above is created above. The final warnings say that the key-to- actor binding is unverified until a trust configuration supplies that authority; a valid signature is not silently promoted into a valid identity claim.
The warrant-verify distribution installs four commands:
warrant β file, inspect and verify decisions;warrant-mcp-server β let an MCP client file its own decisions;warrant-mcp β seal calls passing through another MCP server;warrant-anchor β batch WarrantIDs into a Merkle anchor.ski@v1 reasons replay offline through one bundled Ξ£-GLYPH Book I v0.5
evaluator, pinned by digest and checked before import. Reserved ski@v2 is not
admitted by any body version and ships no executable candidate bytes.
The longer walkthrough, including negative controls, is
docs/try-this-in-fifteen-minutes.md.
For CI, MCP or an agent framework, verify an initialized store with
--store-mode --json:
--store-mode is part of the safe predicate: a missing or uninitialized store
fails closed instead of looking like an empty successful verification. Python
takes the store through the global --store; Go takes it positionally.
Consumers may rely on these boundaries:
ok == (errors == 0), and the error/warning counts equal the corresponding
findings;warrant.verify-report@v0 is closed: seven top-level fields and
{level, subject, message} findings;(level, subject) pairs; message
is human prose and may differ;grade distinguishes base from settlement;The normative contract is SPEC.md Β§11,
with schemas/verify-report-v0.schema.json
alongside. tools/check_release_surface.py fails CI and publishing when the
documented CLI surface is absent from the checkout or built wheel.
The Air Canada specimen is an authored reconstruction of the decision record the airline did not have; it is not evidence produced by Air Canada.
The last command re-executes the content-addressed, ATP-bounded reason locally;
it does not merely read the filed verdict. The pinned asset, source specimen and
portable layout are documented in demos/air-canada/,
EVIDENCE-PACK.md and PUBLISHING.md.
As a GitHub Actions gate:
Pin 0.6.0 or newer for domain-separated signatures. The action checks the
required capability, emits the machine report and fails on verification errors;
see action.yml.
From an MCP client:
The server exposes filing, store verification and reason inspection with fresh
ski@v1 replay. It is deliberately distinct from warrant-mcp, the sealing
proxy for somebody else's downstream MCP server. See
integrations/mcp-server/ and
integrations/mcp/.
| Surface | Authority |
|---|---|
| Record format, canonicalization, signatures, replay, settlement and trust config | SPEC.md |
| JSON schemas | schemas/ β derivative; SPEC remains normative |
Portable .warrants/ bundle | EVIDENCE-PACK.md |
| Writing WPL checks | docs/authoring-checks.md |
| WPL design boundary | docs/policy-language-choice.md |
| Threat model | THREAT-MODEL.md |
| External implementation contract | conformance/ |
| Releases and artifacts | PUBLISHING.md and CHANGELOG.md |
The Python reference implements the five filing verbs and settlement. Go is an independent verify/settle implementation. Rust is a from-scratch base-grade implementation including Ed25519 verification. All three were produced within one author/model lineage: agreement is conformance evidence, not independent custody or adoption.
A fourth JavaScript candidate was created without Warrant implementation source
and reached the complete base grade under a self-certified iterative local-model
experiment. Its settlement grade is unimplemented. This establishes bounded
implementability against that frozen corpus, not external custody, adoption or
correctness beyond it; see needs/README.md.
To test another implementation without executing ours:
The runner checks the candidate's typed answer. 62
of the 139 vectors are MUST-REJECT, and the pack reports base and settlement
separately. Details and digest verification are in
conformance/README.md.
Since release 0.6.0, signatures cover the domain-separated message
rather than the bare WarrantID. There is no dual-accept window. Pre-0.6.0 signatures therefore do not verify under the current protocol. Where the old signing key is available, migrate only signatures β WarrantIDs and body links do not change:
Settlement is a separate verification grade defined by SPEC Β§5.1, Β§7, Β§9 and Β§12. It derives key state and active roots from explicit trust configuration, replays settlement-active reasons, and requires new evidence or a new outcome fingerprint to reopen a subject. Prose alone never reopens settlement.
An unusable requested trust configuration fails closed; it does not fall back to
a clean base-grade report. genesis.json is advisory unless explicitly pinned
by the verifier.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/warrant)<a href="https://allmcps.com/mcp/warrant"><img src="https://allmcps.com/api/badge/warrant?style=directory" alt="Warrant on AllMCPs" /></a>