3.3 KiB
3.3 KiB
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 serverreddit-reader tui— interactive reading list clientreddit-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 (recommended) or a Mistral API key
- Reddit API credentials (script app)
Install
go install somegit.dev/vikingowl/reddit-reader@latest
Or build from source:
git clone https://somegit.dev/vikingowl/reddit-reader.git
cd reddit-reader
go build -o reddit-reader .
Setup
reddit-reader setup
Walks you through:
- Reddit OAuth credentials
- LLM backend selection (auto-detects Ollama)
- Subreddits to monitor
- Your interests (used for relevance scoring)
- Optional systemd unit installation
Config is stored at ~/.config/reddit-reader/config.toml.
Usage
Start the monitor daemon:
reddit-reader serve
Or enable it as a systemd user service:
systemctl --user enable --now reddit-reader.socket
systemctl --user start reddit-reader.service
Launch the TUI:
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:
[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