2004/erc-8004/SKILL.md
ERC-8004 Trustless Agents — register agent identity on-chain, publish reputation, discover other agents. Standardized agent infra for the open agent economy (Ethereum Foundation dAI team).
npx skillsauth add starchild-ai-agent/community-skills @2004/erc-8004Install this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Implementation of the ERC-8004 Trustless Agents standard — the Ethereum Foundation dAI team's on-chain Identity + Reputation + Validation layer for AI agents.
| Layer | Status | |---|---| | Identity Registry (ERC-721 agent identity) | ✅ Full read + write | | Reputation Registry (feedback + summary) | ✅ Full read + write | | Validation Registry | ⏸ Skipped — official README marks it as under active TEE-community revision |
Tx broadcasting goes through the Starchild wallet skill backend
(tools.wallet._wallet_request → POST /agent/transfer), so the agent's Privy wallet
signs and gas is platform-sponsored when available.
Singleton deployments per chain (same address triple across testnets, separate triple across mainnets):
| Chain | chainId | Identity | Reputation |
|---|---|---|---|
| base-sepolia (default) | 84532 | 0x8004A818…BD9e | 0x8004B663…8713 |
| base | 8453 | 0x8004A169…a432 | 0x8004BAa1…9b63 |
| ethereum | 1 | same as base | same as base |
| ethereum-sepolia | 11155111 | same as base-sepolia | same as base-sepolia |
Pass chain="base" etc. to any function. Default is base-sepolia.
from core.skill_tools import erc_8004
# 1. Register this agent
r = erc_8004.register_agent(
name="Crypto Research Agent",
description="On-chain analyst — funding rates, OI, social sentiment, on demand.",
services=[
{"name": "web", "endpoint": "https://my-agent.com/"},
{"name": "A2A", "endpoint": "https://my-agent.com/.well-known/agent-card.json", "version": "0.3.0"},
],
x402_support=True,
supported_trust=["reputation"],
)
print(r["agent_id"], r["explorer_url"], r["nft_url"])
# 2. Discover other agents
others = erc_8004.discover_agents(limit=20, filter_tag="reputation")
# 3. Fetch one agent's full registration
agent = erc_8004.get_agent(agent_id=42)
print(agent["registration_file"]["name"])
# 4. Leave feedback (caller MUST NOT be the agent's owner)
erc_8004.give_feedback(
agent_id=42,
value=5, # 5/5 stars
tag1="rating",
endpoint="https://my-agent.com/research",
feedback_uri="ipfs://Qm.../review.json",
)
# 5. Aggregate reputation (auto-fetches all reviewers if not specified)
rep = erc_8004.get_reputation(agent_id=42)
print(rep["count"], rep["avg"])
# 6. Pull individual feedback entries
for f in erc_8004.list_feedback(agent_id=42):
print(f["client_address"], f["human_value"], f["tag1"])
eip155:{chainId}:{identityRegistryAddress}:{agentId}.tokenURI. By default
this skill encodes it as a data:application/json;base64,… URI — fully on-chain,
no IPFS / HTTPS hosting required.getSummary requires non-empty client_addresses. Pass the
reviewer set you trust. get_reputation(...) defaults to "all reviewers ever" if
you don't specify, which is convenient but not Sybil-resistant — pick a reviewer
allowlist for high-stakes decisions.msg.sender is the
agent's owner or operator. Use a separate wallet for testing.Calls go through wallet_transfer which uses platform gas sponsorship by default
(verified working on Base Sepolia via Alchemy paymaster, ERC-4337 EntryPoint v0.7
at 0x0000000071727De22E5E9d8BAf0edAc6f37da032). Sponsored txs come back from the
wallet backend as:
{"data": {"hash": "", "user_operation_hash": "0x…", "sponsorship_provider": "alchemy", ...}}
The skill resolves user_operation_hash → real tx_hash by scanning EntryPoint
UserOperationEvent logs — not by polling a public bundler. This is critical:
Alchemy / Pimlico / Stackup / Biconomy don't share bundler mempools, so a Pimlico
eth_getUserOperationReceipt for an Alchemy-submitted op will return null forever.
Log scan is bundler-agnostic. See _resolve_user_op_hash in _utils.py.
If you ever see No tx_hash in wallet response, it means the EntryPoint scan
timed out (default 90s, scanning latest 500 blocks) — increase timeout= on
send_contract_tx or widen lookback_blocks.
If gas sponsorship is unavailable on the chain you target, fund the agent wallet from the corresponding faucet first (Base Sepolia: coinbase / alchemy / quicknode).
See output/eth-hk-demo/ for a full scripted demo combining this skill with:
development
OpenSea API integration for NFT and token discovery, marketplace intelligence, and order/transaction workflows. Use when working with OpenSea data or trading flows (e.g. collection stats, trending collections/tokens, NFT metadata, listings/offers, swap quotes, transaction receipt polling).
development
Generate a warm, healing parallel-universe fairy tale (~1000 words) plus 3 cohesive storybook illustrations, themed "if this person had never been born, what would the world miss." Output is a polished HTML storybook that can be previewed and published. Use when the user wants a personalized "if I had never been born" / "如果我没出生" tale for a real person — input is a name, age, and 3 key life events. Great for birthdays, memorials, encouragement gifts, or healing keepsakes.
development
Onboard a user to Phala Cloud and deploy a verifiable Starchild TEE agent — a minimal FastAPI runtime running inside an Intel TDX confidential VM, plus a published chat dashboard with attestation verification. Use when the user wants to "try TEE", "run an agent in a confidential VM", "deploy to Phala", or replicate the internal Starchild TEE test setup.
tools
Trade on Polymarket prediction markets (CLOB V2) from a Privy EOA wallet. Search markets, place/cancel orders, manage positions. No private key handling. Use when the user wants to bet on event outcomes (e.g. "buy YES at 0.65 on the ceasefire market", "what are my open positions", "close my Trump bet").