Aggregate RSS feeds, synthesize the week's top stories with Gemini, and publish a newsletter digest to Ghost CMS. Supports three digest formats and outputs HTML, Markdown, and plain text for any platform.
You need Node.js installed. It comes with npx built in.
npx "@opendirectory.dev/skills" install newsletter-digest --target claudeSupported --target values: claude, gemini, codex, opencode, anti-gravity, openclaw, hermes
Run these two commands inside your Claude Code terminal:
# Add the OpenDirectory marketplace
/plugin marketplace add Varnan-Tech/opendirectory
# Install a skill directly
/plugin install newsletter-digest@opendirectory-marketplaceStep 1: Download Click Code → Download ZIP on this repo's GitHub page.
Step 2: Install
- Open Claude Desktop > Customize > Skills > + > Upload a skill
- Drop the downloaded zip or extracted folder
- Reads your RSS/Atom feed list from
feeds.json - Fetches all articles published in the last 7 days (configurable)
- Deduplicates across feeds and sorts by date
- Uses Gemini to synthesize a digest in your chosen format
- Publishes to Ghost as a draft or live post
- Outputs formatted Markdown for Substack, Notion, or any other platform
| Format | Use When | Target Length |
|---|---|---|
| Weekly Roundup | General digest covering top stories across all feeds | 350-500 words |
| Topic Deep Dive | Focused issue on a single topic (AI, security, etc.) | 450-650 words |
| Curated Picks | 5 selected articles with editorial context | 250-350 words |
| Requirement | Purpose | Where to Get It |
|---|---|---|
| GEMINI_API_KEY | Digest synthesis | https://ai.google.dev |
| GHOST_URL + GHOST_ADMIN_KEY | Ghost publishing (optional) | Ghost Admin, Settings, Integrations |
| Node.js 20+ | Running scripts | https://nodejs.org |
Tavily is not required. The skill uses article excerpts from RSS feeds directly.
cd /path/to/newsletter-digest
npm installcp .env.example .env
# Edit .env with your keysEdit feeds.json with the RSS feeds you want to monitor:
[
{ "url": "https://hnrss.org/frontpage", "name": "Hacker News" },
{ "url": "https://feeds.feedburner.com/TheHackersNews", "name": "The Hacker News" },
{ "url": "https://changelog.com/feed", "name": "Changelog" }
]The file ships with 5 example feeds. Replace them with your own.
- Go to Ghost Admin, Settings, Integrations
- Click "Add custom integration"
- Name it "newsletter-digest"
- Copy the Admin API Key (format:
key_id:secret) - Set
GHOST_ADMIN_KEY=key_id:secretin.env - Set
GHOST_URL=https://your-ghost-site.comin.env
Generate a weekly digest:
"Generate a weekly digest from my RSS feeds"
"Create this week's newsletter"
"Summarize my feeds from the last 7 days"
Choose a specific format:
"Create a topic deep dive about AI agents from this week's news"
"Generate a curated picks digest for this week"
"Write a weekly roundup newsletter"
Extend the date window:
"Generate a digest from the last 14 days"
"Not many articles this week, extend the window to 2 weeks"
Publish to Ghost:
"Generate this week's digest and publish it to Ghost as a draft"
"Create the newsletter and publish it to Ghost"
Output for Substack:
"Generate a newsletter digest for Substack"
"Create the digest and give me the Markdown version"
| Output | Description |
|---|---|
| HTML | Ready to paste into any CMS |
| Markdown | For Substack, Notion, Hashnode |
| Plain text | For email clients |
| Ghost draft | Published automatically if configured |
Substack has no public API. The skill outputs a Markdown version of the digest for you to paste directly into the Substack editor.
newsletter-digest/
├── SKILL.md
├── README.md
├── .env.example
├── package.json
├── feeds.json (your RSS feed list, edit this)
├── evals/
│ └── evals.json
├── references/
│ ├── digest-format.md (format rules, length targets, attribution)
│ └── output-template.md (HTML templates for all 3 formats)
└── scripts/
├── fetch-feeds.js (RSS fetching, dedup, date filtering)
└── ghost-publish.js (Ghost Admin API posting)
MIT