๐ŸŒ… Horizon

Enjoy the News itself. Leave others to Horizon

Thysrael%2FHorizon | Trendshift Thysrael%2FHorizon | Trendshift Featured๏ฝœHelloGitHub
[![License](https://img.shields.io/badge/license-MIT-green.svg?style=for-the-badge&logo=opensourceinitiative&logoColor=white)](LICENSE) [![Tool uv](https://img.shields.io/badge/Tool-uv-4B275F?style=for-the-badge&logo=uv&logoColor=white)](https://github.com/astral-sh/uv) [![Website](https://img.shields.io/badge/Website-Horizon-263238?style=for-the-badge&logo=homepage&logoColor=white)](https://www.horizon1123.top/) [![Daily](https://img.shields.io/github/actions/workflow/status/Thysrael/Horizon/deploy-docs.yml?branch=main&label=Daily&style=for-the-badge&logo=date-fns&logoColor=white)](https://thysrael.github.io/Horizon/) [![Commit](https://img.shields.io/github/commit-activity/m/Thysrael/Horizon?label=Commit&style=for-the-badge&logo=github&logoColor=white)](https://github.com/Thysrael/Horizon/commits/main) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge&logo=github&logoColor=white)](https://github.com/Thysrael/Horizon/pulls) ![Sources Welcome](https://img.shields.io/badge/sources-welcome-f97316?style=for-the-badge&logo=rss&logoColor=white) ![Claude](https://img.shields.io/badge/Claude-f0daba?style=flat-square&logo=anthropic&logoColor=black) ![GPT](https://img.shields.io/badge/GPT-10A37F?style=flat-square&logo=data:image/svg%2bxml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJ3aGl0ZSIgZD0iTTIyLjI4MTkgOS44MjExYTUuOTg0NyA1Ljk4NDcgMCAwIDAtLjUxNTctNC45MTA4IDYuMDQ2MiA2LjA0NjIgMCAwIDAtNi41MDk4LTIuOUE2LjA2NTEgNi4wNjUxIDAgMCAwIDQuOTgwNyA0LjE4MThhNS45ODQ3IDUuOTg0NyAwIDAgMC0zLjk5NzcgMi45IDYuMDQ2MiA2LjA0NjIgMCAwIDAgLjc0MjcgNy4wOTY2IDUuOTggNS45OCAwIDAgMCAuNTExIDQuOTEwNyA2LjA1MSA2LjA1MSAwIDAgMCA2LjUxNDYgMi45MDAxQTUuOTg0NyA1Ljk4NDcgMCAwIDAgMTMuMjU5OSAyNGE2LjA1NTcgNi4wNTU3IDAgMCAwIDUuNzcxOC00LjIwNTggNS45ODk0IDUuOTg5NCAwIDAgMCAzLjk5NzctMi45MDAxIDYuMDU1NyA2LjA1NTcgMCAwIDAtLjc0NzUtNy4wNzI5em0tOS4wMjIgMTIuNjA4MWE0LjQ3NTUgNC40NzU1IDAgMCAxLTIuODc2NC0xLjA0MDhsLjE0MTktLjA4MDQgNC43NzgzLTIuNzU4MmEuNzk0OC43OTQ4IDAgMCAwIC4zOTI3LS42ODEzdi02LjczNjlsMi4wMiAxLjE2ODZhLjA3MS4wNzEgMCAwIDEgLjAzOC4wNTJ2NS41ODI2YTQuNTA0IDQuNTA0IDAgMCAxLTQuNDk0NSA0LjQ5NDR6bS05LjY2MDctNC4xMjU0YTQuNDcwOCA0LjQ3MDggMCAwIDEtLjUzNDYtMy4wMTM3bC4xNDIuMDg1MiA0Ljc4MyAyLjc1ODJhLjc3MTIuNzcxMiAwIDAgMCAuNzgwNiAwbDUuODQyOC0zLjM2ODV2Mi4zMzI0YS4wODA0LjA4MDQgMCAwIDEtLjAzMzIuMDYxNUw5Ljc0IDE5Ljk1MDJhNC40OTkyIDQuNDk5MiAwIDAgMS02LjE0MDgtMS42NDY0ek0yLjM0MDggNy44OTU2YTQuNDg1IDQuNDg1IDAgMCAxIDIuMzY1NS0xLjk3MjhWMTEuNmEuNzY2NC43NjY0IDAgMCAwIC4zODc5LjY3NjVsNS44MTQ0IDMuMzU0My0yLjAyMDEgMS4xNjg1YS4wNzU3LjA3NTcgMCAwIDEtLjA3MSAwbC00LjgzMDMtMi43ODY1QTQuNTA0IDQuNTA0IDAgMCAxIDIuMzQwOCA3Ljg3MnptMTYuNTk2MyAzLjg1NThMMTMuMTAzOCA4LjM2NCAxNS4xMTkyIDcuMmEuMDc1Ny4wNzU3IDAgMCAxIC4wNzEgMGw0LjgzMDMgMi43OTEzYTQuNDk0NCA0LjQ5NDQgMCAwIDEtLjY3NjUgOC4xMDQydi01LjY3NzJhLjc5Ljc5IDAgMCAwLS40MDctLjY2N3ptMi4wMTA3LTMuMDIzMWwtLjE0Mi0uMDg1Mi00Ljc3MzUtMi43ODE4YS43NzU5Ljc3NTkgMCAwIDAtLjc4NTQgMEw5LjQwOSA5LjIyOTdWNi44OTc0YS4wNjYyLjA2NjIgMCAwIDEgLjAyODQtLjA2MTVsNC44MzAzLTIuNzg2NmE0LjQ5OTIgNC40OTkyIDAgMCAxIDYuNjgwMiA0LjY2ek04LjMwNjUgMTIuODYzbC0yLjAyLTEuMTYzOGEuMDgwNC4wODA0IDAgMCAxLS4wMzgtLjA1NjdWNi4wNzQyYTQuNDk5MiA0LjQ5OTIgMCAwIDEgNy4zNzU3LTMuNDUzN2wtLjE0Mi4wODA1TDguNzA0IDUuNDU5YS43OTQ4Ljc5NDggMCAwIDAtLjM5MjcuNjgxM3ptMS4wOTc2LTIuMzY1NGwyLjYwMi0xLjQ5OTggMi42MDY5IDEuNDk5OHYyLjk5OTRsLTIuNTk3NCAxLjQ5OTctMi42MDY3LTEuNDk5N1oiLz48L3N2Zz4=) ![Gemini](https://img.shields.io/badge/Gemini-8E75B2?style=flat-square&logo=googlegemini&logoColor=white) ![DeepSeek](https://img.shields.io/badge/DeepSeek-0A6DC2?style=flat-square&logo=deepseek&logoColor=white) ![Doubao](https://img.shields.io/badge/Doubao-00D6C2?style=flat-square&logo=bytedance&logoColor=white) ![MiniMax](https://img.shields.io/badge/MiniMax-FF6F00?style=flat-square&logo=minimax&logoColor=white) ![OpenClaw](https://img.shields.io/badge/OpenClaw-C83232?style=flat-square&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDE2IDE2IiBhcmlhLWxhYmVsPSJQaXhlbCBsb2JzdGVyIj4KICA8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiLz4KICAKICA8ZyBmaWxsPSIjM2EwYTBkIj4KICAgIDxyZWN0IHg9IjEiIHk9IjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjMiLz4KICAgIDxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjIiIHk9IjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjMiIHk9IjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjMiIHk9IjkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjQiIHk9IjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjQiIHk9IjEwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIi8+CiAgICA8cmVjdCB4PSI1IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSIxIi8+CiAgICA8cmVjdCB4PSIxMSIgeT0iMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIi8+CiAgICA8cmVjdCB4PSIxMyIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iMTMiIHk9IjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjE0IiB5PSI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIzIi8+CiAgICA8cmVjdCB4PSI1IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iNCIgeT0iMTIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjExIiB5PSIxMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iMyIgeT0iMTMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iNSIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiLz4KICA8L2c+CgogIAogIDxnIGZpbGw9IiNmZjRmNDAiPgogICAgPHJlY3QgeD0iNSIgeT0iMyIgd2lkdGg9IjYiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjgiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iMyIgeT0iNSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxIi8+CiAgICA8cmVjdCB4PSIzIiB5PSI3IiB3aWR0aD0iMTAiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iNCIgeT0iOCIgd2lkdGg9IjgiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iNSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iNSIgeT0iMTIiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIi8+CiAgPC9nPgoKICAKICA8ZyBmaWxsPSIjZmY3NzVmIj4KICAgIDxyZWN0IHg9IjEiIHk9IjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjIiIHk9IjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjIiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEzIiB5PSI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIi8+CiAgICA8cmVjdCB4PSIxMyIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICA8L2c+CgogIAogIDxnIGZpbGw9IiMwODEwMTYiPgogICAgPHJlY3QgeD0iNiIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIvPgogICAgPHJlY3QgeD0iOSIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIvPgogIDwvZz4KICA8ZyBmaWxsPSIjZjVmYmZmIj4KICAgIDxyZWN0IHg9IjYiIHk9IjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjkiIHk9IjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz4KICA8L2c+Cjwvc3ZnPgoK) ![Ollama](https://img.shields.io/badge/Ollama-FFFFFF?style=flat-square&logo=Ollama&logoColor=black) ๐Ÿ“ก Your own AI-powered news radar. Generates daily briefings in English & Chinese. | ๆž„ๅปบไฝ ไธ“ๅฑž็š„ AI ๆ–ฐ้—ป้›ท่พพ [๐Ÿ“– Live Demo](https://thysrael.github.io/Horizon/) ยท [๐Ÿ“‹ Configuration Guide](https://thysrael.github.io/Horizon/configuration) ยท [็ฎ€ไฝ“ไธญๆ–‡](README_zh.md) ยท [ๆ—ฅๆœฌ่ชž](README_ja.md)
## Screenshots

Ranked Daily Briefing

Daily Overview

Context, Summary & Discussion

News Detail
More Screenshots

Terminal Output

Terminal Output

Feishu Notification

Feishu Notification

Email Delivery

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, processing profiles, 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** โ€” Analyze each item with a stable processing profile and apply your own filter threshold - **๐Ÿ”— 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, processing profiles, models, languages, and delivery channels ## How It Works ```mermaid %%{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
sources, profiles, 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 ``` 1. **Define** โ€” Configure sources, processing profiles, models, languages, and delivery. 2. **Fetch** โ€” Pull latest content from all configured sources concurrently. 3. **Deduplicate** โ€” Merge items pointing to the same story or URL across platforms. 4. **Analyze & Filter** โ€” Select a profile, analyze each item with its prompt, and apply the configured user threshold. 5. **Enrich** โ€” Generate the profile's configured content blocks, using only tools allowed for each block. 6. **Summarize** โ€” Render localized titles, leads, sections, and cited sources as a Markdown briefing. 7. **Deliver** โ€” Publish the result to GitHub Pages, email, webhooks such as Feishu, MCP, or local files. ## Quick Start ### 1. Install **Option A: Local Installation** ```bash 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: ```bash uv sync --extra openbb ``` If `openbb` pulls packages without wheels on your machine, install the SDK manually with binaries only: ```bash uv pip install --only-binary=:all: openbb openbb-benzinga ``` **Option B: Docker** ```bash git clone https://github.com/Thysrael/Horizon.git cd Horizon # Optional: build with comma-separated extras before the first run docker compose build --build-arg EXTRAS=trafilatura horizon ``` Multiple extras may be supplied as `EXTRAS=trafilatura,openbb`. The `twitter` extra also requires a Playwright browser and system packages, which the current Dockerfile does not install. ### 2. Configure **Option A: Interactive wizard (recommended)** ```bash uv run horizon-wizard ``` The wizard asks about your interests (e.g. "LLM inference", "ๅตŒๅ…ฅๅผ", "web security") and auto-generates `data/config.json`. See [Interactive Wizard](docs/configuration.md#interactive-wizard) for CLI options. **Option B: Manual configuration** ```bash cp .env.example .env # Add your API keys cp data/config.example.json data/config.json # Customize your sources ``` Minimal manual configuration: ```jsonc { "ai": { "provider": "openai", "model": "gpt-4", "api_key_env": "OPENAI_API_KEY" }, "sources": { "rss": [ { "name": "Simon Willison", "url": "https://simonwillison.net/atom/everything/", "profile": "tech-news" } ] }, "processing": { "profiles_dir": "profiles", "default_profile": "tech-news", "profile_settings": { "tech-news": { "threshold": 7.0, "topic_dedup": true } } } } ``` An explicit source `profile` uses that profile directly. Omit it or set it to `"auto"` to let AI match the item against all available profiles. Set it to an array such as `["tech-news", "finance-news"]` to restrict AI matching to those profiles. See [Processing Profiles](docs/profiles.md) for profile structure and behavior. Per-profile user preferences such as score thresholds and topic deduplication belong in `processing.profile_settings`, not in the profile files. **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`. ```jsonc { "digest": { "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 profile filtering and before enrichment. If `category_groups` and `max_items` are omitted, no balanced digest limits apply. `api_key_env` must be the name of an environment variable, not the API key itself. Put the real secret in `.env`: ```bash OPENAI_API_KEY=sk-your-key ``` For Gemini, use `GOOGLE_API_KEY`: ```jsonc { "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](docs/configuration.md). ### 3. Run **A. Local installation** ```bash uv run horizon [OPTIONS] ``` **B. Docker** ```bash docker compose run --rm horizon [OPTIONS] ``` | Option | Default | Description | |--------|---------|-------------| | `--hours N` | 24 | Fetch from last N hours | | `-d`, `--data-dir PATH` | `data` | Path to the data directory | | `-c`, `--config PATH` | `/config.json` | Path to config file | | `-l`, `--log-level LEVEL` | `WARNING` | Logging level (DEBUG/INFO/WARNING/ERROR/CRITICAL) | `--data-dir` changes the state directory, including summaries, subscribers, and the default config location; `--config` changes only the config file. The generated report is saved to `data/summaries/` (or `/summaries/` if `--data-dir` is set). See [Configuration Paths](docs/configuration.md#configuration-paths) for combining both flags and initializing a custom config location. ### 4. Automate (Optional) Horizon works great as a **GitHub Actions** cron job. See [`.github/workflows/daily-summary.yml`](.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 | โ€” | | **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](docs/configuration.md). For MCP tool references and client setup, see [`src/mcp/README.md`](src/mcp/README.md) and [`src/mcp/integration.md`](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](https://github.com/Thysrael/Horizon/issues/new) or [email me](mailto:thysrael@163.com). | Supporter | Details | |-----------|---------| | [Compshare / ไผ˜ไบ‘ๆ™บ็ฎ—](https://www.compshare.cn/?ytag=GPU_YY_git_Horizon) | 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](https://www.compshare.cn/?ytag=GPU_YY_git_Horizon) to receive a free RMB 5 trial credit. | ## Documentation | Guide | Description | |-------|-------------| | [Configuration](docs/configuration.md) | AI providers, sources, profiles, filtering, email, webhook, GitHub Pages, and MCP setup | | [Processing Profiles](docs/profiles.md) | Profile routing, prompts, runtime filtering preferences, enrichment blocks, and tools | | [Scoring](docs/scoring.md) | How Horizon evaluates and ranks news items | | [Scrapers](docs/scrapers.md) | Source scraper details and extension notes | | [Extractors](docs/extractors.md) | Full article extraction for RSS sources | | [MCP Tools](src/mcp/README.md) | Tool reference for MCP-compatible clients | ## Project Status Horizon already supports the full daily briefing loop: multi-source collection, profile-driven analysis and enrichment, deduplication, 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 - Publish releases on GitHub - Publish the package to PyPI for `pip install` ## Contributing Contributions are welcome. See [CONTRIBUTING.md](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](https://horizon1123.top)**. ## Acknowledgements - Special thanks to [LINUX.DO](https://linux.do/) for providing a promotion platform. - Special thanks to [HelloGitHub](https://hellogithub.com/) for valuable guidance and suggestions. - Special thanks to [AIGC Link](https://xhslink.com/m/80ngts127cA) for the promotions on XiaoHongShu. ## License [MIT](LICENSE)