Skip to main content
Change of provenance

The repository or configuration that created this release differ from a previous release. View details.

sebbi: a receipt for every AI agent action

Your agent refunds a customer, sends an email, moves money or answers a patient. Add one line and every one of those actions gets a sealed receipt with a public link anyone can check: your customer, your auditor, your insurer, a regulator.

pip install sebbi
import sebbi

@sebbi.receipt("refund-decision")
def decide_refund(order):
    return {"refund": True, "amount": 42}

decide_refund({"id": 7})
print(sebbi.last().url)   # https://sebbi.pro/r/...  anyone can check it

No account needed to start. Zero dependencies. Python 3.8+.

Why teams add it

  • Proof, not logs. Each receipt sits in a Merkle tree sealed into the sebbi.pro chain, witnessed by independent chains, timestamped into Bitcoin and signed post-quantum. Nobody can quietly edit it afterwards.
  • Your data stays yours. Inputs and outputs are fingerprinted (SHA-256) on your machine. Only fingerprints, a short label and a timestamp are sent.
  • Never slows your agent. Sealing runs on a background thread in batches. If the network is down, your code carries on.
  • A link anyone can check. receipt.url works straight away. Put it in the email, the ticket or the audit file.
  • Ready for the EU AI Act and UK GDPR. Record-keeping, logging and the right to an explanation all start with being able to show what your AI actually did.

Your framework, one line

LangChain / LangGraph

from sebbi.integrations.langchain import SebbiCallbackHandler
agent.invoke({"input": "..."}, config={"callbacks": [SebbiCallbackHandler()]})

CrewAI

from sebbi.integrations.crewai import step_callback, task_callback
crew = Crew(agents=[...], tasks=[...], step_callback=step_callback, task_callback=task_callback)

OpenAI Agents SDK

from sebbi.integrations.openai_agents import SebbiRunHooks
result = await Runner.run(agent, "...", hooks=SebbiRunHooks())

MCP servers

from sebbi.integrations.mcp import sealed

@mcp.tool()
@sealed("lookup_customer")
def lookup_customer(customer_id: str) -> dict: ...

Anything else

r = sebbi.seal(input=request, output=result, label="send-invoice")
r.wait()            # optional: block until sealed
print(r.url, r.sealed, r.block_index)

Async functions work with the same decorator. Exceptions are sealed with outcome error and re-raised unchanged.

OpenTelemetry

Already tracing your agents? One line seals every agent run and tool call you trace, and writes the receipt link onto the span, so it shows up in Jaeger, Tempo, Honeycomb, Datadog, Langfuse or Phoenix next to the span itself.

pip install "sebbi[otel]"
from sebbi.integrations.otel import instrument
instrument()   # adds sebbi to your global TracerProvider

Each sealed span gets two attributes: sebbi.receipt.id and sebbi.receipt.url. Recognised out of the box: the OpenTelemetry GenAI conventions (gen_ai.operation.name = execute_tool, invoke_agent), OpenInference (openinference.span.kind), Vercel AI SDK spans, and any span you mark with span.set_attribute("sebbi.seal", True). Options: llm=True (also seal model calls), all_spans=True, filter=fn, prefix="...", on_receipt=fn. Already batching spans? BatchSpanProcessor(SebbiSpanExporter()) does the same without the link on the span.

Only two fingerprints per span leave your process: never span names, attributes, prompts or tool results.

Prove a trace matches its receipts. Export spans as OTLP/JSON (for example the Collector file exporter) and run:

sebbi verify-otlp traces.json
# MATCH    https://sebbi.pro/r/r3f9...  execute_tool refund
# 2 of 2 spans match their sealed receipts

Anyone holding the trace can run this, without trusting you or sebbi.pro. Change one attribute and that span shows MISMATCH. The fingerprint rules are in span_payload() and are identical in the JavaScript client.

Reversing an action

r = sebbi.seal(order, refund, "refund")
...
sebbi.reverse(r, "Customer cancelled; refund issued")

Refunds, cancellations and withdrawn decisions happen. A reversal never deletes anything: the original receipt stays sealed and valid, and its page shows Reversed, the reason and a link to the sealed reversal receipt. Only whoever sealed the original (this installation, or the same account key) can reverse it, and a reversal cannot itself be reversed.

Settings

Environment Meaning
SEBBI_API_KEY Your key from https://sebbi.pro/connect. Optional.
SEBBI_DISABLED=1 Turn every receipt into a no-op (tests, local dev).
SEBBI_ENDPOINT Override the API address.
SEBBI_OWNER_SECRET Fix the owner secret (serverless, several machines).

Or in code: sebbi.configure(api_key="...").

Pricing

  • Free lane: 1,000 receipts a day, no account, no key.
  • With a sebbi.pro account: up to 100,000 a day, receipts tied to your account and your evidence packs. 7 days free, then 50p per device per month.
  • Checking any receipt is always free.

Command line

sebbi seal "hello world" my-label   # prints the receipt link
sebbi check r3f9...                 # VALID / INVALID

Check a receipt yourself

GET https://sebbi.pro/v1/receipts/<id> returns the leaf, the RFC 6962 inclusion path, the Merkle root and the chain block. The receipt page re-runs every check and lets anyone paste the original data to confirm it matches, fingerprinted in their own browser.

Docs: https://sebbi.pro/receipts · MCP server: https://sebbi.pro/mcp · Made by Monop Content.

Metadata

Release files for sebbi 1.2.1

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

Change of provenance

The repository or configuration that created these release files differ from that of a previous release.

We recommend inspecting the repository and configuration before proceeding. View details.

Source distribution (sdist)

Source distribution for sebbi 1.2.1
File Size Uploaded Provenance Actions
sebbi-1.2.1.tar.gz 19.9 kB With provenance Details for sebbi-1.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sebbi 1.2.1
File Interpreter ABI Platform Actions
sebbi-1.2.1-py3-none-any.whl Python 3 none any Details for sebbi-1.2.1-py3-none-any.whl

Total release size: 39.8 kB

Release files / sebbi-1.2.1.tar.gz

Change of provenance

This file belongs to a release with changed provenance: the repository or configuration that created the release files differ from that of a previous release.

We recommend inspecting the repository and configuration before proceeding. View details.

Download URL sebbi-1.2.1.tar.gz
Size 19.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2bac4e687c329966b20ea39d9f251eeb8572264e9874255522495fdfec28081d
BLAKE2b-256 checksum
How to use checksums
6f817d724f33a9bf2189e222b0cee86e8bea1b8277164f826739dd5f8bbd5444
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 1, 2026.

Transparency log

Release files / sebbi-1.2.1-py3-none-any.whl

Change of provenance

This file belongs to a release with changed provenance: the repository or configuration that created the release files differ from that of a previous release.

We recommend inspecting the repository and configuration before proceeding. View details.

Download URL sebbi-1.2.1-py3-none-any.whl
Size 19.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dc72eae50155e7e1d36a486c4a1b30b73075dc187e5b4400106a25cf6a0a443f
BLAKE2b-256 checksum
How to use checksums
d8c5a26e81d731dca9658e3787f9a60b35002e8779d918c9e3236b822c918cd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 1, 2026.

Transparency log

Security for sebbi 1.2.1

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.

Change of provenance

The repository and configuration that created this release differ from a previous release.

While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.

Select from 2 files

Attestation for sebbi-1.2.1.tar.gz

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 Nov 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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