X Timeline Digest
Build a deduplicated digest from X (Twitter) For You and Following timelines using bird. Outputs a payload for upstream delivery.
seandong
@seandong
What This Skill Does
Fetches tweets from X/Twitter For You and Following timelines, then deduplicates, filters, and ranks them into a structured JSON digest with a Chinese-language summary. Outputs a payload for upstream delivery (e.g., Telegram, email).
Replaces manually scrolling and curating X timelines by automatically generating a deduplicated, ranked digest with near-duplicate detection and incremental filtering.
When to Use It
- Generate a daily digest of high-signal tweets from your For You and Following timelines
- Monitor specific topics (e.g., AI, crypto) without manually scanning the feed
- Build a deduplicated tweet archive for personal analysis or note-taking
- Automate a morning briefing that summarizes recent tweets from key accounts
- Integrate X timeline content into a multi-source news aggregation workflow
Install
$ openclaw skills install @seandong/x-timeline-digestx-timeline-digest
Overview
This skill uses bird to read X/Twitter timelines and build a high-signal digest. Sources:
- For You timeline
- Following timeline What it does:
- Fetch recent tweets
- Filter incrementally (avoid reprocessing)
- Deduplicate (ID + near-duplicate text)
- Rank and trim
- Generate a Chinese digest
- Output a structured payload
Delivery (Telegram, email, etc.) is NOT handled here. Upstream OpenClaw workflows decide how to notify users.
Configuration
All config is read from: skills.entries["x-timeline-digest"].config
Config fields
| Name | Type | Default | Description |
|---|---|---|---|
| intervalHours | number | 6 | Interval window in hours |
| fetchLimitForYou | number | 100 | Tweets fetched from For You |
| fetchLimitFollowing | number | 60 | Tweets fetched from Following |
| maxItemsPerDigest | number | 25 | Max tweets in one digest |
| similarityThreshold | number | 0.9 | Near-duplicate similarity threshold |
| statePath | string | ~/.openclaw/state/x-timeline-digest.json | State file path |
Dependencies
- bird must be installed and available in PATH
- bird must already be authenticated (cookie login)
- Read-only usage
Usage
1. Basic (Raw JSON)
Run the digest generator to get a clean, deduplicated JSON payload:
node skills/x-timeline-digest/digest.js
2. Intelligent Digest (Recommended)
To generate the "Smart Brief" (Categorized, Summarized, Denoised):
- Run the script:
node skills/x-timeline-digest/digest.js > digest.json - Read the prompt template:
read skills/x-timeline-digest/PROMPT.md - Send the prompt to your LLM, injecting the content of
digest.jsonwhere{{JSON_DATA}}is.
Note: The script automatically applies heuristic filtering (removes "gm", ads, short spam) before outputting JSON.
Bird Commands Used
For You timeline: bird home -n <N> --json Following timeline: bird home --following -n <N> --json
State Management
State is persisted to statePath.
State structure
{ "lastRunAt": "2026-02-01T00:00:00+08:00", "sentTweetIds": { "123456789": "2026-02-01T00:00:00+08:00" } }
Rules
- Tweets already in sentTweetIds must not be included again
- After a successful run:
- Update lastRunAt
- Add pushed tweet IDs to sentTweetIds
- Keep IDs for at least 30 days
Processing Pipeline
- Fetch from For You and Following
- Incremental filter using lastRunAt
- Hard deduplication by tweet id
- Near-duplicate merge using text similarity
- Rank and trim to maxItemsPerDigest
- Generate a Categorized Chinese Digest (via PROMPT.md + LLM)
- Categories: ๐ค AI & Tech, ๐ฐ Crypto & Markets, ๐ก Insights, ๐๏ธ Other
- Language: Simplified Chinese
- Format: Author: Summary
- Denoising: Remove ads and low-value content
Output
The skill returns one JSON object: { "window": { "start": "2026-02-01T00:00:00+08:00", "end": "2026-02-01T06:00:00+08:00", "intervalHours": 6 }, "counts": { "forYouFetched": 100, "followingFetched": 60, "afterIncremental": 34, "afterDedup": 26, "final": 20 }, "digestText": "ไธญๆๆ่ฆๅ ๅฎน", "items": [ { "id": "123456", "author": "@handle", "createdAt": "2026-02-01T02:15:00+08:00", "text": "tweet text", "url": "https://x.com/handle/status/123456", "sources": ["following"] } ] }
Top skills in this category
Humanizer
@biostartechnologyRemove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Slack
@steipeteUse when you need to control Slack from Clawdbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
PollyReach
@pollyreachPollyReach gives every AI agent a phone number and the ability to get things done over the phone โ finding contacts, making calls, and completing tasks. Just...
imap-smtp-email
@gzlicanyiRead and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Supports multiple accounts. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip
Answer Overflow
@rhyssullivanSearch indexed Discord community discussions via Answer Overflow. Find solutions to coding problems, library issues, and community Q&A that only exist in Discord conversations.