Use the a2a-wallet CLI to interact with A2A agents — send messages, stream responses, and manage tasks. Also supports x402 payment signing and SIWE authentic...
If a command fails with a "command not found" error, refer to INSTALL.md in this directory and guide the user through installation.
| Command | Description |
|---|---|
a2a | Interact with A2A agents (card, send, stream, tasks, cancel) |
x402 sign | Sign x402 PaymentRequirements → PaymentPayload (for paywalled agents) |
siwe | SIWE token operations (prepare, encode, decode, verify, auth) |
auth | Log in / out (login, device start/poll, logout) |
config | Get or set config values (token, url) |
whoami | Show authenticated user info |
balance | Show wallet balance |
sign | Sign an arbitrary message with the wallet |
faucet | Request testnet tokens |
update | Update the CLI binary |
Before interacting with an A2A agent, inspect its card to check which extensions are declared:
a2a-wallet a2a card https://my-agent.example.com
The capabilities.extensions array in the card lists supported (and possibly required) extensions. Two extensions are relevant to this CLI:
Extension URI: https://github.com/google-agentic-commerce/a2a-x402/blob/main/spec/v0.2
Agents declaring this extension monetize their services via on-chain cryptocurrency payments. If required: true, the client must implement the x402 flow.
How to detect: The agent card will contain:
{
"capabilities": {
"extensions": [
{
"uri": "https://github.com/google-agentic-commerce/a2a-x402/blob/main/spec/v0.2",
"required": true
}
]
}
}
Payment flow:
task.status = input-required and metadata["x402.payment.status"] = "payment-required" plus metadata["x402.payment.required"] containing PaymentRequirementsx402 sign:
METADATA=$(a2a-wallet x402 sign \
--scheme exact \
--network base \
--asset <token-address> \
--pay-to <merchant-address> \
--amount <amount> \
--extra-name <eip712-domain-name> \
--extra-version <eip712-domain-version> \
--json)
--task-id and --metadata:
a2a-wallet a2a send \
--task-id <task-id> \
--metadata "$METADATA" \
https://my-agent.example.com "Payment submitted"
Extension URI: https://github.com/planetarium/a2a-x402-wallet/tree/main/docs/siwe-bearer-auth/v0.1
Agents declaring this extension require a wallet-signed auth token on every request. If required: true, messages cannot be sent without one.
How to detect: The agent card will contain:
{
"extensions": [
{
"uri": "https://github.com/planetarium/a2a-x402-wallet/tree/main/docs/siwe-bearer-auth/v0.1",
"required": true
}
]
}
Usage:
TOKEN=$(a2a-wallet siwe auth \
--domain my-agent.example.com \
--uri https://my-agent.example.com \
--ttl 1h \
--json | jq -r '.token')
--bearer when sending messages:
a2a-wallet a2a send --bearer "$TOKEN" https://my-agent.example.com "Hello"
a2a-wallet a2a stream --bearer "$TOKEN" https://my-agent.example.com "Hello"
Note: The token is tied to the agent's domain — a token issued for one agent will be rejected by another.
--json for machine-readable output0 = success, 1 = failure--token / --url, or set A2A_WALLET_TOKEN env vara2a card <url> first to check which extensions are required before sending messagesa2a-wallet --help or a2a-wallet <command> --help to discover options at any timeZIP package — ready to use