Agent-Reach
CLI ToolPanniantong/Agent-Reach
CLI scaffolding that equips AI agents with read/search access to major web platforms.
Overview
Agent Reach is an open-source scaffolding tool that gives AI agents like Claude Code and Cursor the ability to read and search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu and more through one CLI with zero API fees. It installs and wires up best-of-breed upstream tools, registers skills for agents, and ships with a built-in doctor command for channel diagnostics. Every channel is pluggable and all cookies stay local.
README Preview
👁️ Agent Reach\n\n\n 给你的 AI Agent 一键装上互联网能力\n\n\n\n \n \n \n\n\n\n 快速开始 · English · 日本語 · 한국어 · 支持平台 · 设计理念\n\n\n---\n\n## 为什么需要 Agent Reach?\n\nAI Agent 已经能帮你写代码、改文档、管项目——但你让它去网上找点东西,它就抓瞎了:\n\n- 📺 "帮我看看这个 YouTube 教程讲了什么" → **看不了**,拿不到字幕\n- 🐦 "帮我搜一下推特上大家怎么评价这个产品" → **搜不了**,Twitter API 要付费\n- 📖 "去 Reddit 上看看有没有人遇到过同样的 bug" → **403 被封**,服务器 IP 被拒\n- 📕 "帮我看看小红书上这个品的口碑" → **打不开**,必须登录才能看\n- 📺 "B站上有个技术视频,帮我总结一下" → **连不上**,海外/服务器 IP 被屏蔽\n- 🔍 "帮我在网上搜一下最新的 LLM 框架对比" → **没有好用的搜索**,要么付费要么质量差\n- 🌐 "帮我看看这个网页写了啥" → **抓回来一堆 HTML 标签**,根本没法读\n- 📦 "这个 GitHub 仓库是干嘛的?Issue 里说了什么?" → 能用,但认证配置很麻烦\n- 📡 "帮我订阅这几个 RSS 源,有更新告诉我" → 要自己装库写代码\n\n**这些不难实现,但是需要自己折腾配置**\n\n每个平台都有自己的门槛——要付费的 API、要绕过的封锁、要登录的账号、要清洗的数据。你要一个一个去踩坑、装工具、调配置,光是让 Agent 能读个推特就得折腾半天。\n\n**Agent Reach 把这件事变成一句话:**\n\n```\n帮我安装 Agent Reach:https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md\n```\n\n复制给你的 Agent,几分钟后它就能读推特、搜 Reddit、看 YouTube、刷小红书了。\n\n**已经装过了?更新也是一句话:**\n\n```\n帮我更新 Agent Reach:https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/update.md\n```\n\n> ⭐ **Star 这个项目**,我们会持续追踪各平台的变化、接入新的渠道。你不用自己盯——平台封了我们修,有新渠道我们加。\n\n### ✅ 在你用之前,你可能想知道\n\n| | |\n|---|---|\n| 💰 **完全免费** | 所有工具开源、所有 API 免费。唯一可能花钱的是服务器代理($1/月),本地电脑不需要 |\n| 🔒 **隐私安全** | Cookie 只存在你本地,不上传不外传。代码完全开源,随时可审查 |\n| 🔄 **持续更新** | 底层工具(yt-dlp、twitter-cli、rdt-cli、Jina Reader 等)定期追踪更新到最新版,你不用自己盯 |\n| 🤖 **兼容所有 Agent** | Claude Code、OpenClaw、Cursor、Windsurf……任何能跑命令行的 Agent 都能用 |\n| 🩺 **自带诊断** | `agent-reach doctor` 一条命令告诉你哪个通、哪个不通、怎么修 |\n\n---\n\n## 支持的平台\n\n| 平台 | 装好即用 | 配置后解锁 | 怎么配 |\n|------|---------|-----------|-------|\n| 🌐 **网页** | 阅读任意网页 | — | 无需配置 |\n| 📺 **YouTube** | 字幕提取 + 视频搜索 | — | 无需配置 |\n| 📡 **RSS** | 阅读任意 RSS/Atom 源 | — | 无需配置 |\n| 🔍 **全网搜索** | — | 全网语义搜索 | 自动配置(MCP 接入,免费无需 Key) |\n| 📦 **GitHub** | 读公开仓库 + 搜索 | 私有仓库、提 Issue/PR、Fork | 告诉 Agent「帮我登录 GitHub」 |\n| 🐦 **Twitter/X** | 读单条推文 | 搜索推文、浏览时间线、发推 | 告诉 Agent「帮我配 Twitter」 |\n| 📺 **B站** | 本地:字幕提取 + 搜索 | 服务器也能用 | 告诉 Agent「帮我配代理」 |\n| ���
FAQ (2)
TroubleshootingWhy does agent-reach doctor report "Chrome extension not installed" even though the OpenCLI extension is connected?
This is a false negative in agent-reach doctor (v1.5.0). Doctor detects the OpenCLI extension by scanning Chrome's User Data\<Profile>\Extensions\ directory for the extension ID. This check fails if you loaded the extension as an unpacked extension in Microsoft Edge (developer mode) from ~/.opencli/extension/, or if Chrome was never initialized (no User Data directory). Workaround: safely ignore the warn status for reddit, facebook, instagram, and xiaohongshu — the platforms still work. To get the real extension status, run opencli doctor, which queries the OpenCLI daemon on port 19825 and correctly reports Extension: connected.
TroubleshootingWhy does Agent-Reach write credentials outside the home directory on Windows, and how to fix the symlink guard bypass?
In Agent-Reach v1.5.0, credential paths in cookie_extract.py (_sync_xfetch_session, _sync_bird_env) and cli.py (_configure_xhs_cookies, --sync-legacy-twitter, _cmd_uninstall) resolve the home directory via os.path.expanduser("~"). On Windows, expanduser ignores the HOME env var and resolves through USERPROFILE without the symlink-refusal check, so a malicious symlink can redirect Twitter/XHS cookie writes to an attacker-controlled directory, defeating ensure_no_symlink_path/make_private_dir. Fix: add a home_dir() helper in agent_reach/utils/paths.py that returns Path(os.environ["HOME"]) if set, else Path(os.path.expanduser("~")) if valid, else Path.home(), then route ALL credential path resolution through it — make_private_dir/atomic_write_private_text will then raise PrivatePathError on symlinked parents. Keep skill-install paths on os.path.expanduser (tests monkeypatch it). Reference patch: commit b3d53eb. Verify with pytest tests/test_skill_command.py tests/test_cli.py (expect 28 passed).