133 lines
3.3 KiB
Markdown
133 lines
3.3 KiB
Markdown
# reddit-reader
|
|
|
|
A Go TUI that monitors subreddits for interesting posts, filters them by keyword and LLM relevance scoring, generates bullet-point summaries, and presents everything in an interactive reading list.
|
|
|
|
Runs as a systemd user service for continuous monitoring. The TUI connects on launch via gRPC.
|
|
|
|
## Architecture
|
|
|
|
Single binary, three subcommands:
|
|
|
|
- `reddit-reader serve` — monitor daemon + gRPC server
|
|
- `reddit-reader tui` — interactive reading list client
|
|
- `reddit-reader setup` — first-run configuration wizard
|
|
|
|
```
|
|
Reddit API ──► Monitor ──► Keyword Filter ──► LLM Scorer ──► SQLite
|
|
│
|
|
TUI ◄──── gRPC ◄──── Server ◄────┘
|
|
```
|
|
|
|
## Features
|
|
|
|
- **Keyword + LLM filtering** — cheap regex/keyword pre-filter, then LLM relevance scoring against your interests
|
|
- **Local-first LLM** — Ollama/llama.cpp by default, Mistral API as fallback
|
|
- **5-bullet summaries** — generated by the LLM for posts that pass the relevance threshold
|
|
- **Feedback loop** — thumbs up/down on posts feeds back into relevance scoring as few-shot examples
|
|
- **Live streaming** — new posts push to the TUI in real-time via gRPC server-side streaming
|
|
- **Systemd integration** — user service for the daemon, socket activation for on-demand startup
|
|
|
|
## Requirements
|
|
|
|
- Go 1.26+
|
|
- A local LLM via [Ollama](https://ollama.com) (recommended) or a [Mistral API](https://mistral.ai) key
|
|
- Reddit API credentials ([script app](https://www.reddit.com/prefs/apps))
|
|
|
|
## Install
|
|
|
|
```bash
|
|
go install somegit.dev/vikingowl/reddit-reader@latest
|
|
```
|
|
|
|
Or build from source:
|
|
|
|
```bash
|
|
git clone https://somegit.dev/vikingowl/reddit-reader.git
|
|
cd reddit-reader
|
|
go build -o reddit-reader .
|
|
```
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
reddit-reader setup
|
|
```
|
|
|
|
Walks you through:
|
|
1. Reddit OAuth credentials
|
|
2. LLM backend selection (auto-detects Ollama)
|
|
3. Subreddits to monitor
|
|
4. Your interests (used for relevance scoring)
|
|
5. Optional systemd unit installation
|
|
|
|
Config is stored at `~/.config/reddit-reader/config.toml`.
|
|
|
|
## Usage
|
|
|
|
Start the monitor daemon:
|
|
|
|
```bash
|
|
reddit-reader serve
|
|
```
|
|
|
|
Or enable it as a systemd user service:
|
|
|
|
```bash
|
|
systemctl --user enable --now reddit-reader.socket
|
|
systemctl --user start reddit-reader.service
|
|
```
|
|
|
|
Launch the TUI:
|
|
|
|
```bash
|
|
reddit-reader tui
|
|
```
|
|
|
|
### TUI Keybindings
|
|
|
|
| Key | Action |
|
|
|-----|--------|
|
|
| `j/k` | Navigate up/down |
|
|
| `enter` | Expand/collapse summary |
|
|
| `s` | Star post |
|
|
| `d` | Dismiss post |
|
|
| `o` | Open in browser |
|
|
| `+/-` | Vote on relevance (feeds back into scoring) |
|
|
| `tab` | Switch view (Reading List / Starred / Archive / Settings) |
|
|
| `g/G` | Jump to top/bottom |
|
|
| `q` | Quit |
|
|
|
|
## Configuration
|
|
|
|
`~/.config/reddit-reader/config.toml`:
|
|
|
|
```toml
|
|
[reddit]
|
|
client_id = "..."
|
|
client_secret = "..."
|
|
username = "..."
|
|
password = "..."
|
|
|
|
[llm]
|
|
backend = "ollama" # ollama | llamacpp | mistral
|
|
endpoint = "http://localhost:11434"
|
|
model = "ministral-3:8b"
|
|
relevance_threshold = 0.6
|
|
|
|
[interests]
|
|
description = "Go programming, Linux, NixOS, systems programming"
|
|
|
|
[monitor]
|
|
poll_interval = "2m"
|
|
max_posts_per_poll = 25
|
|
|
|
[grpc]
|
|
socket = "/run/user/1000/reddit-reader.sock"
|
|
```
|
|
|
|
All config values can be overridden with environment variables: `REDDIT_READER_REDDIT_CLIENT_ID`, `REDDIT_READER_LLM_API_KEY`, etc.
|
|
|
|
## License
|
|
|
|
MIT
|