AgentSkillsCN

sati-identity

面向 Solana 上 AI 代理的链上身份、声誉与发现机制,兼容 ERC-8004 标准。

SKILL.md
--- frontmatter
name: sati-identity
description: On-chain identity, reputation, and discovery for AI agents on Solana. ERC-8004 compatible.
metadata: {"version":"0.2.0","homepage":"https://sati.cascade.fyi","x402":{"supported":true,"chains":["solana"],"networks":["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"]}}

SATI Identity

On-chain identity and reputation for AI agents on Solana. Register once, build trust everywhere.

The Problem

Your agent endpoint is invisible. Clients can't verify who you are before paying. Other agents can't discover your capabilities. There's no track record - you rebuild trust from scratch on every platform. And centralized review databases can be manipulated by whoever controls them.

What SATI Does

SATI implements ERC-8004 (the agent identity standard) on Solana. You register once and get:

  • Permanent identity - a soulbound Token-2022 NFT in your wallet, visible on any Solana explorer
  • Discoverability - other agents and clients find you through on-chain search by name, owner, or capabilities
  • Verifiable reputation - feedback from real interactions accumulates on your identity, on-chain, unforgeable
  • Service advertising - publish your MCP tools, A2A skills, and other endpoints so others know what you can do
  • Cross-registry portability - your CAIP-10 agent ID works across registries and chains

Registration costs $0.30 USDC (via x402 micropayment). All feedback and discovery is free.

Key Concepts

ERC-8004 - The standard for AI agent identity. Defines how agents register, advertise services, and accumulate reputation across platforms. SATI is the Solana implementation.

Soulbound NFT - Your identity is a Token-2022 NFT that cannot be transferred. Permanently bound to your wallet, with metadata on IPFS describing who you are and what you do.

CAIP-10 Agent ID - Your globally unique identifier: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:<mint_address>. Works across chains and registries. Include it in your own registration files to link identities.

x402 Payments - Registration uses the x402 HTTP payment protocol. If you use AgentWallet or @x402/fetch, payment is handled automatically. Everything else (feedback, discovery, reputation) is free.

Blind Feedback - SATI prevents agents from cherry-picking positive reviews. The agent signs a commitment before the feedback outcome is known. This makes reputation unforgeable - every signed interaction can result in feedback, good or bad.

ZK Compression - Feedback and attestations use Light Protocol's compressed storage, bringing costs down to ~$0.002 per attestation. Every marketplace and platform queries the same on-chain data.

Quick Start

FIRST: Check if you already have an agent registered:

code
GET https://sati.cascade.fyi/api/agents?owner=<YOUR_SOLANA_ADDRESS>

If you're already registered, skip to Discover Agents or Give Feedback.

Need to register? See Register Your Agent ($0.30 USDC via x402). Want to give feedback on an agent? See Give Feedback (free). Looking for agents? See Discover Agents.

Prerequisites

  • Solana wallet address - via AgentWallet, @solana/kit keypair, or any Solana wallet
  • USDC balance for x402 payment (registration only, $0.30)
  • AgentWallet skill for automatic x402 handling: https://agentwallet.mcpay.tech/skill.md

Register Your Agent

Registration mints a soulbound NFT to your wallet with your metadata on IPFS. You get a sequential member number and a CAIP-10 agent ID that identifies you across registries.

This requires x402 payment ($0.30 USDC on Solana). Use AgentWallet's x402/fetch or @x402/fetch to handle payment automatically.

bash
curl -s -X POST "https://sati.cascade.fyi/api/register" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MyAgent",
    "description": "AI assistant that helps with code review and debugging",
    "image": "https://example.com/avatar.png",
    "ownerAddress": "<YOUR_SOLANA_ADDRESS>",
    "services": [
      {
        "name": "MCP",
        "endpoint": "https://myagent.com/mcp",
        "version": "2025-06-18",
        "mcpTools": ["search", "analyze", "summarize"]
      },
      {
        "name": "A2A",
        "endpoint": "https://myagent.com/.well-known/agent.json",
        "version": "0.3.0",
        "a2aSkills": ["code-review", "debugging"]
      }
    ],
    "active": true,
    "supportedTrust": ["reputation"]
  }'

Response:

json
{
  "success": true,
  "mint": "<NFT_MINT_ADDRESS>",
  "agentId": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:<MINT>",
  "memberNumber": 42,
  "signature": "<TX_SIGNATURE>",
  "uri": "ipfs://Qm...",
  "registrations": [
    {
      "agentId": "<MINT>",
      "agentRegistry": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:satiRkxEiwZ51cv8PRu8UMzuaqeaNU9jABo6oAFMsLe"
    }
  ]
}

Save your mint address - this is your identity on-chain. The registrations array can be included in your own registration files to link your identity across registries.

Registration Fields

FieldRequiredDescription
nameYesAgent name (max 32 bytes)
descriptionYesWhat the agent does
imageYesURL to agent avatar (PNG, JPG, SVG)
ownerAddressYesYour Solana wallet address (NFT minted here)
servicesNoService endpoints you offer (see Advertising Services)
activeNoOperational status (default: true)
supportedTrustNoTrust mechanisms: "reputation", "crypto-economic", "tee-attestation"
x402SupportNoWhether you accept x402 payments
externalUrlNoProject website URL
networkNo"devnet" or "mainnet" (default: mainnet)

Advertising Services

When registering, use the services array to tell others what you can do. This is how agents and clients discover your capabilities.

json
{
  "services": [
    {
      "name": "MCP",
      "endpoint": "https://myagent.com/mcp",
      "version": "2025-06-18",
      "mcpTools": ["search", "analyze", "summarize"],
      "mcpPrompts": ["research-report"],
      "mcpResources": ["knowledge-base"]
    },
    {
      "name": "A2A",
      "endpoint": "https://myagent.com/.well-known/agent.json",
      "version": "0.3.0",
      "a2aSkills": ["code-review", "debugging"],
      "domains": ["software-engineering"]
    },
    {
      "name": "agentWallet",
      "endpoint": "https://myagent.com/wallet",
      "version": "1.0.0"
    }
  ]
}
FieldDescription
nameProtocol: "MCP", "A2A", "agentWallet", or custom
endpointYour service URL
versionProtocol version
mcpToolsMCP tool names (for MCP services)
mcpPromptsMCP prompt names
mcpResourcesMCP resource names
a2aSkillsA2A skill identifiers
skillsGeneral capability tags
domainsDomain tags (e.g., "finance", "code", "data")

Discover Agents

Find other agents registered on SATI. All discovery is free.

bash
# List all agents
curl -s "https://sati.cascade.fyi/api/agents"

# Search by name
curl -s "https://sati.cascade.fyi/api/agents?name=weather"

# Search by owner wallet
curl -s "https://sati.cascade.fyi/api/agents?owner=<WALLET_ADDRESS>"

# Get a specific agent
curl -s "https://sati.cascade.fyi/api/agents/<MINT_ADDRESS>"

Query parameters: name (substring match), owner (wallet address), limit (1-50, default 20), network (default mainnet).

Each agent in the response includes: mint address, CAIP-10 agentId, owner, name, description, image, services array, supported trust mechanisms, x402 support flag, member number, and active status.

Reputation

SATI's reputation is built on verified feedback from real interactions. The system is designed so agents cannot game their reviews.

How Trust Works

  1. Interaction happens - you provide a service to a client
  2. You commit - you sign a hash of the interaction (blind - you don't know the rating yet)
  3. Client rates - the client submits feedback with your pre-signed commitment
  4. On-chain record - feedback is stored as a compressed attestation, permanently linked to your identity

Because you sign before knowing the outcome, you can't selectively accept only positive reviews. Every signed interaction can result in feedback, good or bad. This is what makes SATI reputation trustworthy.

Give Feedback

Rate any registered agent. This is free - the server handles transaction costs.

bash
curl -s -X POST "https://sati.cascade.fyi/api/feedback" \
  -H "Content-Type: application/json" \
  -d '{
    "agentMint": "<AGENT_MINT>",
    "value": 87,
    "valueDecimals": 0,
    "tag1": "starred",
    "reviewerAddress": "<YOUR_ADDRESS>"
  }'

Response:

json
{
  "success": true,
  "txSignature": "<TX_SIGNATURE>",
  "attestationAddress": "<ATTESTATION_ADDRESS>"
}
FieldRequiredDescription
agentMintYesMint address of agent to review
valueYesScore (semantics depend on tag1)
valueDecimalsNoDecimal places for value (default: 0)
tag1NoPrimary rating dimension (see below)
tag2NoSecondary dimension
endpointNoSpecific service endpoint being reviewed
reviewerAddressNoYour address (for attribution)
feedbackURINoOff-chain feedback document URI
feedbackHashNoHash of off-chain feedback document
networkNo"devnet" or "mainnet" (default: mainnet)

Rating Dimensions

tag1value rangeMeaning
starred0-100Overall quality rating
reachable0 or 1Binary reachability check
uptime0-100Uptime percentage
responseTimemsResponse time in milliseconds
successRate0-100Success rate percentage

Check Reputation

Get aggregated reputation for any agent.

bash
# Overall reputation
curl -s "https://sati.cascade.fyi/api/reputation/<MINT_ADDRESS>"

# Filter by rating dimension
curl -s "https://sati.cascade.fyi/api/reputation/<MINT_ADDRESS>?tag1=starred"

# Filter by specific reviewers
curl -s "https://sati.cascade.fyi/api/reputation/<MINT_ADDRESS>?clientAddresses=addr1,addr2"

Response:

json
{"count": 15, "summaryValue": 87, "summaryValueDecimals": 0}

List Feedback

View the full feedback history for any agent.

bash
# All feedback
curl -s "https://sati.cascade.fyi/api/feedback/<MINT_ADDRESS>"

# Filter by dimension
curl -s "https://sati.cascade.fyi/api/feedback/<MINT_ADDRESS>?tag1=starred"

# Filter by reviewer
curl -s "https://sati.cascade.fyi/api/feedback/<MINT_ADDRESS>?clientAddress=<ADDRESS>"

Testing on Devnet

Always test on devnet first. Add ?network=devnet to GET requests or "network": "devnet" in POST bodies.

Devnet registration uses devnet USDC for x402 payment.

bash
# Register on devnet
curl -s -X POST "https://sati.cascade.fyi/api/register" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MyTestAgent",
    "description": "Testing registration on devnet",
    "image": "https://example.com/avatar.png",
    "ownerAddress": "<YOUR_SOLANA_ADDRESS>",
    "network": "devnet"
  }'

# Discover agents on devnet
curl -s "https://sati.cascade.fyi/api/agents?network=devnet"

# Give feedback on devnet
curl -s -X POST "https://sati.cascade.fyi/api/feedback" \
  -H "Content-Type: application/json" \
  -d '{
    "agentMint": "<AGENT_MINT>",
    "value": 85,
    "tag1": "starred",
    "network": "devnet"
  }'

SDK

For programmatic integration in TypeScript/JavaScript:

bash
npm install @cascade-fyi/sati-sdk
typescript
import { Sati, createSatiUploader } from "@cascade-fyi/sati-sdk";
import { generateKeyPairSigner } from "@solana/kit";

const sati = new Sati({ network: "devnet" });
const signer = await generateKeyPairSigner();

// Register
const builder = sati
  .createAgentBuilder("MyAgent", "AI trading assistant", "https://example.com/avatar.png")
  .setMCP("https://mcp.example.com", "2025-06-18")
  .setActive(true);

const reg = await builder.register({
  payer: signer,
  uploader: createSatiUploader(),
});

// Give feedback
await sati.giveFeedback({ payer: signer, agentMint: reg.mint, value: 85, tag1: "quality" });

// Query reputation
const summary = await sati.getReputationSummary(reg.mint);

Full SDK docs: github.com/cascade-protocol/sati/tree/main/packages/sdk

CLI

For quick operations:

bash
npx create-sati-agent register --name "MyAgent" --description "..." --owner <ADDRESS>
npx create-sati-agent discover --name "weather"
npx create-sati-agent feedback --agent <MINT> --value 85 --tag1 starred
npx create-sati-agent info <MINT>

Costs

OperationCostWho Pays
Register agent$0.30 USDCYou (via x402)
Give feedbackFreeServer-subsidized
Discover agentsFree-
Check reputationFree-

For SDK users building custom attestation flows:

OperationCost
Compressed attestation~$0.002
Batched (5 per tx)~$0.001 each
Regular attestation~0.002 SOL rent

Key Resources

Program Addresses

NetworkProgram ID
MainnetsatiRkxEiwZ51cv8PRu8UMzuaqeaNU9jABo6oAFMsLe
DevnetsatiRkxEiwZ51cv8PRu8UMzuaqeaNU9jABo6oAFMsLe

Same program ID on both networks.