If you have searched for "Know Your Agent" lately you have read the same page ten times: AI agents are about to transact with each other, a login only says who is calling, and somebody should verify the agent before money moves. Agreed. Then the page describes a framework, a credential, a registry, a badge, and stops.
Here is the other kind of page. On October 16 we ran the whole thing against production, with real wallets and real USDC on Base, and kept every hash. Below is what happened, in order, with the transactions and the signed receipts, and then the handful of calls your own agent would make to do the same.
The idea: decide on state, not reputation
Reputation is a story about the past. State is a fact about now. AgentTalk never asks an agent who it is, what it has done, or who vouches for it. It asks what is true of the agent's wallet at this moment (a balance, an ownership, an attestation, a delegation still in force), gets a signed yes or no from InsumerAPI, the condition-based access API it is built on, and acts on that. Then it asks again before the next moment that matters.
The human picture is not a club with a bouncer who sizes you up. It is the breathalyser at the door: no opinion, no history, no benefit of the doubt. You are measured, the number is the number, and you are measured again before the next round. Nobody is trusted and nobody is distrusted.
The cast
- The creator:
0xF460…b98E, a Coinbase Smart Wallet. A contract account, not a key: it signs with ERC-1271. It opens the room and pays for every call, per call, with x402. - Agent B:
0xCd97…C157, a regular wallet holding 1.1 USDC. - Agent C:
0x9d3C…C4ad, a regular wallet holding nothing.
The room's one rule: hold at least 0.5 USDC on Base. Same bar for everyone, the creator included.
1. The smart wallet opens the room
The creator asks for a one-time challenge, signs it the way a contract wallet signs (ERC-1271, checked on Base), and declares the room. With no credits on file the answer is 402 with a price: 0.50 USDC. The wallet pays and sends the same request again. Settled on Base: 0x987cfe8d…43218e. The creator's own wallet is checked against the rule first, and the room is live.
2. A regular wallet that qualifies joins
B signs its challenge with a plain key, joins, and the creator pays 0.15 USDC for the check (0x87ec96f6…33f45e). B's balance clears the bar, so B gets a receipt: attestation ATST-D525FBA91A3CC662, pass: true, signed twice: ES256 and a post-quantum ML-DSA-65 signature. The receipt is B's to keep and anyone's to verify.
3. A regular wallet that does not qualify is refused
C signs and joins the same way. The check is paid for (0x08e130f5…85ff23) and comes back 403 { "pass": false }: InsumerAPI signed "not met". C never enters. Note what did not happen: nobody looked C up, nobody scored C, nobody asked who C works for. C was measured and came up short. The same wallet with the balance would have walked straight in.
4. B stops qualifying, and tells nobody
B sends its 1.1 USDC away (0x2016b102…21c7a4, block 52697745). AgentTalk is not told. A session read right after still lists B as a member, because nothing has been checked yet. This is the moment every "verify at login" system gets wrong: the token is still valid, the fact behind it is gone.
5. A member asks for a fresh check
The creator asks for a re-verify. Every member is checked again against live chain state, 0.15 USDC each (0x407b815a…1ad3c4). The answer:
{ "valid": true,
"ejected": ["0xcd97c6e12503c5f012532362b4a32ce0e185c157"],
"remaining": ["0xf4605e4964fcee7fba5908619c19a1af0b5cb98e"] }
B is out. The creator stays, with a fresh receipt (ATST-2493133864C54B51). No admin pressed anything, no revocation endpoint was called. The chain changed; the next check noticed.
6. B tries to get back in
B signs a new challenge and joins again. Paid for (0xf91c71ed…75fdb3), measured, refused: 403 { "pass": false }. Being in once buys nothing. The rule is checked every time.
7. Check the receipts without trusting us
The two pass: true receipts (B at join, the creator at re-check) were verified offline against InsumerAPI's public keys at insumermodel.com/.well-known/jwks.json: ES256 signatures valid, kid insumer-attest-v2. Neither AgentTalk nor Skye Meta is in that loop. A counterparty can do the same check a year from now. To be precise about what that proves: the signatures show InsumerAPI gave these answers at that time; the reading of the chain is still InsumerAPI's. A room opened with proof: "merkle" adds EIP-1186 proofs to every receipt so the facts check against the chain itself, which this run did not use.
Final tally: five paid operations, five x402 payments, 1.25 USDC, every one settled on Base by a contract wallet. The transcript the run wrote, with every link, is in the AgentTalk repository beside the script that produced it.
What this is not
Your agent is the door. AgentTalk is what it checks with: it measures each wallet against the room's rule, records who qualified and signs the result. It does not carry messages, hold files or stop a tool on its own; your agent does those, over whatever channel it already uses (A2A, MCP, plain HTTP). Before an action that matters, your agent reads the session, or asks for a fresh check, and goes ahead only for an agent still on the list. No verdict means not cleared. That last rule is your agent's to enforce, and it is the one that makes everything above worth anything.
Do it yourself: three calls
Every privileged call is signed over a one-time challenge; a plain key account is recovered locally and a smart-contract wallet is checked on Base through ERC-1271 (or ERC-6492 before it is deployed). There are no free calls and no account: with no credits on file, each call quotes its price in a PAYMENT-REQUIRED header and any x402 client pays it.
const API = 'https://agenttalk.skyemeta.com/api/agenttalk';
// 1. Prove control of the wallet (one challenge per action)
const c = await post('/challenge', { wallet, action: 'declare' });
const signature = await signMessage(c.message); // EIP-191; contract wallets sign their own way
// 2. Open the room: same rule for everyone, checked on live chain state
const room = await post('/declare', {
wallet, signature, nonce: c.nonce,
conditions: [{ type: 'token_balance', chainId: 8453,
contractAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', threshold: '0.5' }],
capacity: 3, autoStart: true, reverifyPolicy: 'members'
}); // 402 with a price first; pay and resend, any x402 client does it
// 3. Before anything that matters: a fresh check
const r = await post('/session', { action: 'reverify', sessionId: room.sessionId, wallet, ...signed('reverify') });
// r.ejected lists who no longer qualifies; a 503 clears nobody, so do not proceed on it
Thresholds are decimal strings in display units ("0.5" means half a USDC). Conditions can be token balances, NFT ownership, EAS attestations and the other types InsumerAPI evaluates, up to ten per room on any mix of 34 chains, and a room can also ask every agent to prove who it acts for (an ERC-7710 delegation or an ERC-8004 registration).
Where agents will use this
- Qualified-investor rooms. A syndicate opens a room for agents whose principals hold the minimum. An agent whose client pulls funds loses its seat at the next check, not at the end of the quarter.
- Procurement and RFPs. A buyer's agent only talks to supplier agents that can show a bond, a certification attestation or a deposit on chain. Let the bond lapse mid-tender and you are out of the tender.
- Counterparty negotiation. Two trading agents reveal nothing until each has shown it meets the balance the other side set. "Show me the balance" before "here is my number," in both directions at once.
- Data rooms and consortia. Member agents share data only with agents whose pass, token or KYC attestation still checks out today.
Your seat is your state. Start at agenttalk.skyemeta.com.
For developers: the whole API is in one file at agenttalk.skyemeta.com/llms-full.txt. Skye Meta builds on InsumerAPI, which reads the chain, evaluates the condition and signs the result; AgentTalk orchestrates it across a room.