Skip to content

Provena

Govern what your agents know.

Your AI agent just made a decision based on data from 6 different sources. Can you tell me which ones? Can you prove the data wasn't tampered with? Can you verify it was still current when the LLM saw it?

Provena adds tamper-evident audit trails to any AI agent's context pipeline — in 3 lines of Python.

from provena import ContextTrail

trail = ContextTrail()


@trail.track(source="retriever")
def search(query):
    return retriever.search(query)

Every call to search() is logged with a SHA-256 content hash, provenance validation, freshness checking, and a hash-chained audit trail that detects tampering.

pip install provena

Why Provena?

AGT governs what agents DO. Guardrails AI governs what agents SAY. Provena governs what agents KNOW.

  • Tamper-evident trails


    SHA-256 hash-chained (Merkle-style) logging with optional HMAC signing. If a record is edited, the chain breaks.

    Chain verification

  • Provenance validation


    Verify that context carries source metadata. Statuses: VALID / MISSING / INCOMPLETE.

    Provenance guide

  • Freshness checking


    Detect stale context from timestamps and temporal patterns. Statuses: FRESH / STALE / UNKNOWN.

    Freshness guide

  • EU AI Act & ASI06


    Maps to Articles 10, 12, 13, and 14, and covers OWASP ASI06 context poisoning.

    EU AI Act mapping

How it compares

No existing tool governs the context input layer — the data your agent retrieves and acts on.

Provena LangSmith Guardrails AI OpenTelemetry
Context tamper detection ✅ ❌ ❌ ❌
Provenance validation ✅ ❌ ❌ ❌
Freshness checking ✅ ❌ ❌ ❌
EU AI Act compliance reports ✅ ❌ ❌ ❌
Policy enforcement (block/warn) ✅ ❌ ✅ (output) ❌
Multi-agent handoff tracking ✅ ✅ ❌ ❌
Zero core dependencies ✅ ❌ ❌ ❌

Architecture

Your Application
|
|  Retriever ---+
|  Tool Call ---+
|  Agent Msg ---+---> ContextTrail (observe/log) --> trail + optional PolicyViolation
|  Memory    ---+        |                              (after persist)
|  MCP       ---+        |
|                  +-----+------------------+
|                  | ProvenanceValidator     |
|                  | FreshnessChecker        |
|                  | HashChain (SHA-256)     |
|                  | SQLite Backend          |
|                  | OTel Exporter           |
|                  +------------------------+

The LLM path belongs to your application. Provena observes and logs
sources by default; a configured BLOCK policy raises PolicyViolation
after the record is written, not before the LLM is called.

Pure Python, sub-1ms overhead, no model downloads. The core library uses only the standard library.

Next steps

  • Getting started


    Install, log a first trail, and verify the chain in 5 minutes.

    Start here

  • Guide


    Tracking, provenance, freshness, verification, configuration, and testing.

    Read the guide

  • Integrations


    LangChain, LlamaIndex, OpenTelemetry, MCP, and the CLI.

    Wire it in

  • API reference


    Auto-generated from the public Python API.

    Browse the API