A zero-dependency governance and evidence-integrity kernel for any agent runtime.
Project description
Agents propose. Policy decides.
A zero-dependency governance and evidence-integrity kernel for any agent runtime.
evalopt turns host observations into one deterministic, content-addressed acceptance decision. It
does not run models, choose tools, edit repositories, or pretend that retrieved text is true. Your
agent runtime does the work; the kernel decides whether the resulting evidence satisfies an explicit
policy.
Install
pip install evalopt-graph
Python 3.10–3.14 is supported. The stable kernel has no required runtime dependencies.
Decide, serialize, replay
from evalopt_graph import AcceptanceDecision, AcceptanceInput, GovernancePolicy, evaluate_acceptance
policy = GovernancePolicy(required_gates=("tests", "lint"))
observed = AcceptanceInput(
observed_at="2026-07-20T12:00:00+00:00",
gate_results=(("tests", "PASS"), ("lint", "PASS")),
)
decision = evaluate_acceptance(policy, observed)
assert decision.status == "ACCEPTED"
assert decision.reasons == ("policy_satisfied",)
assert decision.validate()
# Decisions are plain, content-addressed records.
stored = decision.to_dict()
restored = AcceptanceDecision.from_dict(stored)
assert restored.replay(policy, observed)
The evaluator is pure: the same policy and input produce the same decision. Terminal outcomes are
ACCEPTED, BLOCKED, UNVERIFIED, UNSUPPORTED, and FAILED, each with stable reason codes and
hashes for the policy, input, evidence records, and decision.
Stable kernel API
The package root exports exactly ten stable symbols in v0.1.x:
from evalopt_graph import (
GovernancePolicy,
ClaimRecord,
EvidenceRequest,
EvidenceMaterial,
EvidenceAttestation,
SupportAssessment,
EvidenceAuthority,
AcceptanceInput,
AcceptanceDecision,
evaluate_acceptance,
)
GovernancePolicydeclares required gates, trust, freshness, evaluator, claim, verifier, and record authorization requirements.EvidenceAuthorityapplies controller-owned adapter policy to material already retrieved by a host.EvidenceAttestationbinds source policy, retrieval metadata, selected content, and hashes.SupportAssessmentseparately records whether selected content supports, contradicts, or is insufficient for a claim.evaluate_acceptanceevaluates a complete immutable observation once and returns a replayableAcceptanceDecision.
See kernel.py
for the compact public contract and
test_kernel.py for
complete evidence-authority examples.
Kernel owns / host owns
| The kernel owns | Your host owns |
|---|---|
| Deterministic policy evaluation | Model calls, prompts, and sampling |
| Terminal decision status and reason codes | Tools, edits, retries, and orchestration |
| Content-bound evidence and support records | Retrieval and protection of controller policy |
| Record authorization and freshness checks | Sandboxes, network and filesystem controls |
| Canonical serialization, hashes, and replay | Persistence, scheduling, graders, and metrics |
This boundary is intentional. Importing evalopt_graph loads the kernel without importing provider
SDKs, the compatibility graph, CLI code, filesystem adapters, benchmark adapters, or optional
frameworks.
Evidence, not a truth oracle
Evalopt keeps three questions separate:
- Was this exact material retrieved under an allowed adapter policy? An attestation binds the retrieved bytes, selected span, source class, time, parser identity, and policy.
- Does the selected material support this exact claim? A support assessment records the verifier and its result independently of retrieval integrity.
- May these exact records authorize acceptance? Governance policy allowlists the authority policy, verifier, and evidence records before the decision can use them.
That structure makes evidence tampering and unsupported load-bearing claims visible. It does not prove semantic truth, deployed behavior, source correctness, or model capability.
Current evidence ladder
- IMPLEMENTED / UNIT_PROVEN: pure API, immutable records, distinct terminal states, authorization, serialization, replay, and import isolation.
- INTEGRATION_PROVEN: the compatibility host and optional Harbor verifier mapping terminate through the same kernel decision path.
- CONFORMANCE_PROVEN: deterministic generated and authored cases exercise a bounded evidence boundary mechanism.
- Not established: benchmark superiority, external comparison, independent reproduction, or SOTA.
Read the evidence report and prospective external protocol for the claims, controls, and gaps. There is no live-model governance campaign or official Docker SWE-bench result in this release.
Integrate it anywhere
The kernel is host-independent: adapt observations from Codex, Claude Code, OpenHands, LangGraph, CI,
or your own runtime into AcceptanceInput, then store the returned decision beside the policy and input
used to create it.
An optional Harbor 0.18 conformance task demonstrates verifier-side mapping without importing Harbor into the kernel. It validates integration wiring only; it is not an external benchmark.
The historical graph, standalone CLI, provider clients, Codex bridge, research loop, and filesystem adapters remain as deprecated compatibility surfaces for one migration cycle. They are not stable API or policy authorities. New integrations should depend only on the ten root exports above.
Documentation
- Architecture and trust boundaries
- Evidence results and limitations
- Prospective benchmark protocol
- Harbor integration
- v0.1.0 release notes
- Changelog
Community and security
Bug reports, focused proposals, documentation improvements, and integrations are welcome. Start with the contribution guide and follow the Code of Conduct.
Please report vulnerabilities privately using GitHub Security Advisories, not a public issue. See the security policy for supported versions and response expectations.
Development
git clone https://github.com/ajaysurya1221/evalopt-graph.git
cd evalopt-graph
uv venv .venv
source .venv/bin/activate
uv pip install -e ".[dev]"
python -m compileall -q src tests scripts
python -m pytest -q
python -m ruff check src tests scripts
python -m ruff format --check src tests scripts
bash scripts/smoke_test.sh
uv build
License
Released under the MIT License. Copyright © 2026 Ajay Surya Senthilrajan.
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 evalopt_graph-0.1.0.tar.gz.
File metadata
- Download URL: evalopt_graph-0.1.0.tar.gz
- Upload date:
- Size: 349.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65845e9da30aad0ee22195076d8fcd525a282caac6809a4ea2c9cbd604547910
|
|
| MD5 |
c017b7ee1a341d1458613aad596837f1
|
|
| BLAKE2b-256 |
746aefbf25dbc7fd885372439600cc95835a78f3365f0f6a8854f199585dd547
|
Provenance
The following attestation bundles were made for evalopt_graph-0.1.0.tar.gz:
Publisher:
release.yml on ajaysurya1221/evalopt-graph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evalopt_graph-0.1.0.tar.gz -
Subject digest:
65845e9da30aad0ee22195076d8fcd525a282caac6809a4ea2c9cbd604547910 - Sigstore transparency entry: 2206373631
- Sigstore integration time:
-
Permalink:
ajaysurya1221/evalopt-graph@42a65237303d77d8a38c2ff7d4110cb8b51a7375 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ajaysurya1221
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@42a65237303d77d8a38c2ff7d4110cb8b51a7375 -
Trigger Event:
push
-
Statement type:
File details
Details for the file evalopt_graph-0.1.0-py3-none-any.whl.
File metadata
- Download URL: evalopt_graph-0.1.0-py3-none-any.whl
- Upload date:
- Size: 134.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
582140ec2b04c412ec7f56483b9e476c5b38ce309afb4f086b9a830e14d53156
|
|
| MD5 |
994b88cb34cfc3321dbf987adec8d995
|
|
| BLAKE2b-256 |
2e1262a9a27c0ea92a28f7b3a0b353f27aa365e535f016ad2cbc28256355b728
|
Provenance
The following attestation bundles were made for evalopt_graph-0.1.0-py3-none-any.whl:
Publisher:
release.yml on ajaysurya1221/evalopt-graph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evalopt_graph-0.1.0-py3-none-any.whl -
Subject digest:
582140ec2b04c412ec7f56483b9e476c5b38ce309afb4f086b9a830e14d53156 - Sigstore transparency entry: 2206373640
- Sigstore integration time:
-
Permalink:
ajaysurya1221/evalopt-graph@42a65237303d77d8a38c2ff7d4110cb8b51a7375 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ajaysurya1221
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@42a65237303d77d8a38c2ff7d4110cb8b51a7375 -
Trigger Event:
push
-
Statement type: