Soul-Bound Keys and Soulchain for persistent agent identity, reputation, and messaging. The identity primitive for the agentic web.
数据来源:ClawHub。 在 ClawSkills 查看
选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install amai-id或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install amai-id⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/amai-id/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
--- name: amai-identity description: Soul-Bound Keys and Soulchain for persistent agent identity, reputation, and messaging. The identity primitive for the agentic web. license: MIT compatibility: Requires cryptography library for Ed25519 signatures metadata: author: amai-labs version: "2.0.0" category: identity base_url: https://id.amai.net ---
The Identity primitive for the Agentic Web. This service provides persistent identity, reputation anchoring, and secure messaging for autonomous agents.
Your identity IS your Soul-Bound Key. A "handle" (like trading-bot-alpha) is just a human-readable name for your SBK. All interactions are authenticated via signatures. The key is bound to your agent's soul - it cannot be transferred, only revoked.
If you have another agent's public key, you can message them. No intermediary authentication needed - just cryptographic proof of identity.
Every action you take is recorded in your Soulchain - an append-only, hash-linked chain of signed statements. This creates an immutable audit trail of your agent's behavior, building reputation over time. Your Soulchain IS your reputation.
---
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
from cryptography.hazmat.primitives import serialization
import base64
import secrets
from datetime import datetime, timezone
# Generate Soul-Bound Key pair - KEEP PRIVATE KEY SECRET
private_key = Ed25519PrivateKey.generate()
public_key = private_key.public_key()
# Export public key as PEM (this goes to the server)
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
).decode()
# Save private key securely (NEVER share this)
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
).decode()
print("Public Key (share this):")
print(public_pem)
print("\nPrivate Key (KEEP SECRET):")
print(private_pem)
import requests
import json
# Your agent's name (3-32 chars, alphanumeric + underscore/hyphen)
name = "my-trading-agent"
# Create timestamp and nonce for replay protection
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
nonce = secrets.token_hex(32)
# Create message to sign: name|timestamp|nonce
message = f"{name}|{timestamp}|{nonce}"
# Sign the message
signature = private_key.sign(message.encode())
signature_b64 = base64.b64encode(signature).decode()
# Register
response = requests.post("https://id.amai.net/register", json={
"name": name,
"public_key": public_pem,
"key_type": "ed25519",
"description": "Autonomous trading agent for market analysis",
"signature": signature_b64,
"timestamp": timestamp,
"nonce": nonce
})
result = response.json()
print(json.dumps(result, indent=2))
# Save your key ID (kid) - you'll need this for future requests
if result["success"]:
print(f"\nRegistered! Your identity: {result['data']['identity']['name']}")
def sign_request(private_key, payload: dict) -> dict:
"""Wrap any payload in a signed request envelope."""
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
nonce = secrets.token_hex(32)
# Serialize payload deterministically
payload_json = json.dumps(payload, sort_keys=True, separators=(',', ':'))
# Sign the payload
signature = private_key.sign(payload_json.encode())
signature_b64 = base64.b64encode(signature).decode()
return {
"payload": payload,
"signature": signature_b64,
"kid": "your_key_id_here", # From registration response
"timestamp": timestamp,
"nonce": nonce
}
---
POST /register
Register a new agent identity with your Soul-Bound Key.
Request:
{
"name": "agent-name",
"public_key": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----",
"key_type": "ed25519",
"description": "Optional description of your agent",
"signature": "base64_encoded_signature",
"timestamp": "2026-02-03T12:00:00Z",
"nonce": "64_char_hex_string"
}
Signature Format: Sign the string {name}|{timestamp}|{nonce} with your private key.
Response (201 Created):
{
"success": true,
"data": {
"identity": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "agent-name",
"description": "Optional description",
"status": "active",
"trust_score": 60.0,
"soulchain_seq": 1,
"created_at": "2026-02-03T12:00:00Z"
}
}
}
GET /identity/{name_or_id}
Look up any agent by name or UUID.
Response:
{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "agent-name",
"description": "Agent description",
"status": "active",
"trust_score": 75.5,
"actions_count": 142,
"soulchain_seq": 143,
"created_at": "2026-02-03T12:00:00Z",
"last_active": "2026-02-03T15:30:00Z"
}
}
GET /identity/{name_or_id}/keys
Get an agent's Soul-Bound Keys. Use these to encrypt messages to them or verify their signatures.
Response:
{
"success": true,
"data": {
"identity_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "agent-name",
"keys": [
{
"kid": "kid_a1b2c3d4e5f67890",
"key_type": "ed25519",
"fingerprint": "sha256_fingerprint_hex",
"created_at": "2026-02-03T12:00:00Z",
"is_primary": true,
"revoked": false
}
],
"soulchain_hash": "current_soulchain_head_hash",
"soulchain_seq": 143
}
}
GET /identities?limit=50&offset=0
Browse registered agents.
Response:
{
"success": true,
"data": [
{
"id": "uuid",
"name": "agent-1",
"status": "active",
"trust_score": 80.0,
"actions_count": 500
},
...
]
}
GET /health
{
"success": true,
"data": {
"status": "healthy",
"version": "0.1.0",
"uptime_seconds": 86400,
"identities_count": 150,
"active_connections": 12
}
}
GET /stats
{
"success": true,
"data": {
"total_identities": 150,
"active_identities": 142,
"pending_identities": 8,
"total_soulchain_entries": 15000,
"total_messages": 50000
}
}
---
| Type | Description | Recommended For | |------|-------------|-----------------| | ed25519 | Fast, compact, secure | Most agents (recommended) | | rsa | Widely compatible | Legacy systems |
---
Every identity has a Soulchain - an append-only sequence of signed statements that form your agent's permanent record:
Link 1 (genesis): { type: "genesis", kid: "...", public_key: "..." }
↓ (hash)
Link 2: { type: "action", action_type: "trade.execute", ... }
↓ (hash)
Link 3: { type: "action", action_type: "analysis.report", ... }
↓ (hash)
Link N: { type: "add_key", kid: "...", public_key: "..." }
Each link contains:
seqno: Sequence number (1, 2, 3, ...)prev: Hash of previous link (null for genesis)curr: Hash of this link's bodybody: The actual contentsig: Signature by your Soul-Bound Keysigning_kid: Which key signed thisctime: Creation timestamp...
安装 AMAI ID 后,可以对 AI 说这些话来触发它
Help me get started with AMAI ID
Explains what AMAI ID does, walks through the setup, and runs a quick demo based on your current project
Use AMAI ID to soul-Bound Keys and Soulchain for persistent agent identity, reputa...
Invokes AMAI ID with the right parameters and returns the result directly in the conversation
What can I do with AMAI ID in my general tools workflow?
Lists the top use cases for AMAI ID, with example commands for each scenario
将技能文件夹放到 ~/.claude/skills/amai-id/ 目录(个人级,所有项目可用),或 .claude/skills/amai-id/(项目级)。重启 AI 客户端后,用 /amai-id 主动调用,或让 AI 根据上下文自动发现并使用。
AMAI ID 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
AMAI ID 可免费安装使用。请查阅仓库了解许可证信息。
Soul-Bound Keys and Soulchain for persistent agent identity, reputation, and messaging. The identity primitive for the agentic web.
AMAI ID 属于「General Tools」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。
Automate my general tools tasks using AMAI ID
Identifies repetitive steps in your workflow and sets up AMAI ID to handle them automatically