{
  "schemaVersion": "1.0",
  "item": {
    "slug": "x-cdp",
    "name": "X CDP Automation",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/stwith/x-cdp",
    "canonicalUrl": "https://clawhub.ai/stwith/x-cdp",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/x-cdp",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=x-cdp",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/quote-tweet.js",
      "scripts/reply-tweet.js",
      "scripts/post-tweet.js",
      "scripts/setup.js",
      "scripts/post-article.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. 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-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/x-cdp"
    },
    "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/x-cdp",
    "agentPageUrl": "https://openagent3.xyz/skills/x-cdp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/x-cdp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/x-cdp/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": "First-Time Setup",
        "body": "Run the setup wizard. It checks everything and auto-fixes what it can:\n\nnode scripts/setup.js [--port 18802] [--profile ~/chromium-profiles/x-cdp]\n\nThe wizard does 4 things:\n\nFinds Chromium/Chrome on your system (or tells you how to install it)\nChecks puppeteer-core (auto-installs to /tmp/node_modules if missing)\nLaunches Chromium with CDP enabled on the specified port\nVerifies X login (tells you to log in manually if needed)"
      },
      {
        "title": "Manual setup (if you prefer)",
        "body": "Install Chromium (recommended over Chrome for version stability):\n\n# macOS\nbrew install --cask chromium\n\n# Linux\nsudo apt install chromium-browser\n\nInstall puppeteer-core:\n\ncd /tmp && npm init -y && npm install puppeteer-core\n\nLaunch Chromium with CDP:\n\nchromium --remote-debugging-port=18802 --user-data-dir=~/chromium-profiles/x-cdp --no-first-run\n\nLog in to X: Open x.com in the Chromium window and log in once. The session persists in the profile directory."
      },
      {
        "title": "Why Chromium, not Chrome?",
        "body": "Chrome auto-updates silently. One update can change DOM selectors and break all automation overnight. Chromium lets you pin a known-good version. That said, Chrome works fine too if you don't mind occasional breakage."
      },
      {
        "title": "Architecture",
        "body": "All scripts connect to a running Chromium instance via CDP (Chrome DevTools Protocol).\nThis is not API-based. It drives the real browser UI, identical to a human clicking."
      },
      {
        "title": "Multi-account isolation",
        "body": "Each X account gets its own Chromium instance with a separate port and profile:\n\nPort 18800, profile chromium-profiles/main: @your_main_account\nPort 18801, profile chromium-profiles/second: @your_second_account\nPort 18802, profile chromium-profiles/third: @your_third_account\n\nLaunch multiple instances for multi-account use. All scripts accept --port to target a specific account."
      },
      {
        "title": "Post a tweet",
        "body": "NODE_PATH=/tmp/node_modules node scripts/post-tweet.js \"Hello world\" [--image /path/to/img.png] [--port 18802] [--dry-run]"
      },
      {
        "title": "Reply to a tweet",
        "body": "NODE_PATH=/tmp/node_modules node scripts/reply-tweet.js <tweet_url> \"Nice post!\" [--image /path/to/img.png] [--port 18802] [--dry-run]"
      },
      {
        "title": "Quote retweet",
        "body": "NODE_PATH=/tmp/node_modules node scripts/quote-tweet.js <tweet_url> \"My thoughts\" [--port 18802] [--dry-run]"
      },
      {
        "title": "Publish an article (X Premium)",
        "body": "NODE_PATH=/tmp/node_modules node scripts/post-article.js --title \"Title\" --body \"Body text\" [--body-file /path/to/content.md] [--cover /path/to/cover.jpg] [--port 18800] [--dry-run]\n\nAll scripts support --dry-run to fill content without sending. A screenshot is saved to /tmp/."
      },
      {
        "title": "Agent Integration",
        "body": "When the user asks to interact with X:"
      },
      {
        "title": "Pre-flight check",
        "body": "Before running any script, verify the environment:\n\nCheck if Chromium is running on the target port: curl -s http://localhost:<port>/json/version\nIf not running, run node scripts/setup.js --port <port> to launch and configure\nIf setup fails, report the specific step that failed"
      },
      {
        "title": "Compose flow",
        "body": "User provides intent (e.g., \"reply to this tweet saying thanks\")\nAgent drafts the text, shows it to user for approval\nOn confirmation, run the script via exec\nReport success/failure"
      },
      {
        "title": "Error recovery",
        "body": "If a script fails with \"not found\" errors, X may have changed its DOM. Check and update:\n\nreferences/selectors.md for the latest selectors\nscripts/lib/cdp-utils.js SELECTORS object"
      },
      {
        "title": "Risk Notes",
        "body": "Rate limiting: Space out actions. No more than ~10 tweets/hour.\nDetection: CDP automation looks like real browser usage. Much harder to detect than API abuse.\nAccount safety: Human-like delays are built into all scripts. Avoid bulk operations.\nvs API tools (bird etc.): API wrappers get DMCA'd or break on API changes. CDP works as long as the website works."
      }
    ],
    "body": "X CDP Skill — Browser Automation for X (Twitter)\nFirst-Time Setup\n\nRun the setup wizard. It checks everything and auto-fixes what it can:\n\nnode scripts/setup.js [--port 18802] [--profile ~/chromium-profiles/x-cdp]\n\n\nThe wizard does 4 things:\n\nFinds Chromium/Chrome on your system (or tells you how to install it)\nChecks puppeteer-core (auto-installs to /tmp/node_modules if missing)\nLaunches Chromium with CDP enabled on the specified port\nVerifies X login (tells you to log in manually if needed)\nManual setup (if you prefer)\n\nInstall Chromium (recommended over Chrome for version stability):\n\n# macOS\nbrew install --cask chromium\n\n# Linux\nsudo apt install chromium-browser\n\n\nInstall puppeteer-core:\n\ncd /tmp && npm init -y && npm install puppeteer-core\n\n\nLaunch Chromium with CDP:\n\nchromium --remote-debugging-port=18802 --user-data-dir=~/chromium-profiles/x-cdp --no-first-run\n\n\nLog in to X: Open x.com in the Chromium window and log in once. The session persists in the profile directory.\n\nWhy Chromium, not Chrome?\n\nChrome auto-updates silently. One update can change DOM selectors and break all automation overnight. Chromium lets you pin a known-good version. That said, Chrome works fine too if you don't mind occasional breakage.\n\nArchitecture\n\nAll scripts connect to a running Chromium instance via CDP (Chrome DevTools Protocol). This is not API-based. It drives the real browser UI, identical to a human clicking.\n\nMulti-account isolation\n\nEach X account gets its own Chromium instance with a separate port and profile:\n\nPort 18800, profile chromium-profiles/main: @your_main_account\nPort 18801, profile chromium-profiles/second: @your_second_account\nPort 18802, profile chromium-profiles/third: @your_third_account\n\nLaunch multiple instances for multi-account use. All scripts accept --port to target a specific account.\n\nCommands\nPost a tweet\nNODE_PATH=/tmp/node_modules node scripts/post-tweet.js \"Hello world\" [--image /path/to/img.png] [--port 18802] [--dry-run]\n\nReply to a tweet\nNODE_PATH=/tmp/node_modules node scripts/reply-tweet.js <tweet_url> \"Nice post!\" [--image /path/to/img.png] [--port 18802] [--dry-run]\n\nQuote retweet\nNODE_PATH=/tmp/node_modules node scripts/quote-tweet.js <tweet_url> \"My thoughts\" [--port 18802] [--dry-run]\n\nPublish an article (X Premium)\nNODE_PATH=/tmp/node_modules node scripts/post-article.js --title \"Title\" --body \"Body text\" [--body-file /path/to/content.md] [--cover /path/to/cover.jpg] [--port 18800] [--dry-run]\n\n\nAll scripts support --dry-run to fill content without sending. A screenshot is saved to /tmp/.\n\nAgent Integration\n\nWhen the user asks to interact with X:\n\nPre-flight check\n\nBefore running any script, verify the environment:\n\nCheck if Chromium is running on the target port: curl -s http://localhost:<port>/json/version\nIf not running, run node scripts/setup.js --port <port> to launch and configure\nIf setup fails, report the specific step that failed\nCompose flow\nUser provides intent (e.g., \"reply to this tweet saying thanks\")\nAgent drafts the text, shows it to user for approval\nOn confirmation, run the script via exec\nReport success/failure\nError recovery\n\nIf a script fails with \"not found\" errors, X may have changed its DOM. Check and update:\n\nreferences/selectors.md for the latest selectors\nscripts/lib/cdp-utils.js SELECTORS object\nRisk Notes\nRate limiting: Space out actions. No more than ~10 tweets/hour.\nDetection: CDP automation looks like real browser usage. Much harder to detect than API abuse.\nAccount safety: Human-like delays are built into all scripts. Avoid bulk operations.\nvs API tools (bird etc.): API wrappers get DMCA'd or break on API changes. CDP works as long as the website works."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/stwith/x-cdp",
    "publisherUrl": "https://clawhub.ai/stwith/x-cdp",
    "owner": "stwith",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/x-cdp",
    "downloadUrl": "https://openagent3.xyz/downloads/x-cdp",
    "agentUrl": "https://openagent3.xyz/skills/x-cdp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/x-cdp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/x-cdp/agent.md"
  }
}