@basecred/openclaw-8004 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/SKILL.md +281 -18
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
An OpenClaw skill that teaches AI agents to register and manage on-chain identities on Base mainnet via [ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) using the [agent0-sdk](https://github.com/agent0lab/agent0-ts).
|
|
4
4
|
|
|
5
|
-
> **
|
|
5
|
+
> **Scope: On-chain operations + registration file schema.** This skill covers agent identity minting, updates, feedback, reputation, transfers, and the standardized registration file format via `agent0-sdk`. Off-chain hosting (IPFS, CDN) and subgraph queries are not covered — see [References in SKILL.md](./SKILL.md#references).
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -24,7 +24,7 @@ Or copy `SKILL.md` directly into your agent's skill directory.
|
|
|
24
24
|
| Operation | Description |
|
|
25
25
|
|-----------|-------------|
|
|
26
26
|
| **Register** | Create an on-chain agent identity (ERC-721 NFT) |
|
|
27
|
-
| **Update** | Modify name, description,
|
|
27
|
+
| **Update** | Modify name, description, services, skills, metadata |
|
|
28
28
|
| **Give Feedback** | Submit on-chain reputation scores for other agents |
|
|
29
29
|
| **Search Feedback** | Query reputation summaries and feedback history |
|
|
30
30
|
| **Transfer** | Move agent ownership to a new wallet |
|
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: openclaw-8004
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.2.0
|
|
4
4
|
description: Register, manage, and build reputation for your AI agent on-chain via ERC-8004
|
|
5
5
|
metadata:
|
|
6
6
|
emoji: "\U0001F916"
|
|
@@ -16,7 +16,24 @@ metadata:
|
|
|
16
16
|
|
|
17
17
|
Register your AI agent on-chain as an ERC-721 identity on Base mainnet. Advertise capabilities, receive feedback, and build reputation — all permissionless, no intermediaries.
|
|
18
18
|
|
|
19
|
-
> **
|
|
19
|
+
> **Scope: On-Chain Operations + Registration File Schema**
|
|
20
|
+
>
|
|
21
|
+
> This skill covers **on-chain** agent identity management — registration (minting), updates, feedback, reputation, and transfers — using [agent0-sdk](https://github.com/agent0lab/agent0-ts) and `agent.registerHTTP()`.
|
|
22
|
+
>
|
|
23
|
+
> **What this skill covers:**
|
|
24
|
+
> - Minting an ERC-721 agent identity on Base mainnet
|
|
25
|
+
> - Updating agent metadata (name, description, services)
|
|
26
|
+
> - Giving and searching on-chain feedback / reputation
|
|
27
|
+
> - Transferring agent ownership
|
|
28
|
+
> - SDK initialization and transaction safety
|
|
29
|
+
> - Registration file schema (field definitions, endpoint types, output format)
|
|
30
|
+
>
|
|
31
|
+
> **What this skill does NOT cover:**
|
|
32
|
+
> - IPFS registration (`agent.registerIPFS()`) or Pinata configuration
|
|
33
|
+
> - Hosting, serving, or updating the registration JSON file
|
|
34
|
+
> - Subgraph indexing or off-chain data queries
|
|
35
|
+
>
|
|
36
|
+
> For off-chain topics, see the [References](#references) section.
|
|
20
37
|
|
|
21
38
|
| File | Description |
|
|
22
39
|
|---|---|
|
|
@@ -24,6 +41,51 @@ Register your AI agent on-chain as an ERC-721 identity on Base mainnet. Advertis
|
|
|
24
41
|
| **README.md** | Quick-start guide |
|
|
25
42
|
| **IDENTITY.md** | Agent profile card (created after registration) |
|
|
26
43
|
|
|
44
|
+
## Quick Reference
|
|
45
|
+
|
|
46
|
+
| Operation | Section | SDK Call |
|
|
47
|
+
|-----------|---------|---------|
|
|
48
|
+
| Register | [Register Agent](#register-agent) | `agent.registerHTTP(url)` |
|
|
49
|
+
| Update | [Update Agent](#update-agent) | `sdk.updateAgent(agentId, updates)` |
|
|
50
|
+
| Feedback | [Give Feedback](#give-feedback) | `sdk.giveFeedback(agentId, score)` |
|
|
51
|
+
| Search | [Search Feedback](#search-feedback) | `sdk.getReputationSummary(agentId)` |
|
|
52
|
+
| Transfer | [Transfer Ownership](#transfer-ownership) | `sdk.transferAgent(agentId, newOwner)` |
|
|
53
|
+
|
|
54
|
+
### SDK Init (copy-paste)
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import 'dotenv/config';
|
|
58
|
+
import { SDK } from 'agent0-sdk';
|
|
59
|
+
|
|
60
|
+
const sdk = new SDK({
|
|
61
|
+
chainId: 8453,
|
|
62
|
+
rpcUrl: process.env.BASE_RPC_URL || 'https://mainnet.base.org',
|
|
63
|
+
privateKey: process.env.WALLET_PRIVATE_KEY!,
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Direct Mode (No Prompts)
|
|
68
|
+
|
|
69
|
+
If you already know exactly what to do, skip the conversational flow:
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
// Register
|
|
73
|
+
const agent = sdk.createAgent('My Agent', 'Does things');
|
|
74
|
+
const tx = await agent.registerHTTP('https://example.com/agent.json');
|
|
75
|
+
await tx.waitConfirmed();
|
|
76
|
+
|
|
77
|
+
// Give feedback
|
|
78
|
+
await (await sdk.giveFeedback('8453:99', 85, 'helpful')).waitConfirmed();
|
|
79
|
+
|
|
80
|
+
// Search reputation
|
|
81
|
+
const summary = await sdk.getReputationSummary('8453:99');
|
|
82
|
+
|
|
83
|
+
// Transfer
|
|
84
|
+
await (await sdk.transferAgent('8453:42', '0xNEW...')).waitConfirmed();
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
27
89
|
## When to Use This Skill
|
|
28
90
|
|
|
29
91
|
Use this skill whenever you need to:
|
|
@@ -31,7 +93,7 @@ Use this skill whenever you need to:
|
|
|
31
93
|
- Advertise your MCP tools, A2A skills, or other capabilities
|
|
32
94
|
- Receive or give feedback to other agents
|
|
33
95
|
- Check your reputation score
|
|
34
|
-
- Update your agent profile (name, description,
|
|
96
|
+
- Update your agent profile (name, description, services)
|
|
35
97
|
- Transfer ownership of your agent identity to a new wallet
|
|
36
98
|
|
|
37
99
|
---
|
|
@@ -70,7 +132,7 @@ When the agent is already registered, **always present this menu** to the owner:
|
|
|
70
132
|
>
|
|
71
133
|
> What would you like to do?
|
|
72
134
|
>
|
|
73
|
-
> 1. **Update Agent** — modify name, description,
|
|
135
|
+
> 1. **Update Agent** — modify name, description, services, skills, or metadata
|
|
74
136
|
> 2. **Give Feedback** — rate another agent on-chain
|
|
75
137
|
> 3. **Search Feedback** — check reputation for any agent
|
|
76
138
|
> 4. **Transfer Ownership** — move your agent identity to a new wallet
|
|
@@ -147,6 +209,120 @@ Never skip the preview. On-chain actions cost gas and are irreversible.
|
|
|
147
209
|
|
|
148
210
|
---
|
|
149
211
|
|
|
212
|
+
## Registration File Schema
|
|
213
|
+
|
|
214
|
+
The registration file follows the [ERC-8004 specification](https://eips.ethereum.org/EIPS/eip-8004). The SDK generates this JSON when you call `agent.registerHTTP()`.
|
|
215
|
+
|
|
216
|
+
### Example Registration File
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
|
|
221
|
+
"name": "My Agent",
|
|
222
|
+
"description": "What this agent does",
|
|
223
|
+
"image": "https://example.com/avatar.png",
|
|
224
|
+
"services": [
|
|
225
|
+
{
|
|
226
|
+
"name": "MCP",
|
|
227
|
+
"version": "2025-06-18",
|
|
228
|
+
"endpoint": "https://example.com/api/mcp"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "A2A",
|
|
232
|
+
"version": "0.3.0",
|
|
233
|
+
"endpoint": "https://example.com/.well-known/agent-card.json"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "OASF",
|
|
237
|
+
"version": "0.8",
|
|
238
|
+
"endpoint": "https://example.com/.well-known/oasf.json",
|
|
239
|
+
"skills": ["blockchain/transaction_execution", "data_management/data_retrieval"],
|
|
240
|
+
"domains": ["finance_and_business/cryptocurrency", "technology/blockchain"]
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"name": "web",
|
|
244
|
+
"endpoint": "https://example.com"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "email",
|
|
248
|
+
"endpoint": "dev@example.com"
|
|
249
|
+
}
|
|
250
|
+
],
|
|
251
|
+
"x402Support": false,
|
|
252
|
+
"active": true,
|
|
253
|
+
"registrations": [
|
|
254
|
+
{
|
|
255
|
+
"agentId": 42,
|
|
256
|
+
"agentRegistry": "eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
"supportedTrust": ["reputation"]
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Field Reference
|
|
264
|
+
|
|
265
|
+
| Field | Type | Required | Description |
|
|
266
|
+
|-------|------|----------|-------------|
|
|
267
|
+
| `type` | string | Yes | Always `"https://eips.ethereum.org/EIPS/eip-8004#registration-v1"` |
|
|
268
|
+
| `name` | string | Yes | Agent display name |
|
|
269
|
+
| `description` | string | Yes | What the agent does (MAY include pricing, interaction methods) |
|
|
270
|
+
| `image` | string (URL) | No | Publicly accessible avatar URL |
|
|
271
|
+
| `services` | array | No | Array of service objects (see below) |
|
|
272
|
+
| `x402Support` | boolean | No | Whether agent supports x402 payments |
|
|
273
|
+
| `active` | boolean | Yes | Whether agent is currently active |
|
|
274
|
+
| `registrations` | array | No | On-chain registration references (see below) |
|
|
275
|
+
| `supportedTrust` | string[] | No | Trust models: `"reputation"`, `"crypto-economic"`, `"tee-attestation"` |
|
|
276
|
+
|
|
277
|
+
> **Note on `type`:** The SDK sets this automatically during `registerHTTP()`. Agents do not need to set it manually.
|
|
278
|
+
|
|
279
|
+
> **Note on `registrations`:** Each entry has `agentId` (token ID number) and `agentRegistry` in `{namespace}:{chainId}:{identityRegistry}` format (e.g. `eip155:8453:0x8004...`). The SDK populates this after minting.
|
|
280
|
+
|
|
281
|
+
### Service Types
|
|
282
|
+
|
|
283
|
+
**EIP-8004 defined services:**
|
|
284
|
+
|
|
285
|
+
| Service Name | Description | Example |
|
|
286
|
+
|--------------|-------------|---------|
|
|
287
|
+
| `MCP` | Model Context Protocol server | `https://example.com/api/mcp` |
|
|
288
|
+
| `A2A` | Agent-to-Agent protocol | `https://agent.example/.well-known/agent-card.json` |
|
|
289
|
+
| `OASF` | OASF agent card (may include `skills[]` and `domains[]`) | `https://example.com/.well-known/oasf.json` |
|
|
290
|
+
| `ENS` | Ethereum Name Service | `vitalik.eth` |
|
|
291
|
+
| `DID` | W3C Decentralized Identifier | `did:method:foobar` |
|
|
292
|
+
| `web` | Agent website | `https://example.com` |
|
|
293
|
+
| `email` | Contact email | `dev@example.com` |
|
|
294
|
+
|
|
295
|
+
**Common custom services** (not in EIP spec, but widely used):
|
|
296
|
+
|
|
297
|
+
| Service Name | Description | Example |
|
|
298
|
+
|--------------|-------------|---------|
|
|
299
|
+
| `twitter` | Twitter/X profile | `https://x.com/MyAgent` |
|
|
300
|
+
| `farcaster` | Farcaster profile | `https://farcaster.xyz/myagent` |
|
|
301
|
+
| `telegram` | Telegram bot | `https://t.me/myagentbot` |
|
|
302
|
+
| `github` | GitHub repository | `https://github.com/myagent` |
|
|
303
|
+
| `agentWallet` | On-chain wallet address | `eip155:8453:0x...` |
|
|
304
|
+
|
|
305
|
+
> Custom service names are allowed — the `services` array is extensible. Use EIP-defined names when they fit.
|
|
306
|
+
|
|
307
|
+
> **OASF service object:** The OASF service may include optional `skills` and `domains` arrays directly inside the service object. These follow [OASF categories](https://github.com/agntcy/oasf).
|
|
308
|
+
|
|
309
|
+
### SDK Method → JSON Field Mapping
|
|
310
|
+
|
|
311
|
+
| SDK Method | JSON Field | Notes |
|
|
312
|
+
|------------|------------|-------|
|
|
313
|
+
| `sdk.createAgent(name, desc, image)` | `name`, `description`, `image` | — |
|
|
314
|
+
| `agent.setMCP(url)` | `services[{name:"MCP"}]` | — |
|
|
315
|
+
| `agent.setA2A(url)` | `services[{name:"A2A"}]` | — |
|
|
316
|
+
| `agent.setENS(name)` | `services[{name:"ENS"}]` | Also stored on-chain |
|
|
317
|
+
| `agent.addSkill(skill, verified)` | `services[{name:"OASF"}].skills` | One per call |
|
|
318
|
+
| `agent.addDomain(domain, verified)` | `services[{name:"OASF"}].domains` | One per call |
|
|
319
|
+
| `agent.setTrust(rep, crypto, tee)` | `supportedTrust` | Booleans → string array |
|
|
320
|
+
| `agent.setMetadata({...})` | Custom fields | Merged into root |
|
|
321
|
+
| `agent.setActive(true)` | `active` | — |
|
|
322
|
+
| `agent.registerHTTP(url)` | Generates & publishes JSON | Sets `type` and `registrations` automatically |
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
150
326
|
## Register Agent
|
|
151
327
|
|
|
152
328
|
### Step 1: Pre-Fill from Existing Files
|
|
@@ -155,7 +331,7 @@ Before asking the owner for details, scan the project for files that may already
|
|
|
155
331
|
|
|
156
332
|
| File | What to extract |
|
|
157
333
|
|---|---|
|
|
158
|
-
| `IDENTITY.md` | Name, description, image,
|
|
334
|
+
| `IDENTITY.md` | Name, description, image, services (MCP, A2A), ENS, OASF skills/domains, trust models, metadata |
|
|
159
335
|
| `TOOLS.md` | Tool names and descriptions — suggest as MCP capabilities or OASF skills |
|
|
160
336
|
| `README.md` | Project name and description — suggest as agent name and description |
|
|
161
337
|
| `package.json` | `name`, `description`, `homepage` — suggest as agent name, description, HTTP URL |
|
|
@@ -178,13 +354,16 @@ Present pre-filled values (if any) and ask the owner to confirm or edit:
|
|
|
178
354
|
|
|
179
355
|
**Optional:**
|
|
180
356
|
- **Image URL** — a publicly accessible URL for your agent's avatar
|
|
181
|
-
- **MCP
|
|
182
|
-
- **A2A
|
|
357
|
+
- **MCP service** — if your agent exposes MCP tools (e.g. `https://mcp.example.com/`)
|
|
358
|
+
- **A2A service** — if your agent exposes A2A skills (e.g. `https://a2a.example.com/.well-known/agent-card.json`)
|
|
183
359
|
- **ENS name** — a human-readable name (e.g. `myagent.eth`)
|
|
360
|
+
- **DID** — a W3C Decentralized Identifier (e.g. `did:web:example.com`)
|
|
184
361
|
- **HTTP URL** — where to host your registration file (e.g. `https://myserver.com/agents/my-agent.json`)
|
|
185
362
|
- **OASF skills** — standardized skill categories (e.g. `data_engineering/data_transformation_pipeline`)
|
|
186
363
|
- **OASF domains** — standardized domain categories (e.g. `finance_and_business/investment_services`)
|
|
187
364
|
- **Trust models** — which trust models to advertise: `reputation`, `crypto-economic`, `tee-attestation`
|
|
365
|
+
- **x402 Support** — does your agent accept x402 payments? (true/false)
|
|
366
|
+
- **Additional services** — website URL, email, etc. (see [Service Types](#service-types-eip-8004-defined))
|
|
188
367
|
- **Metadata** — key-value pairs for additional info (e.g. `{ version: '1.0.0', category: 'ai-assistant' }`)
|
|
189
368
|
|
|
190
369
|
If pre-filled values were found, present them like this:
|
|
@@ -208,18 +387,25 @@ const agent = sdk.createAgent(
|
|
|
208
387
|
'https://example.com/agent-image.png' // image URL (optional)
|
|
209
388
|
);
|
|
210
389
|
|
|
211
|
-
// Configure
|
|
212
|
-
await agent.setMCP('https://mcp.example.com/'); //
|
|
213
|
-
await agent.setA2A('https://a2a.example.com/agent-card.json'); //
|
|
214
|
-
agent.setENS('myagent.eth');
|
|
390
|
+
// Configure services (optional)
|
|
391
|
+
await agent.setMCP('https://mcp.example.com/'); // → services[{name:"MCP"}]
|
|
392
|
+
await agent.setA2A('https://a2a.example.com/agent-card.json'); // → services[{name:"A2A"}]
|
|
393
|
+
agent.setENS('myagent.eth'); // → services[{name:"ENS"}]
|
|
215
394
|
|
|
216
|
-
// Add OASF skills and domains (optional)
|
|
395
|
+
// Add OASF skills and domains (optional) — stored inside OASF service object
|
|
217
396
|
agent.addSkill('data_engineering/data_transformation_pipeline', true);
|
|
218
397
|
agent.addDomain('finance_and_business/investment_services', true);
|
|
219
398
|
|
|
220
399
|
// Set trust models (optional): reputation, cryptoEconomic, teeAttestation
|
|
221
400
|
agent.setTrust(true, false, false);
|
|
222
401
|
|
|
402
|
+
// Set x402 payment support (optional)
|
|
403
|
+
agent.setMetadata({ x402Support: true });
|
|
404
|
+
|
|
405
|
+
// Add additional services (optional)
|
|
406
|
+
agent.addEndpoint('web', 'https://example.com');
|
|
407
|
+
agent.addEndpoint('email', 'dev@example.com');
|
|
408
|
+
|
|
223
409
|
// Add metadata (optional)
|
|
224
410
|
agent.setMetadata({ version: '1.0.0', category: 'ai-assistant' });
|
|
225
411
|
|
|
@@ -227,6 +413,8 @@ agent.setMetadata({ version: '1.0.0', category: 'ai-assistant' });
|
|
|
227
413
|
agent.setActive(true);
|
|
228
414
|
```
|
|
229
415
|
|
|
416
|
+
> **Note:** If `addEndpoint()` doesn't exist in agent0-sdk, additional services are set via `setMetadata()`. Adjust code to match actual SDK API. Service names must follow EIP-8004 casing: `MCP`, `A2A`, `OASF`, `ENS`, `DID` (uppercase), `web`, `email` (lowercase).
|
|
417
|
+
|
|
230
418
|
### Step 4: Preview Draft
|
|
231
419
|
|
|
232
420
|
Before signing, present a summary to the owner for approval:
|
|
@@ -236,12 +424,11 @@ Before signing, present a summary to the owner for approval:
|
|
|
236
424
|
> - **Name:** My AI Agent
|
|
237
425
|
> - **Description:** An intelligent assistant for tasks.
|
|
238
426
|
> - **Image:** https://example.com/agent-image.png
|
|
239
|
-
> - **MCP
|
|
240
|
-
> - **A2A Endpoint:** https://a2a.example.com/agent-card.json
|
|
241
|
-
> - **ENS:** myagent.eth
|
|
427
|
+
> - **Services:** MCP, A2A, OASF, ENS, web, email
|
|
242
428
|
> - **OASF Skills:** data_engineering/data_transformation_pipeline
|
|
243
429
|
> - **OASF Domains:** finance_and_business/investment_services
|
|
244
430
|
> - **Trust Models:** reputation
|
|
431
|
+
> - **x402 Support:** false
|
|
245
432
|
> - **Registration URI:** https://myserver.com/agents/my-agent.json
|
|
246
433
|
>
|
|
247
434
|
> This will mint an ERC-721 NFT on Base and cost gas. Shall I proceed?
|
|
@@ -251,7 +438,7 @@ Before signing, present a summary to the owner for approval:
|
|
|
251
438
|
### Step 5: Register On-Chain via HTTP
|
|
252
439
|
|
|
253
440
|
The `registerHTTP()` call does three things:
|
|
254
|
-
1. Serializes your agent's registration file (name, description,
|
|
441
|
+
1. Serializes your agent's registration file (name, description, services, trust, metadata) as JSON
|
|
255
442
|
2. Mints an ERC-721 NFT on-chain representing your agent identity
|
|
256
443
|
3. Records the HTTP URL on-chain as the agent's URI, pointing to the hosted registration file
|
|
257
444
|
|
|
@@ -264,6 +451,26 @@ const { result: registration } = await txHandle.waitConfirmed();
|
|
|
264
451
|
|
|
265
452
|
console.log(`Agent ID: ${registration.agentId}`); // e.g. "8453:42"
|
|
266
453
|
console.log(`Agent URI: ${registration.agentURI}`); // the HTTP URL
|
|
454
|
+
|
|
455
|
+
// The SDK generates a registration file like this:
|
|
456
|
+
// {
|
|
457
|
+
// "type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
|
|
458
|
+
// "name": "My AI Agent",
|
|
459
|
+
// "description": "An intelligent assistant for tasks.",
|
|
460
|
+
// "image": "https://example.com/agent-image.png",
|
|
461
|
+
// "services": [
|
|
462
|
+
// { "name": "MCP", "version": "2025-06-18", "endpoint": "https://mcp.example.com/" },
|
|
463
|
+
// { "name": "A2A", "version": "0.3.0", "endpoint": "https://a2a.example.com/agent-card.json" },
|
|
464
|
+
// { "name": "OASF", "version": "0.8", "endpoint": "...", "skills": [...], "domains": [...] },
|
|
465
|
+
// { "name": "ENS", "version": "v1", "endpoint": "myagent.eth" },
|
|
466
|
+
// { "name": "web", "endpoint": "https://example.com" },
|
|
467
|
+
// { "name": "email", "endpoint": "dev@example.com" }
|
|
468
|
+
// ],
|
|
469
|
+
// "x402Support": false,
|
|
470
|
+
// "active": true,
|
|
471
|
+
// "registrations": [{ "agentId": 42, "agentRegistry": "eip155:8453:0x8004..." }],
|
|
472
|
+
// "supportedTrust": ["reputation"]
|
|
473
|
+
// }
|
|
267
474
|
```
|
|
268
475
|
|
|
269
476
|
### Step 6: Save Agent ID
|
|
@@ -345,7 +552,7 @@ agent.updateInfo(
|
|
|
345
552
|
'New description with enhanced capabilities.'
|
|
346
553
|
);
|
|
347
554
|
|
|
348
|
-
// Update or add
|
|
555
|
+
// Update or add services
|
|
349
556
|
await agent.setMCP('https://mcp-v2.example.com/');
|
|
350
557
|
await agent.setA2A('https://a2a-v2.example.com/agent-card.json');
|
|
351
558
|
|
|
@@ -604,6 +811,43 @@ console.log(`New owner: ${verifiedOwner}`);
|
|
|
604
811
|
|
|
605
812
|
---
|
|
606
813
|
|
|
814
|
+
## IDENTITY.md Schema
|
|
815
|
+
|
|
816
|
+
The IDENTITY.md file is a human-readable agent profile card saved locally after registration. Use this exact format:
|
|
817
|
+
|
|
818
|
+
> This file is a local reference card. The actual registration file (JSON) is generated by the SDK — see [Registration File Schema](#registration-file-schema).
|
|
819
|
+
|
|
820
|
+
```markdown
|
|
821
|
+
# Agent Identity
|
|
822
|
+
|
|
823
|
+
| Field | Value |
|
|
824
|
+
|---|---|
|
|
825
|
+
| **Agent ID** | {chainId}:{tokenId} |
|
|
826
|
+
| **Name** | {agent name} |
|
|
827
|
+
| **Description** | {agent description} |
|
|
828
|
+
| **Chain** | Base ({chainId}) |
|
|
829
|
+
| **Registration URI** | {HTTP URL} |
|
|
830
|
+
| **Services** | {comma-separated service names or "—"} |
|
|
831
|
+
| **MCP** | {MCP URL or "—"} |
|
|
832
|
+
| **A2A** | {A2A URL or "—"} |
|
|
833
|
+
| **ENS** | {ENS name or "—"} |
|
|
834
|
+
| **Image** | {image URL or "—"} |
|
|
835
|
+
| **x402 Support** | {true/false} |
|
|
836
|
+
| **Website** | {URL or "—"} |
|
|
837
|
+
| **Active** | {true/false} |
|
|
838
|
+
| **Registered** | {YYYY-MM-DD} |
|
|
839
|
+
|
|
840
|
+
> On-chain identity minted as ERC-721 on Base mainnet.
|
|
841
|
+
```
|
|
842
|
+
|
|
843
|
+
**Rules:**
|
|
844
|
+
- Use "—" for optional fields that are not set (never leave blank)
|
|
845
|
+
- Date format is always `YYYY-MM-DD`
|
|
846
|
+
- Agent ID format is always `{chainId}:{tokenId}` (e.g. `8453:42`)
|
|
847
|
+
- This file is for local reference only — it is NOT published to npm or uploaded on-chain
|
|
848
|
+
|
|
849
|
+
---
|
|
850
|
+
|
|
607
851
|
## Error Handling
|
|
608
852
|
|
|
609
853
|
| Error | Cause | Recovery |
|
|
@@ -616,6 +860,7 @@ console.log(`New owner: ${verifiedOwner}`);
|
|
|
616
860
|
| `network error` / `timeout` | RPC endpoint is down or unreachable | Check `BASE_RPC_URL` in `.env`, try an alternative Base RPC |
|
|
617
861
|
| `IPFS` or `Pinata` errors | Should not occur — this skill uses HTTP only | Verify you are using `agent.registerHTTP()`, not `agent.registerIPFS()` |
|
|
618
862
|
| `setMCP` / `setA2A` soft failure | Endpoint unreachable during capability extraction | Non-blocking — the endpoint is still set, but tools/skills won't be auto-extracted. Verify the endpoint URL is correct and accessible. |
|
|
863
|
+
| `receipt.gasUsed` undefined | SDK or RPC may return receipt fields as optional | Always use optional chaining (`receipt?.gasUsed`) when accessing receipt properties — do not assume all fields are present |
|
|
619
864
|
|
|
620
865
|
**General rules:**
|
|
621
866
|
- Never silently swallow errors. Log them and inform the owner.
|
|
@@ -641,6 +886,24 @@ console.log(`New owner: ${verifiedOwner}`);
|
|
|
641
886
|
|
|
642
887
|
---
|
|
643
888
|
|
|
889
|
+
## References
|
|
890
|
+
|
|
891
|
+
| Topic | Resource |
|
|
892
|
+
|-------|----------|
|
|
893
|
+
| **ERC-8004 Standard** | [EIP-8004](https://eips.ethereum.org/EIPS/eip-8004) |
|
|
894
|
+
| **agent0-sdk Documentation** | [agent0-ts GitHub](https://github.com/agent0lab/agent0-ts) |
|
|
895
|
+
| **Agent0 Platform** | [agent0.xyz](https://agent0.xyz) |
|
|
896
|
+
| **IPFS Registration** | See `agent.registerIPFS()` in agent0-sdk docs — not covered by this skill |
|
|
897
|
+
| **Registration File Format** | Defined by ERC-8004 spec — see EIP link above |
|
|
898
|
+
| **Subgraph / Indexing** | Agent0 subgraph indexes both on-chain and IPFS data — see agent0-sdk docs |
|
|
899
|
+
| **Base Network** | [Base Docs](https://docs.base.org) |
|
|
900
|
+
| **OpenClaw Skills** | [openclaw.xyz](https://openclaw.xyz) |
|
|
901
|
+
|
|
902
|
+
> This skill focuses on on-chain operations. For off-chain registration file hosting,
|
|
903
|
+
> IPFS pinning, or subgraph queries, refer to the agent0-sdk documentation directly.
|
|
904
|
+
|
|
905
|
+
---
|
|
906
|
+
|
|
644
907
|
## Example Interaction
|
|
645
908
|
|
|
646
909
|
Below is a complete conversation showing first boot through registration, feedback, and transfer.
|
|
@@ -769,7 +1032,7 @@ const { result: registration } = await txHandle.waitConfirmed();
|
|
|
769
1032
|
>
|
|
770
1033
|
> What would you like to do?
|
|
771
1034
|
>
|
|
772
|
-
> 1. **Update Agent** — modify name, description,
|
|
1035
|
+
> 1. **Update Agent** — modify name, description, services, skills, or metadata
|
|
773
1036
|
> 2. **Give Feedback** — rate another agent on-chain
|
|
774
1037
|
> 3. **Search Feedback** — check reputation for any agent
|
|
775
1038
|
> 4. **Transfer Ownership** — move your agent identity to a new wallet
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basecred/openclaw-8004",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "OpenClaw skill for registering and managing AI agent identities on-chain via ERC-8004",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -27,5 +27,8 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"agent0-sdk": "^1.5.3",
|
|
29
29
|
"dotenv": "^16.4.7"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
30
33
|
}
|
|
31
34
|
}
|