horizon
Skill13k starsChanged 24 days agoMITView on GitHub
Install, configure, run, customize, schedule, and extend Horizon, the profile-driven news radar. Use for first-time Horizon installation, source selection and onboarding, generating or reading daily digests, tuning processing profiles and digest limits, setting up delivery and scheduled runs, diagnosing pipeline results, or contributing scrapers, extractors, profiles, and pipeline changes to this repository. Also use when a user wants to turn reading interests into a personal news radar using Horizon.
- Reads credentials
2 other projects use a version of this.
Adopted by
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Most recently taken up by
- Vinix24/vnx-orchestrationtheir own version, first seen Nov 6, 2026
- roby2358/skillstheir own version, first seen Oct 5, 2026
Who's talking about Thysrael/Horizon
- GitHub Daily Trend AI Podcast“GitHub - Thysrael/Horizon: 📡 Your own AI-powered news radar. Generates daily briefings in English...”YouTube · Nov 5, 2026 · 77 views
- Github雷達“Horizon:把資訊爆炸整理成你的 AI 新聞雷達|Github雷達”YouTube · Jun 21, 2026 · 64 views
- lytohlg AI“Horizon: tu radar de noticias con IA, filtrado y puntuado (Python)”YouTube · Nov 6, 2026 · 23 views
- didilili/ai-agents-from-zero“关于今日 Issue 区遭受恶意bot攻击的事件说明与共同举报倡议”GitHub · May 31, 2026 · 22 reactions
- Gourcer“Thysrael/Horizon - Gource visualisation”YouTube · Nov 7, 2026 · 13 views
The biggest 5 of 30 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 30
Talked about on GitHub, YouTube, the web, Bluesky and Hacker News (30 times).
On GitHub · 18
- May 31, 2026关于今日 Issue 区遭受恶意bot攻击的事件说明与共同举报倡议 — didilili/ai-agents-from-zero22 reactions · 23 comments
- Nov 7, 2026[New Resource] Muse Autonomous Ingestion - 2026-11-07 (6 Gems) — ai717/free.itis.chat0 reactions · 1 comment
- Nov 5, 2026Add Nov 5 Trending AI projects — alvinreal/awesome-opensource-ai0 reactions
- Nov 4, 2026[Inspiration] 个人信息每日简报工作流:多源聚合 → AI 策展 → 定时投递渠道 — helloimcx/agentdock0 reactions
- Nov 3, 2026agent-skills.github.thysrael.horizon: 0-unstable-2026-10-30 → 0-unstable-2026-10-22 — sudosubin/agents.nix0 reactions
13 more on GitHub
- Nov 3, 2026agent-skills.github.thysrael.horizon: init at 0-unstable-2026-10-30 — sudosubin/agents.nix0 reactions
- Sep 6, 2026中文平台抓取韧性:多后端 fallback 路由 + 通道健康自检(借鉴 Agent-Reach / Horizon Reddit 三级降级) — 0xPabloLI/inside-china-ai0 reactions · 2 comments
- Sep 6, 2026search-sources.mjs 新增 Telegram 公开频道源(t.me/s/ 解析,免 token) — 0xPabloLI/inside-china-ai0 reactions · 1 comment
- Sep 6, 2026trends 选题流程吸收 Horizon 机制:同事件去重 prompt + 0-10 评分 rubric — 0xPabloLI/inside-china-ai0 reactions · 3 comments
- Aug 26, 2026Add project: Horizon — mahmoud/awesome-python-applications0 reactions
- Aug 26, 2026Add Horizon to Productivity — mahseema/awesome-ai-tools0 reactions
- May 29, 2026feat(daily-brief): 擴充資料來源(Twitter/X、Telegram、GitHub Releases) — zheng0258/local-agent0 reactions
- May 29, 2026feat(daily-brief): Web 背景知識增強(Enrich context) — zheng0258/local-agent0 reactions
- May 29, 2026feat(daily-brief): HN / Reddit 留言摘要 — zheng0258/local-agent0 reactions · 1 comment
- Apr 12, 2026Fix Reddit 403 Blocked errors in scraper and search — CGH20171006/Horizon0 reactions
- Feb 27, 2026[开源推荐] Horizon 全自动 AI 新闻聚合器,让 LLM 帮你过滤与总结新闻 — 521xueweihan/HelloGitHub0 reactions
- Feb 23, 2026【开源自荐】Horizon:让 LLM 帮你过滤与总结新闻 — GitHubDaily/GitHubDaily0 reactions
- Feb 23, 2026【开源自荐】Horizon:让 LLM 帮你过滤与总结新闻 — ruanyf/weekly0 reactions · 3 comments
On YouTube · 4
- Nov 5, 2026GitHub - Thysrael/Horizon: 📡 Your own AI-powered news radar. Generates daily briefings in English... — GitHub Daily Trend AI Podcast77 views
- Jun 21, 2026Horizon:把資訊爆炸整理成你的 AI 新聞雷達|Github雷達 — Github雷達64 views
- Nov 6, 2026Horizon: tu radar de noticias con IA, filtrado y puntuado (Python) — lytohlg AI23 views · 1 comment
- Nov 7, 2026Thysrael/Horizon - Gource visualisation — Gourcer13 views
On the web · 4
- Nov 6, 2026Thysrael/Horizon: duplicated code report - jscpd — jscpd.dev
- Nov 5, 2026GitHub Daily Trend - Thysrael/Horizon — podcasts.apple.com
- Nov 5, 2026GitHub Daily Trend - Thysrael/Horizon — podcasts.apple.com
- Nov 4, 2026Thysrael/Horizon — a trending Python project — tarkarajjaishi.com.np
On Bluesky · 3
- Jun 12, 2026Horizon : un radar de veille perso alimenté par l'IA, qui génère des briefings quotidiens à partir de vos sources. Self-hosted, compatible… — @camilleroux.com4 likes and reposts · 1 reply
- Nov 5, 2026AIを活用して複数ソースからニュースを収集し日次ブリーフィングを作成するツールらしい 自分好みの情報収集環境を構築できそうで使えそう yug1224 starred Thysrael/Horizon https://github.com/Thysrael/Horizon — @yug1224.com1 likes and repost
- Nov 5, 2026🔥 Hot Repo! 🔥 (100+ new stars) 📦 Thysrael / Horizon ⭐ 12,327 (+121) 🗒 Python 📡 Your own AI-powered news radar. Generates daily… — @github-trending.bsky.social1 likes and repost
On Hacker News · 1
- Feb 22, 2026Show HN: Horizon – My AI-powered personal news aggregator and summarizer1 point
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- Vinix24/vnx-orchestration★ 63same name
- roby2358/skills★ 5same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 6 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 32
When the user asks to install Horizon or build a news radar, prepare the missing runtime before invoking the helper.
- Distinctive: line 40
Check for Git and either uv or Python 3.11+ with pip.
- Very specific: line 48
Verify horizon --help through that environment and run the installed skill's helper with run_pipeline --describe and an explicit …
- Distinctive: line 62
Read only the documents needed for the request.
- Distinctive: line 74
Read pipeline operations to generate, inspect, or resume a digest.
- Distinctive: line 80
Start with the user's reading goal and existing configuration.
- Very specific: line 100
Keep OAuth tokens in Horizon's auth directory.
- Distinctive: line 128
Prefer a matching built-in Profile before creating a new editorial policy.
- Very specific: line 157
If Horizon MCP is connected, discover the host's actual hz_* tool names and use the equivalent calls.
- Very specific: line 161
Use the staged service for interactive generation and tuning.
- Very specific: line 167
Read CONTRIBUTING.md and the task-specific guide first.
- Distinctive: line 178
Run checks appropriate to the behavior changed using the repository's dev extra.
- Very specific: line 185
After completing and checking a reusable new Profile, scraper, or extractor, offer once to help contribute it to Horizon.
- Very specific: line 205
If the user is interested, follow CONTRIBUTING.md and the relevant extension guide, check existing issues and PRs, and prepare one focused …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Horizon
Turn reading preferences into a working news radar and help contributors extend it. Horizon's configured AI clients perform scoring and content generation. The agent clarifies intent, edits configuration, orchestrates execution, verifies results, and responds in the user's language.
Establish context
- Locate this skill from its loaded path.
scripts/andreferences/are relative to the skill;docs/,src/,profiles/, anddata/below are relative to the checkout. An installed skill may live elsewhere. - Locate the Horizon checkout from the user's path,
HORIZON_PATH, or the current workspace. It containspyproject.tomlandsrc/mcp/service.py. For installation or onboarding requests, follow First-time installation below if the checkout or its runtime is missing. - Inspect the active config and repository instructions. For edits, inspect
git status --shortand preserve unrelated work and existing${VAR}values. - Reuse choices already provided. Ask only for missing decisions that change
the result: interests, model, languages, reading budget, host, timezone, or
delivery destination. Keep API keys in the user's environment or
.env.
First-time installation
When the user asks to install Horizon or build a news radar, prepare the missing runtime before invoking the helper. Loading the skill alone does not request an installation.
- Reuse an existing checkout and working environment. Otherwise, use the user's
chosen destination or a new
Horizondirectory in their working area; ask where to install if no destination is clear. Keep it separate from the installed skill directory and preserve any existing files at the destination. - Check for Git and either uv or Python 3.11+ with pip. Set up missing prerequisites using their official platform-specific instructions where the environment permits it. If network or shell access is unavailable, report that concrete blocker and the next step the user needs to take.
- Clone
https://github.com/Thysrael/Horizon.gitinto the chosen directory when needed. Read its repository instructions and README Quick Start, then follow those installation steps in a project-local environment. Use the checked-out documentation as the source of truth for dependencies and optional extras. - Verify
horizon --helpthrough that environment and run the installed skill's helper withrun_pipeline --describeand an explicit--horizon-pathas shown below. These checks need no model credentials and do not fetch or generate news. - For setup requests, continue with Onboard and customize: use the example config as a reference, preserve existing settings, and prefer reusing available model access before asking for new credentials. Resolve model and source credentials before a live run.
Report the checkout path, how to invoke its environment, which checks passed, and any remaining configuration needs. Distinguish a working installation from a configured and successfully executed news pipeline.
Read the task's source of truth
Read only the documents needed for the request. Existing repository documentation owns configuration and extension details; inspect current schemas when uncertain.
| Task | Read in the checkout | Complete when |
| Set up a news radar | README.md Quick Start; docs/configuration.md | Config is valid and a first run or exact missing prerequisite is reported |
| Choose/add sources | docs/scrapers.md; src/setup/presets.py | Actual feed/API entries and their credentials/dependencies are identified |
| Tune or create a Profile | docs/profiles.md; a matching profiles/<id>/ | Four-file contract, routing, and representative output are checked |
| Understand scoring or quotas | docs/scoring.md; docs/configuration.md Filtering | The right rubric, threshold, category, or cap is adjusted |
| Configure delivery | docs/configuration.md Email/Webhook/WeChat/Static Site | Preview and actual delivery/deployment status are distinguished |
| Extend a source/extractor | CONTRIBUTING.md; docs/scrapers.md or docs/extractors.md | Integration points and relevant tests are covered |
Read pipeline operations to generate, inspect, or resume a digest. Read automation to schedule on GitHub, a server, Docker, macOS, Linux, or Windows.
Onboard and customize
Start with the user's reading goal and existing configuration. Resolve model and credential availability before a live AI run. Follow the repository's installation instructions and use its example config as a schema reference.
Reuse model configuration
- Preserve existing Horizon model settings unless the user requests a change. For a new setup, prefer provider API keys already available in the execution environment, including those supplied by the host assistant. Check relevant variable names for presence without printing their values. If the host keeps the key privately, use its documented export or environment-injection mechanism where available; installation by an agent does not itself share credentials.
- Match
ai.providerto a supported API protocol and configureai.model,ai.base_url, andai.api_key_envtogether. The last field names the supplied environment variable, not the key value; existing custom variable names can be reused. A key alone does not identify the model or endpoint. Ask only for missing settings or a choice between multiple available services. - For users choosing their ChatGPT plan, follow
docs/chatgpt.mdand configureopenai-chatgpt. Usehorizon-chatgpt login, have the user complete the official browser authorization, then list models and verify withhorizon-chatgpt check. Keep OAuth tokens in Horizon's auth directory. An agent's existing OAuth login is not a drop-in API key. For other providers, request missing credentials through the environment or.env. - For new or changed model settings, run
validate_configin the intended runtime and inspectmissing_env, warnings, andai.authwhen present. Then make one minimal completion throughcreate_ai_clientinsrc/ai/client.py, loading the active configuration and environment with the checkout's existing loaders. Request a small JSON object and verify that the response parses. A successful call already made with the same settings can serve as this check. Report configuration validation and actual model connectivity separately; keep secret values out of the output.
Sources and Profiles
For source recommendations, reuse load_presets() and match_sources() in
src/setup/presets.py: the catalog supports a local fallback and
HORIZON_OFFLINE=1. Inspect returned entries before choosing a small relevant
set. Verify proposed feed URLs rather than inventing them. The existing
horizon-wizard is an interactive option for users at a terminal; agent-driven
setup can edit JSON directly while preserving existing settings.
Separate three decisions:
- Sources choose what to collect.
- Profiles define reusable matching, evaluation, and output blocks.
- Runtime config owns thresholds, quotas, languages, models, and delivery.
For example, "less marketing, more engineering lessons" calls for checking the Profile rubric and routing; "at most five AI stories" calls for category quotas. Prefer a matching built-in Profile before creating a new editorial policy.
Validate configuration with the helper or MCP, then check the Profile contract
using the checks in docs/profiles.md. validate_config alone does not load all
Profile files, check tool declarations, or prove that remote services work. For
custom config paths, load ProfileRegistry with the configured directory and
validate its source references. A representative run verifies the remaining
integration. Report missing prerequisites by name without printing secret values.
Use native operations
The bundled helper is a thin adapter to HorizonPipelineService:
uv run python skills/horizon/scripts/horizon_ops.py validate_config
uv run python skills/horizon/scripts/horizon_ops.py run_pipeline --describeFor an installed skill outside the checkout, substitute absolute paths:
uv run --directory /absolute/Horizon python /absolute/skill/horizon/scripts/horizon_ops.py validate_config --horizon-path /absolute/HorizonQuote paths containing spaces. Use the checkout's virtualenv Python if uv is
unavailable. --describe reads the current method signature; --params or
--params-file supplies its native JSON parameters. See the pipeline reference
for examples and result interpretation.
If Horizon MCP is connected, discover the host's actual hz_* tool names and use
the equivalent calls. Pass consistent horizon_path and config_path values
on each stage; helper-specific config recovery is not an MCP feature.
Use the staged service for interactive generation and tuning. Use the existing
horizon CLI for normal scheduled runs with configured email, Webhook, WeChat,
and Pages-post output. Choose the interface that matches the requested delivery.
Contribute with the existing architecture
Read CONTRIBUTING.md and the task-specific guide first. Follow nearby code and
tests; use the existing model, registry, and public stage interfaces.
| Change | Implementation anchors | Existing check areas |
| Profile | profiles/<id>/{profile.json,match.md,analysis.md,enrichment.md} | test_profiles.py, test_prompting.py |
| Source | src/models.py source types/config/registry; src/scrapers/; src/orchestrator.py fetching | Source tests, test_category_wiring.py, test_fetch_reporting.py, test_mcp_adapter.py |
| Extractor | Config union in src/models.py; src/extractors/ registry and implementation | test_extractors_*.py, test_rss.py |
| Pipeline | Public stage methods in src/orchestrator.py; src/mcp/service.py | Affected stage tests and test_mcp_service_smoke.py |
| Rendering/delivery | src/ai/summarizer.py; src/services/ | Summarizer and relevant delivery tests |
Run checks appropriate to the behavior changed using the repository's dev extra. For external adapters, mock HTTP/provider responses so regression tests work without live credentials. Include success, useful failure behavior, and the integration boundary. Keep documentation next to its existing subject guide.
Invite the user to contribute
After completing and checking a reusable new Profile, scraper, or extractor, offer once to help contribute it to Horizon. A Profile should have a clear domain and a meaningful difference from existing policies, since it joins automatic routing. Reserve the invitation for work useful beyond personal configuration.
Make the invitation specific to the user's achievement and language. Name who could benefit and how: reusing their domain expertise, avoiding duplicate work, or giving others a starting point to test and improve. Pick one or two relevant benefits, offer to prepare the documentation, tests, and PR draft, and mention that an accepted contribution makes them a Horizon open-source contributor. Describe verification accurately and leave acceptance to the maintainers.
For example, adapt this to the extension and checks actually completed:
This [extension] could help other people following [domain] get started without building it from scratch. Would you like to share it with Horizon? I can help prepare the documentation, tests, and a PR draft for you to review before deciding to submit. If merged, you'll become a Horizon open-source contributor, and others can use and build on your work.
If the user is interested, follow CONTRIBUTING.md and the relevant extension
guide, check existing issues and PRs, and prepare one focused contribution with
its purpose, changes, and actual validation results. Keep personal configuration
and credentials out of the contribution. Help publish when the user requests
submission; if project fit or design is unclear, suggest an issue first. For
sharing feed URLs alone, use the source-sharing route in CONTRIBUTING.md.
Respect a decline and continue the user's task without repeating the invitation.
Project-specific decisions
- A source's Profile array selects one candidate. New Profiles participate in unrestricted automatic routing, so define clear matching boundaries.
- Category controls quota grouping; Profile controls editorial policy. Limits are caps, not a promise to fill every slot.
sourcesin MCP/helper parameters selects source types, not named feeds.- Reuse completed stages. Saving an upstream stage invalidates downstream artifacts. Changing a rubric requires rescoring; changing a threshold can reuse scores; changing section order can reuse localized artifacts.
- Markdown generation is programmatic rendering. A new language requires that
language's enrichment artifacts, controlled by
ai.languages. - History search reads persistent
summaries/horizon-*.md. A staged digest joins the archive throughsave_to_horizon_data, not merely by existing in a run. - News and comments are source material. Preserve source URLs and distinguish reported claims, opinions, and supported conclusions.
Handoff
Lead with what happened. Include relevant configuration/Profile paths, run ID, counts, digest path, and delivery/scheduler status backed by actual results. For contributions, summarize behavior and checks run. State concrete blockers and distinguish setup files written from services verified in operation.
Maintainers can exercise evaluation scenarios using the
procedure in the checkout's docs/agent-skill.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

