--- name: papr-rss description: >- Read, search and triage the user's Papr RSS subscriptions from the shell via the `papr` CLI. Use when the user wants to catch up on their feeds, find or summarize articles they've subscribed to, check what's unread, star/save articles, subscribe to a new feed, or pull new posts. Triggers on: "what's in my feeds", "any unread RSS", "summarize this feed", "search my subscriptions for X", "mark these read", "subscribe to ", "refresh my feeds". --- # Papr RSS CLI `papr` is a token-efficient, agent-facing CLI over the user's local Papr RSS database. It emits [TOON](https://toonformat.dev) on stdout (≈40% cheaper than JSON, via the official `toon-format` encoder), keeps diagnostics on stderr, and returns structured errors with exit codes (0 success/no-op, 1 runtime, 2 usage). Reads are token-minimal by default; long article bodies are truncated with a `--full` escape hatch. Run `papr` with no arguments first — it prints the unread dashboard plus the most useful next commands, so you can orient without reading a manual. ## Core flow ```sh papr # home: unread/starred counts + recent unread + next steps papr feeds # subscriptions grouped by folder, with unread counts papr list --feed # articles in a feed (defaults to unread; --all for read too) papr list --starred # smart views: --starred / --later / --tag / --folder papr list --fields author,url # add columns: author,url,snippet,type,feed_id,published papr read [...] # plain-text body, truncated; pass several ids to batch papr read --feed --unread --limit 5 # read a feed's latest unread in one call papr read --full # the complete body when truncation hid something papr search "" # FTS5 full-text search across every article ``` ## Triage & subscriptions ```sh papr mark read [...] # state: read|unread|star|unstar|later|unlater (idempotent) papr mark-all --feed # mark a whole view read papr subscribe # auto-discovers the feed, inserts it, fetches it papr refresh [--feed ] # fetch new articles over the network (RSS + newsletters) papr extract # fetch & store the cleaned full text of an article ``` ## Management (mirrors the desktop app) ```sh papr tags | papr tag add | papr tag create "" papr folders | papr folder create "" | papr feed move --folder papr rules | papr rule create "" "" --action star papr highlights [--article ] | papr highlight create "" papr newsletters | papr newsletter add --title .. --host .. --user .. --password .. papr opml import | papr opml export papr settings get | papr settings set papr stats ``` ## Sync ```sh papr sync status | papr sync run # reconcile read/starred + subscriptions with FreshRSS/Miniflux ``` There are no summarize/ask/digest/translate commands: you are the language model, so read the text with `papr read ` (or gather candidates with `papr search`) and summarize, answer or translate it yourself — no second AI provider is involved. Destructive verbs require `--yes`; without it they fail with exit 2 and tell you the exact command to re-run: ```sh papr unsubscribe --yes # delete a feed and its articles papr admin cleanup --yes # also: admin vacuum / admin reset papr folder delete --yes # likewise tag/rule/highlight delete, newsletter remove ``` ## Notes - Every command takes `--db ` (or the `PAPR_DB` env var) if the database is not in the desktop app's default location. - Output is data, not prose. Each list states a definitive total (`count: N of M unread`) so you never need to paginate just to learn the size. - If the answer is "nothing", the command says so explicitly — a zero is an answer, not a reason to retry with different flags. - Prefer the ambient SessionStart hook (`papr setup`) so the unread dashboard is already in context at the start of a conversation; this skill is the lower-overhead alternative that loads only when a feed task comes up.