Enjoy the News itself. Leave others to Horizon
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
|
๐ค Beyond a Cold AI Agent: Designed with a "human touch". Build your personalized newsroom by deeply customizing feeds and sharing high-quality information sources via the Preset Library.
- ๐ก 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.
โโโโโโโโโโโโ
โ 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 48Option A: Interactive wizard (recommended)
uv run horizon-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 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
- 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
Contributions are welcome! Feel free to open issues or submit pull requests.
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.
- Special thanks to LINUX.DO for providing a promotion platform.
- Special thanks to HelloGitHub for valuable guidance and suggestions.



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