Agent skill

Twitter Reader

by daymade in daymade/claude-code-skills

Fetches Twitter/X post and Article content — text, author, engagement metrics and embedded media — downloading images locally and generating complete Markdown with image references.

MITAuto-check passedWriting & Content

Install Twitter Reader

skills CLI
$ npx skills add daymade/claude-code-skills --skill twitter-reader -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install daymade/claude-code-skills twitter-reader --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/daymade/claude-code-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/twitter-reader .claude/skills/twitter-reader && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
twitter-reader
GitHub stars
1.4k
Token cost
~1.9k tokens
SKILL.md length
776 words
Files
4 (incl. scripts)
Skills in repo
103
Repo updated
First seen
Licence
MIT

At a glance

Fetches Twitter/X post and Article content — text, author, engagement metrics and embedded media — downloading images locally and generating complete Markdown with image references.

  • Retrieving a tweets text
  • SKILL.md covers Reading a single post's text:…, X Articles with images:…, Jina's reader is intermittent,… and Features, plus 7 more sections
  • Runs Python and Shell scripts from its folder; calls uv, curl and python3; reaches x.com and r.jina.ai; needs JINA_API_KEY
  • An X Article with images

What it does

Twitter Reader is an agent skill from daymade/claude-code-skills. 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.

Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts (for example `scripts/fetch_article.py`, `scripts/fetch_tweet.py` and `scripts/fetch_tweets.sh`).

It sits in Writing & Content, covering Social media posts, Product metrics and Markdown. It works with X (Twitter). The repository describes itself as: Professional Claude Code skills marketplace featuring production-ready skills for enhanced development workflows. The licence is MIT.

When your agent uses it

  • Retrieving a tweets text
  • An X Article with images
  • Pulling post metadata for a Markdown/PKM record

Example prompts

  • “Use the twitter-reader skill to fetch Twitter/X post and Article content — text, author, engagement metrics and embedded media — downloading images…”
  • “/twitter-reader”

Requirements

  • Python 3
  • A Bash shell
  • A credential in JINA_API_KEY

What it can do on your machine

Read from SKILL.md and the folder at commit 91bed2b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 3 files in scripts/ (Python and Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • uv
    • curl
    • python3
    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • x.com
    • r.jina.ai
    • twitter.com
    • api.fxtwitter.com
    • jina.ai

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • JINA_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Twitter Reader loads about 1.9k tokens when it runs. Until then it costs about 92 tokens; SKILL.md has 776 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~92
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from daymade/claude-code-skills at commit 91bed2b, republished under its MIT licence (© daymade). 776 words, ~1,950 tokens.

Download SKILL.mdSave it as .claude/skills/twitter-reader/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
twitter-reader
description
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.

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):

bash
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

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

Example:

bash
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:

json
{"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:

bash
# 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)
Show full SKILL.md (307 more words)Show less
For Simple Mode (Jina)
bash
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:

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

Simple text-only fetcher using Jina API:

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

Batch fetch multiple tweets (Jina API):

bash
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

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:

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

New workflow:

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

© daymade, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts) in twitter-reader of daymade/claude-code-skills.

  • SKILL.md
  • scripts/fetch_article.py
  • scripts/fetch_tweet.py
  • scripts/fetch_tweets.sh

Open the folder on GitHubat commit 91bed2b

Compare with similar skills

Twitter Reader next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Twitter Reader compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Twitter Reader this skilldaymade/claude-code-skills1.4k—~1.9kAutomated safety check: PassMIT
Browse Xpc-style/x-md159—~733Automated safety check: PassMIT
Adhxmajiayu000/claude-skill-registry6663 repos~1.1kAutomated safety check: PassMIT
Socialcoreyhaines31/marketingskills54k4 repos~4.5kAutomated safety check: PassMIT
Social Contentfreekmurze/dotfiles1k23 repos~2.1kAutomated safety check: PassNone
Typefullyfreekmurze/dotfiles1k2 repos~3.4kAutomated safety check: NotesNone

Similar skills

  • Browse X

    pc-style/x-md

    Reads public X (formerly Twitter) posts, threads, X Articles, profiles, followers, following, and search results as Markdown or JSON, with no X account and no API key.

    159 GitHub stars~733 tokensUpdated 2 days ago
    Productivity & AutomationAuto-check passed
  • Adhx

    majiayu000/claude-skill-registry

    Fetch any X/Twitter post as clean LLM-friendly JSON. An agent skill from majiayu000/claude-skill-registry.

    666 GitHub starsUsed in 3 repos~1.1k tokens
    Data & AnalyticsAuto-check passed
  • Social

    coreyhaines31/marketingskills

    When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, or Facebook, or wants to do social listening and engagement triage.

    54k GitHub starsUsed in 4 repos~4.5k tokens
    Writing & ContentAuto-check passed
  • Social Content

    freekmurze/dotfiles

    When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms.

    1k GitHub starsUsed in 23 repos~2.1k tokens
    Writing & ContentAuto-check passed
  • Typefully

    freekmurze/dotfiles

    Create, schedule, and manage social media posts via Typefully.

    1k GitHub starsUsed in 2 repos~3.4k tokens
    Writing & ContentAuto-check: notes
  • Changelog Social Recap

    FlorianBruniaux/claude-code-ultimate-guide

    Turns CHANGELOG.md entries for a release or a week into LinkedIn, Twitter/X, newsletter and Slack posts in French and English.

    6.1k GitHub stars~1.8k tokensUpdated today
    Writing & ContentAuto-check: notes

More from daymade/claude-code-skills

All 103 skills in this repo
  • Video Comparer

    daymade/claude-code-skills

    This skill should be used when comparing two videos to analyze compression results or quality differences.

    1.4k GitHub starsUsed in 1 repo~1.4k tokens
    Auto-check: notes
  • CLI Demo Generator

    daymade/claude-code-skills

    Generates professional animated CLI demos as GIFs using VHS terminal recordings.

    1.4k GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Doc To Markdown

    daymade/claude-code-skills

    Converts DOCX/PDF/PPTX and saved HTML/HTM to high-quality Markdown with automatic post-processing.

    1.4k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Interaction Design Board

    daymade/claude-code-skills

    Generates several distinct, clickable HTML interaction prototypes for one product surface into a Design Board and collects selection/remix feedback before implementation.

    1.4k GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Auto Repo Setup

    daymade/claude-code-skills

    Diagnoses and repairs repository setup and guarded Git workflows for Claude Code or Codex — environment repair, startup sync, hook auditing, collaborator handoff.

    1.4k GitHub stars~2.6k tokensUpdated today
    Auto-check: notes
  • Bigdata Skill

    daymade/claude-code-skills

    Pulls Bigdata.com (RavenPack) financial and news data via the official bigdata-client SDK and /v1/ REST endpoints — structured financials, prices, analyst estimates, entity-sentiment series…

    1.4k GitHub stars~3.7k tokensUpdated today
    Auto-check passed

Works with

Questions about Twitter Reader

What does Twitter Reader 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. Twitter Reader is an agent skill from daymade/claude-code-skills. Fetches Twitter/X post and Article content — text, author, engagement metrics and embedded media — downloading images locally and generating complete Markdown with image references.

When should I use Twitter Reader?

Twitter Reader fits situations like: retrieving a tweets text; an X Article with images; pulling post metadata for a Markdown/PKM record.

How do I install Twitter Reader in Claude Code?

Run `npx skills add daymade/claude-code-skills --skill twitter-reader -a claude-code`. Or copy the skill folder (twitter-reader in daymade/claude-code-skills) into .claude/skills/twitter-reader in your project. Claude Code loads it when a task matches its description.

How do I install Twitter Reader in Codex?

Run `npx skills add daymade/claude-code-skills --skill twitter-reader -a codex`. Or copy the skill folder (twitter-reader in daymade/claude-code-skills) into .agents/skills/twitter-reader in your project. Codex loads it when a task matches its description.

Can I use Twitter Reader in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add daymade/claude-code-skills --skill twitter-reader -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/twitter-reader, .gemini/skills/twitter-reader, .github/skills/twitter-reader and .opencode/skills/twitter-reader in your project.

What does Twitter Reader need to run?

Going by SKILL.md and its folder, Twitter Reader needs Python and a shell for the scripts in its folder, the command-line tools its instructions call (uv, curl, python3 and python) and credentials named JINA_API_KEY. Our summary lists: Python 3; A Bash shell; A credential in JINA_API_KEY.

Does Twitter Reader access the network?

SKILL.md names 5 domains. In commands or code: x.com, r.jina.ai, twitter.com, api.fxtwitter.com and jina.ai; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Twitter Reader safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Twitter Reader use?

Twitter Reader is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Twitter Reader use?

About 1.9k tokens (SKILL.md is roughly 7.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Twitter Reader?

Skills that share tags, products or a category with Twitter Reader: Browse X (pc-style/x-md, 159 stars), Adhx (majiayu000/claude-skill-registry, 666 stars), Social (coreyhaines31/marketingskills, 54k stars) and Social Content (freekmurze/dotfiles, 1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Twitter Reader?

daymade (a GitHub user) maintains it in daymade/claude-code-skills, which has 1,444 GitHub stars. The repository holds 103 skills in this directory. The repository was last updated on October 8, 2026.

Source: daymade/claude-code-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.