Skip to content

Horizon: Your Own AI-Powered News Radar

https://github.com/Thysrael/Horizon

Overview

Horizon is an open‑source Python project that builds a personal AI‑driven news radar. It continuously collects articles from a wide range of sources—including Hacker News, Reddit, RSS, Telegram, Twitter/X, GitHub, and financial news feeds—deduplicates and scores them with configurable AI models, enriches the content with web‑researched context and community discussion, and then generates concise daily briefings in both English and Chinese. The system can publish the briefing as a GitHub Pages site, email it to subscribers, push it via webhooks (Feishu, Slack, Discord, etc.), or expose the pipeline through an MCP server for AI assistants.

Key Features

  • Multi‑source aggregation – Track Hacker News, Reddit, RSS, Telegram, Twitter/X, GitHub releases, OpenBB financial watchlists, and any custom RSS or user activity.
  • AI scoring & filtering – Rank each item on a 0‑10 scale using models such as Claude, GPT, Gemini, DeepSeek, Doubao, MiniMax, Ollama, or any OpenAI‑compatible API; keep only items above a user‑defined threshold.
  • Deduplication – Merge repeated stories across platforms before they reach the briefing, reducing noise.
  • Context enrichment – Search the web for background information on unfamiliar terms, companies, or projects, and attach it to the briefing.
  • Community discussion – Collect and summarize top comments from Hacker News, Reddit, and other sources, giving readers insight into community sentiment.
  • Bilingual output – Generate parallel English and Chinese briefings from the same source set.
  • Flexible delivery channels – Publish to GitHub Pages, send via SMTP/IMAP email (with automatic subscribe/unsubscribe handling), push to Feishu/Lark, DingTalk, Slack, Discord, or any custom webhook endpoint.
  • MCP integration – Expose pipeline steps as tools so AI agents can fetch, score, filter, enrich, summarize, or run the full workflow programmatically.
  • Setup wizard – An interactive CLI wizard auto‑generates a personalized data/config.json based on user interests, simplifying initial configuration.

How It Works

  1. Configure – Define sources, AI provider, model, scoring threshold, languages, and delivery channels in a single JSON configuration file. Environment variables can be referenced (e.g., ${OPENAI_API_KEY}) for secrets.
  2. Fetch – The system pulls the latest content from all configured sources concurrently.
  3. Deduplicate – Items pointing to the same URL or story are merged to avoid repetition.
  4. Score & Filter – AI models assign a relevance score; items below the threshold are discarded.
  5. Enrich – For high‑scoring items, the tool queries the web for background context and gathers community comments.
  6. Summarize – A structured Markdown briefing is generated, including summaries, tags, and references.
  7. Deliver – The briefing is published to the chosen output channel (GitHub Pages, email, webhook, etc.).

A flowchart in the original README visualizes this pipeline, emphasizing the modular nature of each step.

Getting Started

Installation

  • Local (recommended)

    git clone https://github.com/Thysrael/Horizon.git
    cd Horizon
    uv sync                # install dependencies
    uv sync --extra dev   # add development extras for testing
    
    For financial news via OpenBB, add its extra:
    uv sync --extra openbb
    

  • Docker

    git clone https://github.com/Thysrael/Horizon.git
    cd Horizon
    cp .env.example .env
    cp data/config.example.json data/config.json
    # edit .env and data/config.json with your API keys and preferences
    docker compose run --rm horizon   # default 24‑hour window
    

Configuration

The interactive wizard (uv run horizon-wizard) asks about your interests and creates a minimal data/config.json. For manual setup, edit the JSON file directly; any string value may reference environment variables using ${VAR_NAME}.

Running the Briefing

  • Local

    uv run horizon               # default 24 h window
    uv run horizon --hours 48    # fetch last 48 hours
    

  • Docker

    docker compose run --rm horizon          # default
    docker compose run --rm horizon --hours 48  # custom window
    

Generated summaries are stored under data/summaries/.

Automation

A ready‑made GitHub Actions workflow (.github/workflows/daily-summary.yml) can be enabled to generate and automatically publish the daily briefing to GitHub Pages, making the system fully hands‑off.

Delivery Options

  • GitHub Pages – The briefing Markdown is copied to docs/; GitHub Pages serves a continuously updated site.
  • Email – Configure SMTP/IMAP settings; Horizon handles subscription management automatically.
  • Webhooks – Success or failure notifications are POSTed to Feishu/Lark, DingTalk, Slack, Discord, or any custom endpoint.
  • MCP Server – Exposes each pipeline step as a callable tool for AI agents, enabling complex automation scenarios.

Conclusion

Horizon delivers a powerful, self‑hosted solution for personalized news consumption. By combining multi‑source aggregation, AI‑driven relevance scoring, contextual enrichment, and flexible distribution channels, it empowers users to cut through information overload while preserving the human touch—through curated sources, community insights, and customizable thresholds. Its open‑source nature, extensive configuration options, and MCP integration make it suitable for both individual users and developers looking to embed AI‑curated briefings into larger workflows. With straightforward setup, robust delivery mechanisms, and a clear roadmap for future enhancements, Horizon stands out as a versatile tool for anyone seeking a daily, AI‑filtered snapshot of the topics that matter most.