Paste, don't read.
Two ways in, both free. Run the whole thing on your own machine with no account, or point one
base_url at the hosted gateway. Either way your next agent call becomes a signed,
verifiable receipt.
Fastest: run it yourself, no account
The full loop — agent traffic → receipts → bundle → VERIFIED — entirely local. Nothing to sign up for, nothing that depends on our uptime.
# Python 3.11+ pipx install swarrm # or: pip install swarrm swarrm demo # agent traffic → receipts → checkpoint → bundle swarrm verify demo_out/bundle.json # → VERIFIED (the demo then flips a byte → NOT VERIFIED) swarrm up # run the whole dev stack locally (gateway + console)
Prefer zero install? Verify a real bundle in your browser →
Wire it into your agent
Point your existing client at the gateway. The only change is a base_url and your key — get one from Start free, or use your local swarrm up gateway.
from openai import OpenAI
client = OpenAI(
base_url="https://api.swarrm.ai/v1", # or http://localhost:8080/v1 (swarrm up)
api_key="YOUR_SWARRM_KEY",
default_headers={"x-evd-agent": "my-agent"},
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "hello"}],
)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.swarrm.ai/v1", // or http://localhost:8080/v1
apiKey: process.env.SWARRM_KEY,
defaultHeaders: { "x-evd-agent": "my-agent" },
});
const resp = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "hello" }],
});
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://api.swarrm.ai/v1", # or http://localhost:8080/v1
api_key="YOUR_SWARRM_KEY",
model="gpt-4o-mini",
default_headers={"x-evd-agent": "my-agent"},
)
print(llm.invoke("hello").content)
# Wrap an MCP server; every tools/call becomes a receipt in a local log. swarrm wrap -- npx -y @modelcontextprotocol/server-everything # receipts land in ./evd_log.db — check any time: swarrm verify # or point your MCP client's command at `swarrm wrap -- <server>`
# Production: the recorder signs inside YOUR network; only hashes egress. # From the repo (docker compose): EVD_UPSTREAM_BASE=https://api.openai.com \ EVD_HOSTED_URL=https://api.swarrm.ai \ EVD_API_KEY=YOUR_SWARRM_KEY \ docker compose -f docker-compose.appliance.yml up
"Is it even recording?"
Fail-open means failures are silent by design — right for production, unnerving on day one. So we made it loud on demand: swarrm doctor shows your effective config and, crucially, your last receipt.
$ swarrm doctor swarrm doctor — profile: dev [core] EVD_TENANT t_dev (profile-default) EVD_DB ./evd_log.db (profile-default) ... Recording health: t_dev: ✔ 12 receipts, last 3s ago, seq-gaps 0 ✔ profile 'dev' is fully configured.
In the console, your first receipt gets its own moment — “your first verified receipt ✔ — verify it yourself.”
Verify your own first bundle
The point of the whole thing: proof you can hand to someone who doesn't trust you.
swarrm demo # produces demo_out/bundle.json swarrm verify demo_out/bundle.json # → VERDICT: VERIFIED # or drop it into the browser verifier — no install, no account: # https://swarrm.ai/verify.html
If something's off
swarrm: command not found
pipx ensurepath then restart the shell. In a venv: activate it first (source .venv/bin/activate).I got NOT VERIFIED right after the demo
bundle.json (VERIFIED), not bundle_tampered.json (NOT VERIFIED, on purpose).swarrm doctor shows no receipts
swarrm doctor — you should see your first receipt with an age of a few seconds.My agents can't reach the hosted gateway
swarrm up — it's the same code.