๐ Horizon
June 9, 2026 ยท View on GitHub
๐ Horizon
Enjoy the News itself. Leave others to Horizon
๐ก Your own AI-powered news radar. Generates daily briefings in English & Chinese. | ๆๅปบไฝ ไธๅฑ็ AI ๆฐ้ป้ท่พพ
Screenshots
|
Ranked Daily Briefing
|
Context, Summary & Discussion
|
More Screenshots
|
Terminal Output
|
Feishu Notification
|
Email Delivery
|
Why Horizon?
Good news is scattered; bad news is endless. Horizon gives you a personal first pass over Hacker News, Reddit, Telegram, RSS, and GitHub: it fetches, deduplicates, scores, filters, and enriches stories with background context and community discussion.
But Horizon is not just another summarizer. AI is great at reducing noise, but news still needs human taste: the sources you trust, the comments that change how you read a story, and the hidden gems only people can share. Horizon keeps that human layer in the loop with customizable sources, thresholds, models, languages, delivery channels, comment summaries, and a community source hub.
Features
- ๐ก Watch Your Own Sources โ Track Hacker News, RSS, Reddit, Telegram, Twitter/X, GitHub releases or user activity, and OpenBB financial news watchlists in one pipeline
- ๐ค Turn Noise Into a Reading List โ Score each item from 0-10 with Claude, GPT, Gemini, DeepSeek, Doubao, MiniMax, Ollama, or any OpenAI-compatible API
- ๐ Merge Repeated Stories โ Deduplicate the same story across platforms before it reaches your briefing
- ๐ Understand the Background โ Add web-researched context for unfamiliar concepts, companies, projects, and technical terms
- ๐ฌ Read the Conversation โ Collect and summarize community comments from Hacker News, Reddit, and other supported sources
- ๐ Publish in Two Languages โ Generate English and Chinese daily briefings from the same source set
- ๐ Ship a Daily Site โ Publish generated Markdown as a GitHub Pages daily briefing site
- ๐ง Deliver by Email โ Run a self-hosted SMTP/IMAP newsletter with automatic subscribe and unsubscribe handling
- ๐ Push to Chat or Automations โ Send templated results to Feishu/Lark, DingTalk, Slack, Discord, or custom webhook endpoints
- ๐ง Start From Your Interests โ Use the setup wizard to generate a personalized source configuration
- โ๏ธ Tune the Radar โ Customize sources, thresholds, models, languages, and delivery channels from one JSON config
How It Works
%%{init: {
"theme": "base",
"themeVariables": {
"fontFamily": "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif",
"fontSize": "18px",
"primaryTextColor": "#2d2a3e",
"primaryBorderColor": "#e0dbd3",
"lineColor": "#7c7891",
"tertiaryColor": "#faf8f5",
"clusterBkg": "#f3f0eb",
"clusterBorder": "#e0dbd3"
}
}}%%
flowchart LR
classDef config fill:#fbbf24,stroke:#d4a017,color:#2d2a3e,stroke-width:1.5px;
classDef source fill:#ede7fb,stroke:#6d4aaa,color:#2d2a3e,stroke-width:1.5px;
classDef process fill:#ffe8db,stroke:#e0652e,color:#2d2a3e,stroke-width:1.5px;
classDef output fill:#f9d7e5,stroke:#be185d,color:#2d2a3e,stroke-width:1.5px;
config["โ๏ธ Config<br/>sources, thresholds, models, outputs"]
subgraph sources["Configured Sources"]
rss["๐ก RSS"]
hn["๐ฐ Hacker News"]
reddit["๐ฌ Reddit"]
telegram["โ๏ธ Telegram"]
twitter["๐ฆ Twitter / X"]
github["๐ GitHub"]
openbb["๐น OpenBB"]
end
fetch["๐ฅ Fetch"]
dedup["๐งน Deduplicate"]
score["๐ค AI Score & Filter"]
enrich["๐ Enrich"]
summary["๐ Summarize"]
subgraph outputs["Outputs"]
direction TB
site["๐ Pages"]
email["๐ง Email"]
webhook["๐ Webhooks"]
mcp["๐งฉ MCP"]
end
config --> fetch
rss --> fetch
hn --> fetch
reddit --> fetch
telegram --> fetch
twitter --> fetch
github --> fetch
openbb --> fetch
fetch --> dedup --> score --> enrich --> summary
config --> score
config --> summary
config --> outputs
summary --> site
summary --> email
summary --> webhook
summary --> mcp
class config config
class rss,hn,reddit,telegram,twitter,github,openbb source
class fetch,dedup,score,enrich,summary process
class site,email,webhook,mcp output
- Define โ Configure sources, thresholds, models, languages, and delivery from one JSON config.
- Fetch โ Pull latest content from all configured sources concurrently.
- Deduplicate โ Merge items pointing to the same story or URL across platforms.
- Score & Filter โ Use AI to rank items and keep only those above your threshold.
- Enrich โ Search the web for background context and collect community discussion for important items.
- Summarize โ Generate a structured Markdown briefing with summaries, tags, and references.
- Deliver โ Publish the result to GitHub Pages, email, webhooks such as Feishu, MCP, or local files.
Quick Start
1. Install
Option A: Local Installation
git clone https://github.com/Thysrael/Horizon.git
cd Horizon
# Install with uv (recommended)
uv sync
# Install test/development extras when needed
uv sync --extra dev
# Or with pip
pip install -e .
dev is currently defined as an optional extra in pyproject.toml, so use uv sync --extra dev for pytest and other development dependencies.
If you want the optional OpenBB financial-news source, install its extra too:
uv sync --extra openbb
If openbb pulls packages without wheels on your machine, install the SDK manually with binaries only:
uv pip install --only-binary=:all: openbb openbb-benzinga
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.
Option B: Manual configuration
cp .env.example .env # Add your API keys
cp data/config.example.json data/config.json # Customize your sources
Minimal manual configuration:
{
"ai": {
"provider": "openai",
"model": "gpt-4",
"api_key_env": "OPENAI_API_KEY"
},
"sources": {
"rss": [
{ "name": "Simon Willison", "url": "https://simonwillison.net/atom/everything/" }
]
},
"filtering": {
"ai_score_threshold": 6.0
}
}
Balanced digest (optional)
Limit the final digest size and prevent one category from dominating the
results. Categories come from source configuration such as
sources.rss[].category.
{
"filtering": {
"ai_score_threshold": 6.0,
"max_items": 20,
"category_groups": {
"ai": {
"limit": 5,
"categories": ["ai-news", "ai-tools", "machine-learning"]
},
"finance": {
"limit": 5,
"categories": ["finance", "business", "equities"]
}
},
"default_group": "other",
"default_group_limit": 3
}
}
Group limits are applied after AI score filtering and before enrichment. If
category_groups and max_items are omitted, filtering behaves as before.
api_key_env must be the name of an environment variable, not the API key
itself. Put the real secret in .env:
OPENAI_API_KEY=sk-your-key
For Gemini, use GOOGLE_API_KEY:
{
"ai": {
"provider": "gemini",
"model": "gemini-2.0-flash",
"api_key_env": "GOOGLE_API_KEY"
}
}
Any string value in data/config.json can reference environment variables with ${VAR_NAME}. This is useful for values such as ai.base_url, private RSS feed URLs, webhook endpoints, or custom header templates.
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 | โ |
| Twitter / X | Tweets from specific users | Yes (top N replies) |
| GitHub | User events & repo releases | โ |
| OpenBB | Financial company news by watchlist/provider | โ |
Where Your Briefing Goes
Horizon can publish or deliver the generated briefing in several ways:
| Channel | What it does |
|---|---|
| GitHub Pages Daily Site | Copies generated Markdown into docs/ so GitHub Pages can publish a daily-updated briefing site |
| Email Subscription | Sends the daily briefing to subscribers and handles subscribe/unsubscribe requests through SMTP/IMAP |
| Webhook Notification | Pushes success or failure results to Feishu/Lark, DingTalk, Slack, Discord, or any custom webhook endpoint |
| MCP Server | Exposes Horizon pipeline steps as tools so AI assistants can fetch, score, filter, enrich, summarize, and run the full workflow |
For setup details, see the Configuration Guide. For MCP tool references and client setup, see src/mcp/README.md and src/mcp/integration.md.
Supported By
Horizon is an open-source project maintained in spare time. If you'd like to support the project or be listed here, feel free to open an issue or email me.
| Supporter | Details |
|---|---|
![]() | Compshare currently supports Horizon. Compshare is UCloud's AI cloud platform, offering cost-effective monthly and pay-as-you-go domestic model agent plans starting from RMB 49/month, as well as stable officially relayed overseas models. It supports Claude Code, Codex, and API usage, with enterprise-grade high concurrency, 24/7 technical support, and self-service invoicing. Register through their link to receive a free RMB 5 trial credit. |
Documentation
| Guide | Description |
|---|---|
| Configuration | AI providers, sources, filtering, email, webhook, GitHub Pages, and MCP setup |
| Scoring | How Horizon evaluates and ranks news items |
| Scrapers | Source scraper details and extension notes |
| MCP Tools | Tool reference for MCP-compatible clients |
Project Status
Horizon already supports the full daily briefing loop: multi-source collection, AI scoring, deduplication, enrichment, comment summaries, bilingual generation, GitHub Pages publishing, email delivery, webhook delivery, Docker deployment, MCP integration, and the setup wizard.
Planned improvements:
- More source types, such as Discord
- Custom scoring prompts per source
- Publish releases on GitHub
- Publish the package to PyPI for
pip install
Contributing
Contributions are welcome. See CONTRIBUTING.md for code, documentation, and source-sharing guidelines.
Share Sources
Want to share valuable source discoveries with the Horizon community? Please submit them through horizon1123.top.
Acknowledgements
- Special thanks to LINUX.DO for providing a promotion platform.
- Special thanks to HelloGitHub for valuable guidance and suggestions.
- Special thanks to AIGC Link for the promotions on XiaoHongShu.
