Skip to main content

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.

ci pypi release license python

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 bundlesevarness prove runs every scenario twice, evaluates the contracts, and states what was not proven, in the bundle itself.
  • Offline verificationevarness verify re-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

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. proveverify on 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

Apache-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evarness-0.1.0a1.tar.gz (164.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evarness-0.1.0a1-py3-none-any.whl (154.8 kB view details)

Uploaded Python 3

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

Hashes for evarness-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 fafb73b5ec9f6d23ce5efd5021f662652274cdc991f719b39c8fe2f26bb952f0
MD5 4e811dc0972d340edd8a31ca7bbe14ac
BLAKE2b-256 f7697b97f7bf6f6f42bbf863dee5f920b3e44b17eeaa4f76801531d88ffaddc0

See more details on using hashes here.

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

Hashes for evarness-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 1286077770871fbb4d8024e56ca8727f1d312a3298ade0a159c8420b4bd0043c
MD5 177a43cf1e0ed64e242a47c3d21acc33
BLAKE2b-256 c585564601bf825311abc4ab8d30bf08791927ba66eb840af4d25be15f9d67e4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page