Matcha, CLI-based RSS daily digest and Markdown generator Developer piqoni released Matcha, an open-source CLI tool that generates daily RSS digests as Markdown files for readers such as Obsidian or for terminal viewing via the `./matcha -t` option. Matcha pulls feeds and Google News keyword topics, optionally summarizes articles through OpenAI or local LLM models, adds 12-hour weather from YR, links Hacker News comments, and offers an LLM Analyst that runs a user-supplied prompt over article titles, such as flagging investment opportunities. The tool is installable via `brew install matcha` or `go install github.com/piqoni/matcha@latest` and generates a sample config.yml on first run. Matcha is a daily digest generator for your RSS feeds and interested topics/keywords. By using any markdown file viewer such as Obsidian https://obsidian.md/ or directly from terminal -t option , you can read your RSS articles whenever you want at your pace, thus avoiding FOMO throughout the day. Read more here how to setup the web version https://github.com/piqoni/go-digest - RSS daily digest , it will show only articles not previously generated - Optional summary of articles from OpenAI/Local LLM models for selected feeds - Weather for the next 12 Hours from YR https://www.yr.no/ - Quick bookmarking of articles to Instapaper - Interested Topics/Keywords to follow through Google News https://news.google.com/ - Hacker News comments direct link and distinguishing mostly dicussed posts 🔥 - Terminal Mode by calling ./matcha -t - LLM Notifications: get notified when your custom prompt is fulfilled example: "Notify me when X company is sold" - LLM Analyst: Performs an analysis of article titles and responds based on your prompt example: "Tell me if you see any investment opportunity" 1. Since Matcha generates markdown, any markdown reader should do the job. Currently it has been tested on Obsidian https://obsidian.md/ so you need a markdown reader before moving on, unless you will use terminal mode -t option , then a markdown reader is not needed. 2. Download the pre-built Matcha binary https://github.com/piqoni/matcha/releases based on your OS and after executing if on mac/linux run chmod +x matcha-darwin-amd64 to make it executable , a sample config.yml will be generated, which you can add in your rss feeds, keywords and the markdown dir path where you want the markdown files to be generated if left empty, it will generate the daily digest on current dir . 3. You can either execute matcha on-demand a terminal alias or set a cron to run matcha as often as you want. Even if you set it to execute every hour, matcha will still generate daily digests, one file per day, and will add more articles to it if new articles are published throughout the day. brew install matcha go install github.com/piqoni/matcha@latest On first execution, Matcha will generate the following config.yaml and a markdown file on the same directory as the application. Change the 'feeds' to your actual RSS feeds, and google news keywords to the keywords you are interested in. And if you want to change where the markdown files are generated, set the full directory path in markdown dir path . markdown dir path: feeds: - http://hnrss.org/best 10 - https://waitbutwhy.com/feed - http://tonsky.me/blog/atom.xml - http://www.joelonsoftware.com/rss.xml - https://www.youtube.com/feeds/videos.xml?channel id=UCHnyfMqiRRG1u-2MsSQLbXA google news keywords: George Hotz,ChatGPT,Copenhagen instapaper: true weather latitude: 37.77 weather longitude: 122.41 terminal mode: false opml file path: markdown file prefix: markdown file suffix: reading time: false sunrise sunset: false openai api key: openai base url: openai model: summary feeds: The Analyst feature enables you to gather articles from specified feeds and analyze them using a prompt sent to a language model like GPT-4o default . The result is included in the daily digest under an Analysis section. You write on your analyst prompt setting what do you want the analyst to do on your behalf, for example picking relevant news to your liking example: a cybersecurity expert interested only in certain type of attack , or having an investing analyst suggesting investment opportunities, etc. Configuration Example of an analyst finding investment opportunities: openai api key: sk-xxxxxxxxxxxxxxxxx analyst feeds: - https://feeds.bbci.co.uk/news/business/rss.xml analyst prompt: You are a world-class investing expert. Analyze the provided list of articles for potential investment opportunities. If no direct opportunities are found, identify industries, regions, or trends that could have indirect impacts on the investment landscape. How it Works: The RSS feeds specified in analyst feeds are fetched, and the titles along with their rss descriptions are attached to the analyst prompt to form a single input prompt. Then the prompt is sent to the specified language model analyst model , and the response is included in the daily markdown file under the Analysis section. Snippet of sample output as an investment analyst : Default model is OpenAI's gpt-4o but to override model add configuration: analyst model: o1-preview The analyst feature supports notifications Slack hooks or ntfy.sh . See a working example below: analyst prompt: "Check the news titles below and if you see that airbus flights are returned to normal please respond with \"FLIGHTS BACK TO NORMAL\" and nothing else, no explanations." analyst feeds: - https://feeds.bbci.co.uk/news/business/rss.xml analyst model: qwen3:4b openai base url: http://localhost: 11434/v1 notification trigger: "FLIGHTS BACK TO NORMAL" notification webhook url: https://ntfy.sh/myuniquetopic In order to use the summarization feature, you'll first need to set up an OpenAI account. If you haven't already done so, you can sign up here https://platform.openai.com/login?launch . Once registered, you'll need to acquire an OpenAI API key which can be found here https://platform.openai.com/account/api-keys . Alternatively, you may use LocalAI see the "LocalAI Support" section below for more information . Next, update the configuration file with the desired feeds you want to summarize. This can be done under the "summary feeds" section. Here is an example configuration: openai api key: sk-xxxxxxxxxxxxxxxxx summary feeds: - http://hnrss.org/best 10 Replace sk-xxxxxxxxxxxxxxxxx with your OpenAI API key and include the RSS feeds under summary feeds for articles you're interested in summarizing. You can also customize which model you use for summarization by changing the openai model to one of the values here https://github.com/sashabaranov/go-openai/blob/a14bc103f4bc2b3ac40c844079fdf59dfdf62b0b/completion.go L30 which defaults to 'gpt-3.5-turbo' for now. 'gpt-4' is also a valid model name. openai model: gpt-3.5-turbo For those interested in using LocalAI for summarization, whether for cost-efficiency or privacy reasons, you'll first need to set it up and run it. For setup instructions, please visit the LocalAI repository on GitHub here https://github.com/go-skynet/LocalAI . After setting up LocalAI, you'll need to direct Matcha to the openai-compatible base URL of LocalAI. This is done by updating the "openai base url" in the configuration file. For instance, if your LocalAI server is running locally on port 8080, your configuration would look like this: openai base url: http://localhost:8080/v1 openai model: openllama-3b In this case, ' http://localhost:8080/v1 http://localhost:8080/v1 ' represents the base URL where your LocalAI server is running. 'openai model' could be any model compatible with LocalAI. You can also replace the openai base url with another hosted url like the Azure openai endpoint. Please note in case of errors that you may need to change the openai model to match the model you downloaded in LocalAI. Run matcha with --help option to see current cli options: -c filepath Config file path if you want to override the current directory config.yaml -o filepath OPML file path to append feeds from opml files -t Run Matcha in Terminal Mode, no markdown files will be created To use OPML files exported from other services , rename your file to config.opml and leave it in the directory where matcha is located. The other option is to run the command with -o option pointing to the opml filepath.