Skip to main content

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.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 sebbi 1.2.0
File Size Uploaded Provenance Actions
sebbi-1.2.0.tar.gz 19.9 kB With provenance Details for sebbi-1.2.0.tar.gz

Built distribution (wheel)

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

Total release size: 39.7 kB

Release files / sebbi-1.2.0.tar.gz

Download URL sebbi-1.2.0.tar.gz
Size 19.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f4ab0bb45f2721efcef8ce4aca5eae8b2d22858c0948ca378b1de40dfbb5ba9c
BLAKE2b-256 checksum
How to use checksums
de64704f890f258725baeca396ce83cd28ef1de818acf6f58955eba19d73cb25
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.0-py3-none-any.whl

Download URL sebbi-1.2.0-py3-none-any.whl
Size 19.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4cdd12a81804176ab7346e555dd950e4543928e75a127eda23901fffaf36e9eb
BLAKE2b-256 checksum
How to use checksums
d887d28a8308b983e90ab844cba858ce52d61fff0d7881731fa78e780360137b
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.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sebbi-1.2.0.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