From tweet
Post tweets to X (Twitter) from Claude Code. Supports single tweets, threads (auto-split or manual), and replies. Use when user says "/tweet", "post a tweet", "tweet this", "post a thread", "reply to this tweet". NOT for reading tweets, analytics, scheduling, or DMs.
npx claudepluginhub omriariav/omri-cc-stuff --plugin tweetThis skill is limited to using the following tools:
Post tweets from Claude Code via the X API v2. Supports single tweets, threads (auto-split for long text), and replies.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
Post tweets from Claude Code via the X API v2. Supports single tweets, threads (auto-split for long text), and replies.
bash scripts/verify-setup.sh. If credentials are missing:
bash scripts/setup.sh — this pops up native macOS dialogs for each key (values never pass through the conversation)$ARGUMENTS as the tweet prompt. If it's a direct tweet (clear, short text), use as-is. If it's a description/topic, draft tweet text. No length restriction at this stage.AskUserQuestion prompt. Then:
(N/280 chars), then AskUserQuestion with options:
(N chars — over limit), then AskUserQuestion with options:
1/3: First part of the tweet text shown in full here... (278/280)
2/3: Second part text shown in full here... (265/280)
3/3: Final part shown in full. (42/280)
Then AskUserQuestion with options:
--reply-to chaining (see "Thread (pre-split)" in Step 3)python3 scripts/post.py "the tweet text here"--reply-to chaining. This preserves your exact tweet boundaries from the preview:
python3 scripts/post.py "1/N: first tweet text"
# capture tweet_id from output
python3 scripts/post.py --reply-to TWEET_ID "2/N: second tweet text"
# repeat for each part
python3 scripts/post.py --thread "the full long text here" — WARNING: this splits on word boundaries by character count, ignoring paragraph breaks. Only use for unstructured text where split points don't matter.python3 scripts/post.py --reply-to TWEET_ID "reply text here"Read references/drafting-guidelines.md for baseline rules, config.json for operational defaults (char target, thread style), and LEARNINGS.json for user-specific voice and preferences.
Before drafting any tweet, read LEARNINGS.json to match the user's established voice and preferences. Read config.json for operational defaults.
After each tweet is posted (confirmed via script output), append a new entry to the entries array in LEARNINGS.json for any patterns you noticed:
Each entry has date, category (one of: tone, phrasing, structure, feedback), and observation fields. Do not duplicate existing observations.
If the entries array exceeds 30 items, consolidate related entries before appending new ones.
Read references/char-counting.md for detailed rules. Key point: aim for 270 chars max and use python3 -c "print(len(...))" for exact counts near the limit.
Scripts output JSON with id, url, text fields. Threads return an array with a part number per entry. Errors return {"error": "..."}.
--thread. The --thread auto-splitter ignores paragraph structure and will break your carefully crafted tweets at arbitrary word boundaries.--thread auto-splitter collapses all whitespace (including \n\n) and re-splits on word count, not paragraph boundaries. A previewed 7-tweet thread may become 6 tweets with mid-sentence breaks. Fix: use --reply-to chaining for pre-split threads. (2026-02-20)post.py's actual count by 5-30 chars, causing "Tweet too long" errors and retry loops. Root cause: URL length, special chars, newlines counted differently. Fix: use python3 -c "print(len(...))" for exact count, or aim for 270 chars. (2026-02-22)