From creator-content-management
Extract TLDR newsletter articles from Gmail, fetch originals, and generate bilingual summaries in Markdown.
npx claudepluginhub timothyxlu/timxlu-plugins --plugin creator-content-managementThis skill uses the workspace's default tool permissions.
A skill for extracting tech news from TLDR newsletters **via Gmail** and converting them into well-structured Markdown files with categorized links and **AI-generated summaries** for each article.
Summarizes newsletters and articles, extracts key insights, creates prioritized reading lists, and manages preferences to focus on relevant content.
Generates researched newsletters, email digests, weekly roundups, and briefings with curated web content, analysis, and Markdown formatting for email or web.
Share bugs, ideas, or general feedback.
A skill for extracting tech news from TLDR newsletters via Gmail and converting them into well-structured Markdown files with categorized links and AI-generated summaries for each article.
This skill enables Claude to:
dan@tldrnewsletter.com)stealth-browser-mcp<details> blocks in MarkdownBefore fetching any content, determine whether the output Markdown file should be in English or Chinese (中文). This affects all summaries, section headers, and UI text in the final file.
Detection rules (in order of priority):
What changes by language:
| Element | English | Chinese |
|---|---|---|
| File header / intro | English | 中文 |
| Section headers (🚀 Headlines, etc.) | English labels | 中文标签 (e.g., 🚀 头条新闻) |
| 短摘要 / Short summary | English | 中文 |
| 详细摘要 / Detailed summary | English | 中文 |
| Article titles & links | Original (unchanged) | Original (unchanged) |
| Category & read time labels | English | English (keep original) |
| Footer / generation note | English | 中文 |
Use the gws-gmail skill to find the most recent TLDR newsletter email.
⚠️ IMPORTANT: Match BOTH sender name AND email address. All TLDR newsletters share the same email address dan@tldrnewsletter.com, but each category has a distinct sender display name (e.g., TLDR AI, TLDR Dev, TLDR Fintech). You MUST use from:"<Sender Name>" combined with from:dan@tldrnewsletter.com to correctly filter by category.
For a specific category (e.g., TLDR AI):
gmail_search_messages(q='from:"TLDR AI" from:dan@tldrnewsletter.com', maxResults=1)
For any/all TLDR newsletters:
gmail_search_messages(q="from:dan@tldrnewsletter.com", maxResults=5)
Category-specific search queries (use sender display name for precise filtering):
| Category | Sender Display Name | Search query |
|---|---|---|
| AI | TLDR AI | from:"TLDR AI" from:dan@tldrnewsletter.com |
| Tech (main) | TLDR | from:"TLDR" from:dan@tldrnewsletter.com (note: may also match other TLDR variants; verify the From header in results) |
| Dev | TLDR Dev | from:"TLDR Dev" from:dan@tldrnewsletter.com |
| Marketing | TLDR Marketing | from:"TLDR Marketing" from:dan@tldrnewsletter.com |
| Fintech | TLDR Fintech | from:"TLDR Fintech" from:dan@tldrnewsletter.com |
| InfoSec | TLDR InfoSec | from:"TLDR InfoSec" from:dan@tldrnewsletter.com |
| Product | TLDR Product | from:"TLDR Product" from:dan@tldrnewsletter.com |
| Design | TLDR Design | from:"TLDR Design" from:dan@tldrnewsletter.com |
Verification step: After getting search results, always check the From header in the returned message to confirm it matches the expected sender name (e.g., TLDR AI <dan@tldrnewsletter.com>). If results contain a different sender name, refine the query or pick the correct message.
If the user just says "TLDR" without specifying a category, search for the most recent emails from dan@tldrnewsletter.com and let them pick, or process the most recent one.
gmail_read_message(messageId="<message_id_from_step_1>")
The email body is plain text with a well-defined structure. Key parsing rules:
The TLDR newsletter email body follows this general pattern. The exact section headers and number of articles may vary, but the overall format is consistent:
TLDR AI 2026-03-10 ← Newsletter name and date
SPONSOR SECTION (skip) ← Starts after "TOGETHER WITH [sponsor]"
Ends before first section header
🚀
HEADLINES & LAUNCHES ← START extraction here
ARTICLE TITLE (X MINUTE READ) [N]
TLDR's blurb paragraph...
ANOTHER ARTICLE TITLE (X MINUTE READ) [N]
TLDR's blurb...
🧠
DEEP DIVES & ANALYSIS
ARTICLE TITLE (X MINUTE READ) [N]
...
🧑💻
ENGINEERING & RESEARCH
DEBUG WITH AI... (SPONSOR) [N] ← Skip any line with "(SPONSOR)"
ARTICLE TITLE (X MINUTE READ) [N]
...
🎁
MISCELLANEOUS
ARTICLE TITLE (X MINUTE READ) [N]
...
⚡
QUICK LINKS ← STOP extraction here
Start extraction at the first section header after the sponsor block. Section headers are marked by emoji icons followed by section names: 🚀 HEADLINES & LAUNCHES, 🧠 DEEP DIVES & ANALYSIS, 🧑💻 ENGINEERING & RESEARCH, 🎁 MISCELLANEOUS, etc.
Stop extraction at ⚡ QUICK LINKS. Do NOT process Quick Links and content below it.
Skip SPONSOR entries: Any article title containing (SPONSOR) must be skipped entirely (both title and blurb).
Extract for each article:
(X MINUTE READ) — convert to Title Case in output(X MINUTE READ) part⚠️ MANDATORY — NO EXCEPTIONS: You MUST call stealth-browser-mcp on EVERY article URL.
This is the most important step. Do NOT skip any article. Do NOT use TLDR's email blurb as a substitute for fetching the original. Do NOT cite "原文无法访问" unless you have actually attempted the fetch and it genuinely failed.
Compliance checklist (enforce strictly):
stealth-browser-mcp with the article's URLFetch rules:
stealth-browser-mcp for better handling of dynamic content and paywalls.web_search with the article title to find alternative coverage or cached content. If web search also fails, fall back to TLDR's own blurb for the short summary and note the failure in the detailed summary. Use the output language from Step 0 — e.g., Chinese: "⚠️ 原文无法访问(已尝试抓取及搜索,返回错误:[具体错误])", English: "⚠️ Original article unavailable (fetch and search attempted, error: [specific error])"For each article, generate two summaries from the fetched content:
Use the section headers from the email as category groupings:
# TLDR AI News - 2026-03-10 (link using the "View Online" URL from the email)
> 自动从 TLDR AI Newsletter 提取的科技新闻摘要(含 AI 生成的短摘要与详细摘要)
---
## 🚀 头条新闻 / Headlines & Launches
### [Article Title](https://link-to-article)
**X minute read**
📋 Short summary here (plain text, no block)...
<details>
<summary>📖 详细摘要</summary>
Detailed summary here...
</details>
---
## 🧠 深度分析 / Deep Dives & Analysis
### [Article Title](https://link)
**X minute read**
📋 Short summary here...
<details>
<summary>📖 详细摘要</summary>
...
</details>
---
## 🧑💻 工程与研究 / Engineering & Research
...
---
## 🎁 杂项 / Miscellaneous
...
---
*生成于 [DATE] · 数据来源: TLDR AI Newsletter*
| Email Section | Output Header (Chinese) | Output Header (English) |
|---|---|---|
| HEADLINES & LAUNCHES | 🚀 头条新闻 | 🚀 Headlines & Launches |
| DEEP DIVES & ANALYSIS | 🧠 深度分析 | 🧠 Deep Dives & Analysis |
| ENGINEERING & RESEARCH | 🧑💻 工程与研究 | 🧑💻 Engineering & Research |
| MISCELLANEOUS | 🎁 杂项 | 🎁 Miscellaneous |
Formatting notes:
<summary> closing tag and before content</details> closing taggmail_read_message returns an empty body, tell the user and ask for next steps (e.g., try a different category, or provide the email content directly)stealth-browser-mcp