{
  "schemaVersion": "1.0",
  "item": {
    "slug": "get-hba",
    "name": "Get a clank.money Human Bitcoin Address",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/matbalez/get-hba",
    "canonicalUrl": "https://clawhub.ai/matbalez/get-hba",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/get-hba",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=get-hba",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "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. 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. 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/get-hba"
    },
    "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/get-hba",
    "agentPageUrl": "https://openagent3.xyz/skills/get-hba/agent",
    "manifestUrl": "https://openagent3.xyz/skills/get-hba/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/get-hba/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Clank Human Bitcoin Address Skill",
        "body": "Use this skill to register and update a Human Bitcoin Address under clank.money (BIP-353 DNS payment instructions pointing to a BIP-321 URI)."
      },
      {
        "title": "CRITICAL FIRST",
        "body": "managementToken is returned after successful paid registration (201 or 202).\nYou must save managementToken immediately and securely.\nCRITICAL: If the token is lost, future updates to that address cannot be authenticated."
      },
      {
        "title": "API Endpoints",
        "body": "POST https://clank.money/api/v1/registrations\nGET https://clank.money/api/v1/registrations/{username}\nPATCH https://clank.money/api/v1/registrations/{username}"
      },
      {
        "title": "Required Registration Input",
        "body": "username\n\nlowercase letters, digits, hyphens\n3 to 32 chars\ncannot start/end with -\n\n\nbip321Uri\n\nrequired\nmust start with bitcoin:\nshould be valid BIP-321\nstrongly suggested: include a BOLT12 offer (lno=...)"
      },
      {
        "title": "Strict Registration Checklist",
        "body": "Registration price is 999 sats.\n\nSubmit unauthenticated registration request (POST /api/v1/registrations).\n\nOutput: either 409 username_unavailable or 402 payment_required.\n\n\nIf 409, pick another username and repeat step 1.\n\nOutput: 402 payment_required response.\n\n\nRead L402 challenge values from 402 response: macaroon, invoice, paymentHash, amountSats, expiresAt.\n\nOutput: invoice + macaroon.\n\n\nPay the Lightning invoice and obtain preimage.\n\nOutput: payment preimage.\n\n\nRetry the exact same POST /api/v1/registrations with:\n\nAuthorization: L402 <macaroon>:<preimage>\nOutput: 201 or 202 with managementToken.\n\n\nSave the management token immediately.\n\nCRITICAL: If this token is lost, updates are impossible.\nOutput: secure local token file."
      },
      {
        "title": "Copy-Paste Happy Path (Bash)",
        "body": "set -euo pipefail\n\nBASE=\"https://clank.money\"\nUSERNAME=\"satoshi\"\nBIP321_URI='bitcoin:?lno=lno1examplebolt12offer'\nTOKEN_FILE=\"$HOME/.clank/${USERNAME}.management_token\"\n\nmkdir -p \"$(dirname \"$TOKEN_FILE\")\"\n\n# 1) Create challenge (or fail fast if name taken)\ncurl -sS -X POST \"$BASE/api/v1/registrations\" \\\n  -H \"content-type: application/json\" \\\n  --data \"{\\\"username\\\":\\\"$USERNAME\\\",\\\"bip321Uri\\\":\\\"$BIP321_URI\\\"}\" \\\n  > /tmp/clank_register_challenge.json\n\nERROR_CODE=\"$(python3 -c 'import json; d=json.load(open(\"/tmp/clank_register_challenge.json\")); e=d.get(\"error\"); print((e.get(\"code\") if isinstance(e,dict) else e) or \"\")')\"\nif [ \"$ERROR_CODE\" = \"username_unavailable\" ]; then\n  echo \"Username is taken. Pick another USERNAME and rerun.\"\n  exit 1\nfi\nif [ \"$ERROR_CODE\" != \"payment_required\" ]; then\n  echo \"Unexpected challenge response:\"\n  cat /tmp/clank_register_challenge.json\n  exit 1\nfi\n\nMACAROON=\"$(python3 -c 'import json; print(json.load(open(\"/tmp/clank_register_challenge.json\"))[\"macaroon\"])')\"\nINVOICE=\"$(python3 -c 'import json; print(json.load(open(\"/tmp/clank_register_challenge.json\"))[\"invoice\"])')\"\necho \"Pay this invoice now:\"\necho \"$INVOICE\"\n\n# 2) After payment, paste your preimage\nread -r -p \"PASTE_PREIMAGE=\" PREIMAGE\n\n# 3) Complete paid registration\ncurl -sS -X POST \"$BASE/api/v1/registrations\" \\\n  -H \"content-type: application/json\" \\\n  -H \"Authorization: L402 $MACAROON:$PREIMAGE\" \\\n  --data \"{\\\"username\\\":\\\"$USERNAME\\\",\\\"bip321Uri\\\":\\\"$BIP321_URI\\\"}\" \\\n  > /tmp/clank_register_result.json\n\nMGMT=\"$(python3 -c 'import json; d=json.load(open(\"/tmp/clank_register_result.json\")); print(d.get(\"managementToken\",\"\"))')\"\nif [ -z \"$MGMT\" ]; then\n  echo \"No managementToken in final response:\"\n  cat /tmp/clank_register_result.json\n  exit 1\nfi\n\n# 4) CRITICAL: persist token securely for future updates\nprintf '%s\\n' \"$MGMT\" > \"$TOKEN_FILE\"\nchmod 600 \"$TOKEN_FILE\"\necho \"Saved management token to $TOKEN_FILE\""
      },
      {
        "title": "Update Flow",
        "body": "Load stored token from your secure file.\nCall PATCH /api/v1/registrations/{username} with:\n\nAuthorization: Bearer <managementToken>\nJSON body with new bip321Uri\n\nExample:\n\nUSERNAME=\"satoshi\"\nTOKEN_FILE=\"$HOME/.clank/${USERNAME}.management_token\"\nNEW_BIP321='bitcoin:?lno=lno1newbolt12offer'\nMGMT=\"$(cat \"$TOKEN_FILE\")\"\n\ncurl -sS -X PATCH \"https://clank.money/api/v1/registrations/$USERNAME\" \\\n  -H \"content-type: application/json\" \\\n  -H \"Authorization: Bearer $MGMT\" \\\n  --data \"{\\\"bip321Uri\\\":\\\"$NEW_BIP321\\\"}\""
      }
    ],
    "body": "Clank Human Bitcoin Address Skill\n\nUse this skill to register and update a Human Bitcoin Address under clank.money (BIP-353 DNS payment instructions pointing to a BIP-321 URI).\n\nCRITICAL FIRST\nmanagementToken is returned after successful paid registration (201 or 202).\nYou must save managementToken immediately and securely.\nCRITICAL: If the token is lost, future updates to that address cannot be authenticated.\nAPI Endpoints\nPOST https://clank.money/api/v1/registrations\nGET https://clank.money/api/v1/registrations/{username}\nPATCH https://clank.money/api/v1/registrations/{username}\nRequired Registration Input\nusername\nlowercase letters, digits, hyphens\n3 to 32 chars\ncannot start/end with -\nbip321Uri\nrequired\nmust start with bitcoin:\nshould be valid BIP-321\nstrongly suggested: include a BOLT12 offer (lno=...)\nStrict Registration Checklist\n\nRegistration price is 999 sats.\n\nSubmit unauthenticated registration request (POST /api/v1/registrations).\nOutput: either 409 username_unavailable or 402 payment_required.\nIf 409, pick another username and repeat step 1.\nOutput: 402 payment_required response.\nRead L402 challenge values from 402 response: macaroon, invoice, paymentHash, amountSats, expiresAt.\nOutput: invoice + macaroon.\nPay the Lightning invoice and obtain preimage.\nOutput: payment preimage.\nRetry the exact same POST /api/v1/registrations with:\nAuthorization: L402 <macaroon>:<preimage>\nOutput: 201 or 202 with managementToken.\nSave the management token immediately.\nCRITICAL: If this token is lost, updates are impossible.\nOutput: secure local token file.\nCopy-Paste Happy Path (Bash)\nset -euo pipefail\n\nBASE=\"https://clank.money\"\nUSERNAME=\"satoshi\"\nBIP321_URI='bitcoin:?lno=lno1examplebolt12offer'\nTOKEN_FILE=\"$HOME/.clank/${USERNAME}.management_token\"\n\nmkdir -p \"$(dirname \"$TOKEN_FILE\")\"\n\n# 1) Create challenge (or fail fast if name taken)\ncurl -sS -X POST \"$BASE/api/v1/registrations\" \\\n  -H \"content-type: application/json\" \\\n  --data \"{\\\"username\\\":\\\"$USERNAME\\\",\\\"bip321Uri\\\":\\\"$BIP321_URI\\\"}\" \\\n  > /tmp/clank_register_challenge.json\n\nERROR_CODE=\"$(python3 -c 'import json; d=json.load(open(\"/tmp/clank_register_challenge.json\")); e=d.get(\"error\"); print((e.get(\"code\") if isinstance(e,dict) else e) or \"\")')\"\nif [ \"$ERROR_CODE\" = \"username_unavailable\" ]; then\n  echo \"Username is taken. Pick another USERNAME and rerun.\"\n  exit 1\nfi\nif [ \"$ERROR_CODE\" != \"payment_required\" ]; then\n  echo \"Unexpected challenge response:\"\n  cat /tmp/clank_register_challenge.json\n  exit 1\nfi\n\nMACAROON=\"$(python3 -c 'import json; print(json.load(open(\"/tmp/clank_register_challenge.json\"))[\"macaroon\"])')\"\nINVOICE=\"$(python3 -c 'import json; print(json.load(open(\"/tmp/clank_register_challenge.json\"))[\"invoice\"])')\"\necho \"Pay this invoice now:\"\necho \"$INVOICE\"\n\n# 2) After payment, paste your preimage\nread -r -p \"PASTE_PREIMAGE=\" PREIMAGE\n\n# 3) Complete paid registration\ncurl -sS -X POST \"$BASE/api/v1/registrations\" \\\n  -H \"content-type: application/json\" \\\n  -H \"Authorization: L402 $MACAROON:$PREIMAGE\" \\\n  --data \"{\\\"username\\\":\\\"$USERNAME\\\",\\\"bip321Uri\\\":\\\"$BIP321_URI\\\"}\" \\\n  > /tmp/clank_register_result.json\n\nMGMT=\"$(python3 -c 'import json; d=json.load(open(\"/tmp/clank_register_result.json\")); print(d.get(\"managementToken\",\"\"))')\"\nif [ -z \"$MGMT\" ]; then\n  echo \"No managementToken in final response:\"\n  cat /tmp/clank_register_result.json\n  exit 1\nfi\n\n# 4) CRITICAL: persist token securely for future updates\nprintf '%s\\n' \"$MGMT\" > \"$TOKEN_FILE\"\nchmod 600 \"$TOKEN_FILE\"\necho \"Saved management token to $TOKEN_FILE\"\n\nUpdate Flow\nLoad stored token from your secure file.\nCall PATCH /api/v1/registrations/{username} with:\nAuthorization: Bearer <managementToken>\nJSON body with new bip321Uri\n\nExample:\n\nUSERNAME=\"satoshi\"\nTOKEN_FILE=\"$HOME/.clank/${USERNAME}.management_token\"\nNEW_BIP321='bitcoin:?lno=lno1newbolt12offer'\nMGMT=\"$(cat \"$TOKEN_FILE\")\"\n\ncurl -sS -X PATCH \"https://clank.money/api/v1/registrations/$USERNAME\" \\\n  -H \"content-type: application/json\" \\\n  -H \"Authorization: Bearer $MGMT\" \\\n  --data \"{\\\"bip321Uri\\\":\\\"$NEW_BIP321\\\"}\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/matbalez/get-hba",
    "publisherUrl": "https://clawhub.ai/matbalez/get-hba",
    "owner": "matbalez",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/get-hba",
    "downloadUrl": "https://openagent3.xyz/downloads/get-hba",
    "agentUrl": "https://openagent3.xyz/skills/get-hba/agent",
    "manifestUrl": "https://openagent3.xyz/skills/get-hba/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/get-hba/agent.md"
  }
}