Summary
Add an rss extension that fetches any RSS or Atom feed URL, summarises entries with the LLM, and includes them in the daily digest.
Why
A single generic RSS extension unlocks thousands of sources — Reddit, Substack, YouTube channels, podcasts, blogs — without needing a separate extension for each. It makes the project useful to a much wider audience beyond arXiv/HN/GitHub.
What to implement
A new extension at extensions/rss/ that:
- Accepts a list of feed URLs in config
- Fetches and parses each feed using
feedparser (already a common Python dependency — add to requirements.txt if not present)
- Summarises each entry's title + description with the LLM (same pattern as HN and GitHub Trending)
- Respects
dry_run (skip LLM when true)
- Renders a
FeedSection per feed, or a combined section — your choice, document the decision
Config shape
rss:
enabled: true
feeds:
- name: "Hacker News (RSS)"
url: "https://news.ycombinator.com/rss"
- name: "Andrej Karpathy's blog"
url: "https://karpathy.github.io/feed.xml"
max_items_per_feed: 5
How to get started
- Copy
extensions/_template/ to extensions/rss/
- Read
extensions/README.md for the full extension contract
- Read
extensions/hacker_news/ as a reference for LLM summarisation of short text items
- Register the new class in
extensions/__init__.py
- Add the config block to
config/sources.yaml (disabled by default)
- Write tests in
tests/ using a small inline fixture feed (no live network)
- Add
extensions/rss/README.md with config documentation and example feeds
Acceptance criteria
Summary
Add an
rssextension that fetches any RSS or Atom feed URL, summarises entries with the LLM, and includes them in the daily digest.Why
A single generic RSS extension unlocks thousands of sources — Reddit, Substack, YouTube channels, podcasts, blogs — without needing a separate extension for each. It makes the project useful to a much wider audience beyond arXiv/HN/GitHub.
What to implement
A new extension at
extensions/rss/that:feedparser(already a common Python dependency — add torequirements.txtif not present)dry_run(skip LLM when true)FeedSectionper feed, or a combined section — your choice, document the decisionConfig shape
How to get started
extensions/_template/toextensions/rss/extensions/README.mdfor the full extension contractextensions/hacker_news/as a reference for LLM summarisation of short text itemsextensions/__init__.pyconfig/sources.yaml(disabled by default)tests/using a small inline fixture feed (no live network)extensions/rss/README.mdwith config documentation and example feedsAcceptance criteria
extensions/rss/__init__.pywithRssExtensionclassextensions/rss/README.mdwith config docs and example feed URLsextensions/__init__.pyconfig/sources.yaml(commented out,enabled: false)pytest tests/ -qpasses