mcpField
N
newsletter-digest

newsletter-digest

github.com/varnan-tech营销与增长68745 次安装2 周前更新
代码仓库

关于 newsletter-digest

newsletter-digest 可将 RSS 文章整理为每周或主题类简报,并使用 Gemini 进行综合。配置 Ghost CMS 后可发布内容,否则可生成格式化稿件。

主要功能

  1. 01获取并去重 RSS 文章
  2. 02按日期范围筛选文章
  3. 03使用 Gemini 综合简报
  4. 04生成每周、主题或精选格式
  5. 05向 Ghost CMS 发布草稿或文章

适用场景

  1. 01根据已配置的订阅源制作每周汇总
  2. 02制作聚焦特定主题的简报
  3. 03未配置 Ghost 时生成简报稿件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/varnan-tech/opendirectory --skill newsletter-digest

安装后在 Claude Code 中输入/newsletter-digest确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.env.example
feeds.json
package.json
README.md
evals/
evals.json
references/
digest-format.md
output-template.md
scripts/
fetch-feeds.js
ghost-publish.js

详细介绍

新闻简报

汇总 RSS 订阅源的内容,使用 Gemini 综合本周热门报道,并发布到 Ghost CMS。支持每周简报、主题精选和编辑推荐格式。

写作风格

所有生成的简报内容都应遵循以下要求:

  • 只使用主动语态
  • 句子简短,每句只表达一个意思
  • 不使用破折号,改用句号或逗号
  • 不使用分号
  • 最终简报正文中不使用 Markdown 或星号
  • 不使用话题标签

禁用词语 — 简报中不得使用以下任何词语: incredible, amazing, leveraging, synergize, game-changing, game changer, delve, harness, unlock, groundbreaking, cutting-edge, remarkable, paradigm, revolutionize, disruptive, transformative, thrilled, excited to share, powerful, innovative, comprehensive, actionable, crucial, vital, pivotal, elucidate, utilize, dive deep, tapestry, illuminate, revolutionize

重要规则

简报中的每项说法、统计数据和总结都必须来自抓取到的文章。绝不捏造数据、引言或事实。如果来源文章没有有意义的内容,请跳过。


步骤 1:检查设置

1a. 确认已配置订阅源

检查技能目录中是否存在 feeds.json:

ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/feeds.json 2>/dev/null

如果不存在,请询问用户:“你想让我监控哪些 RSS 订阅源?请提供 URL 列表,我会创建 feeds.json。”

格式如下:

[
  { "url": "https://example.com/feed", "name": "Source Name" },
  { "url": "https://another.com/rss", "name": "Another Source" }
]

1b. 确认必需的环境变量

检查是否已设置以下变量:

  • GEMINI_API_KEY(必需):用于内容综合
  • GHOST_URL 和 GHOST_ADMIN_KEY(发布到 Ghost 时必需,仅输出时可选)

如果缺少 GEMINI_API_KEY,请停止并要求用户设置该变量。

GHOST 配置为可选项。如果未设置,技能会输出格式化的 Markdown,而不会发布内容。

1c. 确认脚本依赖

ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/node_modules 2>/dev/null | head -1

如果缺少依赖:

cd /Users/ksd/Desktop/Varnan_skills/newsletter-digest && npm install

步骤 2:抓取和解析订阅源

运行抓取脚本:

node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/fetch-feeds.js

脚本将:

  • 从 feeds.json 读取订阅源列表
  • 使用 rss-parser 抓取每个订阅源
  • 筛选过去 7 天内发布的条目
  • 按 URL 去重
  • 按发布日期排序,最新的排在最前
  • 将结果保存到 /tmp/newsletter-digest-articles.json

如果脚本在某个特定订阅源上出错,会记录警告并继续运行。单个订阅源出错不会中断运行。

脚本完成后,验证输出:

node -e "
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('/tmp/newsletter-digest-articles.json', 'utf8'));
console.log('Total articles:', data.articles.length);
console.log('From feeds:', data.feedsSummary.map(f => f.name + ': ' + f.count).join(', '));
console.log('Date range:', data.dateRange.from, 'to', data.dateRange.to);
"

如果找到的文章少于 3 篇,请警告用户,并询问是否将日期范围延长至 14 天。向脚本传入 --days=14 可扩大时间范围。


步骤 3:阅读格式规则

生成任何内容之前,请完整阅读 references/digest-format.md。熟悉以下内容:

  • 三种简报格式(每周综述、主题深入探讨、编辑推荐)及各自的适用场景
  • 各格式的章节结构和长度要求
  • 署名规则(每项说法都必须链接到来源)
  • 语气和文风指南

阅读 references/output-template.md,并选择与所需格式对应的模板。

如果用户没有指定格式,默认使用每周综述。


步骤 4:使用 Gemini 综合内容

读取 /tmp/newsletter-digest-articles.json 并构建综合提示词。

提示词结构:

You are a newsletter editor writing a digest of this week's top stories.

Sources (use ONLY these — do not invent facts):
[For each article: Title | Source | Date | Summary]

Task:
Write a [FORMAT] digest following this structure:
[Paste the selected template from references/output-template.md]

Rules:
- Every claim, statistic, and quote must come from the sources above
- Write in active voice, short sentences, contractions allowed
- Do not use: incredible, amazing, leveraging, game-changing, delve, groundbreaking, cutting-edge, revolutionize
- No em dashes, no semicolons, no hashtags
- Include [Source: Name](URL) attribution after each major claim
- Output plain text with HTML heading tags only (no markdown asterisks)

使用此提示词调用 Gemini。目标模型:gemini-2.0-flash 或最新可用模型。

如果响应中包含任何禁用词语,或出现来源文章中没有的虚构统计数据,请使用更严格的提示词重新生成。

步骤 5:自我检查

提交前运行所有检查。先修复违规项。

  • 每项陈述、统计数据和引述均可追溯到来源文章
  • 所有部分均不含禁用词
  • 文本中不含破折号
  • 文本中不含分号
  • 每个部分至少有一个附带 URL 的来源标注
  • 字数在格式的目标范围内(参见 references/digest-format.md)
  • 各部分没有重复讲述同一则新闻
  • 标题具体明确(包含日期范围或期号,而不只是“每周摘要”)
  • HTML 输出有效(如果发布到 Ghost,不得有未闭合的标签)

向用户提交前修复所有违规项。


步骤 6:排版和预览

按以下顺序向用户呈现摘要:

  1. 标题 — 期号日期范围或主题
  2. 摘要内容 — 完整排版后的文本
  3. 来源列表 — 使用过的所有文章及其 URL
  4. 字数和文章数

询问:“准备好以草稿形式发布到 Ghost,还是想先编辑?”


步骤 7:发布到 Ghost 或输出

如果已设置 GHOST_URL 和 GHOST_ADMIN_KEY,且用户确认:

运行发布脚本:

node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/ghost-publish.js \
  --title "DIGEST_TITLE" \
  --status "draft"

脚本会读取 /tmp/newsletter-digest-output.json(由 Agent 在步骤 6 中写入),并发布到 Ghost。

发布后,脚本会返回草稿的 Ghost 管理员 URL。向用户显示:“草稿已保存至:[URL]。请前往 Ghost 控制面板审核并发布。”

如果用户希望立即发布,将 --status "published" 传递给脚本。

如果未配置 Ghost 或用户表示“仅输出”:

以三种格式输出摘要:

  1. HTML — 可直接粘贴到任何 CMS
  2. Markdown — 适用于 Substack、Notion 或 Hashnode
  3. 纯文本 — 适用于电子邮件客户端

补充:“Substack 不提供公开 API。请将 Markdown 版本直接复制到 Substack 编辑器中。”


关于 Substack 的说明

Substack 没有公开 API。未经逆向工程分析内部端点,无法通过程序发布内容,而这违反其条款。此技能会输出排版好的 Markdown 摘要,可直接粘贴到 Substack 编辑器中。这是正确的做法。

评论

支持 Markdown