An open API service indexing awesome lists of open source software.

https://github.com/maxwelljens/llm_aggregator

A CLI tool to aggregate RSS feeds and summarise them with LLMs
https://github.com/maxwelljens/llm_aggregator

aggregator ai automation cli llm rss rss-feed terminal tui

Last synced: 10 days ago
JSON representation

A CLI tool to aggregate RSS feeds and summarise them with LLMs

Awesome Lists containing this project

README

          

llm_aggregator


LLM Aggregator logo


Aggregate RSS feeds and summarise them with LLMs

![Codeberg Release](https://img.shields.io/gitea/v/release/maxwelljensen/llm_aggregator?gitea_url=https%3A%2F%2Fcodeberg.org&style=for-the-badge)
![Codeberg License](assets/eupl-12-badge.svg)

---

## What is it?

`llm_aggregator` fetches articles from multiple RSS/Atom feeds, filters and
processes the content, and sends it to any OpenAI-compatible LLM to produce a
concise summary, without you needing to read dozens or hundreds of posts.

**Supports**: RSS 2.0, Atom, JSON Feed | OpenAI-compatible APIs | Local LLMs
(Ollama, etc.) | TUI with live progress | Text/Markdown/JSON output

---

## Quick start

```bash
# Create a feeds file
cat > feeds.txt << 'EOF'
https://news.ycombinator.com/rss
https://lwn.net/headlines/newrss
EOF

# Run
llm_aggregator --api-key --base-url \
-f feeds.txt -p "What are the top tech stories today?"
```

**First run?** See [docs/USAGE.md](docs/USAGE.md) for installation, configuration,
and all available options.

---

## Key features

| | |
|--|--|
| πŸš€ | Concurrent feed fetching with rate limiting |
| πŸ” | Keyword filtering (include/exclude, case‑insensitive) |
| πŸ“… | Date‑based filtering and sorting (date/title/source) |
| πŸ€– | Any OpenAI-compatible API (Deepseek, Ollama, OpenRouter, …) |
| πŸ–₯️ | Interactive TUI with progress bar and mouse scrolling |
| πŸ“¦ | Config file, environment variables, and CLI flags |
| πŸ“„ | Read feeds directly from stdin via `--stdin` |
| πŸ”§ | Dry‑run mode to validate config without API calls |

---

## TUI mode

Enable the TUI with `-t` for a colourful progress bar, live article counters,
and elapsed time. The TUI renders LLM output as styled Markdown (headers,
bold, code blocks, lists) and supports keyboard navigation (j/k, arrows, b,
g/G) and mouse wheel scrolling.

![LLM Aggregator action in GIF](./assets/demo.gif)

---

## Architecture

```
Feeds file / stdin
↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ aggregator β”‚ RSS/Atom/JSON Feed parsing, concurrent fetching
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ processor β”‚ Filter by keywords/age, sort, truncate
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ llm β”‚ OpenAI-compatible API call
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ output β”‚ Text / Markdown / JSON
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

## Configuration precedence

```
CLI flags > Environment variables > Config file > Defaults
```

Create `~/.config/llm_aggregator/config.toml` (see
[docs/USAGE.md](docs/USAGE.md#configuration) for the full reference).

## Building

Detailed build instructions (standard build, goreleaser, cross-compilation,
man page installation, tests, and linting) are in
[docs/BUILD.md](docs/BUILD.md).

---

## Licence

This project is licensed under [European Union Public Licence
1.2](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12).