AI curates the tech news. You just read.
Horizon 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 and Chinese.
|
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, GPT-4, Gemini, DeepSeek, Doubao, MiniMax, or any OpenAI-compatible API to rate each item 0-10, filtering out the noise
- 🌐 Bilingual Summaries — Generates daily reports in both English and Chinese
- 🔍 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
┌──────────┐
│ Hacker │
┌─────────┐ │ News │ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ RSS │──▶│ Reddit │──▶│ AI Score │──▶│ Enrich │──▶│ Summary │
│ Telegram│ │ GitHub │ │ & Filter │ │ & Search │ │ & Deploy │
└─────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
Fetch from Merge & Score Web search Generate
all sources deduplicate 0-10 each background Markdown &
& filter knowledge 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/Thysrael/Horizon.git
cd horizon
# Install with uv (recommended)
uv sync
# Or with pip
pip install -e .git clone https://github.com/Thysrael/Horizon.git
cd horizon
# 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 horizon
# Or run with custom time window
docker-compose run --rm horizon --hours 48cp .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 horizon # Run with default 24h window
uv run horizon --hours 48 # Fetch from last 48 hoursdocker-compose run --rm horizon # Run with default 24h window
docker-compose run --rm horizon --hours 48 # Fetch from last 48 hoursThe generated report will be saved to data/summaries/.
Horizon 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 | — |
Horizon ships with a built-in MCP server so AI assistants can drive the pipeline programmatically.
# Start the MCP server (stdio mode)
uv run horizon-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.
- Multi-source aggregation (HN, RSS, Reddit, Telegram, GitHub)
- AI scoring with multiple providers
- Bilingual summary generation (EN/ZH)
- Web search for background enrichment
- Community discussion collection
- GitHub Pages deployment
- Email Subscription (SMTP/IMAP automated newsletter)
- Docker deployment support
- MCP server integration
- Web UI dashboard
- Smart source setup wizard — conversational tool that recommends and configures sources based on user interests (e.g. "I follow embodied AI")
- Improved Web UI — better digest and article detail experience
- Slack / Webhook notification
- More source types (Twitter/X, Discord, etc.)
- Custom scoring prompts per source
Contributions are welcome! Feel free to open issues or submit pull requests.



{ "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 } }