Skip to content
/ feed Public

RSS CLI for AI agents. Bring your own algorithm.

Notifications You must be signed in to change notification settings

odysseus0/feed

Repository files navigation

feed

RSS gives you the content you chose, not what an algorithm chose. But 92 feeds produce 2600 entries a week, and you can't read them all.

feed is a headless RSS engine that lets an AI agent read your feeds for you — your own algorithm.

feed demo

With feed, you can:

  • Bring your own algorithm — your agent, your prompt, your priorities. No platform deciding what you see
  • Add any site — auto-discovers feed URLs from any webpage, no hunting for XML links
  • Search everything — full-text search across titles, summaries, and content (SQLite FTS5)
  • Stay current automatically — auto-fetches when feeds are stale, no cron needed
  • Pipe it anywhere — table, JSON, or wide output to stdout; status to stderr. Unix-friendly
  • Own your data — single SQLite file, no server, no account, works offline

Quick Start

# Install via Homebrew
brew tap odysseus0/tap
brew install feed

# Or install via Go
go install github.com/odysseus0/feed/cmd/feed@latest

# Or install via OpenClaw 🦞
clawhub install rss-digest

# Add the agent skill (works with Claude Code, Codex, Cursor, etc.)
npx skills add -g odysseus0/feed

# Ask your agent to read your feeds
claude --dangerously-skip-permissions "/rss-digest AI — what's worth forming an opinion on"

Usage

# Add a feed (auto-discovers feed URL from any webpage)
feed add feed https://simonwillison.net

# Fetch all feeds (or just one by ID)
feed fetch
feed fetch 42

# Browse entries
feed get entries                    # unread, newest first
feed get entries --status all       # everything
feed get entries --feed 1 -o json   # one feed, as JSON

# Read a full post (rendered as Markdown)
feed get entry 446

# Search across everything
feed search "rust async"

# Triage
feed update entry 446 --read
feed update entry 446 --starred
feed update entries --read 100 101 102 103   # batch

# Manage feeds
feed get feeds              # list all with unread counts
feed remove feed 42
feed import feeds.opml
feed export > backup.opml

# Stats
feed get stats

Every command supports -o table (default), -o json, or -o wide. Status messages go to stderr, data to stdout — pipe-friendly by design.

# It's just a SQLite file — bring your own queries
sqlite3 ~/.local/share/feed/feed.db "SELECT title, url FROM entries ORDER BY published_at DESC LIMIT 10"

Includes a starter OPML with 92 popular tech blogs curated from Hacker News discussions.

Why this exists

Platform algorithms are optimized for the platform — engagement, ads, time on site. An LLM you run locally is optimized for you. RSS got you off the content treadmill. feed + an agent gives you control back.

Newsboat, miniflux, and NetNewsWire are readers. This is plumbing. They have UIs; this has clean table output for agents and structured data for scripts. feed is the missing layer between RSS and whatever you want to do with it — LLM triage, vault ingestion, notification pipelines, or scripts you haven't written yet.

Bring your own algorithm.

How it works

  • Feed discoveryfeed add https://example.com parses <link rel="alternate"> tags. No need to find the feed URL yourself.
  • Concurrent fetching — 10 workers by default with conditional requests (ETag/If-Modified-Since). Polite and fast.
  • Pre-computed Markdown — HTML content is converted to Markdown at fetch time. feed get entry <id> renders instantly.
  • Full-text search — SQLite FTS5 across titles, summaries, and content.
  • Auto-fetch on stalenessfeed get entries fetches automatically if feeds are >30min stale. Skip with --no-fetch.
  • Batch state management — Mark 50 entries as read in one command. Essential for agent triage workflows.

Configuration

feed works out of the box with sane defaults. Optional config via ~/.config/feed/config.toml or environment variables.

Setting Env var Default
Database path FEED_DB_PATH ~/.local/share/feed/feed.db
Staleness threshold FEED_STALE_MINUTES 30
Fetch workers FEED_FETCH_CONCURRENCY 10
Retention (days) FEED_RETENTION_DAYS 0 (keep all)
HTTP timeout FEED_HTTP_TIMEOUT_SECONDS 5

Precedence: CLI flags > env vars > config file > defaults.

Origin

Inspired by Karpathy's RSS revival tweet (Feb 2026): "download a client, or vibe code one." We vibe coded the headless engine for agents.

Development

go test ./...
go vet ./...

Pure Go, no CGO. go install works on any platform.

License

MIT

About

RSS CLI for AI agents. Bring your own algorithm.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages