Thysrael/HorizonPublic

📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达

AI summary: Your own AI-powered news radar generating daily briefings in English and Chinese.

Stars
12.8K
+364 today
Forks
1.8K
Watchers
32
Open issues
3
Open PRs
2
Contributors
~41
Commits
301
Branches
3

PythonMITCreated Feb 20, 2026Last push 1d ago+364 stars this week+364 this month

Quick answers

What is Horizon?
Your own AI-powered news radar generating daily briefings in English and Chinese.
What does Horizon do?
Horizon provides an AI-powered news radar to keep you updated. It gathers news articles and generates daily briefings automatically. It supports generating summaries in both English and Chinese. The system helps you stay informed without needing to manually browse multiple news sources. This provides a focused and customized news reading experience.
Who is Horizon for?
Professionals and individuals who want a streamlined way to consume daily news. It is ideal for bilingual readers or those looking to save time on news consumption. Basic familiarity with configuring RSS or news feeds may be helpful.
How do I get started with Horizon?
git clone https://github.com/Thysrael/Horizon
How popular is Horizon on GitHub?
Thysrael/Horizon has 12,820 stars and 1,840 forks on GitHub, and gained 364 stars in the last 7 days.
What license does Horizon use?
Thysrael/Horizon is released under the MIT license.

Star history

since Nov 4, 2026
05K10KNov 2026Nov 2026Nov 2026Nov 2026
12.8K stars as of Nov 5, 2026. Measured daily since Nov 4, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
NovDecJanFebMarAprMayJunJulAugSepOctNovMonWedFri2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 12 commits2026-02-21: 17 commits2026-02-22: 13 commits2026-02-23: 11 commits2026-02-24: 3 commits2026-02-25: 2 commits2026-02-26: 1 commit2026-02-27: 2 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 2 commits2026-03-03: 2 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 2 commits2026-03-07: 4 commits2026-03-08: 1 commit2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 1 commit2026-03-12: 2 commits2026-03-13: 0 commits2026-03-14: 2 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 2 commits2026-03-19: 1 commit2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 6 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 1 commit2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 2 commits2026-04-04: 0 commits2026-04-05: 3 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 1 commit2026-04-15: 1 commit2026-04-16: 1 commit2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 1 commit2026-04-21: 0 commits2026-04-22: 3 commits2026-04-23: 1 commit2026-04-24: 3 commits2026-04-25: 12 commits2026-04-26: 7 commits2026-04-27: 0 commits2026-04-28: 1 commit2026-04-29: 0 commits2026-04-30: 3 commits2026-05-01: 3 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 3 commits2026-05-05: 0 commits2026-05-06: 4 commits2026-05-07: 0 commits2026-05-08: 1 commit2026-05-09: 0 commits2026-05-10: 1 commit2026-05-11: 3 commits2026-05-12: 1 commit2026-05-13: 6 commits2026-05-14: 5 commits2026-05-15: 2 commits2026-05-16: 0 commits2026-05-17: 1 commit2026-05-18: 1 commit2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 2 commits2026-05-23: 0 commits2026-05-24: 1 commit2026-05-25: 9 commits2026-05-26: 2 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 1 commit2026-06-02: 2 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 3 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 1 commit2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 1 commit2026-06-22: 7 commits2026-06-23: 1 commit2026-06-24: 0 commits2026-06-25: 7 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 2 commits2026-06-30: 0 commits2026-07-01: 1 commit2026-07-02: 1 commit2026-07-03: 0 commits2026-07-04: 1 commit2026-07-05: 0 commits2026-07-06: 1 commit2026-07-07: 1 commit2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 1 commit2026-07-13: 3 commits2026-07-14: 1 commit2026-07-15: 1 commit2026-07-16: 0 commits2026-07-17: 2 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 22 commits2026-08-01: 11 commits2026-08-02: 3 commits2026-08-03: 0 commits2026-08-04: 1 commit2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 2 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 2 commits2026-08-11: 0 commits2026-08-12: 1 commit2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 1 commit2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 2 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 1 commit2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 2 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 2 commits2026-09-18: 3 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 3 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits2026-10-04: 0 commits2026-10-05: 0 commits2026-10-06: 0 commits2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 0 commits2026-10-10: 0 commits2026-10-11: 0 commits2026-10-12: 0 commits2026-10-13: 1 commit2026-10-14: 0 commits2026-10-15: 0 commits2026-10-16: 0 commits2026-10-17: 0 commits2026-10-18: 0 commits2026-10-19: 2 commits2026-10-20: 2 commits2026-10-21: 14 commits2026-10-22: 1 commit2026-10-23: 3 commits2026-10-24: 0 commits2026-10-25: 1 commit2026-10-26: 1 commit2026-10-27: 0 commits2026-10-28: 0 commits2026-10-29: 1 commit2026-10-30: 3 commits2026-10-31: 0 commits2026-11-01: 0 commits2026-11-02: 0 commits2026-11-03: 1 commit2026-11-04: 1 commit2026-11-05: 0 commits2026-11-06: 0 commits2026-11-07: 0 commits
296 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    12,820 stars

  • Actively maintained

    Pushed within 48 hours

  • Well documented

    High community health score

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What Horizon does

Horizon provides an AI-powered news radar to keep you updated. It gathers news articles and generates daily briefings automatically. It supports generating summaries in both English and Chinese. The system helps you stay informed without needing to manually browse multiple news sources. This provides a focused and customized news reading experience.

Professionals and individuals who want a streamlined way to consume daily news. It is ideal for bilingual readers or those looking to save time on news consumption. Basic familiarity with configuring RSS or news feeds may be helpful.

  • Daily briefings: generates automated daily summaries of the most important news.
  • Bilingual support: provides news briefings in both English and Chinese.
  • AI summarization: leverages artificial intelligence to distill long articles into concise points.
  • Customizable sources: allows configuring which news feeds and topics to track.
  • Personalized radar: acts as a personal news assistant tailored to your interests.

Where teams use it

Stay informed quickly

Read daily briefings to get caught up on news without spending hours.

Track specific topics

Follow custom topics to get AI-summarized updates on niche interests.

Consume bilingual news

Access automated news summaries in both English and Chinese languages.

Automate news gathering

Replace manual browsing with a scheduled, automated news radar.

Getting started: git clone https://github.com/Thysrael/Horizon

README

main branch

🌅 Horizon

Enjoy the News itself. Leave others to Horizon

Thysrael%2FHorizon | Trendshift Thysrael%2FHorizon | Trendshift Featured|HelloGitHub

License Tool uv Website Daily Commit PRs Welcome Sources Welcome

Claude GPT Gemini DeepSeek Doubao MiniMax OpenClaw Ollama

📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 构建你专属的 AI 新闻雷达

📖 Live Demo · 📋 Configuration Guide · 💬 QQ Group · 简体中文 · 日本語

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

WeChat Delivery

Horizon briefing header, overview, and details in WeChat

Why Horizon?

Good reads are scattered across feeds, forums, and timelines. Your attention isn't unlimited. Horizon collects, filters, and deduplicates them, then brings the worthwhile ones to you with context and community discussion.

Your taste shapes what you read—and what you want from it. A news story calls for “why it matters”; an engineering deep dive calls for “what I can use.” Horizon's profiles give each kind of content its own scoring criteria and output, for a briefing that feels handpicked.

Features

  • 📡 Bring Your Sources Together — Follow RSS, Hacker News, Reddit, Telegram, X, GitHub, financial news, and more.
  • 🎯 Decide What's Worth Reading — Define scoring rubrics with profiles, set individual thresholds, and merge repeated stories within each profile.
  • 🧩 Give Every Read the Right Treatment — Choose summaries, context, solutions, or takeaways with Markdown prompts and JSON block definitions.
  • 💬 Go Beyond the Headline — Add web-researched background and community discussion where they help explain the story.
  • ⚖️ Make Room for All Your Interests — Cap the briefing's length and each category's share so one busy topic doesn't crowd out the rest.
  • 📬 Read Where You Already Are — Generate English and Chinese briefings as Markdown, publish to Pages, or deliver by email and webhook.

One Briefing, Different Ways to Read

A profile is a reusable set of editorial rules: what belongs, what's worth keeping, and what to write. Built-in examples:

What you follow Profile What you get
Technology news tech-news Events and context, with impact and community discussion when useful
Engineering deep dives tech-blog Background, solution, and practical takeaways
AI creator material ai-creator A summary, with timely hooks and content angles when useful

Assign a profile to a source, or let AI choose. Want a different take? Adapt an existing profile—usually without changing Python. Make a profile your own →

How It Works

Horizon architecture: ten sources feed a profile-driven pipeline with history and web search tools, delivering to Markdown, Pages, email, WeChat, and webhooks.

Editable OmniGraffle source

Profiles define the treatment; runtime settings reflect your reading preferences. Each item routes to one profile. Analysis, filtering, and deduplication happen before enrichment, then the selected items become a briefing grouped by profile.

Run the full pipeline through the CLI, or let an AI assistant call its stages through MCP.

Agent Skill

Let your AI assistant configure sources, customize Profiles, and run Horizon:

npx skills add Thysrael/Horizon --skill horizon -g

Setup and usage · Download Skill ZIP

The command requires Node.js 22.20+. Then ask your assistant to install and configure Horizon, or follow the Quick Start below.

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

# Optional: build with comma-separated extras before the first run
docker compose build --build-arg EXTRAS=openbb horizon

Full-text extraction with trafilatura is included in the base install. 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)

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 for CLI options.

Eligible ChatGPT subscribers can choose openai-chatgpt to use their plan through Sign in with ChatGPT, without an OpenAI API key.

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/",
        "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 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.

{
  "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, max_items, and default_group_limit 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:

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

A. Local installation

uv run horizon [OPTIONS]

B. Docker

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 <data-dir>/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 <data-dir>/summaries/ if --data-dir is set). See Configuration Paths for combining both flags and initializing a custom config location.

4. Automate (Optional)

Schedule Horizon with GitHub Actions using the daily workflow template. The template is disabled in this repository; configure it for your deployment and rename it to daily-summary.yml to enable it.

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 User timelines + keyword searches (Apify) Yes (top N replies)
GitHub User events & repo releases —
OpenBB Financial company news by watchlist/provider —
OSS Insight Trending open-source repositories —
GDELT News matching a search query —
Google News News search via RSS —

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
WeChat Notification Sends briefings through iLink Bot after QR login and a message from you; WeChat reply limits apply

For delivery setup, see the Configuration Guide. To run pipeline stages from an AI assistant, use the MCP Server: tools · client setup.

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
Modelflare Thanks to Modelflare for sponsoring this project! Modelflare: Full strength, stable, nothing watered down. Global SOTA models at a lower cost. Operated by US-based Havenbyte LLC, Modelflare supports GPT, Claude, Gemini, Grok, and other leading models through common compatible protocols, plus 40+ image and video models.

Cache compensation is a highlight: selected OpenAI groups (price-first, stable, and premium) guarantee daily cache hit rates of 65%, 75%, or 85%, and if eligible requests fall short, Modelflare refunds the difference, visible on the usage dashboard after settlement.

Special offers: a single top-up of US$20 unlocks the GPT discount group at a 0.015x price multiplier, and a single top-up of US$50 unlocks the Claude discount group at a 0.03x multiplier. Register via this exclusive link to get started.
Compshare / 优云智算 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.
OfoxAI OfoxAI is a unified AI API platform bringing together text, image, and video models from multiple providers. With OpenAI-compatible endpoints and native Anthropic and Gemini interfaces, developers can access models for AI applications, agents, and content creation through one platform.

Explore OfoxAI models and APIs →
AstraFlow
AstraFlow
Thanks to AstraFlow for sponsoring Horizon! AstraFlow is UCloud's model platform, bringing together 200+ leading AI models and video generation models for text and video creation in one place. It offers per-key billing and detailed usage records.

Exclusive offer for Horizon users: claim RMB 50 in compute credits to try model APIs and content creation.

Documentation

Guide Description
Configuration AI providers, sources, profiles, filtering, email, webhook, WeChat, GitHub Pages, and MCP setup
Processing Profiles Profile routing, prompts, runtime filtering preferences, enrichment blocks, and tools
Scoring How Horizon evaluates and ranks news items
Scrapers Source scraper details and extension notes
Extractors Full article extraction for RSS sources
MCP Tools Tool reference for MCP-compatible clients
Agent Skill Use an AI assistant to configure, run, customize, schedule, and extend Horizon

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, WeChat 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

Community

Join the Horizon user and developer QQ group to share sources, profiles, and deployment tips.

QR code for Horizon QQ group 1106121909
QQ group: 1106121909
Scan with QQ or search the group number to join.

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.

License

MIT

View on GitHub

Recent activity

commits and pull requests

Code frequency

additions and deletions
+7.6K-7.6KWeek of 2026-02-15: +5,791 linesWeek of 2026-02-15: -926 linesWeek of 2026-02-22: +2,473 linesWeek of 2026-02-22: -1,710 linesWeek of 2026-03-01: +3,096 linesWeek of 2026-03-01: -55 linesWeek of 2026-03-08: +560 linesWeek of 2026-03-08: -44 linesWeek of 2026-03-15: +24 linesWeek of 2026-03-15: -14 linesWeek of 2026-03-22: +1,754 linesWeek of 2026-03-22: -201 linesWeek of 2026-03-29: +108 linesWeek of 2026-03-29: -55 linesWeek of 2026-04-05: +236 linesWeek of 2026-04-05: -27 linesWeek of 2026-04-12: +9 linesWeek of 2026-04-12: -5 linesWeek of 2026-04-19: +3,161 linesWeek of 2026-04-19: -875 linesWeek of 2026-04-26: +2,072 linesWeek of 2026-04-26: -663 linesWeek of 2026-05-03: +417 linesWeek of 2026-05-03: -66 linesWeek of 2026-05-10: +4,276 linesWeek of 2026-05-10: -517 linesWeek of 2026-05-17: +75 linesWeek of 2026-05-17: -23 linesWeek of 2026-05-24: +689 linesWeek of 2026-05-24: -261 linesWeek of 2026-05-31: +186 linesWeek of 2026-05-31: -33 linesWeek of 2026-06-07: +1,563 linesWeek of 2026-06-07: -34 linesWeek of 2026-06-14: +399 linesWeek of 2026-06-14: -2 linesWeek of 2026-06-21: +735 linesWeek of 2026-06-21: -229 linesWeek of 2026-06-28: +853 linesWeek of 2026-06-28: -7 linesWeek of 2026-07-05: +98 linesWeek of 2026-07-05: -5 linesWeek of 2026-07-12: +3,499 linesWeek of 2026-07-12: -689 linesWeek of 2026-07-19: +0 linesWeek of 2026-07-19: -0 linesWeek of 2026-07-26: +7,560 linesWeek of 2026-07-26: -2,205 linesWeek of 2026-08-02: +375 linesWeek of 2026-08-02: -134 linesWeek of 2026-08-09: +48 linesWeek of 2026-08-09: -158 linesWeek of 2026-08-16: +19 linesWeek of 2026-08-16: -4 linesWeek of 2026-08-23: +18 linesWeek of 2026-08-23: -0 linesWeek of 2026-08-30: +17 linesWeek of 2026-08-30: -1 linesWeek of 2026-09-06: +17 linesWeek of 2026-09-06: -3 linesWeek of 2026-09-13: +2,259 linesWeek of 2026-09-13: -439 linesWeek of 2026-09-20: +4,372 linesWeek of 2026-09-20: -3,106 linesWeek of 2026-09-27: +0 linesWeek of 2026-09-27: -0 linesWeek of 2026-10-04: +0 linesWeek of 2026-10-04: -0 linesWeek of 2026-10-11: +3 linesWeek of 2026-10-11: -3 linesWeek of 2026-10-18: +4,934 linesWeek of 2026-10-18: -1,182 linesWeek of 2026-10-25: +915 linesWeek of 2026-10-25: -112 linesWeek of 2026-11-01: +424 linesWeek of 2026-11-01: -5 linesFeb 15, 2026Nov 1, 2026
+53K lines added, -13.8K removed over the last year.

Commits per week

last 52 weeks
330Week of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 29 commitsWeek of 2026-02-22: 32 commitsWeek of 2026-03-01: 10 commitsWeek of 2026-03-08: 6 commitsWeek of 2026-03-15: 3 commitsWeek of 2026-03-22: 7 commitsWeek of 2026-03-29: 2 commitsWeek of 2026-04-05: 3 commitsWeek of 2026-04-12: 3 commitsWeek of 2026-04-19: 20 commitsWeek of 2026-04-26: 14 commitsWeek of 2026-05-03: 8 commitsWeek of 2026-05-10: 18 commitsWeek of 2026-05-17: 4 commitsWeek of 2026-05-24: 12 commitsWeek of 2026-05-31: 3 commitsWeek of 2026-06-07: 3 commitsWeek of 2026-06-14: 1 commitsWeek of 2026-06-21: 16 commitsWeek of 2026-06-28: 5 commitsWeek of 2026-07-05: 2 commitsWeek of 2026-07-12: 8 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 33 commitsWeek of 2026-08-02: 6 commitsWeek of 2026-08-09: 3 commitsWeek of 2026-08-16: 1 commitsWeek of 2026-08-23: 2 commitsWeek of 2026-08-30: 1 commitsWeek of 2026-09-06: 2 commitsWeek of 2026-09-13: 5 commitsWeek of 2026-09-20: 3 commitsWeek of 2026-09-27: 0 commitsWeek of 2026-10-04: 0 commitsWeek of 2026-10-11: 1 commitsWeek of 2026-10-18: 22 commitsWeek of 2026-10-25: 6 commitsWeek of 2026-11-01: 2 commitsNov 9, 2025Nov 1, 2026
296 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 1 commitsSun 1:00 — 1 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 1 commitsSun 5:00 — 0 commitsSun 6:00 — 3 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 3 commitsSun 10:00 — 2 commitsSun 11:00 — 2 commitsSun 12:00 — 1 commitsSun 13:00 — 2 commitsSun 14:00 — 7 commitsSun 15:00 — 3 commitsSun 16:00 — 2 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 1 commitsSun 20:00 — 1 commitsSun 21:00 — 1 commitsSun 22:00 — 3 commitsSun 23:00 — 1 commitsMon 0:00 — 0 commitsMon 1:00 — 0 commitsMon 2:00 — 0 commitsMon 3:00 — 2 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 2 commitsMon 11:00 — 4 commitsMon 12:00 — 6 commitsMon 13:00 — 2 commitsMon 14:00 — 7 commitsMon 15:00 — 3 commitsMon 16:00 — 5 commitsMon 17:00 — 8 commitsMon 18:00 — 3 commitsMon 19:00 — 7 commitsMon 20:00 — 3 commitsMon 21:00 — 3 commitsMon 22:00 — 1 commitsMon 23:00 — 2 commitsTue 0:00 — 0 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 2 commitsTue 9:00 — 4 commitsTue 10:00 — 3 commitsTue 11:00 — 0 commitsTue 12:00 — 0 commitsTue 13:00 — 4 commitsTue 14:00 — 0 commitsTue 15:00 — 1 commitsTue 16:00 — 1 commitsTue 17:00 — 2 commitsTue 18:00 — 1 commitsTue 19:00 — 1 commitsTue 20:00 — 1 commitsTue 21:00 — 1 commitsTue 22:00 — 1 commitsTue 23:00 — 3 commitsWed 0:00 — 0 commitsWed 1:00 — 1 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 1 commitsWed 10:00 — 6 commitsWed 11:00 — 9 commitsWed 12:00 — 0 commitsWed 13:00 — 2 commitsWed 14:00 — 0 commitsWed 15:00 — 2 commitsWed 16:00 — 0 commitsWed 17:00 — 3 commitsWed 18:00 — 7 commitsWed 19:00 — 1 commitsWed 20:00 — 2 commitsWed 21:00 — 3 commitsWed 22:00 — 0 commitsWed 23:00 — 0 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 1 commitsThu 9:00 — 5 commitsThu 10:00 — 3 commitsThu 11:00 — 1 commitsThu 12:00 — 0 commitsThu 13:00 — 0 commitsThu 14:00 — 3 commitsThu 15:00 — 8 commitsThu 16:00 — 1 commitsThu 17:00 — 1 commitsThu 18:00 — 3 commitsThu 19:00 — 2 commitsThu 20:00 — 0 commitsThu 21:00 — 1 commitsThu 22:00 — 1 commitsThu 23:00 — 0 commitsFri 0:00 — 2 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 3 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 2 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 6 commitsFri 10:00 — 1 commitsFri 11:00 — 1 commitsFri 12:00 — 2 commitsFri 13:00 — 3 commitsFri 14:00 — 3 commitsFri 15:00 — 5 commitsFri 16:00 — 8 commitsFri 17:00 — 2 commitsFri 18:00 — 4 commitsFri 19:00 — 1 commitsFri 20:00 — 6 commitsFri 21:00 — 3 commitsFri 22:00 — 3 commitsFri 23:00 — 10 commitsSat 0:00 — 5 commitsSat 1:00 — 2 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 3 commitsSat 9:00 — 4 commitsSat 10:00 — 6 commitsSat 11:00 — 2 commitsSat 12:00 — 1 commitsSat 13:00 — 0 commitsSat 14:00 — 0 commitsSat 15:00 — 0 commitsSat 16:00 — 1 commitsSat 17:00 — 1 commitsSat 18:00 — 1 commitsSat 19:00 — 5 commitsSat 20:00 — 4 commitsSat 21:00 — 5 commitsSat 22:00 — 5 commitsSat 23:00 — 2 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits227 (75%)
Community commits74 (25%)

301 commits in total over the last year.

DateListRankStars gained
Nov 5, 2026daily#9+121
Nov 4, 2026daily#9+121
  • public-apis/public-apis

    A collective list of free APIs

    496.3K stars · Python

  • morluto/rea

    Reverse engineer anything with agents, from app behavior down to native binaries.

    433K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    394K stars · TypeScript

  • donnemartin/system-design-primer

    Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

    376.9K stars · Python

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    297.6K stars · JavaScript

  • practical-tutorials/project-based-learning

    Curated list of project-based tutorials

    289.1K stars · Python