title: “GitHub双响:Agent Reach给AI装眼睛,cua-driver在后台接管桌面”
我这周翻 GitHub 的时候,撞见两个有意思的东西——它们都不是模型,也不是框架,是给 Agent 补感官和手脚的地基。一个解决「AI 上不了网」,一个解决「AI 动了你的鼠标」。9.1 万星和 2.8 万星,放一起看才明白现在 Agent 的瓶颈在哪。
一、Agent Reach:9.1万星,但它的聪明之处是「什么都不做」
Panniantong/Agent-Reach 是个 Python 工具,定位一句话就能说完:给 Agent 装上读推特、搜 Reddit、刷小红书、看 B站的能力,而且不花 API 钱。
但真正让我停下来看的不是星数,是它的架构决策——它明确声明自己不是包装层。
这句话在 Agent 项目里很少见。大部分同类工具的做法是:自己写一套抓取逻辑,包一层 API 给 Agent 调用,平台一改就全线崩。Agent Reach 反着来:core.py 里写得很清楚,装完之后 Agent 直接调上游工具(twitter-cli、bili-cli、gh CLI、yt-dlp),Agent Reach 自己只保留三件事——选择器、安装器、体检工具、路由器。
所以它的 MCP Server 也特别克制,只暴露 doctor 状态工具,不代理任何抓取动作,而且配置是以只读方式加载的。
体检做得比多数人细
doctor 命令遍历 16 个渠道逐个体检。有个细节我看了两遍:probe.py 的文件头直接写明它要区分三种「看起来一模一样」的失败——
- missing:命令不在 PATH 上
- broken:命令在,但执行不了(最常见是系统 Python 升级后 pipx/uv 装的 venv shebang 全烂了,
which()能找到,执行就报 FileNotFoundError 指向它自己) - timeout/error:能跑,但行为不对
注释里那句「shutil.which() alone is NOT proof of health」是血泪。这三种在我的机器上全中过,尤其是服务器 Python 升级之后,一批 CLI 集体变砖,which 照样告诉你一切正常。
还有个更狠的细节在 backends/opencli.py:它明确标注体检绝不能用 opencli doctor——因为那个命令会自动把守护进程拉起来,是个副作用。健康检查自己带副作用,那体检结果就不能信了。只能走 --version 这种无副作用路径,守护进程真实状态从文档化的回环 /status API 读。
多后端兜底,以及它的代价
每个渠道的 backends 是个有序候选列表,首选挂了自动降级到下一个。推特的顺序是 twitter-cli → OpenCLI → bird CLI (legacy),小红书是 OpenCLI → xiaohongshu-mcp → xhs-cli。README 里给了个真实案例:2026 年 6 月 yt-dlp 被 B站风控全面拦截,直接切 bili-cli,用户零感知。
但零配置是假的。注册表里 16 个渠道,明确写了 Reddit「没有零配置路径:匿名接口已被封」,小红书、Facebook、Instagram 全都要手工导 Cookie。agent-reach configure twitter-cookies 存的只是给 doctor 检查用的,不设环境变量。推特还得手动 export TWITTER_AUTH_TOKEN 和 TWITTER_CT0。
OpenCLI 那条路更挑人:它靠一个 Chrome 扩展复用你已经登录的浏览器会话——这在桌面上一行命令搞定,在纯服务器上根本用不了,没有 Chrome 就没有登录态。
配置落在 ~/.agent-reach/config.yaml,0600 权限、原子写入、拒绝软链接。安全细节做得相当讲究,作者的 CHANGELOG 里还有个 Boss直聘的 bug 记录:修的是「本地旧凭据 + 浏览器未登录」导致 Agent 误以为已登录,绕到反爬滑块的错误分支——修法是加第四层只读探测,直接问浏览器本体有没有登录 Cookie,以浏览器为准。
二、cua-driver:2.8万星,让 AI 在后台操作你的桌面
trycua/cua 是个 Rust 项目,28,063 星、1,989 fork,主语言 Rust,2025 年 1 月开的坑,到现在每天还在提交(我拉的最新 commit 是 10 月 5 日)。
它解决的问题是另一类:Agent 要操作真实桌面软件,但不能抢你的鼠标和键盘。
权限模型是它最较真的部分
Driver 的 README 里有三种模式,写得很死:
standard:默认,无提示,适合常规自动化bounded:只允许经过审查清单里的工具和资源unrestricted:必须显式加--dangerously-bypass-approvals
而且它明确说明:权限模式属于拥有运行时的那个进程,在启动时就固定。cua-driver serve 接收这些标志,cua-driver mcp 和嵌入式宿主不能改。这条设计挡住了一类很常见的漏洞——Agent 自己给自己提权。
一个把「给 Agent 手」讲透了的文档
why-cua-driver-uses-mcp-instead-of-uniffi.md 这篇我推荐所有人读。它干的事是把两个经常被当成一个东西的产品拆开:
| 形态 | 消费者 | 公开形态 |
|---|---|---|
| Cua 作为 Agent 的 MCP 或 CLI | Claude Code、Codex、shell | cua-driver mcp / cua-driver call |
| Cua 作为应用导入的 SDK | Python、TS、Swift、Kotlin | cua_driver / @trycua/cua-driver |
作者的解释很到位:MCP 和 UniFFI 解决的是不同边界,不是 competing protocol choices。给 Agent 用就走可执行进程协议;给应用嵌入就用生成的 FFI 绑定,不需要为了接 Agent 去 import 任何 Cua 客户端。
顺手提醒一个许可证坑
Driver 默认 MIT。但可选的 cua-perception 视觉扩展不是 MIT——它里面的 OmniParser 图标检测器是 AGPL-3.0-only。装它不改变 Driver 的 MIT 授权,但如果你要分发这个扩展或者通过网络提供给用户,可能需要提供 AGPL 对应的源码。作者的警告很直接:不接受 AGPL 组件的组织就别装。
三、说点实话
这两个项目放一起,其实暴露了现在 Agent 生态的真实状态。
第一,最值钱的不是能力,是接入的确定性。 Agent Reach 9.1 万星,卖点不是「能读推特」——那谁都能写。它的卖点是「我替你盯着哪个后端今天还活着」。这活儿又脏又没有技术含量,但没有它,你的 Agent 一半时间在跟 403 死磕。
第二,多后端不是银弹,是欠债。 Agent Reach 每个平台排三四个后端,本质是在给上游随时挂掉这件事兜底。它的 README 自己都写了「Star 这个项目,我们会持续追踪各平台的变化……平台封了我们修」——翻译过来就是:这是个体力活,需要有人一直守着。作者 Panniantong 一个人贡献了 290 次提交,第二名 8 次。这个项目的健康度基本等于一个人的在线率。用之前想清楚。
第三,桌面自动化离「安全好用」还很远。 cua-driver 的权限模型设计得很克制,但现实是:要让它好用,你得在桌面装 Chrome 扩展、开守护进程、授权屏幕和控制输入。开源的是代码,不是那套信任关系。unrestricted 那个开关一旦打开,出事没有回滚。
顺带一句,两个项目都是 MIT,商用没问题——但 Cua 的 AGPL 扩展是真雷区,装之前看清。
如果你只想试一个:Agent Reach 装起来简单得多,pip install 完跑个 doctor 就知道能读什么。但记住它的零配置是相对的——桌面有 Chrome 才好使,纯服务器上你还是得手动配 Cookie。
两个项目都在活跃维护,星数我拉的时候分别是 91,041 和 28,063,具体以仓库为准。
by 数码罗记 · godsun.pro