Skip to main content

Verifiable Intent

How do you prove an AI agent did what you asked — and nothing more?

When a human taps a card, the tap IS the consent. When an agent transacts, there is no tap. Verifiable Intent (VI) fills that gap — a cryptographic, tamper-evident delegation chain binding AI agent actions to human-approved scope. Open-sourced by Mastercard and Google.

The Three Layers

Every agent action traces back to a human through three cryptographically bound layers:

LayerNameWho CreatesWhat It Proves
L1IdentityCredential providerWho you are (issuer signs user's public key)
L2IntentUserWhat you authorized (constraints, budget, scope)
L3ActionAgentWhat was done (within L2 constraints)

Each layer signs the next via cnf (confirmation) claims. L2 binds to L1 via sd_hash. L3 binds to L2 the same way. The chain is unforgeable — break one link, the whole proof fails.

L1: IDENTITY (credential provider signs user key)
| cnf.jwk binding
L2: INTENT (user sets constraints + binds agent key)
| sd_hash binding
L3: ACTION (agent proves it stayed within scope)
| checkout_hash binding
VERIFICATION (verifier checks the full chain)

Two Modes

ModeLayersUse CaseHuman Involvement
ImmediateL1 + L2User reviews final transaction, signs directlyUser confirms each transaction
AutonomousL1 + L2 + L3User sets constraints, agent acts within themUser sets scope once, agent acts repeatedly

Autonomous mode is where VI earns its value. The user says "buy office supplies under $500/month from these three vendors." The agent acts. The merchant can verify the agent had authority. The issuer can verify the chain of consent. Nobody trusts anybody — they verify.

Eight Constraints

L2 intent supports eight machine-verifiable constraint types:

ConstraintWhat It BoundsExample
Amount boundsMin/max transaction value"No single purchase over $200"
Merchant allowlistWho the agent can buy from"Only from approved vendors"
Budget capsTotal spend over period"$500/month maximum"
Recurrence termsFrequency of transactions"Weekly subscription only"
Category restrictionsWhat can be purchased"Office supplies only"
Time windowsWhen agent can transact"Business hours only"
Geographic limitsWhere transactions occur"NZ merchants only"
Approval thresholdsWhen to escalate to human"Human approval above $100"

Verification

A verifier (merchant, issuer, or auditor) checks three things:

CheckWhat It ProvesFailure Means
Delegation chainEach layer's signing key is bound by the previous layer's cnf claimAgent isn't authorized
Constraint satisfactionL3 values fall within L2 constraintsAgent exceeded scope
Checkout-payment bindingcheckout_hash and transaction_id cross-referencePayment doesn't match intent

All three must pass. The spec mandates ES256 signature verification at every layer.

The VVFL Connection

VI is the VVFL made into a protocol. Each station maps:

VVFL StationVI LayerFunction
CaptureL1 IdentityEstablish who you are
PrioritiesL2 ConstraintsDefine what matters (scope, budget, limits)
AttentionL3 ActionDirect effort within constraints
StandardsVerificationGauge reads reality — did action match intent?
ReflectConstraint satisfactionController asks: was scope respected?
EvolveUpdated constraintsNext cycle's L2 is informed by this cycle's results

Without VI, the VVFL has no gauge. With VI, every agent action is measured against its stated intent. The feedback loop closes.

Protocol Position

VI is not a payment protocol. It is the authorization proof layer that sits orthogonal to every payment protocol:

ProtocolWhat It DoesWhat It Doesn't
A2AAgent-to-agent communicationProve authorization scope
MCPAgent-to-tool accessVerify intent constraints
UCPCommerce operations (checkout, cart)Prove delegation chain
AP2Payment authorizationProve human consent chain
ACPMerchant commerceProve delegation chain
VIAuthorization proofHandle transport or settlement

VI credentials travel alongside any of these protocols without transport-layer changes. The spec is intentionally protocol-agnostic.

The Mandate Connection

Our mandate Move module is a Sui-native implementation of VI's core pattern:

VI ConceptMandate ModuleDifference
L1 Identityidentity module — 4 entity types, attestation providersCompiler-enforced via capabilities, not SD-JWT
L2 IntentIntentMandate — budget, items, constraintsOn-chain object with explicit ownership
L3 ActionCartMandate — merchant counter-offerShared object for cross-party coordination
VerificationStatus flow: Open → Fulfilled → CancelledMove's type system prevents invalid transitions
Constraint enforcementBudget field + agent identity checkCompiler prevents unauthorized access

Key difference: VI uses SD-JWT delegation chains (runtime cryptographic verification). Move uses linear types and capabilities (compile-time structural enforcement). Move's approach eliminates classes of bugs that SD-JWT can't — you literally cannot write code that bypasses the authorization, because the compiler won't let you. See smart contract safety comparison.

The bridge: A Sui-native VI implementation could use Move's capability pattern for on-chain enforcement while emitting SD-JWT credentials for off-chain verification — giving both compile-time safety AND cross-protocol interoperability.

Commissioning Alignment

VI's verification model maps directly to the commissioning protocol:

Commissioning LevelVI EquivalentEvidence
L0 SpecL2 Intent writtenPRD exists with constraints
L1 SchemaL1 Identity establishedBackend can authenticate
L2 UI connectedL3 Action possibleAgent can transact
L3 TestedConstraint satisfaction verifiedAutomated tests prove scope respected
L4 CommissionedFull delegation chain verifiedIndependent commissioner proves intent matched outcome

L4 commissioning IS verifiable intent applied to software delivery. The builder (agent) acts within the PRD (intent). The commissioner (verifier) checks the delegation chain (spec → build → outcome).

Context

Questions

If every agent action must trace back to a human-approved scope, what happens when the scope itself was wrong?

  • When VI proves the agent stayed within constraints but the outcome is still bad, is the protocol working or failing?
  • Move's compiler prevents unauthorized access structurally. SD-JWT verifies it cryptographically at runtime. Which approach wins when agents transact at machine tempo?
  • If commissioning IS verifiable intent applied to software delivery, should every L4 commission produce a VI-compatible credential?
  • What constraint type is missing from VI's eight that would matter most for DePIN device transactions?