post-twitter

Publishes single posts and threads to X via the X API v2 with OAuth 1.0a authentication.

2|Updated Apr 5, 2026
One-click install
npx skills add https://github.com/witwave-ai/witwave --skill post-twitter-witwave-ai
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: post-twitter
Source: https://github.com/witwave-ai/witwave/tree/main/.agents/self/piper/.claude/skills/post-twitter
Command: npx skills add https://github.com/witwave-ai/witwave --skill post-twitter-witwave-ai

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires requests-oauthlib.

What problem does it solve? It handles the final publish step of posting drafted content to X (Twitter), so an agent or user can send a single post or a chained thread to the X API v2 without hand-writing OAuth signatures, character-limit checks, or duplicate-post guards. ## Core Features & Use Cases - Single post and thread publishing: Posts text up to 280 characters, or chains multiple posts via reply.in_reply_to_tweet_id so threads render correctly on X. - Pre-flight validation: Verifies the four OAuth 1.0a credentials exist, enforces the 280-character limit (counting URLs as 23 chars), and blocks duplicate content posted within the last 24 hours. - Draft mode fallback: When X credentials are missing, writes the would-be post to a drafts directory instead of calling the API, so content can be reviewed before going live. - Use Case: An autonomous agent decides a release announcement is worth sharing, drafts the text, and invokes this Skill to publish it to the team's X account, logging the post URL and IDs for audit. ## Quick Start Ask the agent to post to X with the text of your announcement, and it will validate, publish, and return the post URL.

Frequently Asked Questions about post-twitter

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I post a tweet to X using the X API v2?▼

Authenticate with OAuth 1.0a user-context using your API key, API secret, access token, and access token secret, then POST a JSON payload with the text field to https://api.x.com/2/tweets. The response contains the post ID used to build the status URL.

How do I post a Twitter thread with the X API?▼

Post the first entry standalone, then post each subsequent entry as a reply to the immediately previous post using reply.in_reply_to_tweet_id. Each post must reply to the prior one, not the first, for X to render the thread correctly.

Does the X API count URLs toward the 280 character limit?▼

Yes, but URLs count as 23 characters regardless of actual length because X auto-shortens them via t.co. Validate post length with this adjustment before sending to avoid unnecessary 4xx rejections.

Why does the X API return a 401 error when posting?▼

A 401 means the OAuth credentials are wrong, expired, or revoked, or the signature is malformed. Do not retry repeatedly since failed attempts burn rate-limit budget; rotate the credentials and check the app permissions instead.

Can this skill post images, polls, or retweets to X?▼

No, it supports text-only posts and threads. Media uploads require the separate /2/media/upload endpoint with a different auth flow, and polls, quotes, retweets, edits, and deletions are explicitly out of scope.