{
  "schemaVersion": "1.0",
  "item": {
    "slug": "wip-x",
    "name": "Wip X",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/parkertoddbrooks/wip-x",
    "canonicalUrl": "https://clawhub.ai/parkertoddbrooks/wip-x",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/wip-x",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=wip-x",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "README.md",
      "SKILL.md",
      "auth.mjs",
      "cli.mjs",
      "core.mjs"
    ],
    "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-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/wip-x"
    },
    "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/wip-x",
    "agentPageUrl": "https://openagent3.xyz/skills/wip-x/agent",
    "manifestUrl": "https://openagent3.xyz/skills/wip-x/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/wip-x/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": "wip-x",
        "body": "X Platform API. Sensor (read) + Actuator (write). All X Platform functions in one tool."
      },
      {
        "title": "Sensor: Read",
        "body": "Use fetch_post for:\n\nGetting the full content of a specific tweet by URL or ID\nReading replies, quotes, engagement metrics\nExtracting tweet data for processing\n\nUse search_recent for:\n\nFinding tweets matching a query (last 7 days)\nSearching by hashtags, mentions, or keywords\nGetting raw tweet data (not AI-summarized... use wip-grok search_x for that)\n\nUse get_bookmarks for:\n\nReading the user's bookmarked tweets\nReviewing saved content\n\nUse get_user for:\n\nLooking up a user's profile, bio, follower count\nChecking if an account exists"
      },
      {
        "title": "Actuator: Write",
        "body": "Use post_tweet for:\n\nPosting new tweets\nReplying to existing tweets\nQuote-tweeting with commentary\nPosting with images or video (upload first)\n\nUse upload_media for:\n\nUploading images (PNG, JPG, GIF, WebP)\nUploading video (MP4)\nGetting media IDs for use in post_tweet\n\nUse delete_tweet for:\n\nRemoving a previously posted tweet\n\nUse bookmark_post for:\n\nSaving a tweet for later"
      },
      {
        "title": "Do NOT Use For",
        "body": "AI-powered search summarization (use wip-grok search_web or search_x instead)\nImage generation (use wip-grok generate_image)\nVideo generation (use wip-grok generate_video)\nTrending topic analysis (use wip-grok search_x for AI-summarized trends)"
      },
      {
        "title": "fetch_post(options)",
        "body": "const result = await fetch_post({ id_or_url: 'https://x.com/user/status/123' });\n// result: { data, includes, errors }\n\nOptions: id_or_url (required). Accepts tweet ID or full URL."
      },
      {
        "title": "search_recent(options)",
        "body": "const result = await search_recent({ query: 'AI agents', max_results: 20 });\n// result: { data, includes, meta, errors }\n\nOptions: query (required), max_results (10-100), start_time, end_time, sort_order"
      },
      {
        "title": "get_bookmarks(options)",
        "body": "const result = await get_bookmarks({ max_results: 20 });\n\nOptions: max_results, pagination_token. Requires OAuth."
      },
      {
        "title": "get_user(options)",
        "body": "const result = await get_user({ username_or_id: 'parkertoddbrooks' });\n\nOptions: username_or_id (required). Accepts username (with or without @) or numeric ID."
      },
      {
        "title": "post_tweet(options)",
        "body": "const result = await post_tweet({ text: 'Hello world', reply_to: '123', media_ids: ['456'] });\n// result: { data: { id, text }, errors }\n\nOptions: text (required), reply_to, media_ids, quote_tweet_id. Requires OAuth."
      },
      {
        "title": "upload_media(options)",
        "body": "const result = await upload_media({ file_path: './photo.jpg' });\n// result: { data: { id }, errors }\n\nOptions: file_path (required), media_type (auto-detected), media_data (base64 alternative)"
      },
      {
        "title": "delete_tweet(options)",
        "body": "const result = await delete_tweet({ id: '123456' });\n\nOptions: id (required). Requires OAuth."
      },
      {
        "title": "\"X Platform API credentials not found\"",
        "body": "Set X_BEARER_TOKEN for read-only, or all four OAuth tokens for read+write.\n1Password: vault \"Agent Secrets\", item \"X Platform API\"."
      },
      {
        "title": "\"Could not resolve authenticated user ID\"",
        "body": "Bookmarks and write operations need OAuth 1.0a (all four tokens), not just bearer token."
      },
      {
        "title": "403 Forbidden on post/delete",
        "body": "Your app needs \"Read and Write\" permissions in the X Developer Portal. Check at https://developer.x.com/en/portal/dashboard"
      },
      {
        "title": "Rate limits",
        "body": "X API v2 has per-endpoint rate limits. The SDK handles rate limit headers automatically. If you hit limits, back off and retry."
      },
      {
        "title": "API Documentation",
        "body": "X API v2: https://docs.x.com/x-api\nXDK SDK: https://github.com/xdevplatform/xdk\nAuthentication: https://docs.x.com/resources/authentication"
      }
    ],
    "body": "wip-x\n\nX Platform API. Sensor (read) + Actuator (write). All X Platform functions in one tool.\n\nWhen to Use This Skill\nSensor: Read\n\nUse fetch_post for:\n\nGetting the full content of a specific tweet by URL or ID\nReading replies, quotes, engagement metrics\nExtracting tweet data for processing\n\nUse search_recent for:\n\nFinding tweets matching a query (last 7 days)\nSearching by hashtags, mentions, or keywords\nGetting raw tweet data (not AI-summarized... use wip-grok search_x for that)\n\nUse get_bookmarks for:\n\nReading the user's bookmarked tweets\nReviewing saved content\n\nUse get_user for:\n\nLooking up a user's profile, bio, follower count\nChecking if an account exists\nActuator: Write\n\nUse post_tweet for:\n\nPosting new tweets\nReplying to existing tweets\nQuote-tweeting with commentary\nPosting with images or video (upload first)\n\nUse upload_media for:\n\nUploading images (PNG, JPG, GIF, WebP)\nUploading video (MP4)\nGetting media IDs for use in post_tweet\n\nUse delete_tweet for:\n\nRemoving a previously posted tweet\n\nUse bookmark_post for:\n\nSaving a tweet for later\nDo NOT Use For\nAI-powered search summarization (use wip-grok search_web or search_x instead)\nImage generation (use wip-grok generate_image)\nVideo generation (use wip-grok generate_video)\nTrending topic analysis (use wip-grok search_x for AI-summarized trends)\nAPI Reference\nfetch_post(options)\nconst result = await fetch_post({ id_or_url: 'https://x.com/user/status/123' });\n// result: { data, includes, errors }\n\n\nOptions: id_or_url (required). Accepts tweet ID or full URL.\n\nsearch_recent(options)\nconst result = await search_recent({ query: 'AI agents', max_results: 20 });\n// result: { data, includes, meta, errors }\n\n\nOptions: query (required), max_results (10-100), start_time, end_time, sort_order\n\nget_bookmarks(options)\nconst result = await get_bookmarks({ max_results: 20 });\n\n\nOptions: max_results, pagination_token. Requires OAuth.\n\nget_user(options)\nconst result = await get_user({ username_or_id: 'parkertoddbrooks' });\n\n\nOptions: username_or_id (required). Accepts username (with or without @) or numeric ID.\n\npost_tweet(options)\nconst result = await post_tweet({ text: 'Hello world', reply_to: '123', media_ids: ['456'] });\n// result: { data: { id, text }, errors }\n\n\nOptions: text (required), reply_to, media_ids, quote_tweet_id. Requires OAuth.\n\nupload_media(options)\nconst result = await upload_media({ file_path: './photo.jpg' });\n// result: { data: { id }, errors }\n\n\nOptions: file_path (required), media_type (auto-detected), media_data (base64 alternative)\n\ndelete_tweet(options)\nconst result = await delete_tweet({ id: '123456' });\n\n\nOptions: id (required). Requires OAuth.\n\nTroubleshooting\n\"X Platform API credentials not found\"\n\nSet X_BEARER_TOKEN for read-only, or all four OAuth tokens for read+write. 1Password: vault \"Agent Secrets\", item \"X Platform API\".\n\n\"Could not resolve authenticated user ID\"\n\nBookmarks and write operations need OAuth 1.0a (all four tokens), not just bearer token.\n\n403 Forbidden on post/delete\n\nYour app needs \"Read and Write\" permissions in the X Developer Portal. Check at https://developer.x.com/en/portal/dashboard\n\nRate limits\n\nX API v2 has per-endpoint rate limits. The SDK handles rate limit headers automatically. If you hit limits, back off and retry.\n\nAPI Documentation\nX API v2: https://docs.x.com/x-api\nXDK SDK: https://github.com/xdevplatform/xdk\nAuthentication: https://docs.x.com/resources/authentication"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/parkertoddbrooks/wip-x",
    "publisherUrl": "https://clawhub.ai/parkertoddbrooks/wip-x",
    "owner": "parkertoddbrooks",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/wip-x",
    "downloadUrl": "https://openagent3.xyz/downloads/wip-x",
    "agentUrl": "https://openagent3.xyz/skills/wip-x/agent",
    "manifestUrl": "https://openagent3.xyz/skills/wip-x/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/wip-x/agent.md"
  }
}