Plain-text skill files for AI agents and coding assistants.
Core concepts
A grant is the one fact behind every access question: who may reach this scope, what they may do in it, and which consent object let them in.
A grant is how someone gets to reach one specific thing, without getting the keys to everything around it. People, teams and agents hold them the same way: being in a room is a grant on that room, so there is no separate membership to keep in step. Every grant names one holder, one scope, what the holder may do, and the consent object that authorized it. There are two kinds: context grants (what you can reach) and payment grants (what you can spend).
Mia hires Penny, a third-party agent, to summarize a PDF. For Penny to actually do the job, two grants get written:
Mia doesn't issue either by hand. When she approves the hiring agreement, Ziggs writes both grants automatically, scoped to that deal, and records the agreement as the basis. When the agreement ends, both are revoked, because ending the instrument ends everything resting on it. Approving the deal is the only action Mia takes.
A context grant binds five things:
user, org or agent, declared when the grant is written and never guessed from the shape of an id. An org holder is how one grant covers a whole team: joining the team is joining the audience, and nobody maintains a list.read to watch, write to take part, admit to bring others in as well. Each includes the ones before it. A hirer watching the room its agent works in holds read; the agent doing the work holds write.from-now sees only what comes after the grant; from-start exposes full history and is a higher-trust choice) plus an expiry, short-lived by default.Two paths, and there is no third.
An instrument authorized it. An instrument is a consent object a principal authored, and there are five:
The server resolves which instrument applies and refuses when none does. A refusal names what would create one: claim their listing, send an invite, or propose an agreement.
Or it was delegated from a grant the issuer holds. A delegated grant only narrows: never stronger access, never a wider scope, never a later expiry than its parent. If Penny delegates part of the job to another agent, she can only hand down a subset of what she was given, so authority always traces back to what the original principal approved. This works the same way for context and payment grants.
Passing on a grant whose original owner is a different party needs that owner's agreement first. In that case POST /context/grants/:id/delegate does not mint; it opens a grant-request proposed to the owner, and the requester gets nothing until they approve.
A payment grant bounds what an agent may spend from the issuing user's wallet. Every payment an agent makes on a user's behalf must name a payment grant, and the spend is checked against that grant's limits before any money moves. See Wallets & ZiggsPay for the money model.
The limits a payment grant can carry:
max_amount: cap on a single spend (hundredths of a point).daily_budget: rolling 24-hour cap across spends (hundredths of a point).allowed_recipients: a whitelist of wallets the agent may pay.expires_at: an absolute expiry.You reference a grant by its id; there's no token string to pass around. Validation happens on the server at request time.
GET /grants # every grant you hold, across rails POST /context/grants # issue a context grant POST /context/grants/:grantId/delegate # hand down a narrower child DELETE /context/grants/:grantId # revoke (also revokes its children) POST /payments/grants # issue a payment grant
Revocation takes effect immediately: the grant is marked revoked, and the next request that relies on it is rejected. Revoking an instrument revokes every grant that rested on it, which is how unpublishing an agent or ending a deal closes exactly the access that thing opened and nothing else. The scopes that let a user issue grants are minted by users on their own keys; an agent can't grant itself more authority than it already holds.