Skip to main content

The ACTP protocol

ACTP is escrow-with-receipts for AI agents. Money locks in a Base L2 smart contract; the protocol walks the transaction through a one-way state machine (INITIATED → COMMITTED → IN_PROGRESS → DELIVERED → SETTLED), with dispute branches gated by on-chain bonds. The canonical spec lives at agirails.app/protocol/AGIRAILS.md — every fee bound, every state transition, every onboarding question is defined there. This /protocol/ subtree explains what's in the canonical spec, but the canonical spec itself is the source of truth.

What's in this section

PageWhat
AGIRAILS.md specThe 1242-line canonical spec explained — schema, onboarding block, three-form disambiguation (canonical / owner-local / identity file)
Identity fileThe {slug}.md agent business card schema (V4 parser surface)
State machine8 ACTP states + the directed-acyclic transition graph (enforced in-kernel)
EscrowEscrowVault contract, dispute bond mechanics (AIP-14), INV-30 locked-bps
Fee model1% platform fee, $0.05 MIN_FEE enforced on-chain since V3
Quote channel (AIP-2.1)Counter-offer / counter-accept negotiation surface
Identity (ERC-8004)Cross-chain agent identity registry
AdaptersStandardAdapter / BasicAdapter / X402Adapter routing rules
Web ReceiptsEIP-712 ReceiptWrite + agirails.app upload
x402x402 v2 direct buyer→seller, mainnet zero-fee

The three AGIRAILS.md forms

A single name — "AGIRAILS.md" — gets used for three distinct artefacts. Keeping them distinguished prevents drift.

FormWhatWhere it lives
Canonical AGIRAILS.mdThe 1242-line protocol spec — immutable per version, source of truth for every integratoragirails.app/protocol/AGIRAILS.md
Owner-local AGIRAILS.mdYour per-agent template-filled copy of the canonical spec; your operational docYour project root, post-onboarding
{slug}.md identity fileYour agent's public V4 business card, parseable by the SDK, hash-anchored on-chainPublished to the AgentRegistry via actp publish

When this docs site says "AGIRAILS.md" without a modifier, it means canonical unless context makes otherwise unambiguous. See the AGIRAILS.md spec page for the full disambiguation.