{
  "schemaVersion": "1.0",
  "item": {
    "slug": "namecheap-dns",
    "name": "Namecheap DNS",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jarekbird/namecheap-dns",
    "canonicalUrl": "https://clawhub.ai/jarekbird/namecheap-dns",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/namecheap-dns",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=namecheap-dns",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "namecheap-dns.js",
      "package-lock.json",
      "package.json"
    ],
    "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/namecheap-dns"
    },
    "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/namecheap-dns",
    "agentPageUrl": "https://openagent3.xyz/skills/namecheap-dns/agent",
    "manifestUrl": "https://openagent3.xyz/skills/namecheap-dns/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/namecheap-dns/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": "Namecheap DNS Management",
        "body": "Safe wrapper around the Namecheap API for DNS operations. Prevents accidental record wipeout by always fetching existing records first and merging changes."
      },
      {
        "title": "⚠️ Why This Skill Exists",
        "body": "The Namecheap API's setHosts method replaces ALL DNS records for a domain. One wrong API call = your entire DNS config is gone. This skill:\n\n✅ Always fetches existing records first\n✅ Merges new records with existing ones (unless explicitly replacing)\n✅ Shows a diff preview before applying changes\n✅ Auto-backups before every change\n✅ Supports dry-run mode for safe testing\n✅ One-command rollback from backups"
      },
      {
        "title": "1. Install dependencies",
        "body": "cd ~/.openclaw/workspace/skills/namecheap-dns\nnpm install"
      },
      {
        "title": "2. Enable Namecheap API access",
        "body": "Go to https://ap.www.namecheap.com/settings/tools/apiaccess/\nToggle \"API Access\" ON\nWhitelist your IP address\nCopy your API key"
      },
      {
        "title": "3. Set environment variables",
        "body": "Add to ~/.zshrc or ~/.bashrc:\n\nexport NAMECHEAP_API_KEY=\"your-api-key-here\"\nexport NAMECHEAP_USERNAME=\"your-username\"\nexport NAMECHEAP_API_USER=\"your-username\"  # Usually same as username"
      },
      {
        "title": "Verify DNS and detect ghost records",
        "body": "⚠️ IMPORTANT: Run this first!\n\n./namecheap-dns.js verify example.com\n\nThis command compares DNS records visible to the Namecheap API with actual live DNS records (via dig). It will warn you about \"ghost records\" that exist in DNS but are invisible to the API (email forwarding, URL redirects, etc.)."
      },
      {
        "title": "List current DNS records",
        "body": "./namecheap-dns.js list example.com\n\nNote: This only shows records visible to the API. Use verify to see ALL records including those managed by Namecheap subsystems."
      },
      {
        "title": "Add records (safe merge)",
        "body": "# Add a single TXT record\n./namecheap-dns.js add example.com \\\n  --txt \"mail.example.com=v=spf1 include:mailgun.org ~all\"\n\n# Add multiple records at once\n./namecheap-dns.js add example.com \\\n  --txt \"mail=v=spf1 include:mailgun.org ~all\" \\\n  --cname \"email.mail=mailgun.org\" \\\n  --mx \"mail=10 mxa.mailgun.org\"\n\n# Dry-run (preview changes without applying)\n./namecheap-dns.js add example.com \\\n  --txt \"test=hello\" \\\n  --dry-run\n\n# Force override safety check (if you know ghost records can be deleted)\n./namecheap-dns.js add example.com \\\n  --txt \"test=hello\" \\\n  --force\n\nSafety: The skill automatically checks for \"ghost records\" before making changes. If detected, it will refuse to proceed unless you use --force."
      },
      {
        "title": "Remove records",
        "body": "# Remove by host + type\n./namecheap-dns.js remove example.com \\\n  --host \"old-record\" \\\n  --type \"TXT\"\n\n# Dry-run first\n./namecheap-dns.js remove example.com \\\n  --host \"old-record\" \\\n  --type \"TXT\" \\\n  --dry-run"
      },
      {
        "title": "Backup & Restore",
        "body": "# Create manual backup\n./namecheap-dns.js backup example.com\n\n# List available backups\n./namecheap-dns.js backups example.com\n\n# Restore from latest backup\n./namecheap-dns.js restore example.com\n\n# Restore from specific backup\n./namecheap-dns.js restore example.com \\\n  --backup \"example.com-20260213-114500.json\""
      },
      {
        "title": "TXT Records",
        "body": "--txt \"subdomain=value\"\n--txt \"@=value\"  # Root domain"
      },
      {
        "title": "CNAME Records",
        "body": "--cname \"subdomain=target.com\""
      },
      {
        "title": "MX Records",
        "body": "--mx \"subdomain=10 mx.target.com\"\n--mx \"@=10 mx.target.com\"  # Root domain"
      },
      {
        "title": "A Records",
        "body": "--a \"subdomain=192.168.1.1\"\n--a \"@=192.168.1.1\"  # Root domain"
      },
      {
        "title": "Backup Location",
        "body": "Default: ./backups/ (relative to skill directory)\n\nConfigurable via environment variable:\n\nexport NAMECHEAP_BACKUP_DIR=\"/custom/path/to/backups\"\n\nFormat: {domain}-{timestamp}.json\n\nEach backup includes:\n\napiHosts: Records visible to Namecheap API\nliveDNS: Actual DNS records captured via dig\nTimestamp and domain metadata\n\nThis allows you to see what was ACTUALLY live in DNS, not just what the API knew about."
      },
      {
        "title": "Safety Features",
        "body": "Ghost record detection — automatic check for records invisible to API\nAuto-backup before changes — every add or remove creates a timestamped backup (includes DNS snapshot)\nDry-run mode — --dry-run shows what will change without applying\nDiff preview — see exactly what records will be added/removed\nFetch-first — always gets current DNS state before changes\nMerge logic — adds to existing records instead of replacing\nRollback — one command to restore from backup\nSafety override — --force flag for when you need to bypass ghost record warnings"
      },
      {
        "title": "Mailgun Setup",
        "body": "./namecheap-dns.js add menuhq.ai \\\n  --txt \"mail.menuhq.ai=v=spf1 include:mailgun.org ~all\" \\\n  --txt \"smtp._domainkey.mail.menuhq.ai=k=rsa; p=MIGfMA0...\" \\\n  --txt \"_dmarc.mail.menuhq.ai=v=DMARC1; p=quarantine;\" \\\n  --cname \"email.mail.menuhq.ai=mailgun.org\" \\\n  --mx \"mail.menuhq.ai=10 mxa.mailgun.org\" \\\n  --mx \"mail.menuhq.ai=20 mxb.mailgun.org\" \\\n  --dry-run\n\nReview the diff, then run without --dry-run to apply."
      },
      {
        "title": "⚠️ The Namecheap API is Destructive",
        "body": "The Namecheap domains.dns.setHosts API method replaces ALL DNS records for a domain. There is no \"add one record\" or \"update one record\" endpoint. Every change requires:\n\nFetch all existing records (getHosts)\nModify the list\nUpload the entire list (setHosts)\n\nThis skill handles this for you by always fetching first and merging changes."
      },
      {
        "title": "🔍 Ghost Records: The Hidden Danger",
        "body": "Problem: domains.dns.getHosts does NOT return all DNS records. Records managed by Namecheap subsystems are invisible to the API:\n\nEmail Forwarding — MX, SPF, and DKIM records\nURL Redirect — A/CNAME records for domain parking/redirects\nThird-party integrations — Records added through Namecheap's dashboard for services\n\nSince setHosts replaces all records, using the API can silently delete these hidden records."
      },
      {
        "title": "🛡️ How This Skill Protects You",
        "body": "verify command — Compares API records with actual live DNS (via dig) and warns about ghost records\nAutomatic safety check — Before any add, remove, or restore, the skill checks for ghost records\nRefuses to proceed — If ghost records are detected, the operation is blocked (unless --force is used)\nClear warnings — Shows exactly which records will be lost if you proceed\nDNS snapshots in backups — Captures actual DNS state via dig, not just API state"
      },
      {
        "title": "When to Use --force",
        "body": "Only use the --force flag when:\n\nYou've manually verified the ghost records are no longer needed\nYou're intentionally removing email forwarding or URL redirects\nYou understand and accept that those records will be deleted\n\nNever use --force blindly. Always run verify first to see what will be lost."
      },
      {
        "title": "Example: The Production Incident",
        "body": "This skill was created after adding Mailgun DNS records via the API wiped out Namecheap's email forwarding records. The email forwarding MX/SPF/TXT records were invisible to getHosts, so the fetch-merge-write pattern deleted them.\n\nNow, the skill would have:\n\nDetected the ghost records during verify\nRefused to proceed without --force\nShown exactly which email forwarding records would be deleted\nCreated a backup including the DNS snapshot"
      },
      {
        "title": "\"API request failed: IP not whitelisted\"",
        "body": "Add your current IP to https://ap.www.namecheap.com/settings/tools/apiaccess/\nCheck with: curl ifconfig.me"
      },
      {
        "title": "\"Invalid API key\"",
        "body": "Verify NAMECHEAP_API_KEY is set correctly\nRe-enable API access if needed"
      },
      {
        "title": "\"Domain not found\"",
        "body": "Ensure domain is in your Namecheap account\nCheck spelling (case-sensitive)"
      },
      {
        "title": "API Reference",
        "body": "Namecheap API docs: https://www.namecheap.com/support/api/methods/domains-dns/"
      }
    ],
    "body": "Namecheap DNS Management\n\nSafe wrapper around the Namecheap API for DNS operations. Prevents accidental record wipeout by always fetching existing records first and merging changes.\n\n⚠️ Why This Skill Exists\n\nThe Namecheap API's setHosts method replaces ALL DNS records for a domain. One wrong API call = your entire DNS config is gone. This skill:\n\n✅ Always fetches existing records first\n✅ Merges new records with existing ones (unless explicitly replacing)\n✅ Shows a diff preview before applying changes\n✅ Auto-backups before every change\n✅ Supports dry-run mode for safe testing\n✅ One-command rollback from backups\nSetup\n1. Install dependencies\ncd ~/.openclaw/workspace/skills/namecheap-dns\nnpm install\n\n2. Enable Namecheap API access\nGo to https://ap.www.namecheap.com/settings/tools/apiaccess/\nToggle \"API Access\" ON\nWhitelist your IP address\nCopy your API key\n3. Set environment variables\n\nAdd to ~/.zshrc or ~/.bashrc:\n\nexport NAMECHEAP_API_KEY=\"your-api-key-here\"\nexport NAMECHEAP_USERNAME=\"your-username\"\nexport NAMECHEAP_API_USER=\"your-username\"  # Usually same as username\n\nUsage\nVerify DNS and detect ghost records\n\n⚠️ IMPORTANT: Run this first!\n\n./namecheap-dns.js verify example.com\n\n\nThis command compares DNS records visible to the Namecheap API with actual live DNS records (via dig). It will warn you about \"ghost records\" that exist in DNS but are invisible to the API (email forwarding, URL redirects, etc.).\n\nList current DNS records\n./namecheap-dns.js list example.com\n\n\nNote: This only shows records visible to the API. Use verify to see ALL records including those managed by Namecheap subsystems.\n\nAdd records (safe merge)\n# Add a single TXT record\n./namecheap-dns.js add example.com \\\n  --txt \"mail.example.com=v=spf1 include:mailgun.org ~all\"\n\n# Add multiple records at once\n./namecheap-dns.js add example.com \\\n  --txt \"mail=v=spf1 include:mailgun.org ~all\" \\\n  --cname \"email.mail=mailgun.org\" \\\n  --mx \"mail=10 mxa.mailgun.org\"\n\n# Dry-run (preview changes without applying)\n./namecheap-dns.js add example.com \\\n  --txt \"test=hello\" \\\n  --dry-run\n\n# Force override safety check (if you know ghost records can be deleted)\n./namecheap-dns.js add example.com \\\n  --txt \"test=hello\" \\\n  --force\n\n\nSafety: The skill automatically checks for \"ghost records\" before making changes. If detected, it will refuse to proceed unless you use --force.\n\nRemove records\n# Remove by host + type\n./namecheap-dns.js remove example.com \\\n  --host \"old-record\" \\\n  --type \"TXT\"\n\n# Dry-run first\n./namecheap-dns.js remove example.com \\\n  --host \"old-record\" \\\n  --type \"TXT\" \\\n  --dry-run\n\nBackup & Restore\n# Create manual backup\n./namecheap-dns.js backup example.com\n\n# List available backups\n./namecheap-dns.js backups example.com\n\n# Restore from latest backup\n./namecheap-dns.js restore example.com\n\n# Restore from specific backup\n./namecheap-dns.js restore example.com \\\n  --backup \"example.com-20260213-114500.json\"\n\nRecord Format\nTXT Records\n--txt \"subdomain=value\"\n--txt \"@=value\"  # Root domain\n\nCNAME Records\n--cname \"subdomain=target.com\"\n\nMX Records\n--mx \"subdomain=10 mx.target.com\"\n--mx \"@=10 mx.target.com\"  # Root domain\n\nA Records\n--a \"subdomain=192.168.1.1\"\n--a \"@=192.168.1.1\"  # Root domain\n\nBackup Location\n\nDefault: ./backups/ (relative to skill directory)\n\nConfigurable via environment variable:\n\nexport NAMECHEAP_BACKUP_DIR=\"/custom/path/to/backups\"\n\n\nFormat: {domain}-{timestamp}.json\n\nEach backup includes:\n\napiHosts: Records visible to Namecheap API\nliveDNS: Actual DNS records captured via dig\nTimestamp and domain metadata\n\nThis allows you to see what was ACTUALLY live in DNS, not just what the API knew about.\n\nSafety Features\nGhost record detection — automatic check for records invisible to API\nAuto-backup before changes — every add or remove creates a timestamped backup (includes DNS snapshot)\nDry-run mode — --dry-run shows what will change without applying\nDiff preview — see exactly what records will be added/removed\nFetch-first — always gets current DNS state before changes\nMerge logic — adds to existing records instead of replacing\nRollback — one command to restore from backup\nSafety override — --force flag for when you need to bypass ghost record warnings\nExamples\nMailgun Setup\n./namecheap-dns.js add menuhq.ai \\\n  --txt \"mail.menuhq.ai=v=spf1 include:mailgun.org ~all\" \\\n  --txt \"smtp._domainkey.mail.menuhq.ai=k=rsa; p=MIGfMA0...\" \\\n  --txt \"_dmarc.mail.menuhq.ai=v=DMARC1; p=quarantine;\" \\\n  --cname \"email.mail.menuhq.ai=mailgun.org\" \\\n  --mx \"mail.menuhq.ai=10 mxa.mailgun.org\" \\\n  --mx \"mail.menuhq.ai=20 mxb.mailgun.org\" \\\n  --dry-run\n\n\nReview the diff, then run without --dry-run to apply.\n\nKnown Limitations\n⚠️ The Namecheap API is Destructive\n\nThe Namecheap domains.dns.setHosts API method replaces ALL DNS records for a domain. There is no \"add one record\" or \"update one record\" endpoint. Every change requires:\n\nFetch all existing records (getHosts)\nModify the list\nUpload the entire list (setHosts)\n\nThis skill handles this for you by always fetching first and merging changes.\n\n🔍 Ghost Records: The Hidden Danger\n\nProblem: domains.dns.getHosts does NOT return all DNS records. Records managed by Namecheap subsystems are invisible to the API:\n\nEmail Forwarding — MX, SPF, and DKIM records\nURL Redirect — A/CNAME records for domain parking/redirects\nThird-party integrations — Records added through Namecheap's dashboard for services\n\nSince setHosts replaces all records, using the API can silently delete these hidden records.\n\n🛡️ How This Skill Protects You\nverify command — Compares API records with actual live DNS (via dig) and warns about ghost records\nAutomatic safety check — Before any add, remove, or restore, the skill checks for ghost records\nRefuses to proceed — If ghost records are detected, the operation is blocked (unless --force is used)\nClear warnings — Shows exactly which records will be lost if you proceed\nDNS snapshots in backups — Captures actual DNS state via dig, not just API state\nWhen to Use --force\n\nOnly use the --force flag when:\n\nYou've manually verified the ghost records are no longer needed\nYou're intentionally removing email forwarding or URL redirects\nYou understand and accept that those records will be deleted\n\nNever use --force blindly. Always run verify first to see what will be lost.\n\nExample: The Production Incident\n\nThis skill was created after adding Mailgun DNS records via the API wiped out Namecheap's email forwarding records. The email forwarding MX/SPF/TXT records were invisible to getHosts, so the fetch-merge-write pattern deleted them.\n\nNow, the skill would have:\n\nDetected the ghost records during verify\nRefused to proceed without --force\nShown exactly which email forwarding records would be deleted\nCreated a backup including the DNS snapshot\nTroubleshooting\n\"API request failed: IP not whitelisted\"\nAdd your current IP to https://ap.www.namecheap.com/settings/tools/apiaccess/\nCheck with: curl ifconfig.me\n\"Invalid API key\"\nVerify NAMECHEAP_API_KEY is set correctly\nRe-enable API access if needed\n\"Domain not found\"\nEnsure domain is in your Namecheap account\nCheck spelling (case-sensitive)\nAPI Reference\n\nNamecheap API docs: https://www.namecheap.com/support/api/methods/domains-dns/"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jarekbird/namecheap-dns",
    "publisherUrl": "https://clawhub.ai/jarekbird/namecheap-dns",
    "owner": "jarekbird",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/namecheap-dns",
    "downloadUrl": "https://openagent3.xyz/downloads/namecheap-dns",
    "agentUrl": "https://openagent3.xyz/skills/namecheap-dns/agent",
    "manifestUrl": "https://openagent3.xyz/skills/namecheap-dns/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/namecheap-dns/agent.md"
  }
}