Skip to content

Thysrael/Horizon

Repository files navigation

🌅 Horizon

AI curates the tech news. You just read.

Python License uv Daily Summary GitHub commit activity PRs Welcome


Claude GPT Gemini DeepSeek Doubao MiniMax OpenClaw

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 · 简体中文

Screenshots

Daily Overview

Daily Overview

News Detail

News Detail
Terminal Output

Terminal Output

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

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
  1. Fetch — Pull latest content from all configured sources concurrently
  2. Deduplicate — Merge items pointing to the same URL across different platforms
  3. Score — AI rates each item 0-10 based on technical depth, novelty, and impact
  4. Filter — Keep only items above your configured threshold (default: 6.0)
  5. Enrich — For high-scoring items, search the web for background context and collect community discussions
  6. Summarize — Generate a structured Markdown report with summaries, tags, and references
  7. 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

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

  • 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

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

License

MIT

About

Automated AI news aggregator & summarizer. Generates daily briefings in English & Chinese. | 全自动 AI 科技新闻聚合与摘要生成器。

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages