-
auo4 AI 观察 用户
Vercel 开源 agent-desktop:让 AI 智能体用「无障碍树」操作电脑,不再靠截图猜像素
过去几年,让 AI 智能体"操作电脑"的主流做法,是用视觉模型看截图、再把点击位置换算成像素坐标:截一张图、发给模型、问它"发送按钮在哪"、然后在 (x, y) 点一下。它能用,但很脆——UI 一变、窗口一缩放、或者模型幻觉出一个并不存在的按钮,整个流程就崩了。每一张截图还要消耗 1000 到 1800 个输入 token。
Vercel Labs 在 10 月 31 日开源了一个思路完全不同的工具 agent-desktop,把这件事重做了一遍。
不看图,读"控件清单"
agent-desktop 是一个用 Rust 写的命令行工具和 C 语言库,核心做法是:读取操作系统原生的无障碍树(accessibility tree),而不是去截图。
它支持 macOS 13 及以上(通过 AX API)、Windows 10 1809 及以上(通过 UI Automation)、以及 Ubuntu 24.04 及以上(通过 AT-SPI)。当你对一个应用拍一次"快照"(snapshot),它会把界面返回成一份 JSON,界面里每一个可交互元素都被赋予一个稳定且唯一的引用编号(ref),格式类似 @s8f3k2p9:e8。
智能体不再对着像素点坐标操作,而是直接对那个 ref 说"点这个",然后再拍一次快照确认状态确实变了。Vercel 的 Chris Tate 把它形容为"agent-browser,但是给你整台电脑用"——它是 Vercel 此前 agent-browser(无头浏览器控制)思路从网页向整个桌面的延伸,二者都给智能体结构化的元素引用,而不是像素匹配。
成本差了一个数量级
这套架构最直观的好处是 token 成本。无障碍树快照每次大约只要 273 个 token,而截图方案要 1000 到 1800 个。如果一个工作流要反复检查应用状态 50 次,那就是约 1.4 万 token 对 7.5 万 token 的差别——这个量级差异,直接决定了哪些智能体工作流能在规模上跑起来。
比成本更重要的是两个截图做不到的特性。一是稳定性:ref 绑定的是带名字的界面元素,而不是像素位置,按钮挪了位置,ref 依然有效。二是并行:多个智能体可以同时操作同一个应用,各自用各自的"光标"。截图类工具基本不支持这种用法。
发布节奏很快
agent-desktop 10 月 31 日首发,三天后的 11 月 3 日就推出了 v1.1.0,11 月 5 日又上了 v1.2.0,节奏相当紧凑。
v1.1.0 主要修了一批平台相关的问题:Windows 覆盖层在退出时崩溃、双坐标缩放、以及启动黑屏都得到了修复;macOS 端现在能触达 Dock、菜单栏状态项和系统面板;同时新增了 type --interval-ms 让打字节奏更稳,并在三个平台上都改进了 ref 的重新识别逻辑。v1.2.0 则加入了内置的 MCP server,把每条叶子命令都暴露成一个工具(例如 desktop_snapshot),方便接入支持 MCP 的智能体框架。
在 v1.1.0 下,如果一个旧 ref 失效、或者 ref 匹配到多个相同控件,工具会返回 AMBIGUOUS_TARGET 或 STALE_REF——它自己会告诉你"看错了,再确认一下",而不是闷头点错地方。
怎么用
安装只有一条命令:npm install -g agent-desktop。macOS 需要通过 agent-desktop permissions --guide 授予辅助功能权限;Windows 基本开箱即用;Linux 则需要图形会话里装好 at-spi2-core。
它的核心循环是 observe-act-verify:先 agent-desktop snapshot 拿到 JSON、智能体读懂后决定动作、对着 ref 操作、再拍一次快照核对。要接入 Claude Code、Codex 或任何支持 shell 的智能体,可以执行 npx skills add https://github.com/vercel-labs/agent-desktop --skill agent-desktop,把工具文档直接加载进智能体上下文;agent-desktop skills get desktop 还能列出全部约 56 条操作命令。
它的边界很清楚
agent-desktop 读的是读屏软件用的那棵无障碍树。凡是读屏软件支持得好的应用——VS Code、Slack、现代浏览器、以及大多数原生 macOS 和 Windows 应用——在这里都表现良好。但那些自己画 UI、忽略无障碍 API 的程序,根本暴露不出可用的树,对 agent-desktop 来说就是"隐形"的。
Linux 是最短的那块板:AT-SPI 的覆盖度因应用而异,社区已有测试发现,在某些 Linux 环境下 list-windows 会为明明在屏幕上的窗口返回空数据,必须加 --activate 启动应用快照才不报错;还有测试显示 set-value 改了未保存的缓冲区、但磁盘上的文件没变,关窗口时还会卡在"是否保存"的弹窗上。如果你的目标是现代、结构良好的软件,agent-desktop 是更好的架构;如果是没有无障碍支持的 legacy 应用,截图式方案仍是兜底。
另一个要留意的点是安全。README 明确警告:快照、剪贴板读取、截图、命令输出和调试产物"可能包含私人桌面内容";批量 JSON 文本会出现在进程参数里,所以密钥要单独用 --stdin 传。独立评测还指出,该项目目前没有文档化的沙箱,也没有讨论来自屏幕上文字的提示注入风险,作者本人建议把它放在带测试数据的虚拟机里跑,而不是日常使用的机器上。好的一面是,它默认就是无头(headless)操作——ref 动作不会移动鼠标也不抢焦点,除非显式加 --headed;密码字段有保护,报错是 fail-closed(失败即停止),动作记录是 append-only 的。
为什么值得关注
agent-desktop 把"桌面电脑操作"这件事,从"模型猜像素"换成了"结构化、稳定、便宜"的数据模型——这正好是一个智能体循环最需要的形态。它在 GitHub 上几天内就冲到一万三千到一万六千颗星,一度登上趋势榜第一,说明开发者对"让智能体安全地动真格地操作桌面应用"有真实需求。
它当然不是万能的:不发布无障碍树的应用它看不见,Linux 覆盖参差,也没有沙箱兜底。但对于那些结构良好的现代软件,从截图切换到结构化 ref,不是边际优化,而是一次工作流的重设计。
(本文综合 Vercel Labs 官方仓库、byteiota、theterminal.space、auxfirst 等公开技术报道整理。)