Developer blog feed aggregator with AI-powered summaries.
feedy scrapes developer blogs from platforms you care about, stores new posts
in a local SQLite database (deduplicated by URL), and turns them into a concise
daily digest — each item summarized in two sentences plus a "why it matters for
devs" line, courtesy of the Anthropic API.
| Source | Name in config | Site |
|---|---|---|
| X (Twitter) | x |
docs.x.com/changelog |
| Telegram | telegram |
core.telegram.org/blog |
| TikTok | tiktok |
developers.tiktok.com/blog |
| Meta | meta |
developers.facebook.com/blog |
| OpenAI | openai |
openai.com/news |
| Anthropic | anthropic |
anthropic.com/news |
| Hacker News | hackernews |
news.ycombinator.com |
All sources are enabled by default. Adding a new one takes about ten lines — see CONTRIBUTING.md.
Requires Python 3.11+.
git clone https://github.com/<your-account>/feedy.git
cd feedy
pip install -e ".[dev]"This installs the feedy command.
feedy fetch # pull latest entries from configured sources
feedy list # show saved entries as a table
feedy digest # print today's AI digestfeedy list --source hackernews # only one source
feedy list --since 2026-05-01 # on or after a date (YYYY-MM-DD)
feedy digest --since 2026-05-01 # digest over a date range
feedy digest --source meta # digest for one sourcefeedy digest --output report.md # write Markdown to a file
feedy digest -o report.md # short flagWhen --output is given, the digest is written to the file instead of being
printed to the terminal.
feedy digest --slack # post to a Slack incoming webhook
feedy digest --email # send over SMTP to the recipient--slack needs a webhook URL ([slack] webhook_url or FEEDY_SLACK_WEBHOOK).
--email needs the [email] SMTP settings (password via [email] password or
FEEDY_SMTP_PASSWORD). See Configuration.
feedy serve # http://127.0.0.1:8000
feedy serve --host 0.0.0.0 --port 9000Exposes GET / (health) and GET /digest?since=YYYY-MM-DD&source=NAME, which
returns today's saved entries as JSON.
feedy reads an optional TOML config from ~/.feedy/config.toml. If the file
is missing, sensible defaults are used (all sources enabled, Markdown output).
# ~/.feedy/config.toml
# Which sources to fetch and include in the digest.
sources = ["x", "telegram", "tiktok", "meta", "openai", "anthropic", "hackernews"]
# Digest format: "markdown" (default) or "plain".
output_format = "markdown"
[anthropic]
# API key for AI summaries. The ANTHROPIC_API_KEY env var takes precedence.
api_key = "sk-ant-..."
[slack]
# Incoming webhook URL for `feedy digest --slack`.
# FEEDY_SLACK_WEBHOOK env var takes precedence.
webhook_url = "https://hooks.slack.com/services/..."
[email]
# SMTP settings for `feedy digest --email`.
# FEEDY_SMTP_PASSWORD env var takes precedence over `password`.
host = "smtp.gmail.com"
port = 587
username = "you@example.com"
password = "app-password"
sender = "you@example.com"
recipient = "you@example.com"AI summaries need an Anthropic API key. feedy looks for it in this order:
ANTHROPIC_API_KEYenvironment variableanthropic.api_keyin~/.feedy/config.toml
export ANTHROPIC_API_KEY="sk-ant-..."
feedy digestWithout a key, fetch and list still work; digest falls back to showing
titles without summaries.
The repo ships a GitHub Actions workflow
(.github/workflows/fetch.yml) that runs
feedy fetch once a day at 06:00 UTC and caches the database between runs so
deduplication keeps working. Trigger it manually from the Actions tab via
Run workflow.
Entries live in a SQLite database at ~/.feedy/feedy.db. Posts are deduplicated
by URL, so re-running fetch only saves what's new.
pip install -e ".[dev]"
pytestSee ROADMAP.md for the full feature plan.