MCPInstall

twitter-reader

Fetches Twitter/X post and Article content — text, author, engagement metrics and embedded media — downloading images locally and generating complete Markdown with image references. Use when retrieving a tweet's text or an X Article with images, or pulling post metadata for a Markdown/PKM record. Preferred over Jina alone for X Articles with images.

Installs
3.3K
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/daymade/claude-code-skills --skill twitter-reader
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads twitter-reader automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Twitter Reader

Fetch Twitter/X post and article content with full media support.

Reading a single post's text: fxtwitter first (2026-08-30)

For plain post text, prefer the fxtwitter mirror API — login-free, key-free, works direct, and returns the full note_tweet body in tweet.text (the full_text key does not exist; a 2,324-char long-form announcement came back complete):

curl -sS --max-time 20 "https://api.fxtwitter.com/<user>/status/<id>" \
  | python3 -c "import json,sys; t=json.load(sys.stdin)['tweet']; print(t['created_at']); print(t['text'])"

replies is a count, not the reply thread. For X Articles with images, use fetch_article.py below — fxtwitter does not carry article bodies.

X Articles with images: fetch_article.py

uv run --with pyyaml python scripts/fetch_article.py <article_url> [output_dir]

Example:

uv run --with pyyaml python scripts/fetch_article.py \
  https://x.com/HiTw93/status/2040047268221608281 \
  ./Clippings

This will:

  • Fetch structured data via twitter-cli (likes, retweets, bookmarks)
  • Fetch content with images via jina.ai API
  • Download all images to attachments/YYYY-MM-DD-AUTHOR-TITLE/
  • Generate complete Markdown with embedded image references
  • Include YAML frontmatter with metadata

Metadata and plain article text come from twitter-cli; the image URLs ride in the markdown Jina's reader returns. When Jina refuses (see the section below), the script warns on stderr, keeps the twitter-cli text, and reports Images: 0. The Markdown is still correct; it simply has no pictures. Images: 0 on an article that visibly contains images is the signature of a Jina refusal.

Example Output

Fetching: https://x.com/HiTw93/status/2040047268221608281
--------------------------------------------------
Getting metadata...
Title: 你不知道的大模型训练:原理、路径与新实践
Author: Tw93
Likes: 1648

Getting content and images...
Images: 15

Downloading 15 images...
  ✓ 01-image.jpg
  ✓ 02-image.jpg
  ...

✓ Saved: ./Clippings/2026-04-03-文章标题.md
✓ Images: ./Clippings/attachments/2026-04-03-HiTw93-.../ (15 downloaded)

Jina's reader is intermittent, and its refusals look like success

Anonymous r.jina.ai access to x.com gets blocked for hours at a time when third-party callers abuse the domain. The block hits every anonymous caller and then expires on its own. Both states showed up minutes apart on 2026-09-12.

A refusal does not look like a failure. curl exits 0 and the body is a JSON envelope:

{"data":null,"code":403,"name":"AbuseAlleviationError","status":40305,
 "message":"Anonymous access to domain x.com blocked until <date> ..."}

A lapsed or unfunded key returns the same shape with "code":402, "name":"InsufficientBalanceError". curl --fail catches neither: this endpoint answered HTTP 200 with the envelope in the body. The one signal that holds is the Markdown Content: marker that Jina's reader puts in front of the article body: no marker, no article. fetch_article.py tests for that marker before accepting a response, which keeps a refusal envelope out of the generated Markdown.

scripts/fetch_tweets.sh and scripts/fetch_tweet.py both require JINA_API_KEY and have no second source to fall back to, so they stop working whenever that key lapses. Both check the same marker and fail loudly on a refusal — the Python one raises without writing the output file, the shell one reports the URL on stderr and exits non-zero — rather than handing back an envelope dressed up as a post. No key ships with this repository.

For simple text-only fetching:

# Single tweet
curl "https://r.jina.ai/https://x.com/USER/status/TWEET_ID" \
  -H "Authorization: Bearer ${JINA_API_KEY}"

# Batch fetching
scripts/fetch_tweets.sh url1 url2 url3

Features

Full Article Mode (fetch_article.py)

  • ✅ Structured metadata (author, date, engagement metrics)
  • ✅ Automatic image download (all embedded media)
  • ✅ Complete Markdown with local image references
  • ✅ YAML frontmatter for PKM systems
  • ✅ Handles X Articles (long-form content)

Simple Mode (Jina API)

  • Text-only content
  • Intermittent availability (see the section above); both scripts require JINA_API_KEY and have no fallback
  • Usable for quick text extraction while Jina is answering

Prerequisites

For Full Article Mode

  • uv (Python package manager)
  • No additional setup (twitter-cli auto-installed)

For Simple Mode (Jina)

export JINA_API_KEY="your_api_key_here"
# Get from https://jina.ai/

Output Structure

output_dir/
├── YYYY-MM-DD-article-title.md       # Main Markdown file
└── attachments/
    └── YYYY-MM-DD-author-title/
        ├── 01-image.jpg
        ├── 02-image.jpg
        └── ...

What Gets Returned

Full Article Mode

  • YAML Frontmatter: source, author, date, likes, retweets, bookmarks
  • Markdown Content: Full article text with local image references
  • Attachments: All downloaded images in dedicated folder

Simple Mode

  • Title: Post author and content preview
  • URL Source: Original tweet link
  • Published Time: GMT timestamp
  • Markdown Content: Text with remote media URLs

URL Formats Supported

  • https://x.com/USER/status/ID (posts)
  • https://x.com/USER/article/ID (long-form articles)
  • https://twitter.com/USER/status/ID (legacy)

Scripts

fetch_article.py

Full-featured article fetcher with image download:

uv run --with pyyaml python scripts/fetch_article.py <url> [output_dir]

fetch_tweet.py

Simple text-only fetcher using Jina API:

python scripts/fetch_tweet.py <tweet_url> [output_file]

fetch_tweets.sh

Batch fetch multiple tweets (Jina API):

scripts/fetch_tweets.sh <url1> <url2> ...

twitter-cli's 500-item ceiling belongs to the tool, not to X

This skill reads metadata through twitter-cli, so the tool's own limits apply. twitter bookmarks and the other timeline commands stop at 500 items however the config is written. That ceiling is a module constant in the client: _ABSOLUTE_MAX_COUNT = 500 in twitter_cli/client.py, applied as min(maxCount, 500) when the client is constructed. Both lines read from version 0.8.5. X's own bookmark timeline goes far deeper than that.

Two consequences are easy to get wrong:

  • A run that stops at exactly 500 stopped on its own counter and never reached the point of reading the next cursor. "The platform gave no further page" and "my loop finished" are different claims, and only the first one is evidence. A round number is a reason to look closer, not a boundary.
  • maxCount has to sit under the rateLimit: section of the config. Put it under fetch: and the client ignores it without any message, falling back to 200.

Going deeper means calling the GraphQL endpoint directly: the Bookmarks operation with the client's own feature flags, parsed by twitter_cli.parser.parse_timeline_response, paging until the platform stops returning a cursor or returns the same cursor twice. Stop on the platform's signal rather than on a count.

Migration from Jina API

Old workflow:

curl "https://r.jina.ai/https://x.com/..."
# Manual image extraction and download

New workflow:

uv run --with pyyaml python scripts/fetch_article.py <url>
# Automatic image download, complete Markdown

FAQ

What does the twitter-reader skill do?

Fetches Twitter/X post and Article content — text, author, engagement metrics and embedded media — downloading images locally and generating complete Markdown with image references. Use when retrieving a tweet's text or an X Article with images, or pulling post metadata for a Markdown/PKM record. Preferred over Jina alone for X Articles with images.

How do I install twitter-reader?

Run npx skills add https://github.com/daymade/claude-code-skills --skill twitter-reader in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/twitter-reader/ (personal) or .claude/skills/twitter-reader/ (project).

Which AI agents can use twitter-reader?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is twitter-reader safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains twitter-reader?

It is published by daymade in daymade/claude-code-skills. It has 3,252 recorded installs.

More from daymade/claude-code-skills

View all →

i18n-expert

daymade/claude-code-skills

This skill should be used when setting up, auditing, or enforcing internationalization/localization in UI codebases (React/TS, i18next or similar, JSON locales), including installing/configuring the i18n framework, replacing hard-coded strings, ensuring en-US/zh-CN coverage, mapping error codes to localized messages, and validating key parity, pluralization, and formatting.

Frontend & Design2.7K installs

prompt-optimizer

daymade/claude-code-skills

Transforms vague prompts or feature requests into precise, testable specifications using EARS (Easy Approach to Requirements Syntax) grounded in relevant domain theories (GTD, BJ Fogg, Gestalt). Use when requirements lack triggers or measurable outcomes, or the user asks to "optimize my prompt" / "improve this requirement" / "make this more specific".

AI & Agents2.1K installs

ppt-creator

daymade/claude-code-skills

Deprecated presentation entry retained as a compatibility notice. Use to check the retirement status of ppt-creator or identify a legacy installation. This package does not generate PPTX files.

Docs & Writing2K installs

qa-expert

daymade/claude-code-skills

Sets up QA testing processes: test strategies, Google Testing Standards test cases, P0-P4 bug tracking, quality metrics, progress reports, autonomous execution via master prompts, and OWASP security testing, with third-party QA handoff docs. Use when establishing QA infrastructure, writing test cases, executing test plans, or tracking bugs. Not for auditing an already-rendered UI (use frontend-visual-qa).

Testing & QA2K installs

macos-cleaner

daymade/claude-code-skills

Diagnoses and safely reclaims macOS disk space: caches, logs, app remnants, large/duplicate files, Docker/OrbStack, Chromium code-sign clones, developer caches. Use when a Mac is low on storage, shows “Caching needs more space”, or before deleting anything to avoid data loss. Not for Windows/Linux or permission issues (use macos-permissions).

DevOps & Cloud1.8K installs

deep-research

daymade/claude-code-skills

Creates reusable, source-traced research reports and coordinates provider/mode lanes with original exports. Use for 深度研究, 调研报告, literature reviews, market or company research, and ChatGPT/Kimi/UniFuncs research routes. Technology choice uses tech-selection; competitor code uses competitors-analysis.

Popular marketing & seo skills

View category →

reddit-automation

flowkit-labs/skills

Find Reddit threads where people are genuinely asking for what you offer, then draft short, genuinely helpful replies — disclosing your affiliation honestly and naming your product only when it truly answers the question. Two moves: discovery — scan the right subreddits for real needs (recommendation asks, expressed pain, competitor mentions) and rank the few threads where you can actually help; drafting — write from real experience, respect each community's self-promo rules, and keep a human in the loop to review and post. This markets on Reddit the honest way: contribute value, disclose who you are, never astroturf. Distilled from the playbook behind doany.ai's Reddit agent. Triggers on "find reddit opportunities", "reddit marketing", "reddit automation", "reply on reddit for my product", "reddit community engagement", "reddit lead gen", or any ask to turn Reddit threads into genuine, disclosed marketing replies.

Marketing & SEO1.1M installs

twitter-automation

101-skills/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO880K installs

twitter-automation

magentosh/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO771.7K installs

twitter-automation

qu-skills/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO564.3K installs

product-launch-video

heygen-com/hyperframes

Turn a product or marketing URL, pasted script, or brief into a product launch / promo video — SaaS promos, feature reveals, product demos, app and company launches. Use when the user wants to market, launch, promote, or reveal a product; the default for any commercial URL. Site tours / showcases of a website route here too — the brief carries the show-it-as-is intent. Unclear → /hyperframes.

Marketing & SEO538.7K installs

twitter-automation

skills-shell/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO453.7K installs