domains / research / twitter-x-content-retrieval / twitter-reader

twitter-reader

Skill card

combined

The two skills share the name and the broad goal of reading Twitter/X, but they implement materially different procedures and tools. The first copy is a read-only financial-research skill built on opencli (browser-session reuse, opencli doctor, timeline/search/trending/bookmarks/profiles/notifications). The second copy is a content-fetching skill built on fxtwitter, Jina, and local scripts (fetch_article.py, fetch_tweet.py, fetch_tweets.sh) that downloads images and emits Markdown with YAML frontmatter. Neither copy is a reproduction, shortening, or wrapper of the other; crowning one would hide a real alternative workflow. They also disagree on prerequisites (Chrome + Browser Bridge + opencli vs uv + JINA_API_KEY + fxtwitter) and on what the skill can do (broad read-only browsing vs single-post/article fetching with media).

Repositories

RepositoryPath
himself65/finance-skillsplugins/social-readers/skills/twitter-reader/SKILL.md
daymade/claude-code-skillstwitter-reader/SKILL.md

Other copies

RoleRepositoryPath
peerhimself65/finance-skillsplugins/social-readers/skills/twitter-reader/SKILL.md
peerdaymade/claude-code-skillstwitter-reader/SKILL.md

Combined skill

---
name: twitter-reader
description: >
  Read Twitter/X content for research or archiving. Use the opencli path for broad
  read-only browsing (timeline, search, trending, bookmarks, profiles, notifications)
  and the fxtwitter/Jina/script path for fetching a single post or X Article with
  images into Markdown. Read-only: do not post, like, retweet, reply, or follow.
---

# Twitter Reader (Combined)

Choose the path that matches the task.

## Path A: Broad read-only browsing with opencli

Use when the user wants to check a feed, search tweets, see trending topics, read
bookmarks, look up a profile, or list followers/following/notifications.

1. Ensure opencli is installed and ready:
   - Run `command -v opencli && opencli doctor 2>&1 | head -5`.
   - If not installed: `npm install -g @jackwener/opencli`.
   - If setup is needed: install the Browser Bridge extension in Chrome, log in to
     x.com in Chrome, then run `opencli doctor`.
2. Match the request to a command:
   - Home feed: `opencli twitter timeline --type for-you|following --limit N`
   - Search: `opencli twitter search "QUERY" --filter top|live --limit N`
   - Trending: `opencli twitter trending --limit N`
   - Bookmarks: `opencli twitter bookmarks --limit N`
   - User tweets: `opencli twitter tweets USERNAME --limit N`
   - Thread: `opencli twitter thread TWEET_ID --limit N`
   - Article: `opencli twitter article TWEET_ID`
   - Profile: `opencli twitter profile USERNAME`
   - Followers: `opencli twitter followers USERNAME --limit N`
   - Following: `opencli twitter following USERNAME --limit N`
   - Notifications: `opencli twitter notifications --limit N`
3. Use `-f json` or `-f yaml` for programmatic processing, `-f csv` for spreadsheet
   export, and `-f md` for reports. Start with `--limit 10` to `--limit 20` unless
   the user asks for more.
4. Do not use opencli write commands (post, like, retweet, reply, follow, delete).

## Path B: Fetch a single post or X Article with media

Use when the user wants the full text of one tweet, the full body of a long-form
note tweet, or an X Article with images saved locally as Markdown.

1. For plain post text, prefer the fxtwitter mirror API:
   ```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'])"
   ```
   Note: `tweet.text` contains the full note_tweet body; there is no `full_text`
   key. `replies` is a count, not the reply thread.
2. For X Articles with images, use the article fetcher:
   ```bash
   uv run --with pyyaml python scripts/fetch_article.py <article_url> [output_dir]
   ```
   This fetches metadata via twitter-cli, content and image URLs via Jina, downloads
   images to `attachments/YYYY-MM-DD-AUTHOR-TITLE/`, and writes Markdown with YAML
   frontmatter and local image references.
3. If Jina refuses, the response is a JSON envelope with `code` 403 or 402 and no
   `Markdown Content:` marker. Treat that as a refusal, not a success. The script
   should warn on stderr, keep the twitter-cli text, and report `Images: 0`.
4. For simple text-only fetching with a Jina key:
   ```bash
   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`.
5. Supported URL formats:
   - `https://x.com/USER/status/ID`
   - `https://x.com/USER/article/ID`
   - `https://twitter.com/USER/status/ID`

## Conflicts

- himself65/finance-skills requires opencli, Node.js >= 20, Chrome with the Browser
  Bridge extension, and an existing x.com login. daymade/claude-code-skills requires
  uv, JINA_API_KEY for Jina-based scripts, and uses fxtwitter for plain text.
- himself65/finance-skills exposes broad read commands (timeline, search, trending,
  bookmarks, tweets, thread, article, profile, followers, following, notifications).
  daymade/claude-code-skills focuses on fetching a single post or article and
  generating Markdown with downloaded images.
- daymade/claude-code-skills treats Jina anonymous access as intermittent and
  requires a key for its scripts. himself65/finance-skills does not use Jina.
- himself65/finance-skills uses opencli output formats (-f json/yaml/csv/md/table).
  daymade/claude-code-skills uses curl/fxtwitter and Python/shell scripts with local
  file output.

## Prerequisites

- Path A: Node.js >= 20, Chrome with the Browser Bridge extension, logged-in x.com
  session, opencli installed.
- Path B: `uv` for the article fetcher; `JINA_API_KEY` for Jina-based scripts; no
  key ships with the repository.

## Output

- Path A: terminal table, JSON, YAML, CSV, or Markdown depending on `-f`.
- Path B: Markdown file with YAML frontmatter and an `attachments/` folder of
  downloaded images, or plain text from fxtwitter/Jina.