/erc-8004
JWT for IPFS pinning via Pinata.
$ npx -y skills add tenequm/skills --skill erc-8004 --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/erc-8004
Context preview
The summary Claude sees to decide when to auto-load this skill.
JWT for IPFS pinning via Pinata.
SKILL.md
erc-8004.SKILL.mdname: erc-8004
description: Build with ERC-8004 Trustless Agents - on-chain agent identity, reputation, validation, and discovery on EVM chains. Use when registering AI agents on-chain, building agent reputation systems, searching/discovering agents, working with the Agent0 SDK (agent0-sdk), or implementing the ERC-8004 standard. Triggers on ERC-8004, Agent0, agent identity, agent registry, agent reputation, trustless agents, agent discovery.
metadata:
version: "0.2.2"
openclaw:
homepage: https://github.com/tenequm/skills/tree/main/skills/erc-8004
emoji: "๐ค"
primaryEnv: PRIVATE_KEY
envVars:
- name: RPC_URL
required: false
description: EVM JSON-RPC endpoint for the registry chain.
- name: PRIVATE_KEY
required: false
description: Signer key for on-chain registration. Use throwaway/testnet keys.
- name: PINATA_JWT
required: false
description: JWT for IPFS pinning via Pinata.ERC-8004: Trustless Agents
ERC-8004 is a Draft EIP for discovering, choosing, and interacting with AI agents across organizational boundaries without pre-existing trust. It defines three on-chain registries deployed as per-chain singletons on any EVM chain.
**Authors:** Marco De Rossi (MetaMask), Davide Crapis (EF), Jordan Ellis (Google), Erik Reppel (Coinbase)
**Full spec:** [references/spec.md](references/spec.md)
When to Use This Skill
- Registering AI agents on-chain (ERC-721 identity)
- Building or querying agent reputation/feedback systems
- Searching and discovering agents by capabilities, trust models, or endpoints
- Working with the Agent0 TypeScript SDK (`agent0-sdk`)
- Implementing ERC-8004 smart contract integrations
- Setting up agent wallets, MCP/A2A endpoints, or OASF taxonomies
Core Architecture
Three lightweight registries, each deployed as a UUPS-upgradeable singleton:
| Registry | Purpose | Contract | |----------|---------|----------| | **Identity** | ERC-721 NFTs for agent identities + registration files | `IdentityRegistryUpgradeable` | | **Reputation** | Signed fixed-point feedback signals + off-chain detail files | `ReputationRegistryUpgradeable` | | **Validation** | Third-party validator attestations (stake, zkML, TEE) | `ValidationRegistryUpgradeable` |
**Agent identity** = `agentRegistry` (string `eip155:{chainId}:{contractAddress}`) + `agentId` (ERC-721 tokenId).
Each agent's `agentURI` points to a JSON registration file (IPFS or HTTPS) advertising name, description, endpoints (MCP, A2A, ENS, DID, wallet), OASF skills/domains, trust models, and x402 support.
**See:** [references/contracts.md](references/contracts.md) for full contract interfaces and addresses.
Quick Start with Agent0 SDK (TypeScript)
npm install agent0-sdk
Register an Agent
`RPC_URL`, `PRIVATE_KEY`, and `PINATA_JWT` are declared in this skill's `metadata.openclaw.envVars`. Use throwaway/testnet keys for development; reach for a hardware wallet or scoped signer for any mainnet activity.
import { SDK } from 'agent0-sdk';
const sdk = new SDK({
chainId: 84532, // Base Sepolia
rpcUrl: process.env.RPC_URL,
privateKey: process.env.PRIVATE_KEY,
ipfs: 'pinata',
pinataJwt: process.env.PINATA_JWT,
});
const agent = sdk.createAgent(
'MyAgent',
'An AI agent that analyzes crypto markets',
'https://example.com/agent-image.png'
);
// Configure endpoints and capabilities
await agent.setMCP('https://mcp.example.com', '2025-06-18', true); // auto-fetches tools
await agent.setA2A('https://example.com/.well-known/agent-card.json', '0.3.0', true);
agent.setENS('myagent.eth');
agent.setActive(true);
agent.setX402Support(true);
agent.setTrust(true, false, false); // reputation only
// Add OASF taxonomy
agent.addSkill('natural_language_processing/natural_language_generation/summarization', true);
agent.addDomain('finance_and_business/investment_services', true);
// Register on-chain (mints NFT + uploads to IPFS).
// Sends a real transaction signed with PRIVATE_KEY - confirm chainId, signer, and balance before running.
const tx = await agent.registerIPFS();
const { result } = await tx.waitConfirmed();
console.log(`Registered: ${result.agentId}`); // e.g. "84532:42"Search for Agents
const sdk = new SDK({ chainId: 84532, rpcUrl: process.env.RPC_URL });
// Search by capabilities
const agents = await sdk.searchAgents({
hasMCP: true,
active: true,
x402support: true,
mcpTools: ['financial_analyzer'],
supportedTrust: ['reputation'],
});
// Get a specific agent
const agent = await sdk.getAgent('84532:42');
// Semantic search
const results = await sdk.searchAgents(
{ keyword: 'crypto market analysis' },
{ sort: ['semanticScore:desc'] }
);Give Feedback
// Prepare optional off-chain feedback file
const feedbackFile = await sdk.prepareFeedbackFile({
text: 'Accurate market analysis',
capability: 'tools',
name: 'financial_analyzer',
proofOfPayment: { txHash: '0x...', chainId: '8453', fromAddress: '0x...', toAddress: '0x...' },
});
// Submit feedback (value=85 out of 100). On-chain tx; same caveats as `registerIPFS()` above.
const tx = await sdk.giveFeedback('84532:42', 85, 'starred', '', '', feedbackFile);
await tx.waitConfirmed();
// Read reputation summary
const summary = await sdk.getReputationSummary('84532:42');
console.log(`Average: ${summary.averageValue}, Count: ${summary.count}`);**See:** [references/sdk-typescript.md](references/sdk-typescript.md) for full SDK API reference.
Registration File Format
Every agent's `agentURI` resolves to this JSON structure:
{
"type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
"name": "MyAgent",
"description": "What it does, pricing, interaction methods",
"image": "https://example.com/agent.png",
"services": [
{ "name": "MCP", "endpoint": "https://mcp.example.com", "version": "2025-06-18", "mcpTools": ["tool1"] },
{ "nameRead more
name: erc-8004
description: Build with ERC-8004 Trustless Agents - on-chain agent identity, reputation, validation, and discovery on EVM chains. Use when registering AI agents on-chain, building agent reputation systems, searching/discovering agents, working with the Agent0 SDK (agent0-sdk), or implementing the ERC-8004 standard. Triggers on ERC-8004, Agent0, agent identity, agent registry, agent reputation, trustless agents, agent discovery.
metadata:
version: "0.2.2"
openclaw:
homepage: https://github.com/tenequm/skills/tree/main/skills/erc-8004
emoji: "๐ค"
primaryEnv: PRIVATE_KEY
envVars:
- name: RPC_URL
required: false
description: EVM JSON-RPC endpoint for the registry chain.
- name: PRIVATE_KEY
required: false
description: Signer key for on-chain registration. Use throwaway/testnet keys.
- name: PINATA_JWT
required: false
description: JWT for IPFS pinning via Pinata.ERC-8004: Trustless Agents
ERC-8004 is a Draft EIP for discovering, choosing, and interacting with AI agents across organizational boundaries without pre-existing trust. It defines three on-chain registries deployed as per-chain singletons on any EVM chain.
**Authors:** Marco De Rossi (MetaMask), Davide Crapis (EF), Jordan Ellis (Google), Erik Reppel (Coinbase)
**Full spec:** [references/spec.md](references/spec.md)
When to Use This Skill
- Registering AI agents on-chain (ERC-721 identity)
- Building or querying agent reputation/feedback systems
- Searching and discovering agents by capabilities, trust models, or endpoints
- Working with the Agent0 TypeScript SDK (`agent0-sdk`)
- Implementing ERC-8004 smart contract integrations
- Setting up agent wallets, MCP/A2A endpoints, or OASF taxonomies
Core Architecture
Three lightweight registries, each deployed as a UUPS-upgradeable singleton:
| Registry | Purpose | Contract | |----------|---------|----------| | **Identity** | ERC-721 NFTs for agent identities + registration files | `IdentityRegistryUpgradeable` | | **Reputation** | Signed fixed-point feedback signals + off-chain detail files | `ReputationRegistryUpgradeable` | | **Validation** | Third-party validator attestations (stake, zkML, TEE) | `ValidationRegistryUpgradeable` |
**Agent identity** = `agentRegistry` (string `eip155:{chainId}:{contractAddress}`) + `agentId` (ERC-721 tokenId).
Each agent's `agentURI` points to a JSON registration file (IPFS or HTTPS) advertising name, description, endpoints (MCP, A2A, ENS, DID, wallet), OASF skills/domains, trust models, and x402 support.
**See:** [references/contracts.md](references/contracts.md) for full contract interfaces and addresses.
Quick Start with Agent0 SDK (TypeScript)
npm install agent0-sdk
Register an Agent
`RPC_URL`, `PRIVATE_KEY`, and `PINATA_JWT` are declared in this skill's `metadata.openclaw.envVars`. Use throwaway/testnet keys for development; reach for a hardware wallet or scoped signer for any mainnet activity.
import { SDK } from 'agent0-sdk';
const sdk = new SDK({
chainId: 84532, // Base Sepolia
rpcUrl: process.env.RPC_URL,
privateKey: process.env.PRIVATE_KEY,
ipfs: 'pinata',
pinataJwt: process.env.PINATA_JWT,
});
const agent = sdk.createAgent(
'MyAgent',
'An AI agent that analyzes crypto markets',
'https://example.com/agent-image.png'
);
// Configure endpoints and capabilities
await agent.setMCP('https://mcp.example.com', '2025-06-18', true); // auto-fetches tools
await agent.setA2A('https://example.com/.well-known/agent-card.json', '0.3.0', true);
agent.setENS('myagent.eth');
agent.setActive(true);
agent.setX402Support(true);
agent.setTrust(true, false, false); // reputation only
// Add OASF taxonomy
agent.addSkill('natural_language_processing/natural_language_generation/summarization', true);
agent.addDomain('finance_and_business/investment_services', true);
// Register on-chain (mints NFT + uploads to IPFS).
// Sends a real transaction signed with PRIVATE_KEY - confirm chainId, signer, and balance before running.
const tx = await agent.registerIPFS();
const { result } = await tx.waitConfirmed();
console.log(`Registered: ${result.agentId}`); // e.g. "84532:42"Search for Agents
const sdk = new SDK({ chainId: 84532, rpcUrl: process.env.RPC_URL });
// Search by capabilities
const agents = await sdk.searchAgents({
hasMCP: true,
active: true,
x402support: true,
mcpTools: ['financial_analyzer'],
supportedTrust: ['reputation'],
});
// Get a specific agent
const agent = await sdk.getAgent('84532:42');
// Semantic search
const results = await sdk.searchAgents(
{ keyword: 'crypto market analysis' },
{ sort: ['semanticScore:desc'] }
);Give Feedback
// Prepare optional off-chain feedback file
const feedbackFile = await sdk.prepareFeedbackFile({
text: 'Accurate market analysis',
capability: 'tools',
name: 'financial_analyzer',
proofOfPayment: { txHash: '0x...', chainId: '8453', fromAddress: '0x...', toAddress: '0x...' },
});
// Submit feedback (value=85 out of 100). On-chain tx; same caveats as `registerIPFS()` above.
const tx = await sdk.giveFeedback('84532:42', 85, 'starred', '', '', feedbackFile);
await tx.waitConfirmed();
// Read reputation summary
const summary = await sdk.getReputationSummary('84532:42');
console.log(`Average: ${summary.averageValue}, Count: ${summary.count}`);**See:** [references/sdk-typescript.md](references/sdk-typescript.md) for full SDK API reference.
Registration File Format
Every agent's `agentURI` resolves to this JSON structure:
{
"type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
"name": "MyAgent",
"description": "What it does, pricing, interaction methods",
"image": "https://example.com/agent.png",
"services": [
{ "name": "MCP", "endpoint": "https://mcp.example.com", "version": "2025-06-18", "mcpTools": ["tool1"] },
{ "nameShowing the first part of this file.
Claude Code skills for founders, developers, and web3 builders. This repository publishes reusable skill folders under skills//, ships stable bundle downloads through GitHub Releases, and publishes changed skills to ClawHub.
Repo: tenequm/skills
Other skills on tenequm-skills.
- /audio-quality-check
Analyze audio recording quality - echo detection, loudness, speech intelligibility, SNR, spectral analysis. Use when the user wants to check a recording's quality, detect echo or duplication in audio files, measure speech clarity, compare original vs processed audio, diagnose
Open skill - /chrome-extension-wxt
Build Chrome extensions using WXT framework with TypeScript, React, Vue, or Svelte. Use when creating browser extensions, developing cross-browser add-ons, or working with Chrome Web Store projects. Triggers on phrases like "chrome extension", "browser extension", "WXT
Open skill - /cloudflare-workers
Cloudflare account ID, set as a CI secret for wrangler deploys.
Open skill - /command-skill-creator
Create automation command skills (slash commands) for Claude Code projects. Use when building `/slash-commands` that automate multi-step workflows - deploys, commits, releases, migrations, cross-repo operations, or any repeatable process. Triggers on "create a command", "make a
Open skill - /deep-research-glim
Conducts deep, multi-angle research using glim MCP tools and parallel subagents. Use for deep research, competitive landscape analysis, strategic intelligence, or /deep-research-glim [topic]. Triggers - deep research, deep dive on, competitive landscape, strategic intelligence,
Open skill - /download-webpage-as-pdf
Set to "false" (the recipe default) to force headless capture regardless of the host agent-browser config
Open skill

