Agent wallet guide · October 2026

Approve AI agent payments in your own wallet, with AC2.

Frits Zwager, Fizzl · 18 October 2026 · tested end to end on Windows with AC2 Wallet on iOS

An AI agent that pays for APIs needs a budget it can spend without asking, and a way to ask you when it wants more. Most agent wallets ask with a button in a chat app. Anyone with that chat account, or the bot's token, can press it, and afterwards nothing proves who did.

AC2 (Agentic Communication and Control), an open protocol from the Algorand Foundation, makes the approval a signature. The agent asks, your wallet app on your phone shows the request, you approve with a passkey, and your Algorand account signs. Our open-source agent wallet, presign-guard-wallet, uses it for payments above the limit: the agent pays only after it has checked that the signature is yours, and keeps the signed approval with the payment as proof.

How it works

  1. Within the limit, the agent pays on its own. You set the limits, for example 5 USDC per payment and 20 USDC a day. presign-guard checks every payment before it is signed: known drainers, sanctioned addresses, look-alike tokens.
  2. Above a limit, the agent asks you over AC2. It sends a signing request to AC2 Wallet on your phone: what it wants to pay, to whom, for what, why it is over the limit and presign-guard's verdict.
  3. You approve with your passkey. AC2 Wallet signs the approval with your Algorand account key. The key never leaves your phone.
  4. The agent checks your signature, then pays. It verifies the Ed25519 signature against your Algorand address. A decline, no answer in time (10 minutes by default) or a signature from another key counts as no.
  5. The signed approval stays with the payment, so later you can prove who approved what.

The agent still pays with its own wallet, on any network it supports. AC2 only carries your approval.

What you need

Step 1: AC2 Wallet on your phone

Install AC2 Wallet and create an account with a passkey (Face ID or a fingerprint). It makes a new Algorand address. Note that address: only its signature will approve your agent's payments. Back up the recovery phrase on paper if the app gives you one, and never type it anywhere else.

Step 2: the AC2 service next to your agent

On the machine where the agent runs:

npm install -g @algorandfoundation/ac2-cli
ac2 service start
ac2 pair

ac2 pair shows a QR code. Scan it with AC2 Wallet and approve the pairing. Pera Wallet can't pair yet: it shows that Liquid Auth support is coming soon. Then ac2 status should say the wallet is connected.

Step 3a: Claude, Cursor or another MCP agent

Add the MCP server presign-guard-wallet-mcp with your AC2 Wallet address as AC2_OWNER. For Claude Desktop, in claude_desktop_config.json:

{
  "mcpServers": {
    "wallet": {
      "command": "npx",
      "args": ["-y", "presign-guard-wallet-mcp"],
      "env": {
        "AGENT_KEY": "0x…the agent wallet's private key…",
        "LIMIT_USDC_PER_TX": "5",
        "LIMIT_USDC_PER_DAY": "20",
        "AC2_OWNER": "YOUR…AC2…WALLET…ALGORAND…ADDRESS",
        "AGENT_LABEL": "research-agent"
      }
    }
  }
}

For Claude Code:

claude mcp add wallet -e AGENT_KEY=0x… -e LIMIT_USDC_PER_TX=5 \
  -e LIMIT_USDC_PER_DAY=20 -e AC2_OWNER=YOUR…ADDRESS -- npx -y presign-guard-wallet-mcp

Then ask your agent "what is my wallet status?": under approvals it should say signed in the owner's own wallet over AC2, with your address.

Step 3b: your own code

In presign-guard-wallet 0.20 or newer, ac2Approver is the onOverLimit hook:

import { guardWallet } from "presign-guard-wallet";
import { ac2Approver } from "presign-guard-wallet/ac2";

const wallet = guardWallet(walletClient, {
  pay, // an x402 fetch that pays the $0.01 presign-guard checks
  limits: { tokens: { USDC: { perTx: "5", perDay: "20" } } },
  onOverLimit: ac2Approver({
    owner: process.env.OWNER_ALGORAND_ADDRESS, // only this account's signature approves
    label: "research-agent",
    timeoutMs: 10 * 60_000, // no answer in 10 minutes = no
  }),
  onSpend: (entry) => console.log(entry.amount, entry.approval?.signature ?? "within the limit"),
});

verifyApproval(owner, payload, signature) checks a stored approval again later. The module talks to the AC2 service over its local socket (~/.ac2/ac2d.sock, or the named pipe \\.\pipe\ac2-daemon on Windows) and adds no packages. Source: guard-wallet/ac2.js (MIT).

What you sign

AC2 Wallet shows the agent's request and the text it will sign, for example:

fizzl-approval-v1
research-agent wants to sign something over your limit
8 USDC is over the limit of 5 per transaction
for: Daily market report
url: https://api.example.com/report
signTypedData · chain 8453
presign-guard: green
spent this window: USDC 12 / 20
id: 3f9c2a7e5b1d4c08
expires: 2026-10-18T16:10:00.000Z

It is a text, never a transaction, so a signed approval can't be used to move your funds. The id and expiry tie it to this one payment.

Good to know

Questions

What is AC2?

AC2 (Agentic Communication and Control) is an open protocol from the Algorand Foundation that lets an AI agent ask its owner for a signature. The owner approves in a wallet app on their phone with a passkey; the key never leaves the phone and the agent can only ask, never sign. A small service, ac2-cli, runs next to the agent and keeps an end-to-end encrypted peer-to-peer link to the wallet.

Can an AI agent ask me to approve a payment in my own wallet?

Yes. With presign-guard-wallet (ac2Approver) or the MCP server presign-guard-wallet-mcp (AC2_OWNER), an agent pays on its own within the limits you set. A payment above a limit goes to AC2 Wallet on your phone: you see what the agent wants to pay, to whom and why it is over the limit, and you approve with your passkey. Your Algorand account signs the approval, and the agent pays only after it has checked that the signature is yours.

Can a signed approval be used to move my funds?

No. What you sign is a text that starts with fizzl-approval-v1, never a transaction. Algorand signs transactions over the prefix TX followed by the transaction, so a signed approval can't be replayed as a payment. It only proves that you approved this one payment, with an id and an expiry time.

Which wallets support AC2?

On 18 October 2026, AC2 Wallet (iOS and Android, from the Pera team). Pera Wallet itself shows that Liquid Auth support is coming soon when you scan an AC2 pairing code, so pair with AC2 Wallet.

Does it work when the agent pays on Base or Solana?

Yes. The agent still pays with its own wallet, on any network it supports (USDC on Base, Solana, Algorand or Stellar, RLUSD on the XRP Ledger). AC2 only carries your approval, which your Algorand account signs.

Links