Skip to main content

Applied Epistemic Engineering for Python

OpenSSF Best Practices

OpenSSF assessment: 97%; reporting-history criteria remain unclaimed.

CI CodeQL Documentation License: MIT

An evidence-centered Python toolkit for turning important claims into inspectable engineering artifacts. It makes boundaries, evidence, provenance, uncertainty, contradictions, falsification tests, recovery work, and decision history explicit.

This is an original, ground-up ElectroHire implementation. Its result model aligns directly with ElectroHire's Spec Kit Evaluator Contract while the domain engine remains independently packaged.

Choose your interface

  • CLI or Python: install applied-epistemic-engineering, then use aee or from aee import AEESession.
  • Agent: give your agent the maintained standalone SKILL.md and ask it to inspect your claims and evidence in ordinary language. The agent handles commands and setup; no Spec Kit is required. The packaged skill is included from engine 1.5.3.
  • Spec Kit: install extension ID aee, then ask the project's agent to use its installed AEE skills. The extension provisions the engine and evaluator.

See CLI, agent, and Spec Kit for discovery, installation, example requests, and dependency boundaries.

Why it exists

Use AEE to challenge an agent's “done” claim against real test artifacts, keep uncertainty visible across agent handoffs, review conflicting findings, and focus the next evidence-gathering step. Separating assertions from observations and preserving source identity can help expose unsupported claims in agent loops; it is not a guaranteed hallucination detector. See use cases and evaluation for concrete workflows, limitations, and how to measure improvement.

Ordinary validation asks whether an artifact is formatted correctly. AEE asks harder questions:

  • What exactly is being claimed?
  • Under what conditions does it hold?
  • What was observed, inferred, or merely asserted?
  • What evidence would prove the claim wrong?
  • Which claims depend on uncertain foundations?
  • What contradicts the current conclusion?
  • What bounded work would improve the decision?

The library does not call a confidence number “truth.” Every score is a transparent decision aid derived from recorded evidence and explicit rules.

Names and installation

The PyPI distribution is applied-epistemic-engineering. It installs the Python module aee (from aee import AEESession) and the engine CLI aee (aee --version). The separate spec-kit-aee repository provides a Spec Kit extension whose extension ID is also aee. These names identify different layers; do not install this engine with pip install aee.

python -m pip install applied-epistemic-engineering

Requires Python 3.11 or later; tested on Linux, macOS, and Windows with Python 3.11, 3.12, and 3.13.

Using Spec Kit? You don't need to install this package yourself. Install the Spec Kit extension, which installs a compatible engine (applied-epistemic-engineering>=1.5.0,<2, the latest available) and its other dependencies automatically on first use:

specify extension add aee

spec-kit-aee is the independently versioned adapter, installed by Spec Kit.

For development:

pip install -e ".[dev,docs]"

Five-minute example

from aee import (
    AEESession,
    ClaimKind,
    ClaimStatus,
    Evidence,
    EvidenceKind,
    SourceQuality,
)

session = AEESession(
    "checkout-service",
    phase="after_plan",
    ledger_file=".aee/epistemic-ledger.jsonl",
)

claim = session.add_claim(
    "REQ-PERF-001",
    "Checkout p95 latency remains below 300 ms",
    kind=ClaimKind.REQUIREMENT,
    boundary=["production", "nominal load", "30-minute observation window"],
    source_ref="spec.md#REQ-PERF-001",
)
claim.status = ClaimStatus.SUPPORTED
claim.falsification_tests.append("Observe p95 latency at or above 300 ms")

session.add_evidence(
    claim.id,
    Evidence(
        ref="reports/load-test-2026-09-04.json",
        kind=EvidenceKind.OBSERVED,
        source_quality=SourceQuality.TEST,
        source_id="load-test-2026-09-04",
        description="Observed p95 latency was 241 ms",
    ),
)

assessment = session.assess()
print(assessment.outcome, assessment.summary)

CLI

aee assess --input claims.json --phase after_plan --output assessment.json \
  --evaluator-output evaluator-result.json
# assess ledgers by default (Spec 002 FR-8.1): the assessment above was
# also appended to .specify/extensions/aee/ledger/epistemic-ledger.jsonl
# under the project root (the CWD, or --project-root when given) — the
# same default the spec-kit-aee runner uses. --ledger <path> selects a
# different ledger; --no-ledger opts out, and the choice is echoed into
# the assessment metadata either way.
aee verify-ledger --ledger .specify/extensions/aee/ledger/epistemic-ledger.jsonl

aee challenge --input claims.json --phase after_plan --output challenge.json
aee validate claims.json   # strict load + structural checks (CI: 0 valid, 2 invalid)
aee verify-evidence claims.json --project-root .   # refs resolve, hashes recompute, quality is derived vs declared
aee assess --input claims.json --verify-evidence --project-root .   # the same checks, folded into the assessment
aee gaps --matrix specs/verification-matrix.md --evidence evidence/ --output GAPS.md
aee graph --input claims.json --output claim-graph.mmd
aee gate --input assessment.json
aee demo   # self-contained demonstration assessment

# With the epistemic-ledger policy gates and measured source reliability:
aee assess --input claims.json --policy --reliability reliability.json
# Diff two assessments into a materiality-filtered review queue:
aee review --previous assessment-t1.json --current assessment-t2.json

Exit codes are CI-friendly: 0 for pass/warn, 1 for iteration/clarification/evidence collection/abstention, and 2 for a hard block or invalid ledger.

The ledger is the record; the JSON is a working copy (Spec 002 FR-8.3). Each ledger entry stores the assessment's SHA-256 alongside its project, phase, outcome, and claim ids, so the entry — not the assessment file, which tools routinely overwrite on the next run — is the durable record of what was assessed. The documented loop is aee assess → aee verify-ledger --ledger <path>; the CLI and the spec-kit-aee runner describe identical semantics (ledger by default, same default path, --no-ledger as the explicit opt-out).

Architecture

Component Install name / access name Responsibility
Python engine PyPI: applied-epistemic-engineering; import and CLI: aee Claims, evidence, scoring, challenge, recovery, graph, ledger
spec-kit-aee GitHub archive; Spec Kit extension ID: aee Spec Kit commands, hooks, and artifact discovery
spec-kit-evaluator GitHub archive; Spec Kit extension ID: evaluator Shared result envelope, composition, reports, and model routing

What AEE can establish

AEE does not certify truth, compliance, safety, or general correctness. It records claims, the evidence and checks supporting them, remaining uncertainty, and what would change the decision. Records can be mistaken. A passing gate establishes acceptance by the configured rules; a valid hash chain establishes continuity of the retained records, not their truth. Formal proof tools can establish precisely stated properties under explicit assumptions, but AEE is not a theorem prover or an independent certification authority. See names and assurance boundaries for the distinctions and requirements for stronger, bounded assurance claims.

Core principles

  1. Assertions never become observations because a model repeats them.
  2. Counterevidence and contradictions remain visible.
  3. Unsupported claims remain explicitly unsupported.
  4. Confidence propagates through dependencies by the weakest-link rule.
  5. Every failure produces a bounded recovery proposal with a verification condition.
  6. Deterministic checks run before probabilistic review.
  7. Hash chains establish tamper evidence—not truth, identity, or trusted time.

Documentation

Full documentation is published on Read the Docs at applied-epistemic-engineering.readthedocs.io. How the engine, extension, and catalog versions relate is specified in the version policy.

GitHub main and RTD latest can include unreleased documentation corrections. RTD stable and the PyPI README reflect the tagged/uploaded release; a Git push does not update PyPI metadata. See development setup for this repository's own Spec Kit/AEE installation.

Ownership and license

Designed and implemented by ElectroHire Inc. Copyright © 2026 ElectroHire Inc. Released under the MIT License.

Metadata

Release files for applied-epistemic-engineering 1.5.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for applied-epistemic-engineering 1.5.3
File Size Uploaded
applied_epistemic_engineering-1.5.3.tar.gz 309.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for applied-epistemic-engineering 1.5.3
File Interpreter ABI Platform
applied_epistemic_engineering-1.5.3-py3-none-any.whl Python 3 none any Details

Total release size: 463.5 kB

Release files / applied_epistemic_engineering-1.5.3.tar.gz

Download URL applied_epistemic_engineering-1.5.3.tar.gz
Size 309.9 kB
Tags Source
SHA-256 checksum
How to use checksums
fa3fa579a8cf67794c15ef61610b8fe7d4236612aa32345658c40fa41983c207
BLAKE2b-256 checksum
How to use checksums
73cb03a24f1e5843a938966349a8cde92066fa4377389361ba7eda2899dbc574
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / applied_epistemic_engineering-1.5.3-py3-none-any.whl

Download URL applied_epistemic_engineering-1.5.3-py3-none-any.whl
Size 153.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b289cea6a6e3c36c1bc88732f860f56fb22122786f0ba9b2e2ffc31da6fb6aee
BLAKE2b-256 checksum
How to use checksums
92be6f15e9461b23a8c6a202ead15d8e8d1b31f96259880d89d750af309777d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.5.3 This release

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page