skills/x/SKILL.md
Post and manage tweets on X (formerly Twitter) via API v2
npx skillsauth add alanalvestech/hitank xInstall 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.
Connect to the X (formerly Twitter) API v2 to post tweets, search, view timelines and manage likes. Pure Ruby, zero gems — stdlib only.
scripts/
├── auth.rb # OAuth 1.0a signature + twitter_request helper (required by all scripts)
├── check_setup.rb # Check if credentials exist (outputs OK or SETUP_NEEDED)
├── save_token.rb # Save and validate API credentials
├── me.rb # Get authenticated user info
├── tweets.rb # List recent tweets for a user
├── tweet.rb # Get tweet details by ID
├── post_tweet.rb # Post a new tweet (requires confirmation)
├── delete_tweet.rb # Delete a tweet (requires confirmation)
├── search.rb # Search recent tweets
├── likes.rb # List liked tweets
└── like.rb # Like a tweet (requires confirmation)
ruby ~/.claude/skills/x/scripts/check_setup.rb
If the output is OK, proceed to the Flow section.
If the output is SETUP_NEEDED, guide the user step by step. Present ONE step at a time, wait for the user to confirm before moving to the next.
Step 1 — Ask the user to create a Twitter Developer app:
You need Twitter API credentials. Go to the Developer Portal and create a project and app:
https://developer.x.com/en/portal/dashboard
- Create a new Project (or use an existing one)
- Create an App inside that project
Step 2 — Ask the user to generate credentials:
In your app settings, go to "Keys and tokens" and generate all 4 credentials:
- API Key (also called Consumer Key)
- API Key Secret (also called Consumer Secret)
- Access Token
- Access Token Secret
Copy all 4 values.
Step 3 — Ask the user to check permissions:
Make sure your app has Read and Write permissions. You can check this under your app's "User authentication settings" in the Developer Portal.
Step 4 — When the user pastes the credentials, save them:
ruby ~/.claude/skills/x/scripts/save_token.rb 'API_KEY' 'API_SECRET' 'ACCESS_TOKEN' 'ACCESS_TOKEN_SECRET'
If the script outputs an error, the credentials are invalid. Ask the user to double-check and try again.
If setup is not complete, DO NOT proceed to the Flow. Complete all steps first.
The argument $ARGUMENTS may contain tweet text or a tweet ID.
ruby ~/.claude/skills/x/scripts/me.rb
Present the account info to the user.
Ask the user what they want to do:
If $ARGUMENTS looks like tweet text (not a number), offer to post it. If it looks like a tweet ID (numeric), offer to view it.
Post a tweet (requires user confirmation):
Ask the user to type the tweet text. Show a preview of the tweet and its character count. Ask: "Do you want to post this tweet?" Only execute after a "yes".
ruby ~/.claude/skills/x/scripts/post_tweet.rb 'TWEET_TEXT'
List recent tweets:
ruby ~/.claude/skills/x/scripts/tweets.rb
ruby ~/.claude/skills/x/scripts/tweets.rb --user_id USER_ID
View a tweet:
ruby ~/.claude/skills/x/scripts/tweet.rb TWEET_ID
Search recent tweets:
ruby ~/.claude/skills/x/scripts/search.rb 'SEARCH_QUERY'
Delete a tweet (requires user confirmation):
Show the tweet details first, then ask: "Do you want to delete this tweet?" Only execute after a "yes".
ruby ~/.claude/skills/x/scripts/delete_tweet.rb TWEET_ID
View liked tweets:
ruby ~/.claude/skills/x/scripts/likes.rb
ruby ~/.claude/skills/x/scripts/likes.rb --user_id USER_ID
Like a tweet (requires user confirmation):
Show the tweet details first, then ask: "Do you want to like this tweet?" Only execute after a "yes".
ruby ~/.claude/skills/x/scripts/like.rb TWEET_ID
~/.config/x/ (4 files, never commit)https://api.twitter.comdevelopment
Manage Zendesk tickets, users, organizations and knowledge base via REST API
development
Manage Vercel projects, deployments, domains and environment variables via API
development
Manage Twilio SMS, calls, phone numbers and usage via REST API
development
Manage Trello boards, lists, cards, checklists, labels and members via REST API