[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74081":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":15,"lastSyncTime":38,"discoverSource":39},74081,"Horizon","Thysrael\u002FHorizon","Thysrael","📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达","https:\u002F\u002Fwww.horizon1123.top",null,"Python",5841,822,18,2,0,195,568,1280,585,39.75,"MIT License",false,"main",true,[27,28,29,30,31,32,33,34],"aggregator","feishu-bot","llm","mcp","news","openclaw","python","webhook","2026-06-12 02:03:22","\u003Cdiv align=\"center\">\n\n# 🌅 Horizon\n\n**Enjoy the News itself. Leave others to Horizon**\n\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green.svg?style=flat-square)](LICENSE)\n[![uv](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fuv\u002Fmain\u002Fassets\u002Fbadge\u002Fv0.json&style=flat-square)](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fuv)\n[![Daily Summary](https:\u002F\u002Fgithub.com\u002FThysrael\u002FHorizon\u002Factions\u002Fworkflows\u002Fdeploy-docs.yml\u002Fbadge.svg?style=flat-square)](https:\u002F\u002Fthysrael.github.io\u002FHorizon\u002F)\n[![GitHub commit activity](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcommit-activity\u002Fm\u002FThysrael\u002FHorizon?style=flat-square)](https:\u002F\u002Fgithub.com\u002FThysrael\u002FHorizon\u002Fcommits\u002Fmain)\n[![PRs Welcome](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg?style=flat-square)](http:\u002F\u002Fmakeapullrequest.com)\n![Sources Welcome](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F📡_sources-welcome-f97316?style=flat-square)\n\u003Ca href=\"https:\u002F\u002Fhellogithub.com\u002Frepository\u002FThysrael\u002FHorizon\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fapi.hellogithub.com\u002Fv1\u002Fwidgets\u002Frecommend.svg?rid=7a4b606e28e4477998d35851cf4fdddf&claim_uid=rtjnLkYT7ziQJUG&theme=small\" alt=\"Featured｜HelloGitHub\" \u002F>\u003C\u002Fa>\n\u003Cbr>\n\n![Claude](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FClaude-f0daba?style=flat-square&logo=anthropic&logoColor=black)\n![GPT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGPT-412991?style=flat-square)\n![Gemini](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGemini-8E75B2?style=flat-square&logo=google&logoColor=white)\n![DeepSeek](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDeepSeek-0A6DC2?style=flat-square)\n![Doubao](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDoubao-00D6C2?style=flat-square)\n![MiniMax](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMiniMax-FF6F00?style=flat-square)\n![OpenClaw](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOpenClaw-C83232?style=flat-square)\n![Ollama](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOllama-FFFFFF?style=flat-square&logo=Ollama&logoColor=black)\n\n📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 构建你专属的 AI 新闻雷达\n\n[📖 Live Demo](https:\u002F\u002Fthysrael.github.io\u002FHorizon\u002F) · [📋 Configuration Guide](https:\u002F\u002Fthysrael.github.io\u002FHorizon\u002Fconfiguration) · [简体中文](README_zh.md)\n\n\u003C\u002Fdiv>\n\n## Screenshots\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\">\n\u003Cp align=\"center\">\u003Cstrong>Ranked Daily Briefing\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cimg src=\"docs\u002Fassets\u002Foverview_en.png\" alt=\"Daily Overview\" \u002F>\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\">\n\u003Cp align=\"center\">\u003Cstrong>Context, Summary & Discussion\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cimg src=\"docs\u002Fassets\u002Fone_news_en.png\" alt=\"News Detail\" \u002F>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>More Screenshots\u003C\u002Fstrong>\u003C\u002Fsummary>\n\u003Cbr>\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"33.33%\">\n\u003Cp align=\"center\">\u003Cstrong>Terminal Output\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cimg src=\"docs\u002Fassets\u002Fterminal_log.png\" alt=\"Terminal Output\" \u002F>\n\u003C\u002Ftd>\n\u003Ctd width=\"33.33%\">\n\u003Cp align=\"center\">\u003Cstrong>Feishu Notification\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cimg src=\"docs\u002Fassets\u002Ffeishu_en.png\" alt=\"Feishu Notification\" \u002F>\n\u003C\u002Ftd>\n\u003Ctd width=\"33.33%\">\n\u003Cp align=\"center\">\u003Cstrong>Email Delivery\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cimg src=\"docs\u002Fassets\u002Femail.png\" alt=\"Email Delivery\" \u002F>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\u003C\u002Fdetails>\n\n## Why Horizon?\n\nGood 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.\n\nBut 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, thresholds, models, languages, delivery channels, comment summaries, and a community source hub.\n\n## Features\n\n- **📡 Watch Your Own Sources** — Track Hacker News, RSS, Reddit, Telegram, Twitter\u002FX, GitHub releases or user activity, and OpenBB financial news watchlists in one pipeline\n- **🤖 Turn Noise Into a Reading List** — Score each item from 0-10 with Claude, GPT, Gemini, DeepSeek, Doubao, MiniMax, Ollama, or any OpenAI-compatible API\n- **🔗 Merge Repeated Stories** — Deduplicate the same story across platforms before it reaches your briefing\n- **🔍 Understand the Background** — Add web-researched context for unfamiliar concepts, companies, projects, and technical terms\n- **💬 Read the Conversation** — Collect and summarize community comments from Hacker News, Reddit, and other supported sources\n- **🌐 Publish in Two Languages** — Generate English and Chinese daily briefings from the same source set\n- **📝 Ship a Daily Site** — Publish generated Markdown as a GitHub Pages daily briefing site\n- **📧 Deliver by Email** — Run a self-hosted SMTP\u002FIMAP newsletter with automatic subscribe and unsubscribe handling\n- **🔔 Push to Chat or Automations** — Send templated results to Feishu\u002FLark, DingTalk, Slack, Discord, or custom webhook endpoints\n- **🧙 Start From Your Interests** — Use the setup wizard to generate a personalized source configuration\n- **⚙️ Tune the Radar** — Customize sources, thresholds, models, languages, and delivery channels from one JSON config\n\n## How It Works\n\n```mermaid\n%%{init: {\n  \"theme\": \"base\",\n  \"themeVariables\": {\n    \"fontFamily\": \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif\",\n    \"fontSize\": \"18px\",\n    \"primaryTextColor\": \"#2d2a3e\",\n    \"primaryBorderColor\": \"#e0dbd3\",\n    \"lineColor\": \"#7c7891\",\n    \"tertiaryColor\": \"#faf8f5\",\n    \"clusterBkg\": \"#f3f0eb\",\n    \"clusterBorder\": \"#e0dbd3\"\n  }\n}}%%\nflowchart LR\n    classDef config fill:#fbbf24,stroke:#d4a017,color:#2d2a3e,stroke-width:1.5px;\n    classDef source fill:#ede7fb,stroke:#6d4aaa,color:#2d2a3e,stroke-width:1.5px;\n    classDef process fill:#ffe8db,stroke:#e0652e,color:#2d2a3e,stroke-width:1.5px;\n    classDef output fill:#f9d7e5,stroke:#be185d,color:#2d2a3e,stroke-width:1.5px;\n\n    config[\"⚙️ Config\u003Cbr\u002F>sources, thresholds, models, outputs\"]\n\n    subgraph sources[\"Configured Sources\"]\n        rss[\"📡 RSS\"]\n        hn[\"📰 Hacker News\"]\n        reddit[\"💬 Reddit\"]\n        telegram[\"✈️ Telegram\"]\n        twitter[\"🐦 Twitter \u002F X\"]\n        github[\"🐙 GitHub\"]\n        openbb[\"💹 OpenBB\"]\n    end\n\n    fetch[\"📥 Fetch\"]\n    dedup[\"🧹 Deduplicate\"]\n    score[\"🤖 AI Score & Filter\"]\n    enrich[\"🔎 Enrich\"]\n    summary[\"📝 Summarize\"]\n\n    subgraph outputs[\"Outputs\"]\n        direction TB\n        site[\"🌐 Pages\"]\n        email[\"📧 Email\"]\n        webhook[\"🔔 Webhooks\"]\n        mcp[\"🧩 MCP\"]\n    end\n\n    config --> fetch\n    rss --> fetch\n    hn --> fetch\n    reddit --> fetch\n    telegram --> fetch\n    twitter --> fetch\n    github --> fetch\n    openbb --> fetch\n\n    fetch --> dedup --> score --> enrich --> summary\n    config --> score\n    config --> summary\n    config --> outputs\n\n    summary --> site\n    summary --> email\n    summary --> webhook\n    summary --> mcp\n\n    class config config\n    class rss,hn,reddit,telegram,twitter,github,openbb source\n    class fetch,dedup,score,enrich,summary process\n    class site,email,webhook,mcp output\n```\n\n1. **Define** — Configure sources, thresholds, models, languages, and delivery from one JSON config.\n2. **Fetch** — Pull latest content from all configured sources concurrently.\n3. **Deduplicate** — Merge items pointing to the same story or URL across platforms.\n4. **Score & Filter** — Use AI to rank items and keep only those above your threshold.\n5. **Enrich** — Search the web for background context and collect community discussion for important items.\n6. **Summarize** — Generate a structured Markdown briefing with summaries, tags, and references.\n7. **Deliver** — Publish the result to GitHub Pages, email, webhooks such as Feishu, MCP, or local files.\n\n## Quick Start\n\n### 1. Install\n\n**Option A: Local Installation**\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FThysrael\u002FHorizon.git\ncd horizon\n\n# Install with uv (recommended)\nuv sync\n\n# Install test\u002Fdevelopment extras when needed\nuv sync --extra dev\n\n# Or with pip\npip install -e .\n```\n\n`dev` is currently defined as an optional extra in `pyproject.toml`, so use `uv sync --extra dev` for pytest and other development dependencies.\n\nIf you want the optional OpenBB financial-news source, install its extra too:\n\n```bash\nuv sync --extra openbb\n```\n\nIf `openbb` pulls packages without wheels on your machine, install the SDK manually with binaries only:\n\n```bash\nuv pip install --only-binary=:all: openbb openbb-benzinga\n```\n\n**Option B: Docker**\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FThysrael\u002FHorizon.git\ncd horizon\n\n# Configure environment\ncp .env.example .env\ncp data\u002Fconfig.example.json data\u002Fconfig.json\n# Edit .env and data\u002Fconfig.json with your API keys and preferences\n\n# Run with Docker Compose\ndocker-compose run --rm horizon\n\n# Or run with custom time window\ndocker-compose run --rm horizon --hours 48\n```\n\n### 2. Configure\n\n**Option A: Interactive wizard (recommended)**\n\n```bash\nuv run horizon-wizard\n```\n\nThe wizard asks about your interests (e.g. \"LLM inference\", \"嵌入式\", \"web security\") and auto-generates `data\u002Fconfig.json`.\n\n**Option B: Manual configuration**\n\n```bash\ncp .env.example .env          # Add your API keys\ncp data\u002Fconfig.example.json data\u002Fconfig.json  # Customize your sources\n```\n\nMinimal manual configuration:\n\n```jsonc\n{\n  \"ai\": {\n    \"provider\": \"openai\",\n    \"model\": \"gpt-4\",\n    \"api_key_env\": \"OPENAI_API_KEY\"\n  },\n  \"sources\": {\n    \"rss\": [\n      { \"name\": \"Simon Willison\", \"url\": \"https:\u002F\u002Fsimonwillison.net\u002Fatom\u002Feverything\u002F\" }\n    ]\n  },\n  \"filtering\": {\n    \"ai_score_threshold\": 6.0\n  }\n}\n```\n\nAny string value in `data\u002Fconfig.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.\n\nFor the full reference, see the [Configuration Guide](docs\u002Fconfiguration.md).\n\n### 3. Run\n\n#### Local Installation\n\n```bash\nuv run horizon           # Run with default 24h window\nuv run horizon --hours 48  # Fetch from last 48 hours\n```\n\n#### With Docker\n\n```bash\ndocker-compose run --rm horizon           # Run with default 24h window\ndocker-compose run --rm horizon --hours 48  # Fetch from last 48 hours\n```\n\nThe generated report will be saved to `data\u002Fsummaries\u002F`.\n\n### 4. Automate (Optional)\n\nHorizon works great as a **GitHub Actions** cron job. See [`.github\u002Fworkflows\u002Fdaily-summary.yml`](.github\u002Fworkflows\u002Fdaily-summary.yml) for a ready-to-use workflow that generates and deploys your daily briefing to GitHub Pages automatically.\n\n## Supported Sources\n\n| Source | What it fetches | Comments |\n|--------|----------------|----------|\n| **Hacker News** | Top stories by score | Yes (top N comments) |\n| **RSS \u002F Atom** | Any RSS or Atom feed | — |\n| **Reddit** | Subreddits + user posts | Yes (top N comments) |\n| **Telegram** | Public channel messages | — |\n| **Twitter \u002F X** | Tweets from specific users | Yes (top N replies) |\n| **GitHub** | User events & repo releases | — |\n| **OpenBB** | Financial company news by watchlist\u002Fprovider | — |\n\n## Where Your Briefing Goes\n\nHorizon can publish or deliver the generated briefing in several ways:\n\n| Channel | What it does |\n|---------|--------------|\n| **GitHub Pages Daily Site** | Copies generated Markdown into `docs\u002F` so GitHub Pages can publish a daily-updated briefing site |\n| **Email Subscription** | Sends the daily briefing to subscribers and handles subscribe\u002Funsubscribe requests through SMTP\u002FIMAP |\n| **Webhook Notification** | Pushes success or failure results to Feishu\u002FLark, DingTalk, Slack, Discord, or any custom webhook endpoint |\n| **MCP Server** | Exposes Horizon pipeline steps as tools so AI assistants can fetch, score, filter, enrich, summarize, and run the full workflow |\n\nFor setup details, see the [Configuration Guide](docs\u002Fconfiguration.md). For MCP tool references and client setup, see [`src\u002Fmcp\u002FREADME.md`](src\u002Fmcp\u002FREADME.md) and [`src\u002Fmcp\u002Fintegration.md`](src\u002Fmcp\u002Fintegration.md).\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Configuration](docs\u002Fconfiguration.md) | AI providers, sources, filtering, email, webhook, GitHub Pages, and MCP setup |\n| [Scoring](docs\u002Fscoring.md) | How Horizon evaluates and ranks news items |\n| [Scrapers](docs\u002Fscrapers.md) | Source scraper details and extension notes |\n| [MCP Tools](src\u002Fmcp\u002FREADME.md) | Tool reference for MCP-compatible clients |\n\n## Project Status\n\nHorizon already supports the full daily briefing loop: multi-source collection, AI scoring, deduplication, enrichment, comment summaries, bilingual generation, GitHub Pages publishing, email delivery, webhook delivery, Docker deployment, MCP integration, and the setup wizard.\n\nPlanned improvements:\n\n- More source types, such as Discord\n- Custom scoring prompts per source\n- Publish releases on GitHub\n- Publish the package to PyPI for `pip install`\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for code, documentation, and source-sharing guidelines.\n\n### Share Sources\n\nWant to share valuable source discoveries with the Horizon community? Please submit them through **[horizon1123.top](https:\u002F\u002Fhorizon1123.top)**.\n\n## Acknowledgements\n\n- Special thanks to [LINUX.DO](https:\u002F\u002Flinux.do\u002F) for providing a promotion platform.\n- Special thanks to [HelloGitHub](https:\u002F\u002Fhellogithub.com\u002F) for valuable guidance and suggestions.\n- Special thanks to [AIGC Link](https:\u002F\u002Fxhslink.com\u002Fm\u002F80ngts127cA) for the promotions on XiaoHongShu.\n\n## License\n\n[MIT](LICENSE)\n","Horizon 是一个基于 AI 的新闻雷达项目，能够生成每日的英文和中文新闻简报。其核心功能包括使用多种先进的语言模型（如Claude、GPT、Gemini等）进行新闻聚合与分析，并通过终端输出、飞书通知或邮件等多种方式向用户传递信息。技术上，Horizon 采用了Python开发，并支持自定义配置以适应不同需求。适合需要快速获取个性化新闻摘要的人士以及希望集成智能新闻服务到自己工作流程中的开发者使用。","2026-06-11 03:48:44","high_star"]