{
  "schemaVersion": "1.0",
  "item": {
    "slug": "clawbird",
    "name": "Clawbird",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/xonder/clawbird",
    "canonicalUrl": "https://clawhub.ai/xonder/clawbird",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/clawbird",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=clawbird",
    "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/clawbird"
    },
    "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/clawbird",
    "agentPageUrl": "https://openagent3.xyz/skills/clawbird/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clawbird/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clawbird/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": "Clawbird — X/Twitter Tools",
        "body": "You have access to 13 tools for interacting with X (Twitter) via the official X API v2. All tools return JSON with results and estimated API cost."
      },
      {
        "title": "Authentication & Credentials",
        "body": "This plugin authenticates to the X API using OAuth 1.0a User Context for write operations (posting, liking, following, DMs) and optionally a Bearer Token for read-only operations (search, user lookup).\n\nWhere credentials come from: You must generate them at the X Developer Portal:\n\nCreate a Project and App at developer.x.com\nGenerate OAuth 1.0a keys: API Key, API Secret, Access Token, Access Token Secret\nOptionally generate a Bearer Token for read-only operations\n\nHow credentials are provided: Credentials are passed to the plugin at runtime by the OpenClaw plugin config system (pluginConfig). The plugin never reads config files directly. Fallback: environment variables X_API_KEY, X_API_SECRET, X_ACCESS_TOKEN, X_ACCESS_SECRET, X_BEARER_TOKEN.\n\nNo credentials are hardcoded or bundled. The plugin will return a clear error if credentials are missing."
      },
      {
        "title": "External Endpoints",
        "body": "All network requests go exclusively to the official X API v2. No other hosts are contacted.\n\nEndpointMethodTool(s)Data Senthttps://api.x.com/2/tweetsPOSTx_post_tweet, x_post_thread, x_reply_tweetTweet text, reply metadatahttps://api.x.com/2/tweets/:idGETx_get_tweetTweet IDhttps://api.x.com/2/tweets/search/recentGETx_search_tweetsSearch query stringhttps://api.x.com/2/users/meGETx_like_tweet, x_get_mentions, x_follow_user(auth headers only)https://api.x.com/2/users/by/username/:usernameGETx_get_user_profile, x_send_dm, x_follow_userUsernamehttps://api.x.com/2/users/:id/likesPOSTx_like_tweetTweet IDhttps://api.x.com/2/users/:id/mentionsGETx_get_mentionsUser ID, pagination paramshttps://api.x.com/2/users/:id/followingPOSTx_follow_userTarget user IDhttps://api.x.com/2/dm_conversations/with/:id/messagesPOSTx_send_dmMessage text, recipient IDhttps://api.x.com/2/dm_conversations/with/:id/dm_eventsGETx_get_dms (filtered)Participant IDhttps://api.x.com/2/dm_eventsGETx_get_dms (all)Pagination params"
      },
      {
        "title": "Security & Privacy",
        "body": "Network access: Only api.x.com (official X API). No other domains are contacted.\nLocal file access: Writes a session-scoped clawbird-interactions.jsonl file to the working directory, logging mutation actions (posts, likes, follows, DMs) so the agent can avoid duplicating work. No other files are read or written beyond the declared environment variables.\nCredential handling: OAuth tokens are read from plugin config or env vars at runtime and passed to the X API via signed HTTP headers. They are never logged, cached to disk, or transmitted to any third party.\nData sent to X: Only the data you explicitly provide in tool parameters (tweet text, search queries, usernames, message text). No additional user data is collected or sent.\nData received from X: Tweet content, user profiles, DM messages, and engagement metrics as returned by the X API. This data is returned to the agent as JSON and not stored."
      },
      {
        "title": "Trust Statement",
        "body": "Clawbird is an npm-distributed skill — the runtime code is installed via npm i -g @xonder/clawbird and is not bundled in the ClawHub skill archive. The security properties below can be verified by auditing the source:\n\nSource: https://github.com/xonder/clawbird (MIT)\nnpm: https://www.npmjs.com/package/@xonder/clawbird\nMakes no network requests other than to api.x.com (source: src/client.ts)\nReads and writes one local file (clawbird-interactions.jsonl) for session interaction logging — no other filesystem access (source: src/interaction-log.ts)\nHas zero transitive dependencies beyond the official @xdevplatform/xdk SDK and @sinclair/typebox\nIncludes a comprehensive test suite (200+ tests) verifiable via npm test\n\nSince this skill installs code from npm at runtime, review the source or pin a specific version (npm i -g @xonder/clawbird@1.1.0) before granting credentials."
      },
      {
        "title": "Write Actions & Autonomous Use",
        "body": "The following tools modify remote state on your X account:\n\nToolActionReversible?x_post_tweetPosts a tweetDelete manuallyx_post_threadPosts multiple tweetsDelete manuallyx_reply_tweetPosts a replyDelete manuallyx_like_tweetLikes a tweetUnlike manuallyx_follow_userFollows a userUnfollow manuallyx_send_dmSends a direct messageCannot unsend\n\nRecommendation: If running autonomously, consider requiring explicit user confirmation before write actions by configuring agent-level tool policies. Read-only tools (x_get_tweet, x_search_tweets, x_get_user_profile, x_get_mentions, x_get_dms, x_get_cost_summary) are safe for autonomous use."
      },
      {
        "title": "Posting",
        "body": "x_post_tweet — Post a single tweet.\n\ntext (required): Tweet content (max 280 chars)\nReturns: { id, text, url, estimatedCost }\n\nx_post_thread — Post a multi-tweet thread.\n\ntweets (required): Array of tweet texts (posted in order, each as a reply to the previous)\nReturns: { threadId, tweetCount, tweets: [{ id, text, url }], estimatedCost }\n\nx_reply_tweet — Reply to an existing tweet.\n\ntweetId (required): Tweet ID or full URL (e.g. https://x.com/user/status/123456)\ntext (required): Reply content (max 280 chars)\nReturns: { id, text, url, inReplyTo, estimatedCost }"
      },
      {
        "title": "Engagement",
        "body": "x_like_tweet — Like a tweet.\n\ntweetId (required): Tweet ID or full URL\nReturns: { liked, tweetId, estimatedCost }"
      },
      {
        "title": "Social",
        "body": "x_follow_user — Follow a user.\n\nusername (required): Username to follow (with or without @)\nReturns: { following, user: { id, username }, estimatedCost }"
      },
      {
        "title": "Research",
        "body": "x_get_tweet — Get a single tweet by ID or URL.\n\ntweetId (required): Tweet ID or full URL (e.g. https://x.com/user/status/123456)\nReturns: { id, text, authorId, createdAt, metrics, conversationId, lang, url, author: { id, name, username, verified, profileImageUrl }, estimatedCost }\n\nx_search_tweets — Search recent tweets (last 7 days).\n\nquery (required): Search query — supports X operators like from:user, #hashtag, \"exact phrase\", -exclude, lang:en\nmaxResults (optional): 10–100, default 10\nReturns: { query, resultCount, tweets: [{ id, text, authorId, createdAt, metrics, url }], estimatedCost }\n\nx_get_user_profile — Get a user's profile.\n\nusername (required): Username with or without @\nReturns: { id, name, username, description, followersCount, followingCount, tweetCount, verified, profileImageUrl, url, createdAt, location, profileUrl, estimatedCost }\n\nx_get_mentions — Get recent mentions of the authenticated account.\n\nmaxResults (optional): 5–100, default 10\nReturns: { resultCount, mentions: [{ id, text, authorId, createdAt, metrics, url }], estimatedCost }"
      },
      {
        "title": "Direct Messages",
        "body": "x_send_dm — Send a direct message to a user.\n\nusername (required): Recipient's username (with or without @)\ntext (required): Message content\nReturns: { sent, eventId, conversationId, recipient: { id, username }, estimatedCost }\n\nx_get_dms — Get recent direct messages.\n\nusername (optional): Filter DMs to a specific user's conversation\nmaxResults (optional): 1–100, default 10\nReturns: { resultCount, messages: [{ id, text, senderId, createdAt, conversationId, eventType }], estimatedCost }"
      },
      {
        "title": "Utility",
        "body": "x_get_interaction_log — Get the log of all write actions performed this session (posts, replies, likes, follows, DMs). Useful to review what has already been done and avoid duplicating actions.\n\nlimit (optional): Maximum number of recent entries to return (default: all)\nReturns: { totalEntries, returned, logFile, entries: [{ timestamp, action, summary, details }] }\n\nx_get_cost_summary — Get cumulative API cost for this session.\n\nNo parameters required\nReturns: { totalCost, breakdown: { [action]: { calls, totalCost } } }"
      },
      {
        "title": "Search Queries",
        "body": "Use from:username to search a specific user's tweets\nUse #hashtag for hashtag search\nUse \"exact phrase\" for exact matches\nCombine operators: #AI from:openai -is:retweet lang:en\nUse -is:retweet to filter out retweets"
      },
      {
        "title": "Thread Formatting",
        "body": "Keep each tweet under 280 characters\nStart with a strong hook in tweet 1\nNumber tweets (1/N) for long threads\nEnd with a call to action or summary"
      },
      {
        "title": "Cost Awareness",
        "body": "Every tool response includes an estimatedCost field. Approximate costs:\n\nPost/Reply: ~$0.01 per tweet\nLike: ~$0.005\nSearch: ~$0.005 per result\nUser lookup: ~$0.001\nMentions: ~$0.005 per result\nSend DM: ~$0.01\nRead DMs: ~$0.005 per result\nGet tweet: ~$0.005\n\nUse x_get_cost_summary to check cumulative session spend before expensive operations."
      },
      {
        "title": "Rate Limits",
        "body": "Posting: 200 tweets per 15 minutes\nSearch: 180 requests per 15 minutes (user), 450 (app)\nLikes: 50 per 15 minutes\nUser lookup: 900 per 15 minutes\nMentions: 180 per 15 minutes\nDMs: 200 messages per 15 minutes, 1000 per 24 hours\nFollowing: 400 per 24 hours"
      },
      {
        "title": "Error Handling",
        "body": "All tools return errors as { error: \"message\", details?: ... }. Common issues:\n\nRate limiting (wait and retry)\nAuthentication errors (check API credentials)\nTweet not found (verify ID/URL)\nEmpty text (provide non-empty content)"
      }
    ],
    "body": "Clawbird — X/Twitter Tools\n\nYou have access to 13 tools for interacting with X (Twitter) via the official X API v2. All tools return JSON with results and estimated API cost.\n\nAuthentication & Credentials\n\nThis plugin authenticates to the X API using OAuth 1.0a User Context for write operations (posting, liking, following, DMs) and optionally a Bearer Token for read-only operations (search, user lookup).\n\nWhere credentials come from: You must generate them at the X Developer Portal:\n\nCreate a Project and App at developer.x.com\nGenerate OAuth 1.0a keys: API Key, API Secret, Access Token, Access Token Secret\nOptionally generate a Bearer Token for read-only operations\n\nHow credentials are provided: Credentials are passed to the plugin at runtime by the OpenClaw plugin config system (pluginConfig). The plugin never reads config files directly. Fallback: environment variables X_API_KEY, X_API_SECRET, X_ACCESS_TOKEN, X_ACCESS_SECRET, X_BEARER_TOKEN.\n\nNo credentials are hardcoded or bundled. The plugin will return a clear error if credentials are missing.\n\nExternal Endpoints\n\nAll network requests go exclusively to the official X API v2. No other hosts are contacted.\n\nEndpoint\tMethod\tTool(s)\tData Sent\nhttps://api.x.com/2/tweets\tPOST\tx_post_tweet, x_post_thread, x_reply_tweet\tTweet text, reply metadata\nhttps://api.x.com/2/tweets/:id\tGET\tx_get_tweet\tTweet ID\nhttps://api.x.com/2/tweets/search/recent\tGET\tx_search_tweets\tSearch query string\nhttps://api.x.com/2/users/me\tGET\tx_like_tweet, x_get_mentions, x_follow_user\t(auth headers only)\nhttps://api.x.com/2/users/by/username/:username\tGET\tx_get_user_profile, x_send_dm, x_follow_user\tUsername\nhttps://api.x.com/2/users/:id/likes\tPOST\tx_like_tweet\tTweet ID\nhttps://api.x.com/2/users/:id/mentions\tGET\tx_get_mentions\tUser ID, pagination params\nhttps://api.x.com/2/users/:id/following\tPOST\tx_follow_user\tTarget user ID\nhttps://api.x.com/2/dm_conversations/with/:id/messages\tPOST\tx_send_dm\tMessage text, recipient ID\nhttps://api.x.com/2/dm_conversations/with/:id/dm_events\tGET\tx_get_dms (filtered)\tParticipant ID\nhttps://api.x.com/2/dm_events\tGET\tx_get_dms (all)\tPagination params\nSecurity & Privacy\nNetwork access: Only api.x.com (official X API). No other domains are contacted.\nLocal file access: Writes a session-scoped clawbird-interactions.jsonl file to the working directory, logging mutation actions (posts, likes, follows, DMs) so the agent can avoid duplicating work. No other files are read or written beyond the declared environment variables.\nCredential handling: OAuth tokens are read from plugin config or env vars at runtime and passed to the X API via signed HTTP headers. They are never logged, cached to disk, or transmitted to any third party.\nData sent to X: Only the data you explicitly provide in tool parameters (tweet text, search queries, usernames, message text). No additional user data is collected or sent.\nData received from X: Tweet content, user profiles, DM messages, and engagement metrics as returned by the X API. This data is returned to the agent as JSON and not stored.\nTrust Statement\n\nClawbird is an npm-distributed skill — the runtime code is installed via npm i -g @xonder/clawbird and is not bundled in the ClawHub skill archive. The security properties below can be verified by auditing the source:\n\nSource: https://github.com/xonder/clawbird (MIT)\nnpm: https://www.npmjs.com/package/@xonder/clawbird\nMakes no network requests other than to api.x.com (source: src/client.ts)\nReads and writes one local file (clawbird-interactions.jsonl) for session interaction logging — no other filesystem access (source: src/interaction-log.ts)\nHas zero transitive dependencies beyond the official @xdevplatform/xdk SDK and @sinclair/typebox\nIncludes a comprehensive test suite (200+ tests) verifiable via npm test\n\nSince this skill installs code from npm at runtime, review the source or pin a specific version (npm i -g @xonder/clawbird@1.1.0) before granting credentials.\n\nWrite Actions & Autonomous Use\n\nThe following tools modify remote state on your X account:\n\nTool\tAction\tReversible?\nx_post_tweet\tPosts a tweet\tDelete manually\nx_post_thread\tPosts multiple tweets\tDelete manually\nx_reply_tweet\tPosts a reply\tDelete manually\nx_like_tweet\tLikes a tweet\tUnlike manually\nx_follow_user\tFollows a user\tUnfollow manually\nx_send_dm\tSends a direct message\tCannot unsend\n\nRecommendation: If running autonomously, consider requiring explicit user confirmation before write actions by configuring agent-level tool policies. Read-only tools (x_get_tweet, x_search_tweets, x_get_user_profile, x_get_mentions, x_get_dms, x_get_cost_summary) are safe for autonomous use.\n\nAvailable Tools\nPosting\n\nx_post_tweet — Post a single tweet.\n\ntext (required): Tweet content (max 280 chars)\nReturns: { id, text, url, estimatedCost }\n\nx_post_thread — Post a multi-tweet thread.\n\ntweets (required): Array of tweet texts (posted in order, each as a reply to the previous)\nReturns: { threadId, tweetCount, tweets: [{ id, text, url }], estimatedCost }\n\nx_reply_tweet — Reply to an existing tweet.\n\ntweetId (required): Tweet ID or full URL (e.g. https://x.com/user/status/123456)\ntext (required): Reply content (max 280 chars)\nReturns: { id, text, url, inReplyTo, estimatedCost }\nEngagement\n\nx_like_tweet — Like a tweet.\n\ntweetId (required): Tweet ID or full URL\nReturns: { liked, tweetId, estimatedCost }\nSocial\n\nx_follow_user — Follow a user.\n\nusername (required): Username to follow (with or without @)\nReturns: { following, user: { id, username }, estimatedCost }\nResearch\n\nx_get_tweet — Get a single tweet by ID or URL.\n\ntweetId (required): Tweet ID or full URL (e.g. https://x.com/user/status/123456)\nReturns: { id, text, authorId, createdAt, metrics, conversationId, lang, url, author: { id, name, username, verified, profileImageUrl }, estimatedCost }\n\nx_search_tweets — Search recent tweets (last 7 days).\n\nquery (required): Search query — supports X operators like from:user, #hashtag, \"exact phrase\", -exclude, lang:en\nmaxResults (optional): 10–100, default 10\nReturns: { query, resultCount, tweets: [{ id, text, authorId, createdAt, metrics, url }], estimatedCost }\n\nx_get_user_profile — Get a user's profile.\n\nusername (required): Username with or without @\nReturns: { id, name, username, description, followersCount, followingCount, tweetCount, verified, profileImageUrl, url, createdAt, location, profileUrl, estimatedCost }\n\nx_get_mentions — Get recent mentions of the authenticated account.\n\nmaxResults (optional): 5–100, default 10\nReturns: { resultCount, mentions: [{ id, text, authorId, createdAt, metrics, url }], estimatedCost }\nDirect Messages\n\nx_send_dm — Send a direct message to a user.\n\nusername (required): Recipient's username (with or without @)\ntext (required): Message content\nReturns: { sent, eventId, conversationId, recipient: { id, username }, estimatedCost }\n\nx_get_dms — Get recent direct messages.\n\nusername (optional): Filter DMs to a specific user's conversation\nmaxResults (optional): 1–100, default 10\nReturns: { resultCount, messages: [{ id, text, senderId, createdAt, conversationId, eventType }], estimatedCost }\nUtility\n\nx_get_interaction_log — Get the log of all write actions performed this session (posts, replies, likes, follows, DMs). Useful to review what has already been done and avoid duplicating actions.\n\nlimit (optional): Maximum number of recent entries to return (default: all)\nReturns: { totalEntries, returned, logFile, entries: [{ timestamp, action, summary, details }] }\n\nx_get_cost_summary — Get cumulative API cost for this session.\n\nNo parameters required\nReturns: { totalCost, breakdown: { [action]: { calls, totalCost } } }\nBest Practices\nSearch Queries\nUse from:username to search a specific user's tweets\nUse #hashtag for hashtag search\nUse \"exact phrase\" for exact matches\nCombine operators: #AI from:openai -is:retweet lang:en\nUse -is:retweet to filter out retweets\nThread Formatting\nKeep each tweet under 280 characters\nStart with a strong hook in tweet 1\nNumber tweets (1/N) for long threads\nEnd with a call to action or summary\nCost Awareness\n\nEvery tool response includes an estimatedCost field. Approximate costs:\n\nPost/Reply: ~$0.01 per tweet\nLike: ~$0.005\nSearch: ~$0.005 per result\nUser lookup: ~$0.001\nMentions: ~$0.005 per result\nSend DM: ~$0.01\nRead DMs: ~$0.005 per result\nGet tweet: ~$0.005\n\nUse x_get_cost_summary to check cumulative session spend before expensive operations.\n\nRate Limits\nPosting: 200 tweets per 15 minutes\nSearch: 180 requests per 15 minutes (user), 450 (app)\nLikes: 50 per 15 minutes\nUser lookup: 900 per 15 minutes\nMentions: 180 per 15 minutes\nDMs: 200 messages per 15 minutes, 1000 per 24 hours\nFollowing: 400 per 24 hours\nError Handling\n\nAll tools return errors as { error: \"message\", details?: ... }. Common issues:\n\nRate limiting (wait and retry)\nAuthentication errors (check API credentials)\nTweet not found (verify ID/URL)\nEmpty text (provide non-empty content)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/xonder/clawbird",
    "publisherUrl": "https://clawhub.ai/xonder/clawbird",
    "owner": "xonder",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/clawbird",
    "downloadUrl": "https://openagent3.xyz/downloads/clawbird",
    "agentUrl": "https://openagent3.xyz/skills/clawbird/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clawbird/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clawbird/agent.md"
  }
}