base-8004
Skill1 starsChanged 13 days agoMITView on GitHub
Register your AI agent onchain with ERC-8004 on Base. Set up a wallet, fund it, and register on the Identity Registry for permanent, verifiable identity and reputation.
- Reads credentials
- Installs packages
In this repository199 other files it gives its agents.
- activecampaignSkill
- adcp-advertisingSkill
- admapixSkill
- aegis-auditSkill
- afrexai-compliance-auditSkill
- afrexai-seo-content-engineSkill
- agent-browserSkill
- agentic-codingSkill
- agent-overflowSkill
- agent-skills-toolsSkill
- ai-ppt-generatorSkill
- airdrop-hunterSkill
- ai-web-automationSkill
- alicloud-ai-video-wan-r2vSkill
- alpha-finderSkill
- amap-trafficSkill
- amazon-product-apiSkill
- apertureSkill
- api-developmentSkill
- api-gatewaySkill
- asterSkill
- auto-replySkill
- auto-updaterSkill
- aviation-weatherSkill
- awwwards-designSkill
- bioskillsSkill
- brainrepoSkill
- browserless-agentSkill
- browser-secureSkill
- btc15-autonomous-marketSkill
- buy-anythingSkill
- byteroverSkill
- cal-com-automationSkill
- capability-evolverSkill
- catalogSkill
- chargebeeSkill
- clawcostSkill
- clawdbot-documentation-expertSkill
- clawdbot-for-vcsSkill
- clawddocsSkill
- claw-syncSkill
- claw-trader-liteSkill
- clean-codeSkill
- cloudphoneSkill
- cls-certifySkill
- codebergSkill
- code-mentorSkill
- commit-analyzerSkill
- competitor-analysis-reportSkill
- content-ideas-generatorSkill
- content-ideasSkill
- contract-generatorSkill
- conventional-commitsSkill
- copywritingSkill
- crypto-payments-ecommerceSkill
- custom-smtp-senderSkill
- dashboard-manager2Skill
- data-analystSkill
- docker-sandboxSkill
- elite-longterm-memorySkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 55
Add it to your .env file:
- Very specific: line 61
Add .env to .gitignore if it isn't already:
- Very specific: line 209
After your initial registration, you can update your agentURI (name, description, services) by calling setAgentURI on the Identity Registry.
- Very specific: line 253
Only the token owner can call setAgentURI.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Base-8004 Registration
This skill walks you through setting up your own wallet, funding it, and registering onchain with ERC-8004 on Base mainnet. Once registered, your agent has a permanent, verifiable onchain identity and can accumulate reputation.
1. What ERC-8004 is
ERC-8004 is an onchain identity and reputation protocol for AI agents.
- Identity — each registered agent gets an ERC-721 NFT on Base mainnet. This is your permanent, verifiable onchain identity.
- Reputation Registry — a separate contract tracks reputation scores. Feedback signals (upvotes, downvotes, quality assessments) accumulate into a totalScore and feedbackCount.
- Verifiable metadata — your registration includes a JSON document (agentURI) with your name, description, and capabilities. Anyone can read it onchain.
Why it matters:
- Permanent identity — your agent ID persists across platforms, not tied to any single service.
- Public reputation — your track record is onchain and verifiable by anyone.
2. Set up your wallet
You need an Ethereum-compatible wallet on Base mainnet. If you already have a wallet with ETH on Base, skip to section 4. These steps are only needed if you're setting up a fresh wallet.
Step 1: Install viem
npm install viemStep 2: Generate a private key
import { generatePrivateKey } from "viem/accounts";
const privateKey = generatePrivateKey();
console.log("Private key:", privateKey);Save this private key immediately. You will never be able to recover it.
Step 3: Derive your address
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(privateKey);
console.log("Address:", account.address);Step 4: Store the private key securely
Add it to your .env file:
AGENT_PRIVATE_KEY=0x...your_private_key_here...Add .env to .gitignore if it isn't already:
echo ".env" >> .gitignoreStep 5: Security rules
- Never leak your private key in logs, commits, or API calls.
- Never lose it — if you lose the key, you lose the wallet and your onchain identity forever.
- Never overwrite it without backing up the old one.
Step 6: Configure a wallet client for Base mainnet
import { createWalletClient, createPublicClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";
const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY as `0x${string}`);
const publicClient = createPublicClient({ chain: base, transport: http() });
const walletClient = createWalletClient({ account, chain: base, transport: http() });3. Fund your wallet
Your wallet needs ETH on Base to pay for gas.
- Get ETH on Base — use Coinbase (withdraw directly to Base), bridge from any chain via Relay, or receive from another Base wallet.
- Gas is cheap — Base L2 gas costs are very low. Registration costs ~$0.02. $1 of ETH is more than enough.
- Verify balance before proceeding:
const balance = await publicClient.getBalance({ address: account.address });
console.log("Balance:", Number(balance) / 1e18, "ETH");
if (balance < 500000000000000n) {
console.error("Need at least 0.0005 ETH for registration gas");
process.exit(1);
}4. Register onchain
Register your agent on the ERC-8004 Identity Registry. This mints an NFT that represents your permanent onchain identity.
Step 1: Create your registration JSON
Include the services array to declare your agent's capabilities so other agents and services can discover what you do:
const registration = {
type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
name: "Your Agent Name",
description: "What your agent does",
image: "https://example.com/your-agent-avatar.png",
active: true,
x402Support: false,
services: [
{ name: "A2A", endpoint: "https://your-agent.example.com/a2a", version: "0.3.0" },
{ name: "MCP", endpoint: "https://your-agent.example.com/mcp", version: "0.1.0" },
],
};image— URL of your agent's avatar or logo, displayed in explorers and directories. Use a square image (256x256 or larger). If you don't have one yet, set it to""and add one later viasetAgentURI.services— declares your agent's capabilities onchain. Each entry has aname(the service identifier), anendpoint, and optionally aversion. Common service types includeA2A(Agent-to-Agent protocol) andMCP(Model Context Protocol).
Step 2: Encode as a data URI
const uri =
"data:application/json;base64," + Buffer.from(JSON.stringify(registration)).toString("base64");Step 3: Call register() on the Identity Registry
import { encodeFunctionData } from "viem";
const IDENTITY_REGISTRY = "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432";
const registerAbi = [
{
inputs: [{ name: "agentURI", type: "string" }],
name: "register",
outputs: [{ name: "agentId", type: "uint256" }],
stateMutability: "nonpayable",
type: "function",
},
] as const;
// Estimate gas first
const gas = await publicClient.estimateGas({
account: account.address,
to: IDENTITY_REGISTRY,
data: encodeFunctionData({
abi: registerAbi,
functionName: "register",
args: [uri],
}),
});
console.log("Estimated gas:", gas.toString());
// Send the transaction
const hash = await walletClient.writeContract({
address: IDENTITY_REGISTRY,
abi: registerAbi,
functionName: "register",
args: [uri],
});
console.log("TX hash:", hash);Step 4: Parse the Transfer event to get your token ID
const receipt = await publicClient.waitForTransactionReceipt({ hash });
// ERC-721 Transfer event topic
const transferTopic = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
const transferLog = receipt.logs.find(
(log) =>
log.topics[0] === transferTopic && log.address.toLowerCase() === IDENTITY_REGISTRY.toLowerCase()
);
const erc8004AgentId = transferLog?.topics[3]
? BigInt(transferLog.topics[3]).toString()
: undefined;
console.log("Your ERC-8004 Agent ID:", erc8004AgentId);Step 5: Save your agent ID
Save erc8004AgentId — this is your permanent onchain identity. Add it to your .env:
ERC8004_AGENT_ID=42You can verify your registration on BaseScan:
https://basescan.org/nft/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432/{your_agent_id}
5. Update your registration
After your initial registration, you can update your agentURI (name, description, services) by calling setAgentURI on the Identity Registry. This lets you add new capabilities or change your metadata without re-registering.
const setAgentUriAbi = [
{
inputs: [
{ name: "agentId", type: "uint256" },
{ name: "agentURI", type: "string" },
],
name: "setAgentURI",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
] as const;
// Build updated registration JSON
const updatedRegistration = {
type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
name: "Your Agent Name",
description: "Updated description",
image: "https://example.com/your-agent-avatar.png",
active: true,
x402Support: false,
services: [
{ name: "A2A", endpoint: "https://your-agent.example.com/a2a", version: "0.3.0" },
{ name: "MCP", endpoint: "https://your-agent.example.com/mcp", version: "0.1.0" },
],
};
const newUri =
"data:application/json;base64," +
Buffer.from(JSON.stringify(updatedRegistration)).toString("base64");
const hash = await walletClient.writeContract({
address: IDENTITY_REGISTRY,
abi: setAgentUriAbi,
functionName: "setAgentURI",
args: [BigInt(process.env.ERC8004_AGENT_ID!), newUri],
});
console.log("URI updated, TX:", hash);Only the token owner can call setAgentURI.
6. Contract addresses and verification
| Contract | Address | Chain |
| Identity Registry | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 | Base mainnet |
| Reputation Registry | 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 | Base mainnet |
Verify on BaseScan:
- Identity Registry: basescan.org/address/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
- Reputation Registry: basescan.org/address/0x8004BAa17C55a88189AE136b182e5fdA19dE9b63
Onchain query examples (read-only, no gas):
import { createPublicClient, http } from "viem";
import { base } from "viem/chains";
const client = createPublicClient({ chain: base, transport: http() });
// Check who owns a token
const owner = await client.readContract({
address: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
abi: [
{
inputs: [{ name: "agentId", type: "uint256" }],
name: "ownerOf",
outputs: [{ name: "", type: "address" }],
stateMutability: "view",
type: "function",
},
],
functionName: "ownerOf",
args: [42n],
});
// Read an agent's metadata URI
const uri = await client.readContract({
address: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
abi: [
{
inputs: [{ name: "tokenId", type: "uint256" }],
name: "tokenURI",
outputs: [{ name: "", type: "string" }],
stateMutability: "view",
type: "function",
},
],
functionName: "tokenURI",
args: [42n],
});7. Resources
- 8004.org — ERC-8004 protocol
- Base — Base L2 chain
- BaseScan — Base block explorer
- viem — TypeScript Ethereum library
Summary
- Set up wallet — generate a private key, derive address, store securely.
- Fund wallet — get ETH on Base (Coinbase, bridge, or transfer). $1 is more than enough.
- Register onchain — call
register(agentURI)on the Identity Registry with your services. Parse the Transfer event for your token ID. - Update registration — call
setAgentURIto change your metadata or add new services.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

