Enjoy the News itself. Leave others to Horizon
📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 构建你专属的 AI 新闻雷达
📖 Live Demo · 📋 Configuration Guide · 💬 QQ Group · 简体中文 · 日本語
|
Ranked Daily Briefing
|
Context, Summary & Discussion
|
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.
- 📡 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.
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 →
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.
Let your AI assistant configure sources, customize Profiles, and run Horizon:
npx skills add Thysrael/Horizon --skill horizon -gSetup 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.
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 openbbIf openbb pulls packages without wheels on your machine, install the SDK manually with binaries only:
uv pip install --only-binary=:all: openbb openbb-benzingaOption 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 horizonFull-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.
Option A: Interactive wizard (recommended)
uv run horizon-wizardThe 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 sourcesMinimal manual configuration:
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.











{ "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 } } } }