让 AI 替你点鼠标操作电脑,现在多了一条不看屏幕的野路子。2026 年 10 月 30 日,Vercel Labs 在 Apache-2.0 协议下发布了开源桌面操控工具 agent-desktop 的 v1.0.2 版本。它完全抛弃了屏幕截图和视觉大模型,直接读取操作系统的原生无障碍树(Accessibility Tree),把桌面软件拆成带动作引用(ref)的 JSON 快照喂给 Agent。工具切中了终端 Coding Agent 缺手脚的痛点,但宣传里最高省下 96% Token 的账单,你得先看清它的分母是谁。

56 个命令搭起的无头积木,怎么给 Electron 刮骨

这个项目最早住在个人开发者仓库 lahfir/agent-desktop 里,随后被收编并重定向进 Vercel Labs 官方名下。它延续了 Vercel 在浏览器端做 agent-browser 的思路,用 Rust CLI 和 C 语言库做成纯粹的 Unix 命令行积木。它不内置大模型,也不自己维护循环,每次调用只吐出一段 JSON 就退出,把观察、行动、验证的闭环完全交给上层的 Claude Code 或 Cursor。

60 个命令里只有 56 个能干活,4 个长按命令被锁死(示意图)
60 个命令里只有 56 个能干活,4 个长按命令被锁死(示意图)

为了跨平台而且不吃 GPU,agent-desktop 在底层做了一层严格隔离:核心库只通过统一的接口标准通信,每个编译出来的二进制文件只负责驱动一个系统——在 macOS 走 AX API,在 Windows 走 UI Automation,在 Linux 走 AT-SPI。目前官方文档列出的支持范围覆盖了 macOS 13+、Windows 10 1809+ 或 Server 2019+、Ubuntu 24.04+(含 x64 与 ARM64 架构)。它的命令表里有 60 个名字,但 key-down、key-up、mouse-down、mouse-up 这 4 个长按类输入命令目前拒绝执行,实际能干活的是 56 个命令。

agent-desktop 渐进式无障碍树操控管线 1. 系统无障碍层 macOS AX API Windows UIA Linux AT-SPI 2. 3层骨架快照 --skeleton 截断深层 --root 局部按需下钻 过滤数千冗余节点 3. 严格引用校验 绑定 @快照ID:元素 UI变动即报 STALE 5000ms 自动等待 4. 无头后台执行 不移鼠标不抢焦点 返回 JSON 状态信封 safe 标记指导重试

直接读系统无障碍树有个老毛病:碰上 Slack、VS Code、Notion 这类密集型 Electron 应用,底层动辄暴露出几千个节点,全量转储瞬间就能把模型的上下文撑爆。agent-desktop 的解法是渐进式骨架遍历:

  • 加上 --skeleton 参数后,快照只往下读 3 层深度,深层容器只报告子节点数量并给一个下钻引用,需要看哪块再用 snapshot --root 局部展开。
  • 每个可操作元素都会分到一个像 @s8f3k2p9:e8 这样带快照 ID 的完整引用;裸写 @e8 会被直接拒绝,界面一变就会返回过期或目标模糊错误,绝不瞎猜。
  • 所有动作默认走无头后台模式,不挪动你的物理鼠标、不抢当前窗口焦点,而且每次操作会自动等待最多 5,000 毫秒直到目标可见可用。
对比维度agent-desktop (Vercel Labs)Claude Computer UseOpenAI Computer UseMicrosoft UFO²
定位形态CLI 与 C 语言库工具API 客户端工具集API 工具完整 Agent 框架
UI 感知方式系统原生无障碍树屏幕截图截图或代码接口UIA + 视觉混合
鼠标焦点占用默认无头后台,不抢焦点抢占,像素级点击抢占,像素级点击GUI + API 混合
单次观察成本273 tokens (Apple Maps 骨架自测)约 1,000 至 1,800 tokens/图未公开未公开

省下 96% Token 的账,分母到底是谁

看到上面那张对比表,十个读者有九个会觉得:用 Vercel 这个工具替代 Claude 截图方案,能省掉 78% 到 96% 的 Token。我更在意的是这组数字背后的对比基准错位。

省下 96% Token 的分母是全量无障碍树,不是屏幕截图(示意图)
省下 96% Token 的分母是全量无障碍树,不是屏幕截图(示意图)

开发者在 Hacker News 社区披露的自测数据里,78% 至 96% 的缩减比例,拿来对比的分母是完整无障碍树转储(full-tree dumps),根本不是 Claude 或 OpenAI 的屏幕截图。比如在 Apple Maps 里,单次观察从全量树的 3,811 tokens 降到了骨架树的 273 tokens;一个 52 步的模拟任务从 198k 降到了 31k tokens。这证明的是骨架折叠比傻瓜式全量导出省钱,而不是比视觉截图省下九成开销。

单次观察与初始化的 Token 消耗量级对照 Apple Maps 3层骨架快照 273 tokens (自测) Claude 单张屏幕截图 1,000 - 1,800 tokens Apple Maps 全量无障碍树 3,811 tokens (自测分母) Claude 工具集定义附加 约 4,500 tokens/请求

跟纯视觉派算细账,结论要复杂得多。Anthropic 官方文档写得很明白,Claude 每次截图大约消耗 1,000 到 1,800 个输入 Token,而且每次请求还要额外背上约 4,500 个 Token 的工具集定义开销。单看一次静态观察,273 tokens 的骨架快照确实比截图便宜一大截。但一旦进入深层嵌套的复杂软件,Agent 为了找一个按钮需要反复执行 --root 局部下钻,碰上 UI 刷新报错还得重抓快照;几轮折腾下来,累计的 JSON 文本账单未必永远比一张截图便宜。更何况,目前项目仓库里的基准测试(locator benchmark)只验证了合成 Chromium/Electron 树上的内部定位器延迟和正确性,还没有跑过端到端的真实任务成功率对比。


当底层 API 开始撒谎,结构化路线撞上南墙

把桌面操控全押在系统无障碍接口上,听着像抓住了确定性的尚方宝剑。但工程老手都知道,桌面操作系统的历史包袱,从来不会因为你套了一层 Rust 外壳就自动消失。

无障碍接口也会撒谎,返回成功但界面毫无反应(剖面示意)
无障碍接口也会撒谎,返回成功但界面毫无反应(剖面示意)
结构化接口省下了看图的钱,却省不掉跟残缺底层斗智斗勇的命。

先看跨平台的水位差。虽然 v1.0.2 的文档把三大系统列得整整齐齐,但在早期 Hacker News 的 Show HN 发布帖里,作者曾坦承当时只有 macOS 真正可用,Windows 和 Linux 还在路线图上。即便现在补齐了编译支持,Linux 端的运行依然强依赖图形会话和 at-spi2-core,而且在 X11 与 Wayland 两种显示协议下存在明显的功能表现差异。指望一套命令在三端拿到毫无差别的丝滑体验,现在还太早。

更要命的是无障碍树本身的失明与撒谎。《韩非子》里讲,一手独拍,虽疾无声。agent-desktop 的引用校验设计得再严密,也得桌面应用主动配合写好无障碍标签才行;碰上自绘 UI 控件、游戏界面或者画布类应用,无障碍树直接就是瞎的。哪怕在支持最成熟的苹果生态里,agent-desktop 官方的 macOS 技能指南也专门写了一条警告:系统的 AX API 有时候会明确返回操作成功,但界面上其实毫无反应。这意味着所谓的确定性操作依然存在假阳性静默失败,Agent 每次点完按钮,还是得乖乖再抓一次快照来验尸。

  • 风险.遇到未暴露无障碍标签的自定义画布控件,或碰上 macOS AX API 返回成功但界面未响应的假阳性时,纯无障碍树方案会直接卡死或空转。

回看过去两年各家在 OSWorld 基准上的死磕:2024 年 10 月 Anthropic 拿纯截图方案的 Claude 3.5 Sonnet 跑出 15 步 14.9%(50 步 22%)的成功率,到 2025 年 3 月 OpenAI Operator 把成绩推到 38.1%,视觉派虽然笨重烧钱,胜在只要人眼能看见就能点。这就像当年移动互联网早期,大家争论该做纯原生 App 还是 HTML5 混合开发,最后活下来的大厂全选了原生壳子嵌 Web 页面的折中路子。

Vercel Labs 这次把个人项目收编成官方轮子,还顺手塞进了 launch --cdp 这种能直接给 Electron 网页内容打开调试端口、联动自家 agent-browser 的贴心暗门,算盘打得很响。它最直接的受益者是写代码的终端 Agent 开发者——不用配 Docker 虚拟桌面,也不用调昂贵的视觉接口,一行 npm install -g agent-desktop 就能让纯文本模型在后台静默操控本地软件。但到了真正的工业级场景里,先用 273 tokens 的骨架树低成本探路,一旦撞上无障碍死角或接口假阳性,立刻切回视觉截图兜底,才是接下来 OSWorld 跑分榜和生产环境里最值得盯紧的收敛方向。