Identity-Gated Signing for AI Agent Wallets
Every AI agent needs a wallet. Open Wallet Standard (OWS) solves that — wallets that work across chains, frameworks, and platforms.
But a wallet without identity is a liability:
- Anonymous agents can drain funds with zero accountability
- No trust layer — every transaction is a leap of faith
- No reputation — good actors and bad actors look identical
- No audit trail — can’t trace actions back to an identity
OWS gives agents wallets. SAID gives agents identity, reputation, and trust.
SAID Protocol is on-chain agent identity infrastructure on Solana:
- ✅ 2,651 registered agents
- ✅ 2,591 verified agents (97.7%)
- ✅ 6-component composite trust scores
- ✅ Tier system: Anonymous → Registered → Verified → Trusted → Elite
- ✅ Live API at
api.saidprotocol.com
This plugin brings SAID into the OWS policy engine:
- Wallets can require SAID identity before signing
- Gate on verification — unverified agents blocked
- Gate on trust score — low-trust agents restricted
- Dynamic spending limits based on tier
Before signing any transaction, the SAID policy checks:
Agent requests a transaction
↓
OWS policy engine runs pre-sign checks
↓
SAID plugin verifies via API:
✅ Does this wallet have a SAID identity?
✅ Is the agent verified?
✅ What’s the trust score? (6-component breakdown)
✅ Is the transaction within spending limits?
↓
All checks pass → OWS signs the transaction
Any check fails → Signing denied with reason
SAID computes a composite trust score (0-100) from 6 components:
| Component | Weight | Description |
|---|---|---|
identity |
30% | Verification + profile completeness |
activity |
20% | Feedback count + interactions |
economic |
20% | Reputation score + passport NFT |
ecosystem |
15% | Endpoints (MCP/A2A) + skills |
longevity |
10% | Account age |
fairscale |
5% | External reputation integration |
Spending Tiers (research-backed defaults):
| Tier | Per-tx Limit | Daily Cap | Requirements |
|---|---|---|---|
| Anonymous | $0.50 | $5 | No SAID identity |
| Registered | $5 | $25 | Registered, not verified |
| Verified | $50 | $250 | Verified, trust score <50 |
| Trusted | $250 | $1,000 | Verified, trust score 50-79 |
| Elite | $1,000 | $5,000 | Verified, trust score 80+ |
Our Verified tier ($50/tx) matches Coinbase AgentKit’s default per-transaction limit. Limits are configurable per platform.
import { SAIDPolicy } from "said-ows-policy";
// Strict: Verified + high trust score
const strict = new SAIDPolicy({
requireVerified: true,
minTrustScore: 50, // Trusted tier minimum
useDynamicLimits: true,
blockAnonymous: true,
});
// Relaxed: Allow anyone, dynamic limits by tier
const relaxed = new SAIDPolicy({
requireVerified: false,
useDynamicLimits: true,
});npm install said-ows-policyimport { SAIDPolicy } from "said-ows-policy";
const policy = new SAIDPolicy({
requireVerified: true,
minTrustScore: 50, // Trusted tier or above
useDynamicLimits: true,
});
const result = await policy.evaluate({
signerAddress: "4yNvqCyocbyqMVWQsztXaW5iZAsnb8wQy8Ghg58uSN9Q",
amountUSD: 25,
});
if (result.allowed) {
console.log("✅ Allowed");
console.log("Tier:", result.metadata.agentTier); // "Verified"
console.log("Per-tx limit:", result.metadata.spendingLimit); // 50
console.log("Trust score:", result.metadata.trustScore); // 39
} else {
console.log("❌ Denied:", result.reason);
}For integration with OWS’s custom executable policy slot:
# Install dependencies
npm install
# Build
npm run build
# Run CLI (reads JSON from stdin, outputs JSON to stdout)
echo '{"signerAddress":"4yNvqCyocbyqMVWQsztXaW5iZAsnb8wQy8Ghg58uSN9Q","amountUSD":50}' | node dist/cli.jsOutput format:
{
"allowed": true,
"metadata": {
"agentTier": "Verified",
"spendingLimit": 50,
"trustScore": 39,
"isVerified": true
}
}This CLI format is exactly what OWS expects for external policy executables.
Run the included demo to see SAID policy in action:
npm install
npm run demoThe /api/verify/{wallet} endpoint returns:
{
"registered": true,
"verified": true,
"wallet": "4yNvqCyocbyqMVWQsztXaW5iZAsnb8wQy8Ghg58uSN9Q",
"trustScore": {
"score": 39,
"tier": "bronze",
"badges": ["verified"],
"sources": ["said"],
"identity": 8,
"activity": 0,
"economic": 3,
"ecosystem": 3,
"longevity": 4,
"fairscale": 0,
"computedAt": "2026-04-04T01:52:30.657Z"
},
"identity": { "name": "Kai", "twitter": "kaiclawd" },
"reputation": { "score": 0, "feedbackCount": 0, "trustTier": "medium" }
}This module is designed to slot into OWS’s custom executable policy mechanism:
- OWS supports custom policy executables that read JSON from stdin and output JSON to stdout
- Our CLI wrapper (
cli.ts) implements this interface - OWS calls the executable before each transaction
- The executable queries SAID’s API and returns allow/deny decision
Architecture:
┌─────────────────┐
│ OWS Wallet │
└────────┬────────┘
│
│ Pre-sign check
↓
┌─────────────────┐
│ SAID Policy │
│ Executable │
│ (CLI wrapper) │
└────────┬────────┘
│
│ API call
↓
┌─────────────────┐
│ SAID Protocol │
│ API │
│ api.said │
│ protocol.com │
└─────────────────┘
- Mainnet Program:
5dpw6KEQPn248pnkkaYyWfHwu2nfb3LUMbTucb6LaA8G - Registered Agents: 2,651
- Verified Agents: 2,591 (97.7%)
- Registration: Free
- Verification: 0.01 SOL
- Website: saidprotocol.com
- API: api.saidprotocol.com
MIT
Open Wallet Standard Hackathon, April 3-4, 2026
Track 2: Agent Spend Governance & Identity
OWS gives agents wallets. SAID gives them identity and trust. Together: accountability for the agent economy.
2,651 agents already registered on SAID. This plugin makes their identities portable to every OWS wallet, on every chain.