From FreshRSS for Claude
Summarize recent posts from a named FreshRSS category. For the "People" category, writes a person-centric narrative (one paragraph per person); for other categories, writes one paragraph per active feed. Use when the user asks "what's new in my <category> feeds?", "catch me up on <category>", or invokes `/freshrss-category <category>`. Requires the freshrss MCP server.
How this skill is triggered — by the user, by Claude, or both
Slash command
/freshrss-claude:freshrss-categoryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Summarize recent unread posts from a specific FreshRSS category. For the
Summarize recent unread posts from a specific FreshRSS category. For the People category, the output is person-centric: one paragraph per active person, written like a catch-up with someone you follow. For any other category, write one paragraph per active feed — what's the thread or mood of that feed this week?
/freshrss-category <category> (with optional timeframe)<category> [timeframe]
category — the FreshRSS category name (case-sensitive, e.g. People, Tech, News)timeframe — optional, defaults to 7 days (e.g. 1d, 3d, 2w, last month)Extract category (first token) and timeframe (remainder, default 7d) from
args.
# macOS — substitute the parsed timeframe, e.g. for 7d:
date -v-7d +%s
# Linux
date -d '7 days ago' +%s
If mcp__freshrss__list_feeds schema isn't loaded:
ToolSearch with select:mcp__freshrss__list_feeds.
Call it (no arguments). The result is usually large and will be saved to a file — note the path. This gives you feed names with their FreshRSS categories.
If mcp__freshrss__get_unread_articles schema isn't loaded:
ToolSearch with select:mcp__freshrss__get_unread_articles.
Call with:
since_timestamp: cutoff from step 1limit: 2000max_summary_length: 300Note the saved file path.
python skills/freshrss-digest/scripts/process_articles.py \
"$articles_path" "$cutoff" \
--category "$category" \
--feeds-json "$feeds_path" \
> /tmp/freshrss_category.json
The script prints a per-feed post count survey to stderr — check it to see who's been active before writing.
python skills/freshrss-digest/scripts/stats_header.py /tmp/freshrss_category.json "category · {category} · {timeframe}"
Include this output verbatim at the top of your response.
python skills/freshrss-category/scripts/show_feeds.py /tmp/freshrss_category.json
This groups articles by feed with cleaned-up display names and full summaries. Read through all of it before writing.
If category is People: one paragraph per active person, ordered by post
count (most active first).
For any other category: one paragraph per active feed, ordered by post count.
In both cases:
After the summary, ask the user if they'd like to mark all articles in the
category as read. Load mcp__freshrss__mark_as_read via ToolSearch if needed,
then call it with the article IDs from the filtered JSON:
import json
articles = json.load(open("/tmp/freshrss_category.json"))
article_ids = [a["id"] for a in articles]
The tool returns {"ok": true} on success; confirm to the user.
People, not people).process_articles.py --category requires --feeds-json pointing at the
saved list_feeds output./freshrss-digest./freshrss-search.npx claudepluginhub edsu/freshrss-claude --plugin freshrss-claudeCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.