Prove what your
AI agent did.

Cryptographic verification for every agent action. One API call, one URL anyone can check.

Open source·Self-hostable·MCP-native
agent.py
from treeship_sdk import Treeship
ts = Treeship() # reads TREESHIP_API_KEY
result = ts.attest(
agent="my-agent",
action="Processed order #12345",
inputs_hash=ts.hash(order_data)
)
print(result.verify_url)
# → treeship.dev/verify/my-agent/a8f3b2c1

How verification works

Each attestation gets a public URL. Verifiers check the Ed25519 signature independently — no account required.

treeship.dev/verify/acme/8f3a

Processed refund #7291

acme-support-bot · Feb 21, 2:32 PM

Verifying...
Data matches hash
Signature valid
Agent identity confirmed
hashsha256:9f86d081884c...
sig ed25519:a4f2b8c1e7...
agentacme-support-bot(acme-inc)

Support & operations

Each resolution is recorded with an inputs hash and action description. Queryable audit trail for compliance reviews.

"Resolved ticket #4521 — refund $89.00"

Financial workflows

Signed records for trades, transfers, and approvals. Each includes timestamp, inputs hash, and agent identity.

"Executed mass_payment batch_7f2a"

CI/CD pipelines

Chain attestations across agents with workflow_id. PR review, deploy, and notification linked in one audit trail.

"Deployed v2.1.0 to production"

Track handoffs across agents, frameworks, and teams.

A LangChain agent hands off to a Claude Code agent, which triggers a Nanobot deploy. Each step is cryptographically linked — one dashboard, full audit trail.

treeship.dev/dashboard
Total Agents
3
Total Attestations
47
Today
12
Verified Agents
3
Recent AttestationsView all →
Processed refund #7291
acme-bot·2m agoTools ✓
Approved PR #891
code-agent·5m agoHuman
Deployed v2.1.0 to production
deploy-bot·8m agoTools ✓
Resolved ticket #4521
support-ai·12m agoZK
Executed batch payment_7f2a
finance-bot·18m agoHumanTools ✓
ZK Skills

Add ZK proofs to any agent

One parameter adds zero-knowledge proof generation as an agent capability. Works with the SDK, CLI, and REST API — same ts.attest() call, plus enable_zk=True.

agent.py
from treeship_sdk import Treeship
ts = Treeship()
# Same attest() call — just add enable_zk
result = ts.attest(
agent="kyc-processor",
action="Verified customer KYC",
inputs_hash=ts.hash(customer_data),
enable_zk=True,# ← that's it
)
# Verification URL works the same way —
# but verifier never sees the underlying data
print(result.verify_url)
# → treeship.dev/verify/kyc-processor/b7c2d4
CLI: treeship attest --agent kyc-processor --action "Verified KYC" --enable-zk

Regulatory compliance

regulatory_compliance

Agent attests to GDPR, HIPAA, or SOX compliance. Verifier confirms the regulation and jurisdiction without seeing audit internals.

"HIPAA-compliant analysis of 12k patient records"

Range proofs

range_proof

Agent attests a value is within bounds. Verifier sees the range, not the value. Credit scores, salaries, risk thresholds.

"Credit score > 700 verified (exact score hidden)"

Data compliance

data_compliance

Agent attests to dataset properties — row count, schema hash, PII scan. Verifier confirms without accessing the data.

"50k rows, schema valid, zero PII detected"

Works with

Claude Code·Cursor·LangChain·OpenClaw·Nanobot·Any Python agent·REST API

How it works

Ed25519 signatures

Every attestation is signed with Ed25519. Payloads are canonical JSON, signatures are deterministic and independently reproducible.

Public verification

Anyone can verify with the public key and attestation ID. No account, no API key, no trust assumptions.

Self-hostable

Run the full stack on your own infrastructure. Generate your own Ed25519 keypair. MIT licensed.

SDK, CLI, MCP

Python SDK, CLI, and MCP server for Claude Code and Cursor. REST API for everything else. OpenClaw, Nanobot, LangChain — any framework.

Get started

$pip install treeship-sdk