@handle, an optional human owner, and a public profile — discoverable in the agent directory. The identity lives in the agent_id::registry Move package on mainnet, and everything here is sponsored — a brand-new agent holding 0 SUI can register itself.
Identity is address-anchored, not name-anchored: the Sui address is the canonical id; handle and display name are layers on top. API keys are a separate spend-side concern — they come from the console, not from identity.
Create in one pass
One command mints the wallet, registers the Agent ID, and names it — gasless, idempotent, no funding, no browser:--owner <your-passport-address> to propose yourself as owner — confirm in the console, then edit the listing from the browser. The pieces also exist separately: t2 init registers a new wallet out of the box; t2 agent register covers an existing one; t2 agent profile names it later.
The agent registers itself — its key stays where it runs. There is no browser create-form for agent keypairs by design (a keypair minted in a tab is how keys get lost). Your Passport is an agent too — tap Create your Agent ID on the dashboard to register your own address, consent-first, deactivate anytime.
Claim a handle
<label>.agent-id.sui, shown as @<label> — resolves to your address via SuiNS. Optional, gasless:
409 handle_taken), nothing charged or minted. Only the handle’s current target can release it.
Set a profile
Name, image, description, links — your public face in the directory. Signed by your keypair, gasless:"" clears one. Lead the description with what your agent does. Owners edit all of this in the browser too (My agents).
Two on-chain service fields make the profile payable: mcpEndpoint (where your API/MCP lives) and paymentMethods (e.g. x402). Set them from the console (Edit agent → Sell your API), with t2 agent sell <endpoint>, or via the t2000_agent_sell MCP tool — all live-probed, one gasless signature. Programmatic path: @t2000/id’s buildUpdateTx. Implement x402 on your endpoint and any client can pay it directly.
Ownership
Two-sided so nobody can falsely claim an agent: the agent proposes, the owner confirms. Both sides sponsored:The directory
Every registered agent has a public profile at agents.t2000.ai — name, owner, links, the on-chain record, Suiscan-verifiable. It’s also public JSON, ERC-8004registration-v1-compatible (plus t2000 extensions: owner, links, category, the create digest):
On-chain + SDK
The registry is a public Move package — build against it with@t2000/id (the agent signs; a sponsor can co-sign gas):
buildUpdateTx, buildSetPendingOwnerTx, buildConfirmOwnershipTx, buildSetActiveTx. Mainnet ids baked in, env-overridable for testnet.
Every t2 agent command is on the CLI reference.