Define action classes
Examples: read.context, draft.compose, tool.call.local, email.send.external, repo.push, payment.initiate.
Trust Graduation is a small runtime pattern for agent products: classify the action, check whether it can execute, prepare approval when needed, and record the receipt.
Use it around MCP tools, coding agents, browser agents, eval stacks, workflow agents, or any tool-call surface where reading is safe but sending, spending, deleting, or mutating is not.
The first useful demo is not a broad autonomous workflow. It is a single consequential action moving through classification, permission, approval, receipt, and future trust.
external_actions: 0.Do not start with the tool name. Start with the consequence. The same tool can be safe for one action class and unsafe for another.
Examples: read.context, draft.compose, tool.call.local, email.send.external, repo.push, payment.initiate.
canExecuteReturn allowed, allowed_with_constraints, review_required, deferred, blocked, or human_only from evidence, user approval, reversibility, and prior receipts.
If review is required, create a local approval packet with external_actions: 0. The agent can prepare; the human decides.
Log what was approved, refused, revised, or executed. Use that receipt as future permission evidence.
Trust Graduation should be easy to add around an existing agent loop. The protocol boundary is four calls, with no requirement to replace the model, framework, MCP server, or eval stack.
const action = classifyAction(toolCall)
const decision = canExecute({
actionClass: action.class,
actor: agent.id,
target: action.target,
evidence: receipts.relevant(action)
})
if (decision.status === "allowed") {
const result = await execute(toolCall)
recordReceipt({ action, decision, result })
}
if (decision.status === "review_required") {
prepareApprovalPacket({ action, decision, external_actions: 0 })
}
A useful packet makes the proposed external consequence reviewable before the agent creates it.
email.send.external, repo.push, calendar.create, payment.initiate, etc.We are asking builders a narrow question: should action-class permission live in each app, in MCP, in evals/observability, or as a small receipt-based layer across them?
If you build agents, MCP servers, evals, coding tools, workflow automation, or enterprise AI controls, tell us where this pattern is wrong, redundant, or useful.