MCPcopy
hub / github.com/Thysrael/Horizon

github.com/Thysrael/Horizon @main sqlite

repository ↗ · DeepWiki ↗
766 symbols 3,594 edges 67 files 322 documented · 42%
README

🌅 Horizon

你只需享受新闻,剩下交给 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

📡 构建你专属的 AI 新闻雷达,生成中英双语日报。 | Your own AI-powered news radar.

📖 在线演示 · 📋 配置指南 · English · 日本語

截图

按优先级排序的日报 日报总览 背景、总结与评论 新闻详情

More Screenshots

终端输出 终端输出 飞书通知 飞书通知 邮件推送 邮件推送

为什么需要 Horizon?

好新闻分散在各处,坏信息却源源不断。Horizon 为你先完成第一轮筛选:从 Hacker News、Reddit、Telegram、RSS、Twitter/X、GitHub 和 OpenBB 抓取内容,合并重复新闻,用 AI 打分过滤,并为重要内容补充背景解释和社区讨论。

但 Horizon 不只是又一个摘要工具。AI 很擅长降低噪声,但新闻仍然需要人的品味:你信任哪些信息源,哪些评论改变了你对事件的理解,哪些小众来源值得被更多人看见。Horizon 通过可定制的信息源、筛选标准、模型、语言、分发方式、评论摘要和社区信息源官网,把这层“人味”保留下来。

功能特性

  • 📡 关注你的信息源 — 将 Hacker News、RSS、Reddit、Telegram、Twitter/X、GitHub Release / 用户动态,以及 OpenBB 金融新闻观察列表纳入同一条 pipeline
  • 🤖 把噪声变成阅读清单 — 使用 Claude、GPT、Gemini、DeepSeek、豆包、MiniMax 或任意 OpenAI 兼容 API,为每条内容评分 0-10
  • 🔗 合并重复新闻 — 在生成日报前自动合并来自不同平台的相同故事
  • 🔍 补全背景知识 — 为陌生概念、公司、项目和技术术语补充网络搜索得到的背景解释
  • 💬 读到社区声音 — 收集并总结 Hacker News、Reddit 等来源的评论讨论
  • 🌐 生成双语日报 — 基于同一组信息源生成英文和中文日报
  • 📝 发布日报站点 — 将生成的 Markdown 发布为 GitHub Pages 静态日报站点
  • 📧 邮件分发 — 运行自托管 SMTP/IMAP 邮件列表,自动处理订阅与退订
  • 🔔 推送到聊天和自动化工具 — 将模板化结果发送到飞书、钉钉、Slack、Discord 或自定义 Webhook
  • 🧙 从兴趣开始配置 — 通过交互式向导根据你的兴趣生成个性化信息源配置
  • ⚙️ 调校你的新闻雷达 — 在单个 JSON 配置中定制信息源、阈值、模型、语言和分发方式

工作原理

%%{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["⚙️ 配置

信息源、阈值、模型、输出方式"]

     subgraph sources["已配置的信息源"]
         rss["📡 RSS"]
         hn["📰 Hacker News"]
         reddit["💬 Reddit"]
         telegram["✈️ Telegram"]
         twitter["🐦 Twitter / X"]
         github["🐙 GitHub"]
         openbb["💹 OpenBB"]
      end

    fetch["📥 抓取"]
    dedup["🧹 新闻去重"]
    score["🤖 AI 打分与过滤"]
    enrich["🔎 内容丰富"]
    summary["📝 总结生成"]

    subgraph outputs["输出形式"]
        direction TB
        site["🌐 Pages"]
        email["📧 邮件"]
        webhook["🔔 Webhook"]
        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. 定义 — 用一个 JSON 配置好信息源、阈值、模型、语言和分发方式。
  2. 抓取 — 并发拉取所有已配置信息源的最新内容。
  3. 去重 — 合并来自不同平台、指向同一故事或 URL 的内容。
  4. 打分与过滤 — 用 AI 对内容排序,只保留超过阈值的条目。
  5. 丰富 — 为重要内容补充搜索得到的背景信息和社区讨论。
  6. 总结 — 生成结构化的 Markdown 日报,包含摘要、标签和参考链接。
  7. 分发 — 将结果发布到 GitHub Pages、邮件、飞书等 webhook、MCP 或本地文件。

赞助

Horizon 是一个业余时间维护的开源项目。如果你愿意支持这个项目,或希望出现在这里,欢迎创建一个 Issue发邮件联系我。

支持方 说明
Compshare / 优云智算 优云智算目前正在支持 Horizon。优云智算是 UCloud 旗下 AI 云平台,主打包月、按次的高性价比国模 Agent Plan 套餐,低至 49 元/月起,同时提供官转稳定海外模型。支持接入 Claude Code、Codex 及 API 调用,支持企业高并发、7*24 技术支持和自助开票。

通过其链接注册,可获得 5 元平台体验金。 |

快速开始

1. 安装

方式 A:本地安装

git clone https://github.com/Thysrael/Horizon.git
cd horizon

# 使用 uv 安装(推荐)
uv sync

# 需要测试/开发依赖时
uv sync --extra dev

# 或使用 pip
pip install -e .

当前 devpyproject.toml 中定义为 optional extra,因此安装 pytest 等开发依赖时应使用 uv sync --extra dev

如果你要启用可选的 OpenBB 金融新闻源,还需要安装对应 extra:

uv sync --extra openbb

如果 openbb 在你的机器上会拉到缺少 wheel 的依赖,建议改用只安装二进制包:

uv pip install --only-binary=:all: openbb openbb-benzinga

方式 B:Docker

git clone https://github.com/Thysrael/Horizon.git
cd horizon

# 配置环境
cp .env.example .env
cp data/config.example.json data/config.json
# 编辑 .env 和 data/config.json,填入你的 API 密钥和偏好设置

# 使用 Docker Compose 运行
docker compose run --rm horizon

# 或自定义时间窗口
docker compose run --rm horizon --hours 48

2. 配置

方式 A:交互式向导(推荐)

uv run horizon-wizard

向导会询问你的兴趣(如"LLM 推理"、"嵌入式"、"web 安全"),自动推荐并生成 data/config.json,还可选让 AI 补充推荐小众源。若你想分享信息源,请前往 horizon1123.top

方式 B:手动配置

cp .env.example .env          # 添加 API 密钥
cp data/config.example.json data/config.json  # 自定义信息源

最小手动配置示例:

{
  "ai": {
    "provider": "openai",
    "model": "gpt-4",
    "api_key_env": "OPENAI_API_KEY"
  },
  "sources": {
    "rss": [
      { "name": "Simon Willison", "url": "https://simonwillison.net/atom/everything/" }
    ]
  },
  "filtering": {
    "ai_score_threshold": 6.0
  }
}

均衡日报(可选)

可以限制日报总条数,并避免单一类别占据过多内容。类别

Core symbols most depended-on inside this repo

run
called by 110
src/orchestrator.py
print
called by 99
src/services/email.py
fetch
called by 31
src/scrapers/rss.py
notify
called by 29
src/services/webhook.py
_render
called by 21
src/services/webhook.py
print
called by 17
src/services/webhook.py
_expand_env_vars
called by 14
src/storage/manager.py
create_run
called by 13
src/mcp/run_store.py

Shape

Method 402
Function 267
Class 97

Languages

Python99%
TypeScript1%

Modules by API surface

tests/test_webhook.py129 symbols
tests/test_minimax_client.py32 symbols
src/ai/client.py31 symbols
src/services/webhook.py30 symbols
src/models.py29 symbols
tests/test_openbb_scraper.py28 symbols
src/mcp/server.py27 symbols
src/mcp/service.py23 symbols
tests/test_twitter.py22 symbols
src/scrapers/reddit.py21 symbols
src/mcp/run_store.py19 symbols
tests/test_chained_client.py17 symbols

Dependencies from manifests, versioned

anthropic0.39.0 · 1×
beautifulsoup44.12.0 · 1×
ddgs7.0.0 · 1×
feedparser6.0.11 · 1×
google-genai0.3.0 · 1×
httpx0.27.0 · 1×
markdown3.10.2 · 1×
mcp1.0.0 · 1×
openai1.54.0 · 1×
pydantic2.9.0 · 1×
python-dateutil2.9.0 · 1×
python-dotenv1.0.0 · 1×

For agents

$ claude mcp add Horizon \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact