Skip to main content

ProofLedger Python SDK

A framework-agnostic, tamper-evident audit layer for AI agents. ProofLedger sits underneath or beside any agent framework (LangGraph, CrewAI, OpenAI Agents SDK, AutoGen, or a custom stack) and records every run, event, and tool call into a SHA-256 hash chain.

The chains this SDK produces are byte-for-byte compatible with the ProofLedger TypeScript SDK: runs captured from Python verify correctly in the ProofLedger dashboard, which verifies using the TS implementation.

No third-party runtime dependencies — standard library only (Python >= 3.9).

Install

pip install proofledger

Or from this repo:

pip install packages/sdk-py

Usage

from proofledger import enable, track, with_run, verify_run

# Cloud mode — sends to your ProofLedger backend.
enable(
    api_key="tl_live_...",
    base_url="https://proofledger.dev",
    project_id="proj_...",
)

# One-shot tracking of a complete, verifiable run.
track(
    agent_id="support-agent",
    input="Hello",
    output="Hi there",
    model="gpt-4.1",
    provider="openai",
)

If you call enable() without an api_key (or pass local=True), the SDK runs in local dev mode: events are kept in memory and best-effort appended to ./.proofledger/events.jsonl, with no server required.

Wrapping a unit of work with with_run

with_run opens a run, runs your function, records the result (or the error), and closes the run — all on a verifiable chain. The callback receives a RunHandle you can use to record tool calls and custom events.

from proofledger import enable, with_run, verify_run

enable(local=True)  # local dev mode, no api key

def do_work(run):
    # Record a tool call — emits tool.called + tool.returned around the record.
    run.record_tool_call(
        tool_name="search_kb",
        input={"query": "refund policy"},
        output={"hits": 3},
    )
    return {"answer": "Refunds within 30 days."}

result = with_run({"agent_id": "support-agent", "model": "gpt-4.1"}, do_work)

# Verify the run's hash chain.
report = verify_run(...)  # pass the run id; see examples/basic.py
print(report["valid"])    # True

See examples/basic.py for a complete, runnable example:

python examples/basic.py

Hashing primitives

The same primitives the dashboard uses are re-exported:

from proofledger import (
    create_payload_hash,
    create_event_hash,
    verify_event_chain,
    GENESIS_HASH,
)
  • Canonical JSON: object keys are sorted recursively and serialized with no whitespace and literal Unicode, matching JS JSON.stringify with sorted keys.
  • GENESIS_HASH is 64 zeros — the previousHash of the first event.
  • create_event_hash commits to the event id, type, timestamp, payload hash, and the previous event's hash, chaining every event to the one before it.

Because the canonicalization and digests match the TypeScript SDK exactly, a chain captured in Python verifies identically in the ProofLedger dashboard.

Download files

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

Source Distribution

proofledger-0.4.1.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

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

proofledger-0.4.1-py3-none-any.whl (24.3 kB view details)

Uploaded Python 3

File details

Details for the file proofledger-0.4.1.tar.gz.

File metadata

  • Download URL: proofledger-0.4.1.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for proofledger-0.4.1.tar.gz
Algorithm Hash digest
SHA256 8d226594bdc87e5c361dbc6995113a626ac4dedc31742f2534432ab9c8245055
MD5 250062307e4d5e698c7a0eb816ff838d
BLAKE2b-256 018cb08c757e69bb77d58d46708b8bcbc245b844b06e7db246a6b14199c2eefe

See more details on using hashes here.

Provenance

The following attestation bundles were made for proofledger-0.4.1.tar.gz:

Publisher: publish-pypi-sdk.yml on jorama/proofledger

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file proofledger-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: proofledger-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 24.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for proofledger-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e310bc4251745265420c9b4381702c1923c7d88370cbef43ac130d68aa91bc62
MD5 c7b53ddd33595501516738e74362ffd5
BLAKE2b-256 a4aecfc669c6fffbe833197f9ea21b8adeb3c256f621eb93f5231b8b080a007b

See more details on using hashes here.

Provenance

The following attestation bundles were made for proofledger-0.4.1-py3-none-any.whl:

Publisher: publish-pypi-sdk.yml on jorama/proofledger

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.0

2 files

This release

0.4.1 This release

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 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