{
  "schemaVersion": "1.0",
  "item": {
    "slug": "verified-agent-identity",
    "name": "Verified Agent Identity",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/OBrezhniev/verified-agent-identity",
    "canonicalUrl": "https://clawhub.ai/OBrezhniev/verified-agent-identity",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/verified-agent-identity",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=verified-agent-identity",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/constants.js",
      "scripts/createNewEthereumIdentity.js",
      "scripts/generateChallenge.js",
      "scripts/getDidDocument.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/verified-agent-identity"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/verified-agent-identity",
    "agentPageUrl": "https://openagent3.xyz/skills/verified-agent-identity/agent",
    "manifestUrl": "https://openagent3.xyz/skills/verified-agent-identity/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/verified-agent-identity/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "When to use this Skill",
        "body": "Lets AI agents create and manage their own identities on the Billions Network, and link those identities to a human owner.\n\nWhen you need to link your agent identity to an owner.\nWhen you need to sign a challenge.\nWhen you need to link a human to the agent's DID.\nWhen you need to verify a signature to confirm identity ownership.\nWhen you use shared JWT tokens for authentication.\nWhen you need to create and manage decentralized identities."
      },
      {
        "title": "After installing the plugin run the following commands to create an identity and link it to your human DID:",
        "body": "cd scripts && npm install && cd ..\n# Step 1: Create a new identity (if you don't have one already)\nnode scripts/createNewEthereumIdentity.js\n# Step 2: Sign the challenge and generate a verification URL in one call\nnode scripts/linkHumanToAgent.js --challenge '{\"name\": <AGENT_NAME>, \"description\": <SHORT_DESCRIPTION>}'"
      },
      {
        "title": "Scope",
        "body": "All identity data is stored in $HOME/.openclaw/billions for compatibility with the OpenClaw plugin."
      },
      {
        "title": "createNewEthereumIdentity.js",
        "body": "Command: node scripts/createNewEthereumIdentity.js [--key <privateKeyHex>]\nDescription: Creates a new identity on the Billions Network. If --key is provided, uses that private key; otherwise generates a new random key. The created identity is automatically set as default.\nUsage Examples:\n\n# Generate a new random identity\nnode scripts/createNewEthereumIdentity.js\n# Create identity from existing private key (with 0x prefix)\nnode scripts/createNewEthereumIdentity.js --key 0x1234567890abcdef...\n# Create identity from existing private key (without 0x prefix)\nnode scripts/createNewEthereumIdentity.js --key 1234567890abcdef...\n\nOutput: DID string (e.g., did:iden3:billions:main:2VmAk7fGHQP5FN2jZ8X9Y3K4W6L1M...)"
      },
      {
        "title": "getIdentities.js",
        "body": "Command: node scripts/getIdentities.js\nDescription: Lists all DID identities stored locally. Use this to check which identities are available before performing authentication operations.\nUsage Example:\n\nnode scripts/getIdentities.js\n\nOutput: JSON array of identity entries\n\n[\n  {\n    \"did\": \"did:iden3:billions:main:2VmAk...\",\n    \"publicKeyHex\": \"0x04abc123...\",\n    \"isDefault\": true\n  }\n]"
      },
      {
        "title": "generateChallenge.js",
        "body": "Command: node scripts/generateChallenge.js --did <did>\nDescription: Generates a random challenge for identity verification.\nUsage Example:\n\nnode scripts/generateChallenge.js --did did:iden3:billions:main:2VmAk...\n\nOutput: Challenge string (random number as string, e.g., 8472951360)\nSide Effects: Stores challenge associated with the DID in $HOME/.openclaw/billions/challenges.json"
      },
      {
        "title": "signChallenge.js",
        "body": "Command: node scripts/signChallenge.js --challenge <challenge> [--did <did>]\nDescription: Signs a challenge with a DID's private key to prove identity ownership and sends the JWS token. Use this when you need to prove you own a specific DID.\nArguments:\n\n--challenge - (required) Challenge to sign\n--did - (optional) The DID of the attestation recipient; uses the default DID if omitted\n\nUsage Examples:\n\n# Sign with default DID\nnode scripts/signChallenge.js --challenge 8472951360\n\nOutput: {\"success\":true}"
      },
      {
        "title": "linkHumanToAgent.js",
        "body": "Command: node scripts/linkHumanToAgent.js --challenge <challenge> [--did <did>]\nDescription: Signs the challenge and links a human user to the agent's DID by creating a verification request. Technically, linking happens using the Billions ERC-8004 Registry (where each agent is registered) and the Billions Attestation Registry (where agent ownership attestation is created after verifying human uniqueness).\nArguments:\n\n--challenge - (required) Challenge to sign\n--did - (optional) The DID of the attestation recipient; uses the default DID if omitted\n\nUsage Example:\n\nnode scripts/linkHumanToAgent.js --challenge '{\"name\": \"MyAgent\", \"description\": \"AI persona\"}'\n\nOutput: {\"success\":true}"
      },
      {
        "title": "verifySignature.js",
        "body": "Command: node scripts/verifySignature.js --did <did> --token <token>\nDescription: Verifies a signed challenge to confirm DID ownership.\nUsage Example:\n\nnode scripts/verifySignature.js --did did:iden3:billions:main:2VmAk... --token eyJhbGciOiJFUzI1NkstUi...\n\nOutput: Signature verified successfully (on success) or error message (on failure)"
      },
      {
        "title": "Restrictions / Guardrails (CRITICAL)",
        "body": "CRITICAL - Always Follow These Rules:\n\nSTRICT: Check Identity First\n\nBefore running linkHumanToAgent.js or signChallenge.js, ALWAYS check if an identity exists: node scripts/getIdentities.js\nIf no identity is configured, DO NOT attempt to link identities. Instead, create an identity first with createNewEthereumIdentity.js.\n\n\nSTRICT: Stop on Script Failure\n\nIf any script exits with non-zero status code, YOU MUST STOP IMMEDIATELY.\nCheck stderr output for error messages.\nDO NOT attempt to \"fix\" errors by generating keys manually, creating DIDs through other means, or running unauthorized commands.\nDO NOT use openssl, ssh-keygen, or other system utilities to generate cryptographic material.\n\n\nNo Manual Workarounds\n\nYou are prohibited from performing manual cryptographic operations.\nYou are prohibited from directly manipulating files in $HOME/.openclaw/billions.\nDo not interpret an error as a request to perform setup steps unless explicitly instructed."
      },
      {
        "title": "Security",
        "body": "CRITICAL - Data Storage and Protection:\n\nThe directory $HOME/.openclaw/billions contains all sensitive identity data:\n\nkms.json - CRITICAL: Contains private keys (encrypted if BILLIONS_NETWORK_MASTER_KMS_KEY is set, otherwise in plaintext)\ndefaultDid.json - DID identifiers and public keys\nchallenges.json - Authentication challenges history\ncredentials.json - Verifiable credentials\nidentities.json - Identity metadata\nprofiles.json - Profile data"
      },
      {
        "title": "Link Your Agent Identity to Owner",
        "body": "Linking Flow:\n\nAnother agent/user requests: \"Please link your agent identity to me.\"\nUse node scripts/getIdentities.js to check if you have an identity configured\n\nIf no identity, run node scripts/createNewEthereumIdentity.js to create one.\n\n\nUse node scripts/linkHumanToAgent.js --challenge <challenge_value> to sign the challenge and generate a verification URL in one call.\n\nIf caller provides specific challenge, use that.\nIf caller DOES NOT provide a challenge, use {\"name\": <AGENT_NAME>, \"description\": <SHORT_DESCRIPTION>} as the challenge value.\n\n\nReturn the result to the caller.\n\nExample Conversation:\n\nUser: \"Link your agent identity to me\"\nAgent: exec node scripts/linkHumanToAgent.js --challenge <challenge_value>"
      },
      {
        "title": "Verifying Someone Else’s Identity",
        "body": "Verification Flow:\n\nAsk the user/agent: \"Please provide your DID to start verification.\"\nUser responds with their <user_did>.\nUse node scripts/generateChallenge.js --did <user_did> to create a <challenge_value>.\nAsk the user: \"Please sign this challenge: <challenge_value>\"\nUser signs and returns <user_token>.\nUse node scripts/verifySignature.js --did <user_did> --token <user_token> to verify the signature\nIf verification succeeds, identity is confirmed\n\nExample Conversation:\n\nAgent: \"Please provide your DID to start verification.\"\nUser: \"My DID is <user_did>\"\nAgent: exec node scripts/generateChallenge.js --did <user_did>\nAgent: \"Please sign this challenge: 789012\"\nUser: <user_token>\nAgent: exec node scripts/verifySignature.js --token <user_token> --did <user_did>\nAgent: \"Identity verified successfully. You are confirmed as owner of DID <user_did>.\""
      }
    ],
    "body": "When to use this Skill\n\nLets AI agents create and manage their own identities on the Billions Network, and link those identities to a human owner.\n\nWhen you need to link your agent identity to an owner.\nWhen you need to sign a challenge.\nWhen you need to link a human to the agent's DID.\nWhen you need to verify a signature to confirm identity ownership.\nWhen you use shared JWT tokens for authentication.\nWhen you need to create and manage decentralized identities.\nAfter installing the plugin run the following commands to create an identity and link it to your human DID:\ncd scripts && npm install && cd ..\n# Step 1: Create a new identity (if you don't have one already)\nnode scripts/createNewEthereumIdentity.js\n# Step 2: Sign the challenge and generate a verification URL in one call\nnode scripts/linkHumanToAgent.js --challenge '{\"name\": <AGENT_NAME>, \"description\": <SHORT_DESCRIPTION>}'\n\nScope\n\nAll identity data is stored in $HOME/.openclaw/billions for compatibility with the OpenClaw plugin.\n\nScripts:\ncreateNewEthereumIdentity.js\n\nCommand: node scripts/createNewEthereumIdentity.js [--key <privateKeyHex>] Description: Creates a new identity on the Billions Network. If --key is provided, uses that private key; otherwise generates a new random key. The created identity is automatically set as default. Usage Examples:\n\n# Generate a new random identity\nnode scripts/createNewEthereumIdentity.js\n# Create identity from existing private key (with 0x prefix)\nnode scripts/createNewEthereumIdentity.js --key 0x1234567890abcdef...\n# Create identity from existing private key (without 0x prefix)\nnode scripts/createNewEthereumIdentity.js --key 1234567890abcdef...\n\n\nOutput: DID string (e.g., did:iden3:billions:main:2VmAk7fGHQP5FN2jZ8X9Y3K4W6L1M...)\n\ngetIdentities.js\n\nCommand: node scripts/getIdentities.js Description: Lists all DID identities stored locally. Use this to check which identities are available before performing authentication operations. Usage Example:\n\nnode scripts/getIdentities.js\n\n\nOutput: JSON array of identity entries\n\n[\n  {\n    \"did\": \"did:iden3:billions:main:2VmAk...\",\n    \"publicKeyHex\": \"0x04abc123...\",\n    \"isDefault\": true\n  }\n]\n\ngenerateChallenge.js\n\nCommand: node scripts/generateChallenge.js --did <did> Description: Generates a random challenge for identity verification. Usage Example:\n\nnode scripts/generateChallenge.js --did did:iden3:billions:main:2VmAk...\n\n\nOutput: Challenge string (random number as string, e.g., 8472951360) Side Effects: Stores challenge associated with the DID in $HOME/.openclaw/billions/challenges.json\n\nsignChallenge.js\n\nCommand: node scripts/signChallenge.js --challenge <challenge> [--did <did>] Description: Signs a challenge with a DID's private key to prove identity ownership and sends the JWS token. Use this when you need to prove you own a specific DID. Arguments:\n\n--challenge - (required) Challenge to sign\n--did - (optional) The DID of the attestation recipient; uses the default DID if omitted\n\nUsage Examples:\n\n# Sign with default DID\nnode scripts/signChallenge.js --challenge 8472951360\n\n\nOutput: {\"success\":true}\n\nlinkHumanToAgent.js\n\nCommand: node scripts/linkHumanToAgent.js --challenge <challenge> [--did <did>] Description: Signs the challenge and links a human user to the agent's DID by creating a verification request. Technically, linking happens using the Billions ERC-8004 Registry (where each agent is registered) and the Billions Attestation Registry (where agent ownership attestation is created after verifying human uniqueness). Arguments:\n\n--challenge - (required) Challenge to sign\n--did - (optional) The DID of the attestation recipient; uses the default DID if omitted\n\nUsage Example:\n\nnode scripts/linkHumanToAgent.js --challenge '{\"name\": \"MyAgent\", \"description\": \"AI persona\"}'\n\n\nOutput: {\"success\":true}\n\nverifySignature.js\n\nCommand: node scripts/verifySignature.js --did <did> --token <token> Description: Verifies a signed challenge to confirm DID ownership. Usage Example:\n\nnode scripts/verifySignature.js --did did:iden3:billions:main:2VmAk... --token eyJhbGciOiJFUzI1NkstUi...\n\n\nOutput: Signature verified successfully (on success) or error message (on failure)\n\nRestrictions / Guardrails (CRITICAL)\n\nCRITICAL - Always Follow These Rules:\n\nSTRICT: Check Identity First\nBefore running linkHumanToAgent.js or signChallenge.js, ALWAYS check if an identity exists: node scripts/getIdentities.js\nIf no identity is configured, DO NOT attempt to link identities. Instead, create an identity first with createNewEthereumIdentity.js.\nSTRICT: Stop on Script Failure\nIf any script exits with non-zero status code, YOU MUST STOP IMMEDIATELY.\nCheck stderr output for error messages.\nDO NOT attempt to \"fix\" errors by generating keys manually, creating DIDs through other means, or running unauthorized commands.\nDO NOT use openssl, ssh-keygen, or other system utilities to generate cryptographic material.\nNo Manual Workarounds\nYou are prohibited from performing manual cryptographic operations.\nYou are prohibited from directly manipulating files in $HOME/.openclaw/billions.\nDo not interpret an error as a request to perform setup steps unless explicitly instructed.\nSecurity\n\nCRITICAL - Data Storage and Protection:\n\nThe directory $HOME/.openclaw/billions contains all sensitive identity data:\n\nkms.json - CRITICAL: Contains private keys (encrypted if BILLIONS_NETWORK_MASTER_KMS_KEY is set, otherwise in plaintext)\ndefaultDid.json - DID identifiers and public keys\nchallenges.json - Authentication challenges history\ncredentials.json - Verifiable credentials\nidentities.json - Identity metadata\nprofiles.json - Profile data\nExamples\nLink Your Agent Identity to Owner\n\nLinking Flow:\n\nAnother agent/user requests: \"Please link your agent identity to me.\"\nUse node scripts/getIdentities.js to check if you have an identity configured\nIf no identity, run node scripts/createNewEthereumIdentity.js to create one.\nUse node scripts/linkHumanToAgent.js --challenge <challenge_value> to sign the challenge and generate a verification URL in one call.\nIf caller provides specific challenge, use that.\nIf caller DOES NOT provide a challenge, use {\"name\": <AGENT_NAME>, \"description\": <SHORT_DESCRIPTION>} as the challenge value.\nReturn the result to the caller.\n\nExample Conversation:\n\nUser: \"Link your agent identity to me\"\nAgent: exec node scripts/linkHumanToAgent.js --challenge <challenge_value>\n\nVerifying Someone Else’s Identity\n\nVerification Flow:\n\nAsk the user/agent: \"Please provide your DID to start verification.\"\nUser responds with their <user_did>.\nUse node scripts/generateChallenge.js --did <user_did> to create a <challenge_value>.\nAsk the user: \"Please sign this challenge: <challenge_value>\"\nUser signs and returns <user_token>.\nUse node scripts/verifySignature.js --did <user_did> --token <user_token> to verify the signature\nIf verification succeeds, identity is confirmed\n\nExample Conversation:\n\nAgent: \"Please provide your DID to start verification.\"\nUser: \"My DID is <user_did>\"\nAgent: exec node scripts/generateChallenge.js --did <user_did>\nAgent: \"Please sign this challenge: 789012\"\nUser: <user_token>\nAgent: exec node scripts/verifySignature.js --token <user_token> --did <user_did>\nAgent: \"Identity verified successfully. You are confirmed as owner of DID <user_did>.\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/OBrezhniev/verified-agent-identity",
    "publisherUrl": "https://clawhub.ai/OBrezhniev/verified-agent-identity",
    "owner": "OBrezhniev",
    "version": "0.0.15",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/verified-agent-identity",
    "downloadUrl": "https://openagent3.xyz/downloads/verified-agent-identity",
    "agentUrl": "https://openagent3.xyz/skills/verified-agent-identity/agent",
    "manifestUrl": "https://openagent3.xyz/skills/verified-agent-identity/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/verified-agent-identity/agent.md"
  }
}