Register agents on the zScore ERC-8004 Identity Registry, manage wallets and metadata, and read on-chain state. Use when an agent needs to register on-chain, check fees, read agent info, set metadata, or manage agent wallets on Base Mainnet or Base Sepolia.
90
Quality
88%
Does it follow best practices?
Impact
100%
2.17xAverage score across 3 eval scenarios
Register and manage AI agents on the zScore Identity Registry. Defaults to Base Mainnet (0.0025 ETH fee). Use --chain 84532 for Base Sepolia testnet.
Install the latest version of this skill from the official repo:
npx skills add zerufinance/zscore -yThis installs the same skill that is published in the skills ecosystem (e.g. skills.sh). Use this command to get updates when the skill is updated.
After installing the skill, run once to install dependencies (from the skill directory, e.g. .cursor/skills/zscore/ or ~/.cursor/skills/zscore/):
npm installThis skill must be strictly interactive.
This is the core safety/quality gate: missing input blocks the workflow.
When the user wants to register an agent, you must follow the gated flow below. The workflow has three phases:
You must ask the user for the inputs below. You may not move to Phase 2 until each item is resolved.
| Input | Required? | Gate behaviour |
|---|---|---|
| Name | Yes | Ask: “What should the agent name be?” (1–256 chars). If not provided, stop. |
| Description | Yes | Ask: “What description should the agent have?” (max 2048 chars). If not provided, stop. |
| Services | Yes | Ask: “Which service types do you want to publish?” Then collect full details for at least one service. If not provided, stop. |
For every optional field, you must ask whether the user wants to set it. Only treat it as omitted if the user explicitly says skip (or equivalent).
| Input | Required? | What to ask |
|---|---|---|
| Image | No | “Do you want to include an image URL (avatar/logo)? If yes, paste it. If no, say ‘skip’.” |
| x402Support | No | “Does the agent support x402 payments? (true/false) Or say ‘skip’.” |
| active | No | “Should the agent be marked as active? (true/false) Or say ‘skip’.” |
| supportedTrust | No | “Which trust models should be listed? (e.g. reputation, ERC-8004, crypto-economic, tee-attestation) Or say ‘skip’.” |
Owner: Do not ask the user for an owner address. The owner is always derived from the signer (the wallet that holds PRIVATE_KEY). The script sets it automatically; the API requires the document owner to match the signer so that the same wallet can update the document after minting.
Registration fee: Base Mainnet (default): 0.0025 ETH. Base Sepolia: 0.001 ETH.
The wallet must also have enough ETH for gas (recommend ~0.003 ETH total on mainnet).
Private key: Registration requires a wallet. Ask the user to confirm one of these:
PRIVATE_KEY is already set in the environment / OpenClaw config”, orPRIVATE_KEY for this run”.Never write the private key into any file. Never echo it back.
If the user does not confirm how PRIVATE_KEY will be provided, you must stop.
Once all required inputs are provided (and optional inputs are either provided or explicitly skipped):
Construct the JSON object in-memory using the full structure (see “Agent JSON Structure” below).
Validate:
name present and 1–256 charsdescription present and ≤2048 charsservices has at least 1 itemPresent a concise summary of what will be written (name, description length, services list, chain choice, fee).
Ask for explicit approval with a blocking question:
“Approve writing agent.json with these exact details? (yes/no)”
If the user does not say yes, stop.
Only after the user explicitly approves:
Write the JSON to a file (e.g. agent.json).
Ask for the final explicit go-ahead: “Proceed to register on-chain now? (yes/no)” If not yes, stop.
Run registration:
npx tsx ./scripts/zscore.ts register --json agent.jsonnpx tsx ./scripts/zscore.ts register --json agent.json --chain 84532Do not run the register command until all gating requirements are satisfied and the user has approved both:
Registration accepts only a JSON file. Use the full structure below when collecting user input and building the file. Do not default to a minimal structure.
Full JSON (MCP + A2A + OASF + web + x402):
{
"name": "DataAnalyst Pro",
"description": "Enterprise-grade blockchain data analysis agent. Performs on-chain forensics, wallet profiling, and transaction pattern detection.",
"image": "https://cdn.example.com/agents/analyst.png",
"services": [
{
"name": "MCP",
"endpoint": "https://api.dataanalyst.ai/mcp",
"version": "2025-06-18",
"mcpTools": ["analyze_wallet", "trace_transactions", "detect_anomalies"],
"capabilities": []
},
{
"name": "A2A",
"endpoint": "https://api.dataanalyst.ai/.well-known/agent-card.json",
"version": "0.3.0",
"a2aSkills": ["analytical_skills/data_analysis/blockchain_analysis"]
},
{
"name": "OASF",
"endpoint": "https://github.com/agntcy/oasf/",
"version": "0.8.0",
"skills": ["analytical_skills/data_analysis/blockchain_analysis"],
"domains": ["technology/blockchain"]
},
{
"name": "web",
"endpoint": "https://dataanalyst.ai"
}
],
"x402Support": true,
"active": true,
"supportedTrust": ["reputation", "ERC-8004"]
}All fields:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
name | string | Yes | — | Agent name (1–256 chars) |
description | string | Yes | — | What the agent does (max 2048 chars) |
image | string | No | omitted unless provided | Avatar URL (HTTPS, IPFS, or Arweave) |
services | array | Yes | — | Service endpoints (1–64 items, see below) |
x402Support | boolean | No | omitted unless provided | Supports x402 payment protocol |
active | boolean | No | omitted unless provided | Agent is actively accepting requests |
supportedTrust | string[] | No | omitted unless provided | Trust models: "reputation", "crypto-economic", "tee-attestation", "ERC-8004" |
owner | string | No | signer address | Always set from signer (PRIVATE_KEY). Do not ask the user; the script sets it so the API allows update after mint. |
Service types:
name | endpoint | Extra fields |
|---|---|---|
"web" | Website URL | — |
"MCP" | MCP server URL | version, mcpTools[], mcpPrompts[], mcpResources[], capabilities[] |
"A2A" | Agent card URL (/.well-known/agent-card.json) | version, a2aSkills[] |
"OASF" | OASF repo URL | version, skills[], domains[] |
| custom | Any URL | description |
/zscore register --json <file>Register a new agent only via a JSON file. There is no flag-based registration (no --name / --description / --endpoint). Creates hosted agent URI, mints NFT on-chain, and updates URI with the real agentId.
/zscore register --json agent.json
/zscore register --json agent.json --chain 84532Required gated steps (must be followed in order):
PRIVATE_KEY will be provided.agent.json (yes/no).agent.json.The SDK automatically adds type, registrations (with agentId: 0 placeholder), and defaults for missing optional fields. After minting, it updates the document with the real agentId.
/zscore read <agentId>Read an agent's on-chain data: owner, URI, wallet, name, services.
/zscore read 16To run: npx tsx ./scripts/zscore.ts read 16
/zscore feeCheck current registration fee and whether registration is open.
/zscore feeTo run: npx tsx ./scripts/zscore.ts fee
/zscore set-metadata <agentId> --key <key> --value <value>Set custom metadata on an agent. Only the owner can call.
/zscore set-metadata 16 --key "category" --value "trading"Requires PRIVATE_KEY.
To run: npx tsx ./scripts/zscore.ts set-metadata 16 --key "category" --value "trading"
/zscore unset-wallet <agentId>Clear the agent wallet. Only the owner can call.
/zscore unset-wallet 16Requires PRIVATE_KEY.
To run: npx tsx ./scripts/zscore.ts unset-wallet 16
read and fee work without a private key.
Add to your OpenClaw config (~/.openclaw/openclaw.json):
{
"skills": {
"entries": {
"zscore": {
"enabled": true,
"env": {
"PRIVATE_KEY": "0xYourFundedPrivateKey"
}
}
}
}
}Optional env:
RPC_URL — override default RPCCHAIN_ID — override chain (default: 8453 for Base Mainnet, use 84532 for Base Sepolia)0xFfE9395fa761e52DBC077a2e7Fd84f77e8abCc410x187d72a58b3BF4De6432958fc36CE569Fb15C237Identity Registry: 0xF0682549516A4BA09803cCa55140AfBC4e5ed2E0
Reputation Registry: 0xaAC7557475023AEB581ECc8bD6886d1742382421
Registration Fee: 0.001 ETH
Source: zscore
registrationFee() and registrationEnabled() from the contract.setMetadata(agentId, key, value) on the contract.unsetAgentWallet(agentId) on the contract.02adecb
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.