AI curates the tech news. You just read. Or let your agent generate a podcast for your lazy ass!
AIRWave collects news from multiple customizable sources, uses AI to score and filter them, and generates a daily briefing β complete with summaries, community discussions, and background explanations in both English.
π Live Demo Β· π Configuration Guide Β· π DeepWiki Docs
|
Daily Overview
|
News Detail
|
- π‘ Multi-Source Aggregation β Collects from Hacker News, RSS feeds, Reddit, Telegram channels, and GitHub (releases & user events)
- π€ AI-Powered Scoring β Uses Claude, Gemini, MiniMax, or any OpenAI-compatible API to rate each item 0-10, filtering out the noise
- π Ready for Multilingual Summaries β Generates daily reports in English but can go further
- π Content Enrichment β Searches the web to provide background knowledge for unfamiliar concepts
- π¬ Community Voices β Collects and summarizes discussions from comments on HackerNews, Reddit, etc.
- π Cross-Source Deduplication β Merges duplicate items from different platforms automatically
- π§ Email Subscription β Self-hosted newsletter system (SMTP/IMAP) that handles "Subscribe" requests automatically
- π Static Site Generation β Deploys as a GitHub Pages site via GitHub Actions, updated on a schedule
- βοΈ Fully Configurable β Single JSON config file, easy to customize sources, thresholds, and AI providers
- π§ Setup Wizard β Interactive CLI that recommends sources based interests, with a curated preset library open to community contributions
- π[1]Universal Knowledge Graph Interface β Drop in any memory graph backend (Zep, mem0) XOR a naive graphDB (FalkorDB, neo4j)
- π[2]Fetch from Whatsapp β Self-explanatory
- **π[3]Insight and Memory HITL Commit Flow ** β Self-explanatory
- π[4]Update Universal Knowledge Graph from greenlit Insights β Self-explanatory
- π[5]Auth-only sources β Self-explanatory
- π[6]Achive.ph trigger and parsing logic β Self-explanatory
- π[7]Improved Web UI β better digest and article detail experience
- π[8]Webhook notification β Self-explanatory
- π[9]More source types (Twitter/X, Discord, etc.) β Self-explanatory
- π[10]Custom scoring prompts per source β Self-explanatory
ββββββββββββ
β Hacker β
βββββββββββ β News β ββββββββββββ ββββββββββββββββββββββ ββββββββββββ
β RSS ββββΆβ Reddit ββββΆβ AI Score ββββΆβ Enrich ββββΆβ Summary β
β Telegramβ β GitHub β β & Filter β β & Search & Validateβ β & Deploy β
βββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββββββββ ββββββββββββ
Fetch from Merge & Score Web search Generate
all sources deduplicate 0-10 each background Markdown &
[2] & filter knowledge,[3][4] deploy site
- Fetch β Pull latest content from all configured sources concurrently
- Deduplicate β Merge items pointing to the same URL across different platforms
- Score β AI rates each item 0-10 based on technical depth, novelty, and impact
- Filter β Keep only items above your configured threshold (default: 6.0)
- Enrich β For high-scoring items, search the web for background context and collect community discussions
- Summarize β Generate a structured Markdown report with summaries, tags, and references
- Deploy β Optionally publish to GitHub Pages as a daily-updated static site
git clone https://github.com/solution8-com/AIRWave.git
cd AIRWave
# Install with uv (recommended)
uv sync
# Or with pip
pip install -e .git clone https://github.com/solution8-com/AIRWave.git
cd AIRWave
# Configure environment
cp .env.example .env
cp data/config.example.json data/config.json
# Edit .env and data/config.json with your API keys and preferences
# Run with Docker Compose
docker-compose run --rm AIRWave
# Or run with custom time window
docker-compose run --rm AIRWave --hours 48Option A: Interactive wizard (recommended)
uv run AIRWave-wizardThe wizard asks about your interests (e.g. "LLM inference","web security") and auto-generates data/config.json from a curated preset library + optional AI recommendations.
Option B: Manual configuration
cp .env.example .env # Add your API keys
cp data/config.example.json data/config.json # Customize your sourcesHere's what a config looks like:
For the full reference, see the Configuration Guide.
uv run AIRWave # Run with default 24h window
uv run AIRWave --hours 48 # Fetch from last 48 hoursdocker-compose run --rm AIRWave # Run with default 24h window
docker-compose run --rm AIRWave --hours 48 # Fetch from last 48 hoursThe generated report will be saved to data/summaries/.
AIRWave works great as a GitHub Actions cron job. See .github/workflows/daily-summary.yml for a ready-to-use workflow that generates and deploys your daily briefing to GitHub Pages automatically.
| Source | What it fetches | Comments |
|---|---|---|
| Hacker News | Top stories by score | Yes (top N comments) |
| RSS / Atom | Any RSS or Atom feed | β |
| Subreddits + user posts | Yes (top N comments) | |
| Telegram | Public channel messages | β |
| GitHub | User events & repo releases | β |
AIRWave ships with a built-in MCP server so AI assistants can drive the pipeline programmatically.
# Start the MCP server (stdio mode)
uv run AIRWave-mcpAvailable tools include hz_validate_config, hz_fetch_items, hz_score_items, hz_filter_items, hz_enrich_items, hz_generate_summary, and hz_run_pipeline.
See src/mcp/README.md for the full tool reference and src/mcp/integration.md for client setup.
Contributions are welcome! Feel free to open issues or submit pull requests.
AIRWave's setup wizard uses the publicly available preset library to recommend sources. Please contribute to this list!
- Fork this repo
- Add your sources to
data/presets.json(provide both English and descriptions) - Submit a PR
Great candidates: niche RSS feeds, active subreddits, notable GitHub accounts, or Telegram channels in your area of expertise.



{ "ai": { "provider": "openai", // or "anthropic", "gemini", "doubao", "minimax" "model": "gpt-4", "api_key_env": "OPENAI_API_KEY", "languages": ["en", "zh"] // bilingual output }, "sources": { "hackernews": { "enabled": true, "fetch_top_stories": 20, "min_score": 100 }, "rss": [ { "name": "Simon Willison", "url": "https://simonwillison.net/atom/everything/" } ], "reddit": { "subreddits": [{ "subreddit": "MachineLearning", "sort": "hot" }], "fetch_comments": 5 }, "telegram": { "channels": [{ "channel": "zaihuapd", "fetch_limit": 20 }] } }, "filtering": { "ai_score_threshold": 6.0, "time_window_hours": 24 } }