Horizon
Health Warn
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 934 GitHub stars
Code Fail
- rm -rf — Recursive force deletion command in scripts/daily-run.sh
Permissions Pass
- Permissions — No dangerous permissions requested
This tool is an automated news aggregator that collects tech news from multiple sources like Reddit and Hacker News. It uses AI models to score, filter, and generate bilingual daily briefings.
Security Assessment
The application inherently makes external network requests to gather news and interact with various AI APIs. The most significant security concern is a failed check for a recursive force deletion command (`rm -rf`) found inside a shell script (`scripts/daily-run.sh`). While this is often used harmlessly for routine cleanup in automated workflows, it poses a risk if the script is improperly modified or if the directory path is manipulated, potentially leading to unintended data loss. No hardcoded secrets or dangerous system permissions were detected. Overall risk is rated as Medium.
Quality Assessment
The project appears to be actively maintained, with repository activity as recent as today. It boasts strong community trust, evidenced by nearly 1,000 GitHub stars. However, the automated scan noted a complete lack of a license file, which is contradictory to the MIT license badge shown in the README. The absence of an explicit license means there are technically no legal permissions granted for use, modification, or distribution.
Verdict
Use with caution: it is a popular and actively maintained project, but you should review the `rm -rf` command in the shell script and clarify the missing license before adopting it.
Automated AI news aggregator & summarizer. Generates daily briefings in English & Chinese. | 全自动 AI 科技新闻聚合与摘要生成器。
🌅 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.
Screenshots
|
Daily Overview
|
News Detail
|
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 | — |
| 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
- 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
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.
License
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found