unrager

A calm Twitter/X client for the terminal. A local LLM drops rage-bait before it reaches your eyes.

$ curl -fsSL unrager.com/install.sh | bash

macOS · Linux · or cargo install unrager

unrager in Ghostty: Following feed on the left with author-avatar chips, a focal tweet expanded on the right with an inline screenshot and threaded replies, rage-filter hidden-count visible in the header
ask pane on the right showing a bullet-list gemma summary of the focal tweet's replies, with the Vim composer in INSERT mode pinned at the bottom
profile brief — a third-person analysis of @FFmpeg's recent posts streamed from the local LLM
notifications pane with author avatars next to every notification line, beside a live home feed
scrollable help overlay covering navigation, leader, sources, and read-tracking bindings
thread · split-pane reply chain with inline kitty-graphics media · rage filter ate 12 (top-bar −12)

─── what it does ───────────────────────

rage filter
Every tweet classified by a local Ollama model against your rubric. Matches are physically removed — not collapsed, not grayed, gone. Verdicts cache to SQLite; edit the rubric and the cache invalidates.
terminal-native
ratatui + crossterm. Inline photos, video posters, GIF frames via the kitty graphics protocol on Ghostty, Kitty, WezTerm. Falls back to glyphs elsewhere.
author avatars
Every feed row carries a square kitty-graphics chip of the poster; profile headers pin a larger one beside name, handle, and follower counts. Postcard screenshots (S/C) composite the chip in too. Disk-cached at ~/.cache/unrager/avatars/ with LRU pruning — X rotates the URL on every photo change, so the cache self-invalidates. Toggle feed chips with <space> a.
free reads
Browser cookies → X's own GraphQL endpoints, the same path the web client uses. No API key, no cost, no rate tier.
write via OAuth
Tweet & reply through the official X API v2 with your own registered client. Auto-likes on reply. Your identity, your rate limits.
four LLM hooks, one model
Filter classifies tweets. Translate (T) rewrites foreign-language posts in English. Ask (A) opens an inline gemma chat about the selected post with thread context auto-attached. Brief (B) generates a short profile analysis from someone's timeline. All the same local Ollama. Nothing leaves your machine.
Vim-mode composing
Every text input — reply, ask, command palette — is a miniature Vim editor. Insert / Normal, hjkl, w/b, dd/dw, counts, ^/$. Status line shows the mode and a live character count.
serve anywhere
Optional HTTP server + embedded Dioxus web client. Pair with Tailscale and you have the same feed on iOS, Android, and the browser — one binary, one codebase.