skills/x-operations/SKILL.md
Cross-channel X (Twitter) operations using the configured X plugin: post tweets, reply, quote, like, repost, follow, unfollow, DM, search, timeline, tweet details, user info — from any channel (Feishu, X, Telegram, CLI, Web, webchat, etc. ). Use when the user mentions any X/Twitter action regardless of which channel the conversation is on.
npx skillsauth add qverisai/qverisbot x-operationsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
QVerisBot has a built-in X (Twitter) plugin already configured with OAuth credentials. All X operations go through this plugin via the message tool's x-* actions. You do not need to call any external API, use browser automation, or search for third-party tools.
The X plugin is a platform-level service, not a channel-bound feature. It uses pre-configured OAuth credentials to execute X operations on behalf of the user.
Your current conversation channel is just where you receive instructions. X operations always execute through the X plugin regardless of whether you are talking to the user on Feishu, Telegram, CLI, Web UI, or X itself.
| Conversation channel | User says | What you do |
| -------------------- | --------------------- | ------------------------------------------------------ |
| Feishu | "帮我发一条推文" | message({ action: "x-post", message: "..." }) |
| Feishu | "搜索 AI 相关推文" | message({ action: "x-search", query: "AI" }) |
| Telegram | "Follow @elonmusk" | message({ action: "x-follow", target: "@elonmusk" }) |
| CLI | "看看 @openai 的推文" | message({ action: "x-timeline", target: "@openai" }) |
| Web UI | "转发这条推" | message({ action: "x-repost", target: "<tweet>" }) |
| X (mention) | "@bot 关注 @xxx" | message({ action: "x-follow", target: "@xxx" }) |
There is no restriction preventing X operations from non-X channels. The X plugin handles everything internally.
| Action | Description | Required params |
| ------------ | ---------------------------------- | ----------------------------------------------------- |
| x-post | Post a new standalone tweet | message (text, max 280 chars) |
| x-reply | Reply to / comment on a tweet | target (tweet URL or ID), message (max 280 chars) |
| x-quote | Quote tweet (retweet with comment) | target (tweet URL or ID), message (max 280 chars) |
| x-like | Like a tweet | target (tweet URL or tweet ID) |
| x-unlike | Unlike a tweet | target (tweet URL or tweet ID) |
| x-repost | Repost (retweet) | target (tweet URL or tweet ID) |
| x-unrepost | Undo repost (unretweet) | target (tweet URL or tweet ID) |
| x-follow | Follow a user | target (username or user ID) |
| x-unfollow | Unfollow a user | target (username or user ID) |
| x-dm | Send a direct message | target (username or user ID), message (text) |
| Action | Description | Required params |
| -------------- | --------------------------------- | ----------------------------------------------------- |
| x-search | Search recent tweets by keyword | query (search string), optional maxResults |
| x-timeline | Get a user's recent tweets | target (username or user ID), optional maxResults |
| x-tweet-info | Get tweet details with metrics | target (tweet URL or tweet ID) |
| x-user-info | Look up a user's profile | target (username) |
| x-me | Get current authenticated account | (no params needed) |
@elonmusk or elonmusk44196397https://x.com/user/status/123456789 or https://twitter.com/user/status/123456789123456789accountId: specify which X account to use (only for multi-account setups)message({ action: "x-post", message: "Hello world!" })
message({
action: "x-reply",
target: "https://x.com/user/status/1234567890",
message: "Great insight!"
})
message({
action: "x-quote",
target: "https://x.com/user/status/1234567890",
message: "This is spot on! Highly recommended read."
})
message({ action: "x-search", query: "AI agents", maxResults: 10 })
Returns a list of tweets with text, author info, and engagement metrics (likes, retweets, replies, etc.).
message({ action: "x-timeline", target: "@openai", maxResults: 5 })
message({ action: "x-tweet-info", target: "https://x.com/user/status/1234567890" })
Returns: text, author, creation time, like count, retweet count, reply count, quote count, impression count.
message({ action: "x-user-info", target: "@elonmusk" })
message({ action: "x-me" })
message({ action: "x-like", target: "https://x.com/user/status/1234567890" })
message({ action: "x-repost", target: "https://x.com/user/status/1234567890" })
message({ action: "x-follow", target: "@openai" })
message({ action: "x-follow", target: "@anthropic" })
message({ action: "x-dm", target: "@username", message: "Hey!" })
// 1. Search
message({ action: "x-search", query: "AI", maxResults: 10 })
// 2. Analyze results — pick top 3 by metrics.likeCount + metrics.retweetCount
// 3. Like top 3
message({ action: "x-like", target: "<tweet_id_1>" })
message({ action: "x-like", target: "<tweet_id_2>" })
message({ action: "x-like", target: "<tweet_id_3>" })
// 1. Get timeline
message({ action: "x-timeline", target: "@elonmusk", maxResults: 10 })
// 2. For each tweet, get details to see engagement metrics
message({ action: "x-tweet-info", target: "<tweet_id>" })
// 3. Pick the hottest one, compose a relevant reply
message({
action: "x-reply",
target: "<hottest_tweet_id>",
message: "Your thoughtful comment (max 280 chars)"
})
message({
action: "x-quote",
target: "https://x.com/user/status/123",
message: "Fascinating perspective on the future of AI!"
})
message({ action: "x-me" })
| User says (Chinese) | Action |
| ----------------------------------- | -------------- |
| 发推文 / 发一条推 / 发 tweet | x-post |
| 回复推文 / 评论这条推 | x-reply |
| 引用转推 / 带评论转推 / quote tweet | x-quote |
| 点赞 / 给这条推点个赞 | x-like |
| 取消点赞 | x-unlike |
| 转推 / 转发 | x-repost |
| 取消转推 | x-unrepost |
| 关注 / follow | x-follow |
| 取关 / unfollow | x-unfollow |
| 私信 / DM | x-dm |
| 搜索推文 / 找推文 / search tweets | x-search |
| 看看 xxx 的推文 / 时间线 / timeline | x-timeline |
| 这条推的数据 / 推文详情 / 互动数据 | x-tweet-info |
| 查用户 / 用户信息 / user info | x-user-info |
| 我的账号 / 当前账号 | x-me |
**bold**, *italic*, `code`.Write actions require allowlist permission. Read actions do not.
Read actions (x-search, x-timeline, x-tweet-info, x-user-info, x-me) — always allowed, no permission check needed.
Write actions permission cascade (checked in order):
channels.x.actionsAllowFrom.channels.<channel>.xActionsAllowFrom is set, sender must be in it. Otherwise, if channels.<channel>.allowFrom is set, sender must be in it. Otherwise, if channels.x.actionsAllowFrom is configured (any value), the action is allowed (the owner explicitly enabled X actions and the sender is authenticated by the originating channel).channels.x.actionsAllowFrom is configured.In practice: if channels.x.actionsAllowFrom is configured during onboarding, cross-channel X write actions work from any channel without extra configuration. You do NOT need to set channels.feishu.xActionsAllowFrom separately.
message tool's x-* actions are the correct and only interface.x-reply on X, NOT a Feishu reply.tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
development
Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location. NOT for: historical weather data, severe weather alerts, or detailed meteorological analysis. No API key needed.
tools
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
tools
Start voice calls via the OpenClaw voice-call plugin.