Prove an AI agent harness before it touches real data: canonical traces, invariant contracts, portable proof bundles, offline verification.
Project description
Evarness
Prove an AI agent harness before it touches real data.
Documentation · Live demos · Tutorials · Blog · Discussions · Studio
Your agent has an approval gate in front of its send tool — but yesterday's refactor may or may not have kept every path behind it, and when a security review asks you to demonstrate that nothing sends without a human, a green test suite isn't a demonstration. Evarness is harness assurance: run the harness in simulation, prove its declared rules held, and hand anyone a proof bundle they can verify on their own machine.
An agent is a harness plus a model. The model reasons — but the harness, the deterministic scaffolding that routes, gates, and audits every turn, is what decides whether the system is safe to run. Evarness turns its safety story into evidence anyone can check.
Why Evarness
- Canonical traces — same graph, fixture, and seed ⇒ the same digest
(
c1:sha256:…) — designed and regression-tested to stay identical across supported machines, OSes, and Pythons. Reproduced, not asserted. - Invariant contracts — "a blocked run never reaches the model", "approval precedes send": declared in YAML, checked on every run.
- Proof bundles —
evarness proveruns every scenario twice, evaluates the contracts, and states what was not proven, in the bundle itself. - Offline verification —
evarness verifyre-checks any bundle with no network and no trust in the machine that produced it. Signing optional.
Simulation is the point, not the limitation
Every model and tool response comes from a scripted fixture — which is precisely what makes hostile scenarios exact, repeatable, and safe to run a thousand times. The harness is the deterministic part of an agent: the gates, routes, redactions, and budgets. If you can't prove the deterministic part holds, the model's quality is irrelevant — a leak through an unguarded edge doesn't care how good the model was. You're proving the seatbelt, not the driver. Real providers and real tools are refused with an actionable error, never silently simulated: this package makes no network calls, by design.
Try it in sixty seconds
pip install evarness==0.1.0a1
# expected: PROOF: PENDING, exit 1 — nothing sends without a human approval
evarness prove approval_gated_send -o proof.json
evarness prove approval_gated_send --approve n3=approve -o proof.json
evarness verify proof.json # → VERIFY: OK, offline
The digest challenge: your digest should match the
v0.1.0 release receipt
byte for byte. If it doesn't, that's a bug —
file it. If it does, you
just reproduced the product's central claim on your own machine. Every
command runs headless:
validate | run | render | prove | verify | export | patterns.
See it before you install it
The live demos are generated by Evarness itself when the docs site builds — a replay you can scrub, a blocked run stopping before the model, and a proof browser carrying a real bundle you can extract and verify. The site build fails if their digests drift.
Learn
- Guide — run graphs, read traces, declare invariants, gate CI
- End-to-end walkthrough — every feature, with the digests your machine should reproduce
- Build a custom node in five minutes · a domain plugin, without touching core
- Architecture · Decision log — every rule the engine enforces traces to a reasoned entry
Build with us
Evarness is a young project with a big thesis: evarness.core is a
domain-agnostic assurance kernel — graphs, events, digests, contracts,
proofs — and agents are its first domain, built entirely through public,
typed extension seams. The same machinery can govern ML pipelines, data
flows, any workflow where "we always do X before Y" deserves to be a
verified contract instead of a wiki page. That future is exactly what we
want to build with the community:
- Run it and tell us.
prove→verifyon your machine — did the digest match the release receipt? Either answer helps. - Build a node. The five-minute tutorial is real: three files, no core changes, your event in the canonical trace.
- Dream up a domain. If your pipeline has rules worth proving, start a discussion — domain packs are the project's future, and early ideas shape the seams.
- Found something wrong? A graph, a fixture, and a seed make a perfect, deterministic bug report — open an issue.
See CONTRIBUTING.md for the design rules (determinism contract, verdicts never touch evidence, refuse-don't-degrade) — they're what make the project provable, and they're enforced kindly but firmly.
What a proof establishes — and what it doesn't
A bundle demonstrates that declared invariants held over scripted scenarios, reproducibly, with the trace as evidence. It does not establish universal safety, and a signature proves integrity — not that the runs happened. Every bundle says this about itself. Scope in SECURITY.md.
Status
Alpha, evaluated in the open. This first release is the assurance spine,
simulation-only — on PyPI as the pre-release evarness==0.1.0a1. Real
providers, sandboxed tools, and adapters for other agent frameworks are on
the roadmap, each arriving as a separately proven release. The stable
0.1.0 follows community evaluation — that gate hasn't moved. The optional visual client
is Evarness Studio —
nothing here requires it.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evarness-0.1.0a1.tar.gz.
File metadata
- Download URL: evarness-0.1.0a1.tar.gz
- Upload date:
- Size: 164.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fafb73b5ec9f6d23ce5efd5021f662652274cdc991f719b39c8fe2f26bb952f0
|
|
| MD5 |
4e811dc0972d340edd8a31ca7bbe14ac
|
|
| BLAKE2b-256 |
f7697b97f7bf6f6f42bbf863dee5f920b3e44b17eeaa4f76801531d88ffaddc0
|
File details
Details for the file evarness-0.1.0a1-py3-none-any.whl.
File metadata
- Download URL: evarness-0.1.0a1-py3-none-any.whl
- Upload date:
- Size: 154.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1286077770871fbb4d8024e56ca8727f1d312a3298ade0a159c8420b4bd0043c
|
|
| MD5 |
177a43cf1e0ed64e242a47c3d21acc33
|
|
| BLAKE2b-256 |
c585564601bf825311abc4ab8d30bf08791927ba66eb840af4d25be15f9d67e4
|