README.md (view raw)
1<h1 align="center">llm_aggregator</h1>
2
3<p align="center">
4 <img src="assets/logo.svg" alt="LLM Aggregator logo" width=500>
5 <br>
6 <strong>Aggregate RSS feeds and summarise them with LLMs</strong>
7</p>
8
9
10
11
12---
13
14## What is it?
15
16`llm_aggregator` fetches articles from multiple RSS/Atom feeds, filters and
17processes the content, and sends it to any OpenAI-compatible LLM to produce a
18concise summary, without reading dozens of posts.
19
20**Supports**: RSS 2.0, Atom, JSON Feed | OpenAI-compatible APIs | Local LLMs
21(Ollama, etc.) | TUI with live progress | Text/Markdown/JSON output
22
23---
24
25## Quick start
26
27```bash
28# Install
29go install github.com/maxwelljensen/llm_aggregator/cmd/llm_aggregator.go@latest
30
31# Create a feeds file
32cat > feeds.txt << 'EOF'
33https://news.ycombinator.com/rss
34https://lwn.net/headlines/newrss
35EOF
36
37# Run
38llm_aggregator -f feeds.txt -p "What are the top tech stories today?"
39```
40
41**First run?** See [docs/USAGE.md](docs/USAGE.md) for installation, configuration,
42and all available options.
43
44---
45
46## Key features
47
48| | |
49|--|--|
50| π | Concurrent feed fetching with rate limiting |
51| π | Keyword filtering (include/exclude, caseβinsensitive) |
52| π
| Dateβbased filtering and sorting (date/title/source) |
53| π€ | Any OpenAI-compatible API (Deepseek, Ollama, OpenRouter, β¦) |
54| π₯οΈ | Interactive TUI with progress bar and mouse scrolling |
55| π¦ | Config file, environment variables, and CLI flags |
56| π | Read feeds directly from stdin via `--stdin` |
57| π§ | Dryβrun mode to validate config without API calls |
58
59---
60
61## TUI mode
62
63Enable the TUI with `-t` for a colourful progress bar, live article counters,
64and elapsed time. The TUI renders LLM output as styled Markdown (headers,
65bold, code blocks, lists) and supports keyboard navigation (j/k, arrows, b,
66g/G) and mouse wheel scrolling.
67
68
69
70---
71
72## Architecture
73
74```
75Feeds file / stdin
76 β
77 βββββββββββββββ
78 β aggregator β RSS/Atom/JSON Feed parsing, concurrent fetching
79 βββββββββββββββ
80 β
81 βββββββββββββββ
82 β processor β Filter by keywords/age, sort, truncate
83 βββββββββββββββ
84 β
85 βββββββββββββββ
86 β llm β OpenAI-compatible API call
87 βββββββββββββββ
88 β
89 βββββββββββββββ
90 β output β Text / Markdown / JSON
91 βββββββββββββββ
92```
93
94## Configuration precedence
95
96```
97CLI flags > Environment variables > Config file > Defaults
98```
99
100Create `~/.config/llm_aggregator/config.toml` (see
101[docs/USAGE.md](docs/USAGE.md#configuration) for the full reference).
102
103## Building
104
105Detailed build instructions (standard build, goreleaser, cross-compilation,
106man page installation, tests, and linting) are in
107[docs/BUILD.md](docs/BUILD.md).
108
109---
110
111## Licence
112
113This project is licensed under [European Union Public Licence
1141.2](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12).