aft_*); a separate harness process redeems it and writes the tokenized DPAN into the form via Chrome DevTools Input.insertText.
The model only ever sees { status: "filled", masked_last4: "1234" }. The DPAN never enters the prompt, the chat history, or any LLM-visible memory.
Phase 8 (just shipped). Sandbox-only end-to-end. Mirrors the architecture of Mastercard Agentic Tokens and Visa Intelligent Commerce.
Threat model
The whole point: the LLM never holds the card data, period. If your agent runtime is compromised, jailbroken, or instructed to exfiltrate “everything you know”, there is nothing card-shaped in scope to leak. The boundary is enforced by:- The autofill token carries no card data — it’s a 30-second-TTL handle bound to (intent, card, merchant origin, max amount).
- The redeem endpoint requires
X-CUA-Harness-Secret, which the harness process holds and the LLM does not. - The R7-05 Luhn-scan blocking CI gate rejects any commit where a PAN-shaped string could land in
messages[].
Wire flow
1
Mint an autofill token
Agent posts an approved intent + card + the merchant origin + amount cap. Ovra returns
aft_id + expires_at. The token is single-use, 30s TTL.2
Hand off to the harness
Pass
aft_id to your CUA harness over your own internal channel. The LLM context closes here.3
Harness redeems
Harness calls
GET /v1/cua/autofill-tokens/:id/redeem with X-CUA-Harness-Secret. Returns DPAN, cryptogram, expiry month/year. One-shot. Replays return 410.4
Harness fills the form
Computer Use locates
#pan, #expiry, #cvc (locked merchant contract IDs). Harness uses CDP Input.insertText to inject — never evaluateOnNewDocument and never via LLM-driven sampling.5
LLM resumes
LLM sees
{ status: "filled", masked_last4: "1234" } and clicks submit. Merchant settles via its own acquirer.Mint the token
Redeem (harness only)
Error matrix
Trusted Agent Protocol prep
For each agent, an Ed25519 keypair is provisioned async. The public JWK is exposed at:Sacred guarantees
- Card data never enters LLM scope. Enforced architecturally (separate process, separate credential) and by CI (R7-05).
- Single-use. CAS-style consume; replay returns 410.
- Bound to one merchant origin and one intent. The harness cannot pivot to a different merchant with the same token.
- 30-second TTL. Even an exfiltrated
aft_idis useless after half a minute.
What CUA is not
- Not a browser-automation framework. Bring your own (Anthropic Computer Use, Browserbase, Stagehand, etc.). CUA is the credential boundary, not the runtime.
- Not a payment processor. The merchant settles via their own acquirer. Ovra issues the card; the merchant clears the auth.
- Not live-mode yet. Sandbox card data with sandbox-shaped DPANs in v1.2.
Next
MPP
The other Pay mode — for machine-readable merchants.
Pay overview
Both modes side-by-side.
Cards
DPAN, network tokenization, multi-card per agent.
Intents
The approval primitive every autofill token binds to.
