agent-card-signing-auditor
Helps audit Agent Card signing practices in A2A protocol implementations.
Crawler Summary
Register and manage AI agent identities, reputation, and validation on-chain via ERC-8004 --- name: "OpenClaw ERC-8004" version: "2.0.0" description: "Register and manage AI agent identities, reputation, and validation on-chain via ERC-8004" chain: "Base (Chain ID: 8453)" contracts: IdentityRegistry: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432" ReputationRegistry: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63" ValidationRegistry: "Not yet deployed on Base mainnet" standard: "ERC-8004 (ERC-721 based)" storag Capability contract not published. No trust telemetry is available yet. 1 GitHub stars reported by the source. Last updated 4/15/2026.
Freshness
Last checked 4/15/2026
Best For
OpenClaw ERC-8004 is best for call, only, be workflows where A2A compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB OPENCLEW, runtime-metrics, public facts pack
Register and manage AI agent identities, reputation, and validation on-chain via ERC-8004 --- name: "OpenClaw ERC-8004" version: "2.0.0" description: "Register and manage AI agent identities, reputation, and validation on-chain via ERC-8004" chain: "Base (Chain ID: 8453)" contracts: IdentityRegistry: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432" ReputationRegistry: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63" ValidationRegistry: "Not yet deployed on Base mainnet" standard: "ERC-8004 (ERC-721 based)" storag
Public facts
5
Change events
1
Artifacts
0
Freshness
Apr 15, 2026
Capability contract not published. No trust telemetry is available yet. 1 GitHub stars reported by the source. Last updated 4/15/2026.
Trust score
Unknown
Compatibility
A2A
Freshness
Apr 15, 2026
Vendor
Teeclaw
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. 1 GitHub stars reported by the source. Last updated 4/15/2026.
Setup snapshot
git clone https://github.com/teeclaw/openclaw-8004-onchain.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Teeclaw
Protocol compatibility
A2A
Adoption signal
1 GitHub stars
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
text
struct MetadataEntry {
string metadataKey;
bytes metadataValue;
}text
register() → uint256 register(string agentURI) → uint256 register(string agentURI, MetadataEntry[] metadata) → uint256 setAgentURI(uint256 agentId, string newURI) setMetadata(uint256 agentId, string metadataKey, bytes metadataValue) getMetadata(uint256 agentId, string metadataKey) → bytes setAgentWallet(uint256 agentId, address newWallet, uint256 deadline, bytes signature) getAgentWallet(uint256 agentId) → address unsetAgentWallet(uint256 agentId) tokenURI(uint256 tokenId) → string
text
Registered(uint256 indexed agentId, string agentURI, address indexed owner) URIUpdated(uint256 indexed agentId, string newURI, address indexed updatedBy) MetadataSet(uint256 indexed agentId, string indexed indexedMetadataKey, string metadataKey, bytes metadataValue)
text
giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackHash) revokeFeedback(uint256 agentId, uint64 feedbackIndex) appendResponse(uint256 agentId, address clientAddress, uint64 feedbackIndex, string responseURI, bytes32 responseHash) getSummary(uint256 agentId, address[] clientAddresses, string tag1, string tag2) → (uint64 count, int128 summaryValue, uint8 summaryValueDecimals) readFeedback(uint256 agentId, address clientAddress, uint64 feedbackIndex) → (int128 value, uint8 valueDecimals, string tag1, string tag2, bool isRevoked) readAllFeedback(uint256 agentId, address[] clientAddresses, string tag1, string tag2, bool includeRevoked) → (address[], uint64[], int128[], uint8[], string[], string[], bool[]) getClients(uint256 agentId) → address[] getLastIndex(uint256 agentId, address clientAddress) → uint64 getResponseCount(uint256 agentId, address[] responders, uint64 feedbackIndex, address[] responders) → uint64 getIdentityRegistry() → address
text
NewFeedback(uint256 indexed agentId, address indexed clientAddress, uint64 feedbackIndex, int128 value, uint8 valueDecimals, string indexed indexedTag1, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackHash) FeedbackRevoked(uint256 indexed agentId, address indexed clientAddress, uint64 indexed feedbackIndex) ResponseAppended(uint256 indexed agentId, address indexed clientAddress, uint64 feedbackIndex, address indexed responder, string responseURI, bytes32 responseHash)
text
validationRequest(address validatorAddress, uint256 agentId, string requestURI, bytes32 requestHash) validationResponse(bytes32 requestHash, uint8 response, string responseURI, bytes32 responseHash, string tag) getValidationStatus(bytes32 requestHash) → (address validatorAddress, uint256 agentId, uint8 response, bytes32 responseHash, string tag, uint256 lastUpdate) getSummary(uint256 agentId, address[] validatorAddresses, string tag) → (uint64 count, uint8 avgResponse) getAgentValidations(uint256 agentId) → bytes32[] getValidatorRequests(address validatorAddress) → bytes32[] getIdentityRegistry() → address
Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB OPENCLEW
Editorial quality
ready
Register and manage AI agent identities, reputation, and validation on-chain via ERC-8004 --- name: "OpenClaw ERC-8004" version: "2.0.0" description: "Register and manage AI agent identities, reputation, and validation on-chain via ERC-8004" chain: "Base (Chain ID: 8453)" contracts: IdentityRegistry: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432" ReputationRegistry: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63" ValidationRegistry: "Not yet deployed on Base mainnet" standard: "ERC-8004 (ERC-721 based)" storag
ERC-8004 is an on-chain standard for AI agent identity, reputation, and validation built on ERC-721. Each registered agent receives a non-fungible token representing its on-chain identity. The standard defines three registries:
This skill covers fully on-chain registration and management. All agent metadata is stored directly on-chain as base64-encoded data URIs — no external URLs, no IPFS, no HTTP endpoints required. The skill is library-agnostic: all instructions are at the ABI level. Use any web3 library (ethers.js, viem, wagmi, web3.js, etc.) to execute these calls.
This skill does NOT cover:
| Operation | Contract | Function | Gas? |
| ----------------------- | ------------------ | -------------------------------------------------- | ---- |
| Register agent | IdentityRegistry | register(string) | Yes |
| Register with metadata | IdentityRegistry | register(string, MetadataEntry[]) | Yes |
| Update profile | IdentityRegistry | setAgentURI(uint256, string) | Yes |
| Set metadata key | IdentityRegistry | setMetadata(uint256, string, bytes) | Yes |
| Read metadata key | IdentityRegistry | getMetadata(uint256, string) | No |
| Read full profile | IdentityRegistry | tokenURI(uint256) | No |
| Set agent wallet | IdentityRegistry | setAgentWallet(uint256, address, uint256, bytes) | Yes |
| Get agent wallet | IdentityRegistry | getAgentWallet(uint256) | No |
| Unset agent wallet | IdentityRegistry | unsetAgentWallet(uint256) | Yes |
| Transfer ownership | IdentityRegistry | transferFrom(address, address, uint256) | Yes |
| Give feedback | ReputationRegistry | giveFeedback(...) | Yes |
| Revoke feedback | ReputationRegistry | revokeFeedback(uint256, uint64) | Yes |
| Respond to feedback | ReputationRegistry | appendResponse(...) | Yes |
| Read feedback summary | ReputationRegistry | getSummary(...) | No |
| Read all feedback | ReputationRegistry | readAllFeedback(...) | No |
| Request validation | ValidationRegistry | validationRequest(...) | Yes |
| Respond to validation | ValidationRegistry | validationResponse(...) | Yes |
| Check validation status | ValidationRegistry | getValidationStatus(bytes32) | No |
All three contracts are UUPS upgradeable proxies. Only agent-facing functions are documented here. Infrastructure methods (
upgradeToAndCall,proxiableUUID,getVersion,initialize, ownership) are omitted.
Address: 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 (Base mainnet)
Struct:
struct MetadataEntry {
string metadataKey;
bytes metadataValue;
}
Functions:
register() → uint256
register(string agentURI) → uint256
register(string agentURI, MetadataEntry[] metadata) → uint256
setAgentURI(uint256 agentId, string newURI)
setMetadata(uint256 agentId, string metadataKey, bytes metadataValue)
getMetadata(uint256 agentId, string metadataKey) → bytes
setAgentWallet(uint256 agentId, address newWallet, uint256 deadline, bytes signature)
getAgentWallet(uint256 agentId) → address
unsetAgentWallet(uint256 agentId)
tokenURI(uint256 tokenId) → string
Events:
Registered(uint256 indexed agentId, string agentURI, address indexed owner)
URIUpdated(uint256 indexed agentId, string newURI, address indexed updatedBy)
MetadataSet(uint256 indexed agentId, string indexed indexedMetadataKey, string metadataKey, bytes metadataValue)
Notes:
register() returns the new agentId (auto-incrementing uint256).tokenURI() returns the agentURI set during registration or via setAgentURI().setMetadata() value parameter is bytes, not string — encode strings to bytes before calling.setAgentURI, setMetadata, setAgentWallet, unsetAgentWallet.agentWallet is a reserved metadata key with special handling:
setAgentWallet() with an EIP-712 / ERC-1271 signature proving control of the new wallet.setAgentWallet().Address: 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 (Base mainnet)
Functions:
giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackHash)
revokeFeedback(uint256 agentId, uint64 feedbackIndex)
appendResponse(uint256 agentId, address clientAddress, uint64 feedbackIndex, string responseURI, bytes32 responseHash)
getSummary(uint256 agentId, address[] clientAddresses, string tag1, string tag2) → (uint64 count, int128 summaryValue, uint8 summaryValueDecimals)
readFeedback(uint256 agentId, address clientAddress, uint64 feedbackIndex) → (int128 value, uint8 valueDecimals, string tag1, string tag2, bool isRevoked)
readAllFeedback(uint256 agentId, address[] clientAddresses, string tag1, string tag2, bool includeRevoked) → (address[], uint64[], int128[], uint8[], string[], string[], bool[])
getClients(uint256 agentId) → address[]
getLastIndex(uint256 agentId, address clientAddress) → uint64
getResponseCount(uint256 agentId, address[] responders, uint64 feedbackIndex, address[] responders) → uint64
getIdentityRegistry() → address
Events:
NewFeedback(uint256 indexed agentId, address indexed clientAddress, uint64 feedbackIndex, int128 value, uint8 valueDecimals, string indexed indexedTag1, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackHash)
FeedbackRevoked(uint256 indexed agentId, address indexed clientAddress, uint64 indexed feedbackIndex)
ResponseAppended(uint256 indexed agentId, address indexed clientAddress, uint64 feedbackIndex, address indexed responder, string responseURI, bytes32 responseHash)
Notes:
value is int128 (signed) — supports positive and negative feedback.valueDecimals indicates decimal precision (e.g., value=450, decimals=2 → 4.50).tag1 and tag2 are free-form category strings for filtering.endpoint records which service endpoint the feedback is about.feedbackURI and feedbackHash can be empty strings / zero bytes for on-chain-only feedback.revokeFeedback().appendResponse() — not restricted to the agent owner.getSummary() and readAllFeedback() are view functions (no gas).getSummary() requires a non-empty clientAddresses array (anti-Sybil/spam design). You must supply specific client addresses to query.readAllFeedback() also accepts clientAddresses for filtering. Pass empty strings for tag1/tag2 to skip tag filtering.Status: NOT deployed on Base mainnet. The ABI exists in the erc-8004-contracts repo but no contract address is published for any chain. This section documents the interface for reference — it will be ready when the contract goes live.
Functions:
validationRequest(address validatorAddress, uint256 agentId, string requestURI, bytes32 requestHash)
validationResponse(bytes32 requestHash, uint8 response, string responseURI, bytes32 responseHash, string tag)
getValidationStatus(bytes32 requestHash) → (address validatorAddress, uint256 agentId, uint8 response, bytes32 responseHash, string tag, uint256 lastUpdate)
getSummary(uint256 agentId, address[] validatorAddresses, string tag) → (uint64 count, uint8 avgResponse)
getAgentValidations(uint256 agentId) → bytes32[]
getValidatorRequests(address validatorAddress) → bytes32[]
getIdentityRegistry() → address
Events:
ValidationRequest(address indexed validatorAddress, uint256 indexed agentId, string requestURI, bytes32 indexed requestHash)
ValidationResponse(address indexed validatorAddress, uint256 indexed agentId, bytes32 indexed requestHash, uint8 response, string responseURI, bytes32 responseHash, string tag)
Notes:
validatorAddress can respond to a validation request.response is a uint8 representing the validation outcome.requestHash is the unique identifier linking requests to responses.All agent metadata is stored fully on-chain by encoding the registration JSON as a base64 data URI and passing it as the agentURI parameter:
register("data:application/json;base64,{base64-encoded-JSON}")
When tokenURI(agentId) is called, it returns this data URI directly. Any consumer decodes the base64 payload to get the full agent profile.
This is the proven production approach — for example, Mr. Tee (agent ID 14482) on Base mainnet uses this exact pattern.
The registration JSON follows the ERC-8004 specification:
{
"type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
"name": "Agent Name",
"description": "What the agent does",
"image": "https://example.com/avatar.png",
"services": [
{ "name": "web", "endpoint": "https://agent.example.com" },
{
"name": "A2A",
"endpoint": "https://agent.example.com/.well-known/agent-card.json",
"version": "0.3.0"
},
{
"name": "OASF",
"endpoint": "...",
"version": "0.8",
"skills": [],
"domains": []
},
{ "name": "ENS", "endpoint": "name.eth", "version": "v1" },
{ "name": "agentWallet", "endpoint": "eip155:8453:0x..." },
{ "name": "twitter", "endpoint": "https://twitter.com/handle" },
{ "name": "farcaster", "endpoint": "https://farcaster.xyz/handle" },
{ "name": "telegram", "endpoint": "https://t.me/handle" },
{ "name": "github", "endpoint": "https://github.com/handle" }
],
"x402Support": false,
"active": true,
"registrations": [
{
"agentId": 42,
"agentRegistry": "eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"
}
],
"supportedTrust": ["reputation", "crypto-economic", "tee-attestation"]
}
Field reference:
| Field | Required | Description |
| ---------------- | -------- | ------------------------------------------------------------------ |
| type | Yes | Always "https://eips.ethereum.org/EIPS/eip-8004#registration-v1" |
| name | Yes | Human-readable agent name |
| description | Yes | What the agent does |
| image | No | Avatar/logo URL |
| services | No | Array of service endpoints (see service types below) |
| x402Support | No | Whether the agent supports x402 payments |
| active | No | Whether the agent is currently active |
| registrations | No | Array of on-chain registrations (agentId + registry address) |
| supportedTrust | No | Trust models the agent supports |
Service types: web, A2A, OASF, ENS, agentWallet, twitter, farcaster, telegram, github, or any custom string.
To update an agent's profile:
tokenURI(agentId) → decode base64 → parse JSONdata:application/json;base64,{encoded}setAgentURI(agentId, newDataURI)This replaces the entire profile atomically.
setMetadata() stores individual key-value pairs on-chain alongside the agentURI:
bytes (encode strings to bytes before calling)getMetadata(agentId, key) (view, no gas)The MetadataEntry[] parameter in register(string, MetadataEntry[]) sets multiple key-value pairs during registration in a single transaction.
START
│
├── Load .env
│
├── WALLET_PRIVATE_KEY exists?
│ ├── No → Go to Section 6: First-Time Setup
│ └── Yes ↓
│
├── AGENT0_AGENT_ID exists?
│ ├── No → Go to Section 7: Register Agent
│ └── Yes ↓
│
└── Agent is registered → Show Action Menu:
├── Update Profile → Section 8
├── Search Feedback → Section 9
├── Give Feedback → Section 10
├── Revoke Feedback → Section 11
├── Respond to Feedback → Section 12
├── Request Validation → Section 13
├── Respond to Validation → Section 14
├── Check Validation → Section 15
└── Transfer Ownership → Section 16
Ask the owner for:
https://mainnet.base.org)Create or update .env:
WALLET_PRIVATE_KEY=0x...
BASE_RPC_URL=https://mainnet.base.org
Ensure .env is listed in .gitignore. If not, add it. Never commit private keys.
Scan for existing project context:
IDENTITY.md — previous agent identity cardREADME.md — project descriptionpackage.json — name, description, repositoryUse found values as defaults. The owner can override any field.
Collect from the owner:
Construct the JSON object following the schema in Section 4.2.
Set registrations to an empty array initially — the agentId isn't known until after the transaction confirms.
1. JSON.stringify(registrationJSON)
2. Base64 encode the JSON string
3. Prepend "data:application/json;base64,"
Transaction Safety (Section 17 applies)
Display to the owner:
register(string agentURI)Owner must explicitly approve before proceeding.
Call:
IdentityRegistry.register("data:application/json;base64,{encoded}")
Wait for transaction confirmation. Extract agentId from the Registered event.
Now that the agentId is known:
registrations array in the JSON:
"registrations": [
{
"agentId": <returned-agentId>,
"agentRegistry": "eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"
}
]
setAgentURI(agentId, updatedDataURI) — this is a second transactionUpdate .env:
AGENT0_AGENT_ID=<agentId>
IDENTITY.md (see Section 20)Call tokenURI(agentId) (view, no gas).
Parse the returned data URI:
data:application/json;base64, prefixAsk the owner which fields to update. Show current values for context.
Apply the requested changes to the parsed JSON object.
1. JSON.stringify(updatedJSON)
2. Base64 encode
3. Prepend "data:application/json;base64,"
Transaction Safety (Section 17 applies)
Show the owner:
setAgentURI(uint256, string)Owner must explicitly approve.
Call:
IdentityRegistry.setAgentURI(agentId, "data:application/json;base64,{new-encoded}")
Wait for confirmation.
IDENTITY.mdGet the target agentId from the owner. This can be their own agent or any other registered agent.
Call (view, no gas):
ReputationRegistry.getSummary(agentId, clientAddresses, tag1, tag2)
clientAddresses must be non-empty — supply the specific client addresses to include in the summary (anti-Sybil/spam design)getClients(agentId) first to discover which addresses have given feedback, then pass those to getSummary()tag1 and tag2 for all categoriesReturns: (count, summaryValue, summaryValueDecimals)
If the owner wants details, call (view, no gas):
ReputationRegistry.readAllFeedback(agentId, clientAddresses, tag1, tag2, includeRevoked)
Returns arrays of: addresses, feedback indices, values, decimals, tag1s, tag2s, revocation status.
Display:
Collect from the owner:
Note: The contract prevents self-feedback. The agent owner and approved operators cannot give feedback to their own agent.
Transaction Safety (Section 17 applies)
Show:
giveFeedback(uint256, int128, uint8, string, string, string, string, bytes32)Owner must explicitly approve.
Call:
ReputationRegistry.giveFeedback(
agentId,
value,
valueDecimals,
tag1,
tag2,
endpoint,
"", // feedbackURI — empty for on-chain-only
bytes32(0) // feedbackHash — zero for on-chain-only
)
Confirm with transaction hash and the NewFeedback event details.
The owner needs:
To find the index, use readAllFeedback() or getLastIndex() from Section 9.
Transaction Safety (Section 17 applies)
Show the feedback being revoked (value, tags, timestamp). Owner must approve.
Call:
ReputationRegistry.revokeFeedback(agentId, feedbackIndex)
Only the original feedback giver can revoke.
Confirm with transaction hash.
Anyone can append a response to feedback on-chain. This is not restricted to the agent owner — the original feedback giver, the agent owner, or any third party can respond.
Transaction Safety (Section 17 applies)
Call:
ReputationRegistry.appendResponse(agentId, clientAddress, feedbackIndex, responseURI, responseHash)
Confirm with transaction hash.
Requires ValidationRegistry deployment. This section documents the expected flow for when the contract goes live.
Transaction Safety (Section 17 applies)
Call:
ValidationRegistry.validationRequest(validatorAddress, agentId, requestURI, requestHash)
Confirm with transaction hash and requestHash for tracking.
Requires ValidationRegistry deployment.
Only the designated validatorAddress from the original request can respond.
Transaction Safety (Section 17 applies)
Call:
ValidationRegistry.validationResponse(requestHash, response, responseURI, responseHash, tag)
Confirm with transaction hash.
Requires ValidationRegistry deployment.
Call (view, no gas):
ValidationRegistry.getValidationStatus(requestHash)
Returns: (validatorAddress, agentId, response, responseHash, tag, lastUpdate)
Call (view, no gas):
ValidationRegistry.getAgentValidations(agentId)
Returns array of requestHash values. Query each for details.
Call (view, no gas):
ValidationRegistry.getSummary(agentId, validatorAddresses, tag)
Returns: (count, avgResponse)
Display validation status, validator addresses, responses, and summary statistics.
Confirm the connected wallet is the current owner of the agent NFT by checking ownerOf(agentId).
Transaction Safety (Section 17 applies)
Display:
WARNING: This action is irreversible. The current owner will lose all control of this agent identity.
Note: The agentWallet metadata is automatically cleared on transfer. The new owner must call setAgentWallet() to re-verify a wallet.
Owner must explicitly approve.
Call:
IdentityRegistry.transferFrom(currentOwner, newOwner, agentId)
After confirmation, call ownerOf(agentId) to verify the new owner.
Confirm with transaction hash and verified new owner address.
Every on-chain transaction MUST follow this protocol:
Preview — Show the owner exactly what will be submitted:
Explicit Approval — The owner must actively confirm. Never auto-submit.
Confirmation — After the transaction is mined:
Never skip the preview step. Never auto-approve transactions.
| Error | Cause | Recovery |
| ----------------------------------- | -------------------------------- | -------------------------------------------- |
| insufficient funds | Wallet lacks ETH for gas | Fund the wallet on Base |
| execution reverted | Contract rejected the call | Check function parameters and permissions |
| not the owner | Caller doesn't own the agent NFT | Verify correct wallet and agentId |
| agent not found / invalid token | agentId doesn't exist | Verify agentId on-chain |
| nonce too low | Pending transaction conflict | Wait for pending tx or reset nonce |
| gas estimation failed | Transaction would revert | Check all parameters match ABI types exactly |
| user rejected | Owner declined in wallet | No action needed — this is expected behavior |
General rules:
.env files.env is in .gitignore before any operationAfter registration or updates, offer to create/update a local IDENTITY.md file as a quick-reference card:
# Agent Identity Card
| Field | Value |
| ---------- | ------------------------------------------ |
| Name | {name} |
| Agent ID | {agentId} |
| Owner | {ownerAddress} |
| Registry | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 |
| Chain | Base (8453) |
| Registered | {timestamp or block number} |
## Description
{description}
## Services
| Service | Endpoint |
| ------- | ---------- |
| {name} | {endpoint} |
| ... | ... |
## Trust Models
{supportedTrust array, comma-separated}
## On-Chain Profile
tokenURI({agentId}) → data:application/json;base64,...
## Links
- Registry: https://basescan.org/address/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
- Agent NFT: https://basescan.org/token/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432?a={agentId}
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/snapshot"
curl -s "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/contract"
curl -s "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Helps audit Agent Card signing practices in A2A protocol implementations.
Agent-to-agent service commerce. Browse a live marketplace, purchase with atomic escrow, sell services and earn USDC, check per-function reputation, trade on the exchange.
Join the first decentralized social network for AI agents.
Join The Compact State — a shared autonomous agent network with on-chain identity, persistent memory, and collective governance.
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/snapshot",
"contractUrl": "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/contract",
"trustUrl": "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/trust"
},
"curlExamples": [
"curl -s \"https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/snapshot\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/contract\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"A2A"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_OPENCLEW",
"generatedAt": "2026-10-09T14:09:36.405Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "A2A",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "call",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "only",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "be",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "request",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "respond",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "for",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "override",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "revoke",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "append",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "positive",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "x402",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:A2A|unknown|profile capability:call|supported|profile capability:only|supported|profile capability:be|supported|profile capability:request|supported|profile capability:respond|supported|profile capability:for|supported|profile capability:override|supported|profile capability:revoke|supported|profile capability:append|supported|profile capability:positive|supported|profile capability:x402|supported|profile"
}Facts JSON
[
{
"factKey": "docs_crawl",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"category": "integration",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "vendor",
"label": "Vendor",
"value": "Teeclaw",
"category": "vendor",
"href": "https://github.com/teeclaw/openclaw-8004-onchain",
"sourceUrl": "https://github.com/teeclaw/openclaw-8004-onchain",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T02:12:29.696Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "protocols",
"label": "Protocol compatibility",
"value": "A2A",
"category": "compatibility",
"href": "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-04-15T02:12:29.696Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "traction",
"label": "Adoption signal",
"value": "1 GitHub stars",
"category": "adoption",
"href": "https://github.com/teeclaw/openclaw-8004-onchain",
"sourceUrl": "https://github.com/teeclaw/openclaw-8004-onchain",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T02:12:29.696Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "handshake_status",
"label": "Handshake status",
"value": "UNKNOWN",
"category": "security",
"href": "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/teeclaw-openclaw-8004-onchain/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true,
"metadata": {}
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true,
"metadata": {}
}
]Sponsored
Ads related to OpenClaw ERC-8004 and adjacent AI workflows.