不靠截图猜,读系统无障碍树

Vercel Labs 在 10 月 30 日开源了 agent-desktop,给任意会跑 shell 的编程 Agent 装了一只「桌面手」。做法和常见的 computer use 不一样:它不截图、不靠坐标点像素,而是走操作系统的无障碍树——macOS 用 AX API,Windows 用 UI Automation,Linux 用 AT-SPI——把应用的每一个可交互元素读成带引用的结构化 JSON。Agent 点的是引用,不是「大概在屏幕左边三成」。

这个区别很关键。截图路线的问题从来不是不准,而是不可复现、不可解释:模型说点这里,你说不出它为什么点这里。读结构这条路把不确定性收窄了——元素有名字、有角色、有可用动作,失败了有明确错误码,重试有明确边界。界面一变,旧引用会直接报过期或歧义,逼你重新读取,而不是悄悄点错行。它自身不含任何模型,Claude Code、Codex 等都能直接调,观察、动作、验证这个循环留在你自己的 Agent 里。

给编程 Agent 装一只桌面手走系统无障碍树,而非像素macOS AX系统无障碍树非截图Windows UI Automation系统无障碍树非截图Linux AT-SPI系统无障碍树非截图返回结构化 JSON,元素带 ref;不嵌模型Claude Code、Codex 等会跑 shell 的 Agent 都能直接调来源:Vercel Labs 开源(2026-10-30,Apache-2.0)
图|模型看的是结构,不是一张图。

省 token,更省不确定性

省 token 是它最实在的卖点。稠密应用一打开就暴露成千上万个无障碍节点,全量读一遍上下文就废了;它给的骨架模式只读浅层,遇到容器就报一下子节点数量并附一个下钻引用,Agent 觉得这块有戏再用指定根节点把这一片读进同一张快照。开发者自报:在 Slack、VS Code、Notion 这类 Electron 应用上能少花 78% 到 96%;一次苹果地图观察从约 3811 个 token 掉到 273,一个模拟的 52 步任务总量从 19.8 万降到 3.1 万。默认还以无头方式运行,不挪指针、不抢焦点,多个 Agent 可以同时上同一台机器各有一根光标。

不能用的地方也不少。其一,没有无障碍树的应用它完全看不见,自绘界面、部分游戏和部分老软件都在此列。其二,它不自动化网页,Vercel 的意思是网页该用 agent-browser。其三,Chromium 与 Electron 应用冷启动时把 web 树暴露出来要 10 到 25 秒,头一回跑会以为它卡住了。其四,Linux 鼠标输入要 X11 或带界面的模式,Wayland 下读剪贴板还得装额外工具。其五,也是我最在意的一条:快照和剪贴板内容可能含桌面隐私,官方明确提醒别打进公共日志。

稠密应用上,数字很夸张但来自开发者自报,非独立基准稠密 Electron 应用Slack / VS Code / Notion少花 78% 到 96%演示数据苹果地图 3811 降到 273 token52 步任务 19.8 万降到 3.1 万局限:无无障碍树的应用看不见;不做网页(用 agent-browser)Chromium/Electron 冷启动 10 到 25 秒;60 个命令名 56 个可用隐私提醒:快照与剪贴板可能含桌面信息,勿打进公共日志
图|方向我认同:结构比截图可复现、可解释。

方向对,但先别直接压生产

冷水要写清。它没有独立的 computer use 基准,78% 到 96% 这个区间是开发者自报,样本是他自己测的几个应用;60 个命令名里 56 个可用,剩下四个还是空壳,README 里没藏着。这两条决定了它现在的定位:适合拿来试,不适合直接压生产。但方向我认同——当桌面自动化从「猜像素」走向「读结构」,可复现、可解释本身就比再多省一半 token 更重要,尤其对要做审计、要稳定回退的团队。

对工程的意思是,把它当观察与操作的适配器来用:让 Agent 在本地应用之间搬数据、点按钮、读字段,而不是为每台机器再训一套视觉模型。前提是你要用的应用确实有干净的无障碍树,并且愿意为隐私和冷启动的代价买单。