Vercel 开源跨平台桌面 Agent CLI
Vercel Labs 发布 Apache-2.0 许可的 Rust 工具 agent-desktop,为 AI Agent 提供 macOS、Windows 和 Linux 桌面操作能力。它读取系统无障碍树,并通过稳定引用定位操作目标。
AI 深度解读
Vercel Labs 开源的 agent-desktop,给 AI 编程助手补上了一种操作桌面应用的方式:读取操作系统提供的控件结构,再按元素引用执行动作,不依赖截图识别。它是工具,不是自带模型的桌面 Agent。
这条路线值得程序员关注,因为它可能降低桌面自动化的上下文开销,还能在默认模式下避免抢鼠标。不过,原文最亮眼的节省 token 数据来自开发者自报,能操作哪些软件,也取决于应用是否提供可访问性树。
不看截图,Agent 怎么知道该点哪里
agent-desktop 由 Rust CLI 和 C library 组成,没有内置 LLM,也没有 GUI。每次命令输出一个 JSON 封装结果后退出,观察、操作、验证的循环由调用它的 Agent 负责。具备 shell 调用能力的编程助手,可以把它接进自己的工作流。
它读取的是可访问性树(accessibility tree)。这原本是操作系统向辅助技术暴露的界面结构,包含按钮、输入框等元素。Agent 拿到结构化快照后,可以通过元素引用操作控件。
架构上,CLI 或 C library 调用 agent-desktop-core,核心层只通过 PlatformAdapter trait 接触系统,再由对应平台实现访问原生 API。原文明确列出了 Windows 的 UI Automation,没有展开另外两个系统的 API。核心层不导入平台 crate,每个二进制只驱动一个操作系统。
真正影响可靠性的,是引用与错误处理规则。元素引用形如 @s8f3k2p9:e8,其中带着快照 ID;只传 @e8 会收到 INVALID_ARGS。界面变化后,动作可能返回 STALE_REF 或 AMBIGUOUS_TARGET,Agent 应重新获取快照。
它把「目标不确定」变成明确错误,而不是猜一个控件继续执行。
每个错误还带有 disposition,只有标为 safe 时才应重试。引用动作会自动等待目标可见、可用且稳定,最长 5,000 ms。不过,这些机制解决的是目标定位与执行条件,不能直接证明整个任务能完成。
省 token 的关键,是先看骨架再展开
复杂应用的可访问性树可能包含数千个节点。一次全塞给模型,结构化数据也会很贵。
agent-desktop 的 --skeleton 快照只读取 3 层。被截断的容器会提供 children_count 和 drill ref,Agent 再通过 snapshot --root 展开目标区域,并将结果纳入同一快照。相当于先看目录,找到目标区域后再读正文。
开发者报告,在 Slack、VS Code 和 Notion 中,相比完整树转储,这种方式减少了 78% 到 96% 的 token。Apple Maps 的单次观察从 3,811 tokens 降到 273;一个模拟的 52 步任务,从 198k 降到 31k tokens。
这些数字说明分层读取有潜力,但它们都是自报结果,没有独立的 computer-use 基准测试。原文也没给出任务成功率、总耗时或不同应用下的稳定性对照。
操作方式同样有区别:默认引用动作走可访问性 API,不移动指针,也不抢焦点,用户可以继续使用机器。需要物理输入时,可加全局 --headed 参数。这里的默认无头操作,并不代表 Linux 可以脱离图形会话运行。
与截图路线相比,它减少了对视觉模型的依赖。原文引用 Anthropic 文档称,每张截图约消耗 1,000 到 1,800 个输入 tokens,工具集定义还会为每次请求增加约 4,500 个输入 tokens。OpenAI computer use 同样可返回 click、type、scroll 动作,由调用方执行。
但不能拿 Apple Maps 的 273 tokens,直接证明它全面胜过截图方案:观察内容、任务和环境都没有对齐。Microsoft UFO² 也使用 UI Automation,只是它属于完整的 Windows Agent 框架,定位不同。
接入不复杂,系统条件要先满足
原文称,1.0.2 于 2026 年 10 月 30 日发布,采用 Apache-2.0 许可,共有 60 个命令名,其中 56 个可操作;剩余命令的状态没有展开说明。
它支持 macOS 13+、Windows 10 1809+ 或 Server 2019+、Ubuntu 24.04+,覆盖 x64 和 ARM64,使用普通 CPU,不要求 GPU。
安装命令是 npm install -g agent-desktop,也支持 Bun、Yarn 和 pnpm,npm 包包含原生二进制。安装完成后,还要满足平台条件:
- macOS 通过
agent-desktop permissions --guide引导授予 Accessibility 权限。 - Windows 操作与终端处于相同完整性级别的应用时,不需要额外授权。
- Linux 需要图形会话和
at-spi2-core。
Agent 可以通过 agent-desktop skills get desktop 获取随包文档,skills.sh 也列出了对应 skill。需要进程内调用时,C library 可供 Python、Swift、Go、Ruby 和 Node 宿主接入。对于 Electron 网页内容,launch --cdp 可以开放 DevTools 端口,交给 agent-browser 操作。
这也划出了边界:没有可访问性树的应用,当前方案无法覆盖。
我的判断
我看好的是「结构化定位、严格失败、按需展开」这组设计。相比单纯让模型从截图里猜坐标,它给调用方提供了更明确的状态和恢复路径,也方便控制每轮送进模型的信息量。
但省 token 只是成本的一部分。多次展开会不会增加调用轮数,目标应用暴露的树是否完整,实际任务能否稳定结束,原文都没有给出充分数据。78% 到 96% 应当视为特定应用下的经验结果。
选型首先要看目标应用能暴露什么,再看模型如何调用。
对于已经能通过 DOM 和浏览器自动化完成的网页流程,没有必要仅因新工具发布就迁移。桌面原生界面、Electron 外壳与网页内容混合的流程,更值得评估这条路线;遇到没有可访问性结构的界面,仍需考虑其他办法。
能拿来做什么
- 如果你准备让 AI 编程助手操作 VS Code 或其他桌面工具,先检查目标控件是否出现在快照里,再用一个短任务验证定位、执行和结果确认。
- 在 Node 驱动的 Agent 中,明确处理
STALE_REF、AMBIGUOUS_TARGET和 disposition,将重新观察与安全重试写进流程,避免所有错误都原样重跑。 - 面对节点密集的应用,先试
--skeleton,再用snapshot --root展开局部,同时记录整个任务的 token、调用次数和成功情况。 - 如果正在自动化 Electron 应用,可以评估可访问性操作与
launch --cdp、agent-browser 的组合,按目标控件所在层选择入口。