Intent Domain (AVIP-INT)
Normative specification of AVIP intent — declaration, constraints, delegation chain, and server-side verification.
Intent Domain — AVIP-INT
An Intent is a signed, structured declaration of what an agent is authorized to do and within what bounds, created before execution begins. It is the contract against which the Execution domain is gated and the Audit domain renders a verdict.
| Component | Code | Purpose |
|---|---|---|
| Intent Declaration | AVIP-INT-DECL | The signed statement of intended action |
| Constraints | AVIP-INT-CON | The machine-checkable bounds on that action |
| Delegation Chain | AVIP-INT-DEL | The authorization path from human to acting agent |
| Intent Verification | AVIP-INT-VER | Server-side acceptance checks before storage |
AVIP-INT-DECL — Intent Declaration
Purpose
Defines the structure and signature of an Intent.
Normative Requirements
- An Intent MUST be created and signed by the issuing agent before the transaction begins.
- The Intent signature MUST cover the deterministic serialization of its core fields (
action,constraints,issuerDid,subjectDid,timestamp), with nested keys sorted at every level. - The signature algorithm MUST be Ed25519 (RFC 8032); the output is a 64-byte detached signature, Base64-encoded.
- An Intent MUST be anchored on-chain (per its On-Chain Mapping) before execution is permitted to start.
- The stored Intent MUST be byte-identical to the signed Intent — the server MUST NOT reconstruct or re-sign it.
Data Structures
Intent (generic / A2A form)
| Field | Type | Description |
|---|---|---|
intentId | string | Unique id, intent_ prefix |
issuerDid | string | DID of the declaring agent |
subjectDid | string | DID of the counterparty agent |
action | string | Operation type (e.g. execute_task) |
constraints | object | See AVIP-INT-CON |
delegationChain | array | See AVIP-INT-DEL |
timestamp | string | ISO 8601 creation time |
signature | string | Ed25519 detached signature (Base64) |
A2B extension fields — the A2B profile extends the Intent with payment-specific fields:
| Field | Type | Purpose |
|---|---|---|
category | string | High-level merchant category (e.g. gift_card) |
maxAmount | number | Spending ceiling in the quote currency |
deadlineUnix | int | UTC seconds after which the order auto-expires |
allowedTools | string[] | Whitelist of tools the agent may call |
requiresConfirmAbove | number | Threshold above which user confirmation is required |
scope | string[] | Merchant / SKU filters |
userSA | address | The user's smart account (refund destination) |
Signing Input (ordered)
The fields included in the signature input, sorted:
actionconstraints(nested keys also sorted)issuerDidsubjectDidtimestamp
On-Chain Mapping
| What | Value |
|---|---|
| Anchor key (A2A) | keccak256("intent:" + orderId) |
| Anchor key (A2B) | intentHash (via A2BOrderGateway.createOrder) |
| Data hash | keccak256(intent JSON) |
| Submitted via | The executor's / user's smart account (AVIP-ID-SA) |
AVIP-INT-CON — Constraints
Purpose
Defines the machine-checkable bounds an Intent places on execution. Constraints are what the Action Gateway enforces at runtime and what the Completion Proof checks at settlement.
Normative Requirements
- An execution step MUST be refused if it would breach any declared constraint.
- A settlement comparison MUST evaluate every applicable constraint and reflect any breach in the verdict.
Data Structures
Constraints object (A2A)
| Field | Type | Description |
|---|---|---|
maxAmount | number (optional) | Maximum value for this transaction |
deadline | string (optional) | ISO 8601 — settlement must occur before this time |
milestoneCount | integer | Expected execution steps (default: 5) |
scope | string[] (optional) | Allowed capability types |
In the A2B profile the equivalent bounds are expressed as the extension fields in AVIP-INT-DECL (maxAmount, deadlineUnix, allowedTools, requiresConfirmAbove, scope).
Constraint Semantics
| Constraint | Satisfied when |
|---|---|
| Budget | Actual cost ≤ maxAmount |
| Deadline | Settlement / completion occurs before the deadline |
| Scope | Every step's capability is within the declared scope |
| Milestone count | Completed milestones meet the expected count |
AVIP-INT-DEL — Delegation Chain
Purpose
Records the authorization path from a human principal down to the acting agent, so that authority can be traced and attenuated across multiple hops.
Normative Requirements
- Every Intent MUST carry a delegation chain with at least one entry.
- Where authority passes through multiple agents, each delegate MUST hold strictly fewer permissions than its delegator (attenuation).
- Each delegation step MUST be signed by the delegator.
Data Structures
Delegation step
| Field | Type | Description |
|---|---|---|
from | string | DID of the delegator |
to | string | DID of the delegate |
attenuated | boolean | Whether permissions narrow at this step |
signature | string | Delegator's signature over this step |
In the simplest case (human → agent) the chain has one entry. In multi-agent delegation (human → orchestrator → worker) the chain grows by one entry per hop, with attenuation at each step.
AVIP-INT-VER — Intent Verification
Purpose
Defines the checks the Platform MUST perform before accepting and storing an Intent.
Normative Requirements
On receiving an Intent, an implementation MUST perform all of the following before storage, and MUST reject the Intent if any fails:
- Signature verification — reconstruct the signing input with the same deterministic serialization, extract the issuer's public key from the DID, and verify the Ed25519 signature.
- Issuer consistency — the Intent's
issuerDidMUST match the order's requester. - Subject consistency — the Intent's
subjectDidMUST match the order's executor. - Constraint consistency — the Intent's
maxAmountMUST be greater than or equal to the order's price.
Error Conditions
| Failed check | Result |
|---|---|
| Signature invalid | Intent rejected; order does not proceed |
| Issuer / subject mismatch | Intent rejected |
maxAmount < order price | Intent rejected |
A rejected Intent is never anchored. Only an Intent that passes all four checks is stored as-received and anchored on-chain.