Skip to main content
This page traces the full lifecycle of a single agent-initiated payment: from the operator publishing a policy through to the audit row that proves it happened. Each arrow in the diagram below names the actor and the action; each step below the diagram shows the schema instance on the wire at that moment.

Sequence diagram

Step-by-step schema instances

Step 1 — operator publishes AgentPolicyEnvelope

The operator configures which vaults an agent can touch, what amounts it can move, which chains and counterparties are allowed, and when the policy is active. Whenever any field changes, policy_version increments. All downstream grants and verifications key off this monotonic counter.

Step 2 — agent requests a grant from the OAuth AS

The agent authenticates using client_credentials (server-to-server) or an authorization-code flow (user-delegated). It specifies the vault it wants to access via an RFC 8707 resource indicator and requests the minimum scope set needed.
The AS verifies that ap-agent-acme-prod is a registered principal for this vault, reads the current policy_version, and signs the JWT.

Step 3 — OAuth AS issues ScopedGrantClaims (JWT)

The JWT is returned as an opaque Bearer token. The agent stores it in memory; it is never written to disk or logged.

Step 4 — agent makes an MCP tool call

Step 5 — MCP server validates the grant

@glideco/grant-wrapper runs seven checks in order (see ScopedGrantClaims — Validation contract) before the tool handler runs. If any check fails, the tool call returns JSON-RPC error -32001 (auth failure) or -32003 (step-up required) before executing the requested action. Grant verification itself includes database reads.

Step 6 — policy engine evaluates the envelope

@glideco/policy-engine receives the current envelope (fetched fresh from DB and cached by (vault_id, policy_version)) plus the tool call parameters. It evaluates every configured axis in deterministic order and returns one of three verdicts: Denied calls do not produce a Receipt — only an AgentActivityEvent with eventKind: 'risk_verdict' and eventKind: 'policy_violation'.

Step 7 — receipt written after settlement

Settlement is recorded separately from the initial payments.initiate response. That tool returns a pending action identifier; acceptance is not proof of settlement.

Step 8 — application writes AgentActivityEvent

Server-side application code writes the activity record. The F4 trigger protects the append-only log against unauthorized mutation; it does not generate the event.
The Trust Console and audit:stream subscribers tail this table in real time.

Schema cross-reference

Reading list