The Mandate Chain
When agents hire agents, who authorised what?
Agent commerce is arriving: one agent books a trip, hires another to pay the airline, which pays a hotel. Protocols like Google's AP2 move the money. None of them carry provable authority back to the person who started it, and nothing stops a downstream agent doing more than it was trusted to do. The Mandate Chain fixes both.
Watch it hold the line
How it works
1
A human issues a root mandate to an agent: these actions, this much, these payees, this long. Signed and sealed.
2
That agent can delegate a narrower mandate to the next agent - never wider. Scope, amount, payees and expiry can only shrink. Each link is signed and sealed.
3
Before any action, the agent checks it against the whole chain. ALLOW or BLOCK, with the reason, sealed either way.
4
The human can revoke the root at any time. Everything below it dies instantly.
What anyone can prove, without trusting us
- Who authorised an action, through which agents, within what limits.
- That authority only ever narrowed - no agent handed on more than it held.
- Every link is an Ed25519 signature under our published key, so the chain verifies offline. The seals are anchored into Bitcoin.
The honest limit: a mandate proves authority, not good judgement. If a human authorises a bad payment, the chain proves it was authorised - that is the point. It makes accountability provable; it does not decide for you what to authorise.
Add it to any agent
import requests
H={"Authorization":"Bearer YOUR_KEY"}
# the human authorises the first agent
root=requests.post("https://sebbi.pro/x/mandate/issue",headers=H,json={
"subject":"booking-agent","scope":["book_travel","pay"],"max_amount":500,"currency":"GBP",
"payees":["*"],"ttl_minutes":1440}).json()
# that agent hands the next one a narrower mandate
sub=requests.post("https://sebbi.pro/x/mandate/delegate",headers=H,json={
"mandate":root["mandate"],"subject":"airline-agent","scope":["pay"],"max_amount":420,
"payees":["airline.example"]}).json()
# before paying, check the action against the whole chain
ok=requests.post("https://sebbi.pro/x/mandate/check",headers=H,json={
"mandate":sub["mandate"],"action":"pay","amount":400,"payee":"airline.example"}).json()
if ok["decision"]!="ALLOW": raise PermissionError(ok["reasons"])Any model, any framework. Issue, delegate, check and revoke run on the sebbi engine, 50p a month. Verifying a chain is free.