Your own AI analyst reads the internet every morning so you don't have to.
A local tool that automatically builds you a daily briefing on AI, agents, tech, finance, and business — pulled from RSS feeds, Hacker News, Reddit, and optionally X/Twitter — and critically analyzed (not just summarized) by whatever AI you already have or prefer: a free local model via Ollama, a cloud API you already pay for (OpenAI/ChatGPT, Anthropic/Claude), or a free-tier cloud option (Groq, OpenRouter), or any local server that speaks the standard chat-completions format (LM Studio, llama.cpp server, vLLM). Pick one in the setup script — no code changes needed either way.
It doesn't just list headlines — it's prompted to act like a skeptical analyst: it cross-references sources, flags unverified claims as speculation, deduplicates repeat stories across runs, and writes one tight briefing instead of a firehose.
- Fetches from RSS feeds (OpenAI, Anthropic, Google, Meta blogs, arXiv, TechCrunch, The Verge, VentureBeat, Ars Technica, Wired, Reuters, FT), Hacker News, Reddit (r/singularity, r/LocalLLaMA, r/MachineLearning, r/artificial, r/OpenAI), and optionally X/Twitter (your choice of accounts + search terms).
- Analyzes everything using whichever AI backend you configured — filters noise, merges corroborating stories, flags speculation, and writes a structured briefing.
- Delivers it via email and/or Telegram, on whatever schedule you set.
- Remembers the last digest so it doesn't repeat itself if you run it more than once a day (optional, on by default).
setup.py asks you to pick one interactively, but here's the honest comparison:
| Option | Cost | Setup | Analysis quality |
|---|---|---|---|
| Ollama (local) | Free forever | Install Ollama + pull a model | Good with a decent model (14B+); depends on your hardware |
Groq / OpenRouter (via openai_compatible) |
Free tier available | Free account + API key | Better than most local setups, still $0 |
OpenAI / ChatGPT (via openai_compatible) |
Pay-as-you-go | API key (separate from a ChatGPT subscription) | Strong |
| Anthropic / Claude | Pay-as-you-go | API key (separate from a claude.ai subscription) | Strong |
Any of these work with zero code changes — it's purely a .env setting
(AI_PROVIDER=ollama / openai_compatible / anthropic), and setup.py writes it
for you based on what you pick.
- X/Twitter has no free official API anymore. This uses
twscrape, an unofficial library that logs in as a real X account to read posts. It works today, but it's not sanctioned by X and can break when X changes things internally (fix:pip install -U twscrape). Use a secondary account if you're cautious. X is entirely optional — leave it unconfigured and everything else still works great off RSS + HN + Reddit, which in practice surface most things that blow up on X anyway, just with some delay. - If you go the local-model route, analysis quality depends on your model. A local 7-14B model is genuinely useful but won't match a frontier cloud model's judgment. Bigger (well-resourced) local models = better analysis, if your machine can run them. Switch to a cloud provider any time if you want sharper analysis instead.
- Python 3.10+
- macOS, Linux, or Windows
- One of: Ollama installed with a model pulled (for the free local option), or an API key for whichever cloud provider you'd rather use (OpenAI, Groq, OpenRouter, Anthropic, etc.)
git clone https://github.com/slymp3/ai-news-digest.git
cd ai-news-digest
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 setup.pysetup.py is interactive and does the rest for you:
- Asks which AI backend you want (Ollama, OpenAI-compatible, or Anthropic) and validates/configures it
- Walks you through email and/or Telegram delivery and writes your
.envfile - Detects your OS and sets up daily automatic scheduling for you (launchd on macOS, cron on Linux, Task Scheduler on Windows) — using your real paths automatically, no manual editing required
That's it. Test a manual run any time with:
python3 main.pyEverything lives in .env (created from .env.example by setup.py, or copy it
yourself and edit by hand):
| Setting | Purpose |
|---|---|
AI_PROVIDER |
ollama, openai_compatible, or anthropic |
OLLAMA_HOST, OLLAMA_MODEL |
Used when AI_PROVIDER=ollama; leave model blank to auto-detect |
OPENAI_COMPATIBLE_BASE_URL, _API_KEY, _MODEL |
Used when AI_PROVIDER=openai_compatible (OpenAI, Groq, OpenRouter, LM Studio, etc.) |
ANTHROPIC_API_KEY, ANTHROPIC_MODEL |
Used when AI_PROVIDER=anthropic |
SMTP_*, DIGEST_TO_EMAIL |
Email delivery |
TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID |
Telegram delivery (optional) |
DEDUP_ENABLED |
Set false to disable cross-run deduplication |
X_USERNAME etc. |
Optional X/Twitter live pulling (see caveats above) |
X_WATCHLIST, X_SEARCH_TERMS |
Which accounts/topics to track on X |
Sources themselves (RSS_FEEDS, REDDIT_SUBS) are edited directly in config.py.
The analysis behavior/prompt is in synthesize.py's SYSTEM_PROMPT — edit freely to
change what it prioritizes or how it writes.
setup.py will ask if you want a second daily run time (e.g. morning + evening) and
sets both up automatically. With DEDUP_ENABLED=true (default), the second run of the
day won't re-explain stories from the first unless something genuinely changed.
macOS (launchd)
launchctl list | grep ainewsdigest # check current status
launchctl unload ~/Library/LaunchAgents/com.ainewsdigest.scheduler.plist
launchctl load ~/Library/LaunchAgents/com.ainewsdigest.scheduler.plistEdit the .plist file directly (~/Library/LaunchAgents/com.ainewsdigest.scheduler.plist)
to change run times, then unload/load again.
Linux (cron)
crontab -l # view current schedule
crontab -e # edit manuallyThis tool's entries are wrapped in # ai-news-digest-start / # ai-news-digest-end
markers so re-running setup.py safely replaces just its own lines.
Windows (Task Scheduler)
Open Task Scheduler → look for tasks named AINewsDigest_1, AINewsDigest_2, etc.
Right-click → Properties → Triggers to change run times.
- "Could not reach Ollama" (if using
AI_PROVIDER=ollama): make sure the Ollama app/service is running, or runollama servemanually to see errors. - "No Ollama models found":
ollama pull qwen2.5:14b(or any model you prefer). - "Unknown AI_PROVIDER" error: check
.env— it must be exactlyollama,openai_compatible, oranthropic. - Cloud API errors (openai_compatible/anthropic): double-check the API key and
model name in
.env; the error message includes the response body from the provider to help pinpoint what's wrong. - Email not arriving: double-check you used an app password (not your real password), and check spam.
twscrapeerrors:pip install -U twscrape, or just leave X unconfigured.- Scheduled run didn't fire: check
digest_log.txtanddigest_error_log.txtin the project folder.
MIT — see LICENSE. Use it, fork it, change it, ship it.