Skip to main content

verified-python

The Python SDK for the Work Verification Protocol (WVP).

What did this agent do, under which authority, with what evidence, according to which contract, and can an independent party reproduce the result?

verified-python lets a Python agent system produce a portable, signed account of a unit of work, and lets anyone verify it offline. Verification is performed by the same Rust crates as the verified CLI, bound natively; the Python layer adds an API, not a second implementation.

Status: developer preview (0.1.0). WVP is a draft in every version. This SDK has not been security-audited, and its API will change. Read what is and is not supported before relying on it.

Any agent. Any runtime. Independently verifiable work.

Install

pip install verified-python

Wheels are published for Linux, macOS and Windows; the import name is verified. To work on the SDK, from a checkout with a Rust toolchain (1.99+) and uv:

git clone --recurse-submodules https://github.com/dekrops/verified-python
cd verified-python
uv sync            # builds the native extension
uv run pytest      # 250+ tests, including the WVP conformance corpus

Python 3.11 or later. The core package has no runtime dependencies.

1. How do I independently verify a package?

You hold a package file and a trust registry you chose. No account, no network, no agent framework.

from verified import Expectations, TrustRegistry, Verifier, WorkContract

examples = "examples/standalone-verification"
verifier = Verifier(
    trust=TrustRegistry.load(f"{examples}/trust.json"),  # yours, never the package's
    expect=Expectations(  # what you agreed to
        tenant="acme-synthetic",
        contract=WorkContract.load("examples/contracts/invoice-posting.json"),
    ),
)

result = verifier.verify(f"{examples}/contradicted.json")

print(result.verification_status)  # complete   <- the verification succeeded
print(result.decision)  # CONTRADICTED   <- the work did not
print(result.explain())

Those are two different facts, and the API never merges them:

You want to know Read
Is the file well formed and unaltered? result.integrity
Is the evidence authentic under my registry? result.evidence_signatures, result.signer_authority
Did every protocol check run and pass? result.verification_status
What does the contract yield from the evidence? result.decision (None unless reproduced)
Is that the outcome I need? result.require_supported()
Did the sources tell the truth? Nothing can tell you. result.source_truthfulness is always not_established.

A result has no truth value (bool(result) raises), and there is no valid flag. To enforce an outcome, say which one:

from verified import RequirementNotMet, TrustRegistry, Verifier

verifier = Verifier(trust=TrustRegistry.load("examples/standalone-verification/trust.json"))

verifier.verify("examples/standalone-verification/supported.json").require_supported()

try:
    verifier.verify("examples/standalone-verification/undetermined.json").require_supported()
except RequirementNotMet as error:
    print(error)  # the reproduced decision is UNDETERMINED, not SUPPORTED

Without a registry (Verifier(trust=None), which you must write out), the result is incomplete: integrity only, no decision. The decision a package carries is its issuer's claim until you reproduce it.

2. How do I instrument my Python agent?

Wrap the run in a WorkSession and decorate tools. No framework, event loop or tracing backend is imposed; sync and async both work.

from verified import WorkContract, WorkSession
from verified.integrations import verified_tool

contract = WorkContract.load("examples/contracts/invoice-posting.json")


@verified_tool(
    work_type="invoice.post",
    contract=contract,
    inputs=lambda invoice_id: {"invoice": invoice_id},
)
def post_invoice(invoice_id: str) -> str:
    return "accepted"  # what the ERP's API answered


with WorkSession(agent="invoice-agent", tenant="acme-synthetic") as session:
    with session.turn():
        post_invoice("INV-123")

(work,) = session.works
print(work.state)  # open
print([event.kind.value for event in session.events])

The tool returned, and nothing is established. The decorator recorded that the call happened and opened a work item under the contract; it did not record success. The work stays open until evidence from an identified source is attached:

OPEN ──attach(evidence)──▶ OPEN ──claim()──▶ CLAIMED ──issue(trust=…)──▶ ISSUED
                                                                           │
                             decision: SUPPORTED | CONTRADICTED | UNDETERMINED

issue() evaluates the contract and seals a package. With only the agent's word, the decision is UNDETERMINED. The full flow, with a simulated ERP as a separate party, is examples/invoice-posting.

An OpenAI Agents SDK adapter is included (verified.integrations.openai_agents.VerifiedRunHooks); see agent runtime integration.

3. How do I produce evidence without misrepresenting its authority?

Evidence is signed where the observation is made, by a key whose authority is declared explicitly: one issuer, one tenant, named source systems.

from verified import (
    Ed25519Signer,
    EvidenceSource,
    SigningAuthority,
    SigningAuthorityError,
    Subject,
)

signer = Ed25519Signer(key_id="erp-gateway-1", seed=bytes([7]) * 32)  # use a KMS in production
authority = SigningAuthority(
    key_id="erp-gateway-1",
    issuer="00000000-0000-4000-8000-0000000000e1",
    tenant="acme-synthetic",
    sources=["erp"],  # this key speaks for the ERP, and nothing else
)

gateway = EvidenceSource(system="erp", authority=authority, signer=signer)
posting = gateway.record(
    "posting",
    {"document": "DOC-1", "invoice": "INV-123", "amount": 125_000},  # EUR 1250.00 at scale 2
    subject=Subject(system="erp", kind="invoice", key="INV-123"),
)
print(posting.source, posting.key_id)

try:
    EvidenceSource(system="payments", authority=authority, signer=signer)
except SigningAuthorityError as error:
    print(error)  # not declared to speak for source 'payments'

The local check prevents mistakes. The security boundary is elsewhere: a relying party's registry says which key may speak for which system, and its verifier refuses a statement signed by any other key (SOURCE_NOT_AUTHORIZED). An agent's key is authorized for the agent's runtime, so an agent cannot turn "I posted the invoice" into "the ERP says it was posted".

A signature establishes who said something and that it was not altered. It does not establish that it is true. See the trust model.

Six things that are not the same

Thing What it is Who stands behind it In this SDK
Execution telemetry What a runtime logged about itself Nobody; it is unsigned ExecutionTrace
Agent claim An assertion that work was done, against a contract The claimant Claim
Signed evidence statement What an identified source says it observed The signer, for the systems a registry authorizes SignedEvidence
Verified decision What the contract yields from authenticated evidence, reproduced Whoever re-runs it: you VerificationResult.decision
Package ("portable Work Record") Claim, contract, evidence and decision in one sealed file Its issuer, if it signed the decision WorkPackage
Work record The record of one verification of a package The verifier that computed it WorkRecord

An attestation (a party signing that a verdict holds) appears in the protocol only as the issuer's signature over a decision. Multi-claim attestation bundles, as in Agent Compliance Center, are application formats and are not part of this SDK.

Examples

All run offline with synthetic data: uv run python examples/<dir>/<script>.py.

Example Shows
standalone-verification A third party verifying three packages; all verify, one is supported
invoice-posting A custom agent loop, a tool, and an ERP gateway as a separate evidence source
chatbot-compliance Turn and session claims under separate contracts; the session is not the sum of its turns
enterprise-evidence Scoped signing authority, a pluggable signer, and three relying parties

What is and is not here

Working, with tests: offline verification of wvp-0.1 and wvp-0.2 packages; relying-party expectations and work records; trust registries; evidence statements, chains and admission; Work Contract Language 1; work-unit identity and nullifiers; issuing wvp-0.2 packages; framework-independent instrumentation; one framework adapter.

Not here: a client for the hosted Verified platform (it has no stable service API to call yet); claim registration v1; statement chaining when producing evidence; LangGraph and Google ADK adapters. Details and reasons are in the roadmap and the compatibility assessment.

This SDK contains no billing, settlement or compliance rules, and does not decide whether verified work is accepted, payable or compliant.

Documentation

  • dekrops/wvp: the specifications and conformance vectors. Normative.
  • dekrops/verified-cli: the Rust implementation this SDK binds, and the verified command.
  • dekrops/agent-billing-center, dekrops/agent-compliance-center: reference applications built on verified work.
  • dekrops/verified: the commercial Work Verification Platform. Not required by anything here.

License

Apache-2.0. See LICENSE and NOTICE. The conformance corpus under conformance/wvp is a submodule with its own licenses.

Metadata

Release files for verified-python 0.1.0

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

Source distribution (sdist)

Source distribution for verified-python 0.1.0
File Size Uploaded
verified_python-0.1.0.tar.gz 56.9 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for verified-python 0.1.0
File
verified_python-0.1.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
verified_python-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl CPython 3.11 abi3 Linux musl 1.2+ x86-64 Details
verified_python-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl CPython 3.11 abi3 Linux musl 1.2+ ARM64 Details
verified_python-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64 Details
verified_python-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details
verified_python-0.1.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
verified_python-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

Total release size: 4.4 MB

Release files / verified_python-0.1.0.tar.gz

Download URL verified_python-0.1.0.tar.gz
Size 56.9 kB
Tags Source
SHA-256 checksum
How to use checksums
59cd157205cdf96c65f3b5a8b677dc83c65f14433ed9d05bbecf8df44ed7761a
BLAKE2b-256 checksum
How to use checksums
b272c953af29ccdf137a64ae27f4d08737f27bdf28d03dc08fe6495bf01ec13d
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 11, 2026.

Transparency log

Release files / verified_python-0.1.0-cp311-abi3-win_amd64.whl

Download URL verified_python-0.1.0-cp311-abi3-win_amd64.whl
Size 535.5 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
516ee1d72ce6060edae8707253c933aaf1ebdaf09f266d620cc5d78a202f75af
BLAKE2b-256 checksum
How to use checksums
4192637d81d0142e60a90d5da1628442a57ded86868f2a1829cd19a461d36ca4
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 11, 2026.

Transparency log

Release files / verified_python-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl

Download URL verified_python-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl
Size 818.7 kB
Tags CPython 3.11 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
95c54c6d349e4cc80a2ffd68856aadaf39093e5e5316a67ee1769cf258af5b5d
BLAKE2b-256 checksum
How to use checksums
252543b58bfa15cfeedf4505814606197d8ef44054a4ef20c93b0c1fe06da38d
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 11, 2026.

Transparency log

Release files / verified_python-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl

Download URL verified_python-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl
Size 732.2 kB
Tags CPython 3.11 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
c68afde7d0e51013aeb367c748e1ac6d3f079a79cfbabc650f5506300b4db7c6
BLAKE2b-256 checksum
How to use checksums
4a234b61a4b7611fbadf390d8bb7f9c6bc419ebcb1cf020dae8b4db679e8ae0d
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 11, 2026.

Transparency log

Release files / verified_python-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL verified_python-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 605.3 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
ca2a5889bb4713306efce94fb905bc7e985e61ecdc83a76726b9e5cffa199bda
BLAKE2b-256 checksum
How to use checksums
98705f0b82a13acd840d7ae4f76913cb8683bf0b10add372436580c0a4bde927
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 11, 2026.

Transparency log

Release files / verified_python-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL verified_python-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 554.3 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
e42bdd7e06203f07e6fcb9eae55b7708f122af4147ea82f1959074536ac09da2
BLAKE2b-256 checksum
How to use checksums
fabe842a4be08cf89d475cb76ad82b334bdfe21fe73de637793565dd05c36104
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 11, 2026.

Transparency log

Release files / verified_python-0.1.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL verified_python-0.1.0-cp311-abi3-macosx_11_0_arm64.whl
Size 522.5 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
863568aae20696302d941cb9332401463796b0bee657bf8111affb8299f2ebdf
BLAKE2b-256 checksum
How to use checksums
355bbcda51bbb7289490ad22ee1b8c245277765cc6212670d47bfa106000e75b
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 11, 2026.

Transparency log

Release files / verified_python-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl

Download URL verified_python-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl
Size 593.3 kB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
91b7c9d8afaf6618402d96aee96dd7e35a301ff416afc85f58495f06a454e55d
BLAKE2b-256 checksum
How to use checksums
7244b64977f81479392aa4516056dab39a2fee6740c1b95ffe86367a05a16e2f
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 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

8 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