PromptRSS is a self-hosted, once-a-day RSS curator designed to eliminate feed fatigue. Instead of forcing you to build brittle regex rules or look for exact keyword matches, PromptRSS uses modern semantic search and Large Language Models (LLMs) to understand the meaning of your feeds and only deliver what actually matters to you.
You provide your OPML file and a natural language prompt describing your interests; PromptRSS delivers a single, refined feed.xml containing only the most relevant articles.
-
Fetch Feeds: Parsing RSS. The service pulls all new articles from the RSS feeds specified in your uploaded OPML file.
-
Semantic Encoding: Bi-Encoder Pipeline. Articles are processed through a bi-encoder model to generate embeddings. The system calculates a relevance score by comparing the semantic meaning of the articles against your user-defined topics and prompt.
-
LLM Refinement & Gating: Threshold & Top-N Filter. Articles that pass the initial embedding threshold are evaluated by a lightweight LLM. The system selects either the top
$N$ most relevant articles or those above your strict relevance score threshold—whichever number is lower. -
Serve the Feed: feed.xml. The curated selection is compiled into a personalized, static RSS feed file (
feed.xml) ready for your favorite RSS reader.
- Prompt-Driven Filtering: No keyword stuffing. Describe what you care about in plain English (e.g., "I want deep-dive technical blogs about Rust and systems engineering, but skip release announcements or generic tutorials").
- Dual-Stage AI Pipeline: Fast bi-encoder embeddings for bulk filtering, paired with an LLM stage for high-accuracy relevance scoring.
- Privacy-First & Self-Hosted: Runs entirely on your own infrastructure with support for local models or API privacy endpoints.
- Lean Output Architecture: Strictly enforces the lower bound of your Top-$N$ or threshold settings, ensuring your daily reading list stays concise and intentional.
-
Clone the repo.
-
Ensure the following files are present:
feeds.opml- holds a list of your RSS feeds, many readers can export itconfig.toml- copyconfig.example.tomland adjust settings to your needsdocker-compose.yaml- copydocker-compose.example.yamland adjust settings to your needsfeed.xml- can be empty, PromptRSS will store RSS feed inside of itinterests.json- can be empty, PromptRSS will store your interests extracted from your prompt fromconfig.toml
-
Run
docker compose up --build -d
It is recommended to run this service via a Docker container and then run a cron job that the script fetches new articles once per day and generates your daily digest.
For example, you can add this after running crontab -e and it will start the container each day at 8am:
0 8 * * * cd ./PromptRSS && docker compose up >> ./PromptRSS/promptrss.log 2>&1 && docker compose rm -fYou can then use the generated feed.xml with a service like Nginx to expose it to the internet or your local network.
Here is an example what you can add to the nginx.conf:
location = /feed.xml {
root /usr/share/nginx/html;
types { }
default_type application/rss+xml;
add_header Cache-Control "public, max-age=300";
sendfile off;
open_file_cache off;
}