{"id":13831587,"url":"https://github.com/piqoni/matcha","last_synced_at":"2025-05-15T20:05:22.051Z","repository":{"id":65095184,"uuid":"576652935","full_name":"piqoni/matcha","owner":"piqoni","description":"Daily Digest Reader","archived":false,"fork":false,"pushed_at":"2025-01-07T19:43:08.000Z","size":133,"stargazers_count":505,"open_issues_count":7,"forks_count":27,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-08T04:12:12.513Z","etag":null,"topics":["cli","go","markdown","obsidian-md","rss","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/piqoni.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-10T14:43:23.000Z","updated_at":"2025-04-07T09:40:03.000Z","dependencies_parsed_at":"2023-12-26T17:10:35.530Z","dependency_job_id":"3d6f9560-afc4-43c4-89b4-dbe897bacf47","html_url":"https://github.com/piqoni/matcha","commit_stats":{"total_commits":137,"total_committers":5,"mean_commits":27.4,"dds":"0.058394160583941646","last_synced_commit":"899b78251aea553c333afaa5d55e0fc69727edb0"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piqoni%2Fmatcha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piqoni%2Fmatcha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piqoni%2Fmatcha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piqoni%2Fmatcha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piqoni","download_url":"https://codeload.github.com/piqoni/matcha/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254414499,"owners_count":22067272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","go","markdown","obsidian-md","rss","self-hosted"],"created_at":"2024-08-04T10:01:32.075Z","updated_at":"2025-05-15T20:05:13.434Z","avatar_url":"https://github.com/piqoni.png","language":"Go","readme":"\u003cimg align=\"right\" src=\"https://github.com/piqoni/matcha/actions/workflows/test.yml/badge.svg\"\u003e\n\u003ch1 align=\"center\"\u003e 🍵 Matcha \u003c/h1\u003e\n\u003cdiv align=\"center\"\u003e\u003cp\u003e\n    \u003ca href=\"https://github.com/piqoni/matcha/releases/latest\"\u003e\n      \u003cimg alt=\"Latest release\" src=\"https://img.shields.io/github/v/release/piqoni/matcha?style=for-the-badge\u0026logo=starship\u0026color=C9CBFF\u0026logoColor=D9E0EE\u0026labelColor=302D41\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/piqoni/matcha/pulse\"\u003e\n      \u003cimg alt=\"Last commit\" src=\"https://img.shields.io/github/last-commit/piqoni/matcha?style=for-the-badge\u0026logo=starship\u0026color=8bd5ca\u0026logoColor=D9E0EE\u0026labelColor=302D41\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/piqoni/matcha/blob/main/LICENSE\"\u003e\n      \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/piqoni/matcha?style=for-the-badge\u0026logo=starship\u0026color=ee999f\u0026logoColor=D9E0EE\u0026labelColor=302D41\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/piqoni/matcha/stargazers\"\u003e\n      \u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/piqoni/matcha?style=for-the-badge\u0026logo=starship\u0026color=c69ff5\u0026logoColor=D9E0EE\u0026labelColor=302D41\" /\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\nMatcha 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.\n\n### In Obsidian\n\u003cimg width=\"900\" alt=\"image\" src=\"https://user-images.githubusercontent.com/3144671/219786799-55db70c1-5860-4d4b-9df4-b81a89f8161d.png\"\u003e\n\n### On the terminal\n\n\u003cimg width=\"596\" alt=\"image\" src=\"https://user-images.githubusercontent.com/3144671/208323296-af2d6a51-7d33-42a9-a827-0e96a4a383fd.png\"\u003e\n\n## Features\n - RSS daily **digest**, it will show only articles not previously generated\n - Optional summary of articles from OpenAI for selected feeds\n - Weather for the next 12 Hours (from [YR](https://www.yr.no/))\n - Quick bookmarking of articles to Instapaper\n - Interested Topics/Keywords to follow (through [Google News](https://news.google.com/))\n - Hacker News comments direct link and distinguishing mostly dicussed posts 🔥\n - Terminal Mode by calling `./matcha -t`\n\n\n## Installation / Usage\n1. 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.\n2. **Download the [corresponding 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).\n3. 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.\n\nNote to Go developers: You can also install matcha using `go install github.com/piqoni/matcha@latest`\n## Configuration\nOn 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`.\n\n```yaml\nmarkdown_dir_path:\nfeeds:\n  - http://hnrss.org/best 10\n  - https://waitbutwhy.com/feed\n  - http://tonsky.me/blog/atom.xml\n  - http://www.joelonsoftware.com/rss.xml\n  - https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA\ngoogle_news_keywords: George Hotz,ChatGPT,Copenhagen\ninstapaper: true\nweather_latitude: 37.77\nweather_longitude: 122.41\nterminal_mode: false\nopml_file_path:\nmarkdown_file_prefix:\nmarkdown_file_suffix:\nreading_time: false\nsunrise_sunset: false\nopenai_api_key:\nopenai_base_url:\nopenai_model:\nsummary_feeds:\n```\n\n### Analyst LLM Feature\nThe 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. \n\nConfiguration Example of an analyst finding investment opportunities:\n\n```yaml\nopenai_api_key: sk-xxxxxxxxxxxxxxxxx\nanalyst_feeds:\n  - https://feeds.bbci.co.uk/news/business/rss.xml\nanalyst_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.\n```\n\nHow it Works:\nThe 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. \nThen 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.\n\nSnippet of sample output (as an investment analyst):\n\u003cimg width=\"961\" alt=\"image\" src=\"https://github.com/user-attachments/assets/5ccb43d0-3057-4b39-b445-891246c9b644\" /\u003e\n\nDefault model is OpenAI's gpt-4o but to override model add configuration:\n```\nanalyst_model: o1-preview\n```\n\n### Summarization of Articles using ChatGPT\n\nIn 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).\n\nAlternatively, you may use LocalAI (see the \"LocalAI Support\" section below for more information).\n\nNext, 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:\n\n```yaml\nopenai_api_key: sk-xxxxxxxxxxxxxxxxx\nsummary_feeds:\n    - http://hnrss.org/best 10\n```\n\nReplace `sk-xxxxxxxxxxxxxxxxx` with your OpenAI API key and include the RSS feeds under `summary_feeds` for articles you're interested in summarizing.\n\nYou 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.\n\n```yaml\nopenai_model: gpt-3.5-turbo\n```\n\n#### LocalAI Support\n\nFor 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).\n\nAfter 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:\n\n```yaml\nopenai_base_url: http://localhost:8080/v1\nopenai_model: openllama-3b\n```\n\nIn this case, '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.\nPlease note in case of errors that you may need to change the openai_model to match the model you downloaded in LocalAI.\n\n### Command line Options\nRun matcha with --help option to see current cli options:\n```\n  -c filepath\n    \tConfig file path (if you want to override the current directory config.yaml)\n  -o filepath\n    \tOPML file path to append feeds from opml files\n  -t\tRun Matcha in Terminal Mode, no markdown files will be created\n```\n\n#### OPML Import\nTo 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.\n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiqoni%2Fmatcha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpiqoni%2Fmatcha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiqoni%2Fmatcha/lists"}