内容
# 全网通
<sub>English · [中文](./README.zh.md)</sub>
**您的代理可以读取推特,但仍然无法读取微信。全网通解决了这个问题。**
全网通搜索和读取被登录墙保护的中文互联网 — 微信公众号 · 小红书 · 抖音 · B站 · TikTok — 以及推特、Reddit、HN、YouTube等,通过一个统一的接口:`omnireach search` 返回一个标准化的 JSON 模式,适用于所有来源;`omnireach fetch` 返回任何 URL 的干净的 Markdown。微信搜索**无需配置** — 无需密钥,无需登录:
```bash
omnireach search --on wechat "Claude Code 技巧" # 安装后 60 秒即可使用
```
作为 Claude Code 技能安装,因此您的代理知道如何在下一次会话中使用它。内部没有 LLM,无需每次调用的爬虫费用 — 重量级来源重用您自己的浏览器会话。

[](LICENSE)
[](https://www.python.org/)
---
## 安装 — 直接告诉您的代理
> **"安装全网通"**
您的代理运行一个命令。您无需复制任何内容。
<sub>手动备用 — 如果您愿意,请粘贴到您的终端:</sub>
```bash
curl -fsSL https://raw.githubusercontent.com/Daily-AC/omnireach/main/install.sh | sh
```
<sub>也可在 [PyPI](https://pypi.org/project/omnireach/) 上使用:`uv tool install omnireach` 或 `pip install omnireach`(仅限 CLI — 上面的单行命令还会注册 Claude Code 技能)。尝试无需安装:`uvx omnireach search "vibe coding"`。</sub>
此安装程序安装 CLI **和** 注册 Claude Code 技能(下次会话自动发现)。零配置来源 — HackerNews、RSS、微信(Sogou 路径)、B站 — 立即生效。其他来源在每个一次性设置步骤后开放。
---
## 您获得的功能
**1. 到达无法到达的区域。**
推特、Reddit、小红书、微信公众号、抖音、B站、TikTok — 登录墙保护的垂直平台,任何代理网络搜索都无法到达。全网通通过您自己的登录浏览器会话(通过 OpenCLI Chrome 桥)读取它们,因此您的代理看到的结果与人类登录后看到的结果相同。
**2. 统一的接口。**
`omnireach search` → 标准化元数据 + URL,适用于所有来源。`omnireach fetch` → 任何 URL 的干净 Markdown,具有主机感知路由(`mp.weixin.qq.com` 通过您登录的 Chrome 会话绕过 CAPTCHA 墙;所有其他主机通过 Crawl4AI → Jina Reader 备用)。您的代理学习一个接口,而不是 15 个 API。
**3. 在 WebSearch 无法工作时也能工作。**
在代理/中继站/基岩/Vertex-Claude-3.x 设置中,内置的 WebSearch 服务器工具不可用,全网通提供搜索功能 — 它完全在客户端运行,绕过两个门槛。
---
## 与 Agent-Reach 有何不同?
[Agent-Reach](https://github.com/Panniantong/Agent-Reach)(51k★)创造了这个类别,并且在它的领域内非常出色。全网通做出了不同的权衡 — 这些是带有时间戳的事实,而不是营销:
| | 全网通 | Agent-Reach (v1.5.0, as of 2026-07) |
|---|---|---|
| 微信公众号 | ✅ 零配置搜索(Sogou 路径)+ 通过您登录的 Chrome 进行全文抓取 | ❌ 已移除 2026-06 ([PR #347](https://github.com/Panniantong/Agent-Reach/pull/347)) 在反机器人破坏后 |
| 抖音 | ✅ 通过您登录的 Chrome 进行搜索 | ❌ 已移除 2026-06(上游工具存档) |
| TikTok | ✅ 搜索 | ❌ 不支持 |
| 输出接口 | 所有 16 个来源的统一 pydantic JSON 模式;自动 JSON 输出 | 无包装层 — 每个上游工具的格式(YAML / 纯文本 / 字幕文件 / 原始 JSON) |
| `search` / `fetch` 命令 | 内置:`omnireach search`、`omnireach fetch <url>`,具有主机感知路由 | 无搜索/读取命令 — 将您的代理路由到直接调用上游工具 |
| Facebook · Instagram · LinkedIn · 雪球 · 播客转录 | ❌ | ✅ |
| 社区 | 早期 — 您在众人之前发现了我们 | 51k★,30 名贡献者 |
如果您需要 Facebook/LinkedIn/转录,请选择 Agent-Reach。如果您需要中文互联网 — 特别是微信 — 一个稳定的 JSON 接口,或一个单一的抓取入口,请选择全网通。两者都是 MIT 许可的;它们可以在一个代理中很好地组合。
---
## 示例
```bash
# 搜索一个登录墙保护的垂直平台
omnireach search --on xiaohongshu --json "Claude Code 使用技巧"
# 抓取微信文章 — 登录墙保护,通过您的会话
omnireach fetch --json "https://mp.weixin.qq.com/s/<token>"
# 完整管道:搜索 → 抓取所有结果
omnireach search --on wechat --json "claude 4.7" \
| jq -r '.results[].url' \
| xargs -I{} omnireach fetch --json {}
```
---
## 命令
| 命令 | 功能 |
|---|---|
| `omnireach search "<query>"` | 搜索(SERP:元数据 + URL) |
| `omnireach search --on twitter,reddit "..."` | 目标特定来源 |
| `omnireach search --mode quick "..."` | 快速模式 — 仅限 HN |
| `omnireach search --mode deep "..."` | 深度模式 — 所有已准备好的来源 |
| `omnireach search --json "..."` | 显式 JSON 输出 |
| **`omnireach fetch <url>`** (v0.10, v0.10.1) | **URL → 完整 Markdown** — `mp.weixin.qq.com` 使用 OpenCLI 登录 Chrome(v0.10.1+),其他主机使用 crwl → jina 备用 |
| `omnireach fetch <url> --backend jina` | 强制 Jina Reader SaaS(零本地依赖) |
| `omnireach fetch <url> --backend opencli` | 强制 OpenCLI 微信登录路径(v0.10.1+) |
| `omnireach init` | 写入默认 `~/.omnireach/preferences.toml` |
| `omnireach sources` | 列出所有来源 + 等级状态 |
| `omnireach setup <source>` | 引导设置 🟡 / 🔴 来源 |
| `omnireach doctor` | 健康检查(来源 / 抓取后端 / 微信后端) |
---
## 来源
| 来源 | 等级 | 依赖 | 备注 |
|---|---|---|---|
| hackernews | ✅ 已准备 | 无 | 直接 Algolia,零配置 |
| youtube | ✅ 已准备 | `yt-dlp`(pip 安装) | `omnireach setup youtube` |
| github | ✅ 已准备 | `gh` CLI + `gh auth login` | `omnireach setup github` |
| rss | ✅ 已准备 | 内置 feedparser | 查询必须是一个 URL |
| reddit | 🟡 一步到位 | `rdt-cli` + `rdt login` | `omnireach setup reddit` |
| twitter | 🔴 重量级 | OpenCLI + Chrome 扩展 | v0.3 路径 |
| xiaohongshu | 🔴 重量级 | OpenCLI + Chrome 扩展 | v0.3 路径 |
| tiktok | 🔴 重量级 | OpenCLI + Chrome 扩展 | TikTok 国际版(v0.7) |
| douyin | 🔴 重量级 | OpenCLI 分叉 + Chrome 扩展 | 抖音(v0.7.2,Daily-AC/OpenCLI 分叉) |
| 💎 tavily | 增强 | 环境变量 `TAVILY_API_KEY` | 付费(v0.4) |
| 💎 brave | 增强 | 环境变量 `BRAVE_API_KEY` | 付费(v0.4) |
| 💎 perplexity | 增强 | 环境变量 `PERPLEXITY_API_KEY` | 付费(v0.4) |
| 💎 exa | 增强 | 环境变量 `EXA_API_KEY` | 付费网络搜索(v0.5) |
| wechat | ✅ 已准备 | 无(可选 `EXA_API_KEY` 增强) | 微信公众号 — 通过 Sogou 免费路径搜索;`EXA_API_KEY` 可选启用语义增强;v0.10.1+ `omnireach fetch <wechat-url>` 通过 OpenCLI 登录 Chrome 自动路由 |
| bilibili | ✅ 已准备 | 无(可选 `EXA_API_KEY` 增强) | B站 — v0.9+ 默认使用 B站官方搜索 API;`EXA_API_KEY` 可选启用语义增强 |
> **抖音 / douyin** (v0.7.2):使用 `omnireach setup douyin`,安装 [Daily-AC/OpenCLI 分叉](https://github.com/Daily-AC/OpenCLI)(上游 PR [jackwener/OpenCLI#1759](https://github.com/jackwener/OpenCLI/pull/1759) 待审查;一旦合并,将切换回)。需要登录 www.douyin.com 到 Chrome。`engagement.likes` 有真实数据(DOM 提取);`plays/comments/shares` 在搜索卡中未公开,归一化为 `null`。
> **微信抓取** (v0.10.1):`omnireach fetch <mp.weixin.qq.com URL>` 使用相同的 Daily-AC/OpenCLI 分叉(`weixin download --stdout`,上游 PR [jackwener/OpenCLI#1770](https://github.com/jackwener/OpenCLI/pull/1770) 待审查)。需要已在 Chrome 中打开任意 mp.weixin.qq.com 文章(无需显式登录步骤;浏览器 cookie 足够)。参见 [如何获取全文](#如何获取全文-v08) 。
---
## 代理调用约定
从代理调用全网通时,**始终显式请求 JSON** 以防止富文本输出包装您需要的字段:
```bash
# 选项 1:每个命令的显式标志
omnireach search --json "..."
omnireach fetch --json "<url>"
# 选项 2:环境变量(推荐用于代理托管)
export OMNIREACH_FORCE_JSON=1
```
v0.9.2 中添加的 `not isatty()` 自动 JSON 涵盖了大多数情况,但一些代理终端(例如 Antigravity)为子进程分配了一个真正的 PTY,使得 `isatty()=True`。显式 `--json` 或环境变量始终有效。
完整技能合约:[`.claude-plugin/skills/omnireach/SKILL.md`](./.claude-plugin/skills/omnireach/SKILL.md)
---
<details>
<summary><b>谁特别需要这个?(WebSearch 两层门槛)</b></summary>
Claude Code 的 WebSearch 是一个**服务器端服务器工具**(`web_search_20250305`)。它是否实际工作取决于**两个独立的门槛**:
**门槛 1 — 客户端(`WebSearchTool.isEnabled()` 检查 `getAPIProvider()`):**
- 默认 `firstParty`(无 `CLAUDE_CODE_USE_*` 环境变量设置,包括仅更改 `ANTHROPIC_BASE_URL` 的情况)→ 工具**已注册**
- 显式 `CLAUDE_CODE_USE_BEDROCK=1` → 工具**关闭**
- 显式 `CLAUDE_CODE_USE_VERTEX=1` + Claude 4+ → 已注册;旧 Claude → 关闭
- 显式 `CLAUDE_CODE_USE_FOUNDRY=1` → 已注册
**门槛 2 — 上游服务器工具实现:** 在客户端发送工具模式后,上游 API 必须**特别实现** `web_search_20250305` 服务器工具(接收工具调用 → 运行搜索 → 将结果返回给客户端):
- 真正的 Anthropic API(api.anthropic.com):✓ 原生
- Vertex / Foundry:✓(每个后端都实现了它)
- **特别支持 Claude Code 的第三方提供商**(例如 DeepSeek 的 Anthropic 兼容端点):✓ 他们实现了服务器工具处理,路由到他们自己的搜索后端
- **OpenAI 兼容的中继站**(例如 cliproxy / anyrouter 等简单翻译 Claude API → OpenAI 聊天补丁):✗ 不识别服务器工具语义
- **自托管网关 / 大多数代理**:✗ 通常未实现
门槛 2 着眼于**“上游是否特别实现了 Claude Code 服务器工具支持”** — 而不是“是否是真正的 Anthropic”。特别支持 Claude Code 的提供商实现了它;纯 API 翻译器则不。(数据点:DeepSeek 不是真正的 Anthropic,但 WebSearch 有效,因为他们特别实现了它。)
**根本原因因场景而异:**
- DeepSeek 和其他 Claude-Code 特有的第三方:两个门槛都通过,WebSearch ✓ — 全网通的价值在于补充垂直来源(Twitter/小红书/微信),而不是修补搜索
- OpenAI 兼容的中继站用户:客户端注册工具,**上游不处理服务器工具调用** → 失败
- 显式 Bedrock 用户 / Vertex Claude 3.x 用户:客户端 `isEnabled` 在请求甚至离开前关闭
**即使 WebSearch 工作正常**,它也无法到达 Twitter 线程、Reddit 评论区、小红书帖子、微信文章、抖音、B站技术视频 — 这些登录墙保护的垂直平台是每个托管网络搜索的盲点。全网通的三个价值层:
1. 修补客户端门槛关闭的用户
2. 修补上游未实现服务器工具调用的用户
3. 补充 WebSearch 工作正常但无法到达垂直平台的用户
</details>
<details>
<summary><b>命名和架构(搜索 / 抓取 / 解析)</b></summary>
**全网通** = `omni`(所有)+ `reach`(到达)。完整的“到达整个网络”语义需要三个能力层,都作为**此存储库中的 sibling 二进制文件**(类似于 `cargo` / `rustc` / `rustfmt` 在 Rust 多项目仓库中 — **没有姐妹仓库**):
| 层 | 实现 | 责任 | 状态 |
|---|---|---|---|
| **搜索** | `omnireach search` 子命令 | 跨网络定位 — 返回元数据 + URL,不抓取内容 | ✅ v0.7+ 已使用 |
| **抓取** | `omnireach fetch` 子命令 | 给定 URL,抓取全文 Markdown — 主机感知:`mp.weixin.qq.com` 通过 OpenCLI 登录 Chrome,其他主机通过 [Crawl4AI](https://github.com/unclecode/crawl4ai) → [Jina Reader](https://r.jina.ai/) | ✅ v0.10+(微信路径 v0.10.1+) |
| **解析** | (尚未实现,将来添加到此存储库) | 视频/音频内容解析(字幕/STT/逐帧) | 🔜 未启动 |
v0.10+ 已具有全网通涵盖搜索 + 抓取(子命令形式)。视频解析仍然使用外部工具(yt-dlp / whisper);解析二进制文件将添加到此存储库,当有真实用户请求时(YAGNI — 没有姐妹仓库)。
此分割镜像 Anthropic 自己的 [WebSearch](https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search) + [WebFetch](https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-fetch) 分割:每个层都做好一件事,搜索不会因解析任务而变慢,代理调用者可以自由组合。
> 注意:曾考虑将 `omnireach` 重命名为 `omnisearch`,但 v0.10 启用 `omnireach fetch` 解决了问题 — `omnireach search`(到达 = 找到)+ `omnireach fetch`(到达 = 获取)都是“到达”的自然子动作,因此伞形名称合适。 **没有重命名**(2026-05-27 决定)。
</details>
<details>
<summary><b>升级</b></summary>
全网通处于 alpha 版本,发布频率较高。请检查并升级:
```bash
omnireach check-update # 与 GitHub Releases 进行比较
uv tool install --force git+https://github.com/Daily-AC/omnireach.git # 拉取最新
```
> ⚠️ `uv tool upgrade omnireach` **不会** 拉取新提交(uv 在安装时锁定 git-URL 工具到提交记录)。`--force` 重新安装会获取最新版本。
</details>
<details>
<summary><b>平台支持</b></summary>
| 平台 | 状态 | 备注 |
|---|---|---|
| macOS | ✅ 主要开发平台 | 已测试所有来源(HN/RSS/youtube/github/reddit/twitter/xhs/tiktok/douyin + 4 个增强器 + wechat/bilibili);`omnireach fetch` 所有三个后端(crwl/jina/opencli)已验证 |
| Linux | 🟡 尽力支持 | 应该有效;设置流程不会自动检测 `apt`/`pacman` |
| WSL2 | 🟡 尽力支持 | 与 Linux 相同 |
| Windows (原生 PowerShell) | 🟡 实验性(v0.6.3+) | 删除了 macOS 假设:不再调用 POSIX chmod 的 secrets.env;首选项编辑器会回落到 notepad;github 安装提示 `winget install GitHub.cli`;OpenCLI 来源(twitter/xhs)理论上跨平台但未经测试。 **如果您遇到问题,请提交问题。** |
运行 `omnireach doctor` 在顶部打印平台/ Python 版本行 — 在提交问题时有用。
</details>
<details>
<summary><b>💎 付费增强器(v0.4)</b></summary>
全网通默认免费。配置付费 API 密钥可以提高结果质量:
```bash
omnireach setup tavily # 引导密钥输入 + 写入 ~/.omnireach/secrets.env
omnireach setup brave
omnireach setup perplexity
omnireach setup exa # v0.5 新增(替换旧版 `web` 来源)
```
在设置后会自动检测密钥。结果将带有 `cost="paid"` 元数据;TTY 输出显示 💎 前缀以便审计。
要禁用:编辑 `~/.omnireach/preferences.toml` 并设置 `[boosters] auto_enable = false`。
</details>
<details>
<summary><b>⚙️ 用户偏好(v0.4)</b></summary>
`~/.omnireach/preferences.toml` 可以配置默认来源、语言、输出格式和 `source_trust` 重写。
```bash
omnireach preferences show # 查看当前配置
omnireach preferences edit # 在 $EDITOR 中打开
omnireach preferences reset # 重置(备份原始到 .bak)
omnireach preferences path # 打印文件位置
```
</details>
<details>
<summary><b>如何获取全文(v0.8)</b></summary>
全网通是搜索层 — `content` 字段统一限制在 ≤ 500 个字符 + `…`。此验证器在合约层运行(`SearchResult.content` pydantic `field_validator`)**适用于所有来源**。这是刻意的 — 全文属于 `omnireach fetch` 层(参见上文 [命名和架构](#命名--架构搜索--抓取--解析))。
对于上游返回全文的来源(wechat / exa / tavily)或长线程(twitter),**完整原始有效载体保存在 `result.raw` 中**,因此需要全文的代理可以检索它:
```python
# Python(调用 CLI + 解析 JSON 信封)
import json
import subprocess
out = subprocess.run(
["omnireach", "search", "--json", "--on", "wechat", "claude 4.7"],
check=True, capture_output=True, text=True,
)
env = json.loads(out.stdout)
snippet = env["results"][0]["content"] # 500 字符 + "…"
full = env["results"][0]["raw"]["text"] # Exa / wechat / twitter 全文
# tavily 使用 raw["content"]
```
```bash
# 从 omnireach 搜索结果中获取全文
omnireach fetch --json "https://mp.weixin.qq.com/s/<token>" | jq -r .content
```
# CLI + jq
omnireach search --json --on tavily "claude 4.7" | \
jq '.results[] | {title, snippet: .content, full: .raw.content}'
```
字段映射(在 v0.8.1 + v0.9 版本中通过真实端到端验证):
| 来源 | `result.adapter` | `result.content` | `result.raw[...]` 用于全文/原始数据 |
|---|---|---|---|
| 微信(默认搜狗) | `sogou` | 摘要(搜狗搜索结果摘要) | `raw["item_html"]`(完整的搜狗卡片 HTML)— 对于实际全文,您需要访问 mp.weixin.qq.com |
| 微信(启用 EXA_API_KEY) | `exa-api` | 摘要 | `raw["text"]`(Exa 全文) |
| 哔哔(默认 B站 API) | `bilibili-api` | 视频描述(≤500) | `raw` 整个视频项目字典,包括描述/封面/aid/bvid |
| 哔哔(启用 EXA_API_KEY) | `exa-api` | 摘要 | `raw["text"]` |
| exa | `exa-api` | 摘要 | `raw["text"]` |
| tavily | `tavily-api` | 摘要 | `raw["content"]` |
| 推特 | `opencli` | 摘要(长线程触发截断) | `raw["text"]` |
| 小红书 | `opencli` | 空 — OpenCLI 搜索结果不包括正文 | 无(在搜索层没有全文) |
`raw[...]` 中的特定键名直接与上游 API 模式匹配 — 如果上游更改模式,则需要更新此表。如果不确定,请先检查 `result.raw.keys()`。
其他来源(HN / GitHub / RSS / YouTube / 等)通常具有 500 个字符以下的正文,因此验证器通常是空操作 — 但不能保证。对于全文回退,请为匹配的键检查 `result.raw`。
### 对于实际全文 → `omnireach fetch <url>`(v0.10+)
`omnireach fetch <url>` 是官方搜索 → 全文管道,具有**主机感知**的后端路由:
```bash
# 任意网页 → crwl(本地 Crawl4AI)优先,jina(r.jina.ai SaaS)备用
omnireach fetch https://example.com/article --json
# 微信公众号文章 → 自动使用 OpenCLI 登录 Chrome(v0.10.1+),绕过 CAPTCHA
omnireach fetch https://mp.weixin.qq.com/s/<token> --json
# 搜索 → 获取全文管道
omnireach search --on wechat "claude 4.7" --json \
| jq -r '.results[].url' \
| xargs -I{} omnireach fetch --json {}
```
后端矩阵:
| URL 主机 | `--backend auto` 路由到 | 备注 |
|---|---|---|
| `mp.weixin.qq.com` | **opencli**(登录 cookie 策略) | 安装 [Daily-AC/OpenCLI fork](https://github.com/Daily-AC/OpenCLI) 并使用 `weixin download --stdout` 标志(v0.10.1 提交 fe28823+);直接 `crwl` / `jina` 被微信的“环境异常” CAPTCHA 阻止 |
| 其他主机 | **crwl → jina** | Crawl4AI 优先;如果未安装或失败,则回退到 Jina Reader SaaS |
显式 `--backend` 覆盖自动:
| 标志 | 行为 |
|---|---|
| `--backend crwl` | 强制 Crawl4AI 本地(66K ⭐ Apache-2.0,内置 Cloudflare/Akamai/DataDome 绕过) |
| `--backend jina` | 强制 [Jina Reader](https://r.jina.ai/) SaaS — 零本地依赖,大免费层 |
| `--backend opencli` | 强制 OpenCLI 微信登录路径(仅对 mp.weixin.qq.com 有意义) |
v0.10.1 为所有后端添加了 **CAPTCHA 启发式回退**:当检测到 `环境异常 / 完成验证后即可继续访问 / Cloudflare / Just a moment` 等关键词时,信封 `errors[]` 会获得一个 `captcha_suspected: ...` 条目;markdown 字段被保留(优雅降级 — 代理读取 `errors` 以决定是否信任内容)。`omnireach doctor` 的 `wechat_backends` 部分显示 OpenCLI + `--stdout` 是否已准备就绪。
</details>
<details>
<summary><b>设计</b></summary>
参见 `docs/superpowers/specs/2026-05-25-omnireach-design.md`。
</details>
<details>
<summary><b>许可证</b></summary>
MIT — 参见 [LICENSE](LICENSE)。
</details>
连接信息
猜你喜欢
暂无推荐服务器