avaConnect

ava/compare

Compared on properties you can check, not on claims

Every row below is a yes or no question about a product, not a judgment of one: either a spending cap is signed before the agent has authority or it is not, either the execute call refuses without a preview hash or it does not. The columns are categories rather than named products, because the point is the shape of the design and naming a competitor would date the page the week it ships a changelog.

A cell reads yes only where the behaviour is reachable from something a stranger can open: a documented config file, a published endpoint, or a refusal a caller can trigger on purpose. Where the docs are silent the answer is no rather than a guess, so the table understates anything a product ships without writing down, and a single link to the contrary is enough to change a row.

Ava’s own column is the one you should trust least on this page and can check hardest. /receipts shows the artifact behind four of the six rows, and /matrix.json names every route that cannot run and why.

Wallets for agents exist. Accountability for agents did not.

Three real products, not straw men. Each is good at the thing it was built for, and none of them was built to prove afterwards that an agent stayed inside what you authorised.

Avaexecution layerCoinbase Agentic Walletwallet CLI + skillsCircle for Agentspayment rail + marketplaceHeyElsaconsumer chat copilot
Reachable from Claude Code, Cursor and Codexyesyesyesno
Moves money into a DeFi position, not only send and swapyesnonoyes
A spending cap the human signs before the agent has authorityyespartialnono
Two-phase execute: a preview hash is required to broadcastyesunstatedunstatedunstated
Typed refusal codes instead of a silent failureyesunstatedunstatedunstated
Receipt re-read from a public RPC, checkable by a third partyyesunstatedunstatedunstated
The agent process never holds the signing keyyesyesyesunstated

Read from each product’s own documentation on 2026-09-19: docs.cdp.coinbase.com · agents.circle.com · docs.heyelsa.ai.

unstated means those docs do not describe the property either way. It is not a claim that the product lacks it, and a reader who finds otherwise should tell us and this table will change. partial on the signed-cap row is precise: Coinbase documents configurable per-session and per-transaction limits, which is a setting the wallet enforces, not a mandate a human signs before the agent is given authority.

The row that decides it is the last one you can test yourself

Connect an agent, sign a cap smaller than the amount you then ask it to move, and watch which of the two happens. That is the whole comparison, run against your own wallet in about two minutes.