Horizon
Automated AI news aggregator & summarizer. Generates daily briefings in English & Chinese. | 全自动 AI 科技新闻聚合与摘要生成器。
Install / Use
/learn @Thysrael/HorizonQuality Score
Category
Development & EngineeringSupported Platforms
README
🌅 Horizon
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.
📖 Live Demo · 📋 Configuration Guide · 简体中文
</div>Screenshots
<table> <tr> <td width="50%"> <p align="center"><strong>Daily Overview</strong></p> <img src="docs/assets/overview_en.png" alt="Daily Overview" /> </td> <td width="50%"> <p align="center"><strong>News Detail</strong></p> <img src="docs/assets/one_news_en.png" alt="News Detail" /> </td> </tr> </table> <details> <summary><strong>Terminal Output</strong></summary> <br> <p align="center"> <img src="docs/assets/terminal_log.png" alt="Terminal Output" width="400" /> </p> </details>Features
- 📡 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
- 🧙 Setup Wizard — Interactive CLI that recommends sources based on your interests, with a curated preset library open to community contributions
How It Works
┌──────────┐
│ 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
Quick Start
1. Install
Option A: Local Installation
git clone https://github.com/Thysrael/Horizon.git
cd horizon
# Install with uv (recommended)
uv sync
# Or with pip
pip install -e .
Option B: Docker
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 48
2. Configure
Option A: Interactive wizard (recommended)
uv run horizon-wizard
The 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 sources
Here's what a config looks like:
{
"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
}
}
For the full reference, see the Configuration Guide.
3. Run
Local Installation
uv run horizon # Run with default 24h window
uv run horizon --hours 48 # Fetch from last 48 hours
With Docker
docker-compose run --rm horizon # Run with default 24h window
docker-compose run --rm horizon --hours 48 # Fetch from last 48 hours
The generated report will be saved to data/summaries/.
4. Automate (Optional)
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.
Supported Sources
| Source | What it fetches | Comments | |--------|----------------|----------| | Hacker News | Top stories by score | Yes (top N comments) | | RSS / Atom | Any RSS or Atom feed | — | | Reddit | Subreddits + user posts | Yes (top N comments) | | Telegram | Public channel messages | — | | GitHub | User events & repo releases | — |
MCP Integration
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-mcp
Available 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.
Roadmap
- [x] Multi-source aggregation (HN, RSS, Reddit, Telegram, GitHub)
- [x] AI scoring with multiple providers
- [x] Bilingual summary generation (EN/ZH)
- [x] Web search for background enrichment
- [x] Community discussion collection
- [x] GitHub Pages deployment
- [x] Email Subscription (SMTP/IMAP automated newsletter)
- [x] Docker deployment support
- [x] MCP server integration
- [x] Web UI dashboard
- [x] Setup Wizard — interactive CLI that recommends sources based on user interests
- [ ] Improved Web UI — better digest and article detail experience
- [ ] Slack / Webhook notification
- [ ] More source types (Twitter/X, Discord, etc.)
- [ ] Custom scoring prompts per source
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
Contribute Source Presets
Horizon's setup wizard uses a community-maintained preset library to recommend sources. We'd love your help expanding it!
- Fork this repo
- Add your sources to
data/presets.json(provide both English and Chinese descriptions) - Submit a PR
Great candidates: niche RSS feeds, active subreddits, notable GitHub accounts, or Telegram channels in your area of expertise.
Acknowledgements
- Special thanks to LINUX.DO for providing a promotion platform.
- Special thanks to HelloGitHub for valuable guidance and suggestions.
