Vercel Labs 在 10 月 31 日放出了 agent-desktop,作者 Chris Tate 给它的定位是"给整台电脑用的 agent-browser"。它是个命令行工具,跑在 macOS、Windows 和 Linux 上,让编码 Agent 看见并操作桌面应用。
关键点在于它怎么看屏幕:不截图,读操作系统的无障碍树——也就是屏幕阅读器本来就在用的那套结构。每个控件以 JSON 返回,带一个 ref,Agent 用这个 ref 去点击、输入、读取。
和截图方案的根本区别
截图 + 坐标的做法,本质上是让模型做视觉定位,分辨率一变、窗口一动就失效。无障碍树给的是结构:这是什么控件、叫什么名字、当前什么状态。Agent 拿到的不是像素,是语义。
它和 agent-browser 是同一个思路的两个方向。agent-browser 停在浏览器里,agent-desktop 指向整个桌面。ref 的形状也因此不同:桌面的 ref 带快照 id,像 `@s8f3k2p9:e8`,裸的 `@e8` 会被拒绝。
这个设计是有原因的。UI 会变,ref 必须绑定产生它的那一次快照。如果界面已经改过,动作会返回 `STALE_REF` 或 `AMBIGUOUS_TARGET`,正确做法是重新快照、拿新 ref,而不是重试旧的那个。多个窗口分不清时,错误里会列出候选的 window id,用 `--window-id` 指定。
默认不碰你的鼠标
默认是 headless:ref 动作走无障碍 API,不移动指针、不抢焦点、不合成按键、不使用剪贴板。要物理输入得显式加 `--headed`。文档明确说,别为了从 headless 失败里恢复就随手开 headed——那会改变整个语义。
一个实际的坑:PowerShell 里 `@` 是 splat 操作符,ref 必须加引号写成 `'@s8f3k2p9:e8'`,bash 和 cmd 不需要。
安装与性能
标准装法是 `npm install -g agent-desktop`。postinstall 会把 Node 启动器替换成指向原生二进制的链接,每次调用大约 21 毫秒;如果包管理器默认拦安装脚本(npm 12 就拦),则保留 Node 启动器,每次约 146 毫秒——差了七倍。可以 `npm install-scripts approve agent-desktop` 放行,或者装的时候加 `--allow-scripts`。
二进制本身是 Apache-2.0,Rust 写的,要求 Node 18 以上,x64 和 ARM64 都有预编译包。
三个平台各自的现实
**macOS**:辅助功能权限要授给"启动 CLI 的那个 App"——Terminal、iTerm2、VS Code 之类,而不是只给二进制。截图和 `--screenshots` 需要录屏权限。macOS 27 之后这个列表改名叫 Device Control and Data Access。缺权限后命令宿主会重启,下一次调用就能看到新授权,不用重启整个 App。
**Windows**:需要 Win10 1809 或 Server 2019 以上。和终端同完整性级别的应用不需要额外授权;管理员权限的窗口能被读,但只有提权的 Agent 才能给它发输入,这条边界是 UIPI。二进制没有签名,浏览器下载可能触发 SmartScreen,杀软也可能隔离——走 npm 装就不会。锁屏、UAC 安全桌面、Session 0、Server Core、别人的会话,全都不支持。
**Linux**:主要实测目标是 Ubuntu 24.04 以上配 GNOME 46。Ubuntu 22.04 的 ATK 桥在 `Action.GetActions` 上会崩。X11 和 Wayland 都能用但行为不同:X11 的按键走 XTEST,Wayland 走 Mutter 的 RemoteDesktop;Wayland 下剪贴板要 wl-clipboard,应用指针输入被拒,原生窗口控制不支持,`focus-window` 只能用 X11。
作者自己在一台 Ubuntu 24.04 的 XFCE/X11 上试了。`at-spi2-core` 已经装好,但从非图形会话的 shell 里跑,必须先把 `DISPLAY` 和 `DBUS_SESSION_BUS_ADDRESS` 从图形会话复制过来,否则看不到任何应用。这一点很容易误判成"装坏了"。
怎么接进 Agent
没有官方 MCP server,也没有给 Claude Code、Codex、Cursor 的插件配置。它给的是 skill 加 AGENTS.md 里的一段话:先跑 `agent-desktop skills get desktop` 和 `skills get platform`,按里面说的做,然后任何能执行 shell 的 Agent 都能调用。
判断
把 computer use 从"看像素"改成"读结构",方向是对的:更省 token、更稳、可解释。代价是它只能操作那些把信息暴露到无障碍总线上的控件,Electron、Qt、Chromium 系的应用往往需要额外的启动参数才会出现。它也不是模型,只是一双手——决定做什么的仍然是上面那个 Agent。
内容与图片版权归原作者所有 · 原文: https://flaviocopes.com/agent-desktop/