The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Assurance listing page.
Every tool here answers one question about work that has already happened, and refuses to answer it when it cannot. Nothing consults a model. Every result is arithmetic you can recompute yourself.
Start with the sentence that shows what that means in practice:
Read the last line again. The run passed three of the four limits — and the tool says so is not the same as says nothing. Most software reports the absence of a failure as a success, which is how a check that never ran becomes a green tick. This one names what it could not test, in the same breath as what it could.
That is the whole idea, and it is why these are separate from any product: a claim you can check is worth more than a claim you have to trust.
Each installs on its own. None needs the others, an account, a service, or a network.
No config and no corpus file — it reads the cadence, the span and what is absent from the filenames. A folder with no regular cadence is told so rather than handed a ratio.
The expensive runs are rarely the ones that crash. They are the ones that retried the same failing call fourteen times and finished with a plausible answer and a bill. Ceilings are enforced by code the caller cannot talk out of them.
The middle row is the product. The intern may not have the margin memo; the CFO may. So the task moves to the CFO — she is told it moved, and never told the figure. An agent fetching it as a service account and handing her the answer is a permission-laundering machine with your company's name on it.
A denominator we cannot establish is refused, never invented. A tool that answers "0 of 36" for a folder it did not understand is worse than one that says it does not know, because you cannot argue with a number that was made up.
The three commands above are the way in. These are the parts they are made of, each installable on
its own and versioned on its own — a release tag names its package (cli-v0.5.1), because a bare
version number is ambiguous between five.
| package | what it is |
|---|---|
assurance-core | the decision layer as a pure library — no I/O, no model, no framework. Coverage, corpus census, staleness, drift, tool pinning, the rule of two |
assurance-cli | five commands, each a CI gate: check, diff, pin, drift, init |
assurance-mcp | four MCP tools, read-only by construction, for Cursor / Claude Desktop / any MCP client |
assurance-budget | where a run spent, and where it went nowhere. Ceilings a caller cannot raise |
assurance-authority | whether a task may proceed for the person who asked, and what happens when it may not |
budget and authority had their own repositories until 2026-09-09. One package per repository
meant a reader had to find four front doors and work out how they related before anything happened,
which is the opposite of the point. Their history is on the archived remotes; their PyPI names never
changed.
Two more worth knowing about once you are past the first command:
drift reports no labels, no judge and no benchmark — it says whether a change is distinguishable
from noise, and refuses when there is not enough history to say. Its
README leads with the false-alarm rates of the textbook methods it
rejected, because that is the part worth checking.
packages/core/ is generated and must not be hand-edited. It is scrubbed out of a private
upstream by a publisher that rewrites the whole tree, so an edit made here is destroyed on the next
run and never reaches anyone. Everything else in this repo is ordinary hand-written code, and pull
requests are welcome against it.
check opens .csv, .tsv and .xlsx only. Anything else in the folder is counted and
named, not silently skipped.--from / --to,
which means a report missing from either end of the range cannot be detected. Pass the range
when you know it.expected is never inferred in the MCP tools. A denominator nobody can argue with is not an
answer.Apache-2.0.