Skip to content

Add generic RSS/Atom feed extension #5

@YuyangXueEd

Description

@YuyangXueEd

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

  1. Copy extensions/_template/ to extensions/rss/
  2. Read extensions/README.md for the full extension contract
  3. Read extensions/hacker_news/ as a reference for LLM summarisation of short text items
  4. Register the new class in extensions/__init__.py
  5. Add the config block to config/sources.yaml (disabled by default)
  6. Write tests in tests/ using a small inline fixture feed (no live network)
  7. Add extensions/rss/README.md with config documentation and example feeds

Acceptance criteria

  • extensions/rss/__init__.py with RssExtension class
  • extensions/rss/README.md with config docs and example feed URLs
  • Registered in extensions/__init__.py
  • Config block in config/sources.yaml (commented out, enabled: false)
  • At least one test covering feed parsing with a fixture
  • pytest tests/ -q passes

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions