managing-agent-identity
Managing Agent Identity
ERC-8004 ("Trustless Agents") is a draft Ethereum standard for AI agent trust infrastructure. Abstract deploys IdentityRegistry and ReputationRegistry on both mainnet and testnet. Agents register as ERC-721 tokens and accumulate on-chain reputation through client feedback.
Operating Rules
- Check session readiness before any write operation. Route session issues to
authenticating-with-agw. - Preview every registration, metadata update, and feedback submission with
--dry-runbefore execution. - Read references/identity-registry.md for the full IIdentityRegistry interface, registration flow, and metadata management.
- Read references/reputation-registry.md for the full IReputationRegistry interface, feedback flow, and aggregation.
Deployed Contracts
| Contract | Mainnet (2741) | Testnet (11124) |
|---|---|---|
| IdentityRegistry | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 |
0x8004A818BFB912233c491871b3d84c89A494BD9e |
| ReputationRegistry | 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 |
0x8004B663056A597Dffe9eCcC1965A193B7388713 |
These are deterministic CREATE2 deployments — same addresses across all 20+ EVM chains.
Core Concepts
- Agent identity is an ERC-721 token minted by
register(). The token owner controls the identity. - agentURI resolves to a JSON registration file containing name, description, services, and x402 support.
- agentWallet is a reserved metadata key for the agent's payment address. Requires EIP-712 or ERC-1271 signature to change. Cleared on transfer.
- Reputation is submitted by clients via
giveFeedback()with a signed value, optional tags, and optional off-chain evidence. - Validation Registry is not yet deployed on Abstract.
ABI Format
The AGW CLI requires full JSON ABI objects, not human-readable strings. Every abi array element must be an object with type, name, inputs, outputs, and stateMutability fields. Human-readable signatures in this skill and its references are for documentation — expand them to full JSON when constructing CLI commands.
Task Map
Read identity for a wallet
agw contract write --json '{
"address": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
"abi": [{"type":"function","name":"balanceOf","stateMutability":"view","inputs":[{"name":"owner","type":"address"}],"outputs":[{"name":"","type":"uint256"}]}],
"functionName": "balanceOf",
"args": ["<WALLET_ADDRESS>"]
}' --dry-run
If balance > 0, the wallet owns at least one agent identity. Use tokenOfOwnerByIndex or events to find the specific agentId.
Register a new agent identity
agw contract write --json '{
"address": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
"abi": [{"type":"function","name":"register","stateMutability":"nonpayable","inputs":[{"name":"agentURI","type":"string"}],"outputs":[{"name":"agentId","type":"uint256"}]}],
"functionName": "register",
"args": ["https://example.com/agent.json"]
}' --dry-run
The returned agentId is the ERC-721 token ID. Execute only after user confirms the preview.
Read agent metadata
agw contract write --json '{
"address": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
"abi": [{"type":"function","name":"tokenURI","stateMutability":"view","inputs":[{"name":"tokenId","type":"uint256"}],"outputs":[{"name":"","type":"string"}]}],
"functionName": "tokenURI",
"args": ["<AGENT_ID>"]
}' --dry-run
Get reputation summary
Requires at least one client address to avoid Sybil attacks:
agw contract write --json '{
"address": "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63",
"abi": [{"type":"function","name":"getSummary","stateMutability":"view","inputs":[{"name":"agentId","type":"uint256"},{"name":"clientAddresses","type":"address[]"},{"name":"tag1","type":"string"},{"name":"tag2","type":"string"}],"outputs":[{"name":"count","type":"uint64"},{"name":"summaryValue","type":"int128"},{"name":"summaryValueDecimals","type":"uint8"}]}],
"functionName": "getSummary",
"args": ["<AGENT_ID>", ["<CLIENT_ADDRESS_1>", "<CLIENT_ADDRESS_2>"], "", ""]
}' --dry-run
Pass empty strings for tag1/tag2 to get unfiltered results. The summaryValue is a signed fixed-point number with summaryValueDecimals precision.
Give feedback
The submitter cannot be the agent owner (prevents self-rating):
agw contract write --json '{
"address": "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63",
"abi": [{"type":"function","name":"giveFeedback","stateMutability":"nonpayable","inputs":[{"name":"agentId","type":"uint256"},{"name":"value","type":"int128"},{"name":"valueDecimals","type":"uint8"},{"name":"tag1","type":"string"},{"name":"tag2","type":"string"},{"name":"endpoint","type":"string"},{"name":"feedbackURI","type":"string"},{"name":"feedbackHash","type":"bytes32"}],"outputs":[]}],
"functionName": "giveFeedback",
"args": ["<AGENT_ID>", "100", "0", "quality", "", "", "", "0x0000000000000000000000000000000000000000000000000000000000000000"]
}' --dry-run
Value 100 with 0 decimals = score of 100. Tags, endpoint, feedbackURI, and feedbackHash are all optional (pass empty strings and zero hash).
Escalation
- Route session issues to
authenticating-with-agw. - Route balance and token checks to
reading-agw-wallet. - Route transaction safety questions to
executing-agw-transactions.
More from abstract-foundation/agw-cli
mining-with-bigcoin
Interact with the Bigcoin virtual mining game on Abstract — buy facilities, purchase miners, claim rewards, check hashrate, and manage mining operations. Use when a user wants to play Bigcoin, mine $BIG tokens, buy a facility or miner, claim mining rewards, check pending rewards, view hashrate, upgrade their facility, sell miners, or interact with the Bigcoin game contracts on Abstract. Trigger for requests mentioning Bigcoin, $BIG, BIG token, virtual mining, hashrate, facility, miner purchase, mining rewards, claim BIG, or Bigcoin game on Abstract.
22upvoting-on-abstract
Vote for apps on the Abstract Portal using the AbstractVoting contract. Use when a user wants to upvote an app, check remaining votes, see vote counts for apps, check the current epoch or vote cost, or interact with Abstract Portal voting. Trigger for requests mentioning upvote, vote for app, Abstract voting, Portal voting, vote cost, epoch, voteForApp, votes remaining, or app popularity on Abstract.
22reading-agw-wallet
Read AGW wallet identity, balances, and token inventory with field trimming and pagination. Use when a user wants to know which wallet is linked, inspect balances, list tokens, confirm the current account before another workflow, or gather read-only wallet context without blowing the context window. Trigger for requests mentioning `agw wallet address`, `agw wallet balances`, `agw wallet tokens list`, portfolio inspection, token inventory, or linked wallet identity.
21trading-on-uniswap
Compose AGW wallet and contract commands for token swaps, price quotes, and liquidity on Abstract via Uniswap V2 and V3. Use when a user wants to trade tokens, swap ETH for USDC, swap USDC for ETH, check token prices, get swap quotes, add or remove liquidity, or interact with any Uniswap contract on Abstract. Trigger for requests mentioning swap, trade, exchange, Uniswap, DEX, liquidity pool, price quote, token pair, amountOut, slippage, or AGW trading actions on Abstract mainnet or testnet.
21authenticating-with-agw
Bootstrap, inspect, troubleshoot, and revoke AGW sessions through the companion approval flow. Use when a user needs to connect this machine to an AGW wallet, check session readiness, diagnose missing signer or delegated-access issues, inspect local session state, or explicitly revoke access. Trigger for requests mentioning `agw auth init`, `agw session status`, `agw session doctor`, onboarding, companion approval, or session revoke.
21bridging-to-abstract
Guide users through bridging assets to and from Abstract using the native bridge or third-party bridges (Relay, Stargate, Jumper, Symbiosis, thirdweb, deBridge). Use when a user wants to move funds onto Abstract, bridge ETH or tokens from Ethereum or another chain, withdraw from Abstract to L1, get a bridge quote, fund their Abstract wallet from another network, or needs guidance on bridge timing and costs. Trigger for requests mentioning bridge, bridging, deposit, withdraw, fund wallet, move funds, cross-chain transfer, L1 to L2, or any of the bridge providers (Relay, Stargate, Jumper, Symbiosis, deBridge).
21