让 AI 帮你在微信里找个人、发一句话。它先截图,认出搜索框,再把鼠标挪过去——窗口被挡住一半,这一下点在了标题栏上。
多数人会把这种失败算到模型头上。可拆开看,问题常发生在前面的观察环节:它根本没看清屏幕上有什么。
Vercel Labs 的 agent-desktop 换了个入口。它不靠截图,直接读操作系统的无障碍树——那是给读屏软件用的结构化接口。GitHub知乎
窗口、按钮、输入框、复选框,在树里都是节点,各自带着角色、名称、状态和可用动作。工具把这棵树序列化成 JSON,再给每个可操作元素发一个 ref,比如 @s8f3k2p9:e8。
Agent 点的是 ref,不是坐标。窗口挪了位置、换了分辨率、调了缩放,只要控件还在,ref 就仍然指向它。

点完再拉一次快照,读控件属性,判断有没有真的勾上、文字有没有写进去。这是读出来的状态,不是猜出来的。
它也不是一个完整的 Agent。项目里没有模型,提供 CLI 和 C 库;什么时候看、看完怎么判断、失败怎么重试,全在调用它的 Claude Code、Codex 那一边。GitHub
默认后台执行:不动鼠标,不抢焦点,人可以同时用电脑。
GitHub 上,11 月 4 日它一天涨了 3791 星。到今天,仓库已经有 1.5 万星。知乎
Rust 写的,Apache-2.0,支持 macOS 13+、Windows 10 1809+、Ubuntu 24.04+,npm 一条命令安装。
但它的边界也很硬:只能看见无障碍树里有的东西。

一组在 Windows 上的实测数据:宿主窗口读出 220 个可操作元素,抖音 115 个,微信 0 个。微信界面是自绘的,UIA 树里只有“窗口 → 分组 → 渲染子窗口”两层,没有一个可交互元素。知乎
截图那条路也被堵死——窗口带了禁止抓屏的系统标记,截出来是一张 1521×1009、只有 6KB 的全白图。
这不是 agent-desktop 的 bug:应用没把界面交给无障碍接口,工具再聪明也读不出来。
游戏、Canvas 画布、大量自绘客户端,都会撞上同一堵墙;网页它也不管,那是同门 agent-browser 的活。
还有一些更细的坑。ref 和快照绑定,快照一刷新旧 ref 就废,报 STALE_REF。macOS 要先给辅助功能权限;传 ref 时 @ 还得小心转义。GitHub

Windows 的 Release 包最近还有人报缺 VCRUNTIME140.dll,双击就静默退出。项目迭代快,Issue 区一天几十条。知乎
更该留意的是“假成功”。有个 Issue 记录,提权窗口的快照读出来是空的,返回里却仍然写着 complete: true。它可能什么都没看见,却告诉你一切正常。GitHub Issues
所以它不适合被当成“装完就替你干活”的软件。它更像一块底座,给已经在搭 Agent 的人用。
判断方法很土:装完先跑 agent-desktop status,确认平台和权限;再对目标软件跑一次 snapshot --app <进程名> -i,看 ref_count。
树里没有的东西,后面怎么调都变不出来。
目标是 Finder、备忘录、提醒事项这类原生应用,通常能跑通“读树—点 ref—再读树”的闭环;如果是微信、游戏、自绘客户端,别在 GUI 上死磕。
还有一句得说在前面:无障碍权限能看到所有窗口的文本、输入框和剪贴板。快照、日志、截图都可能带出私人内容。别在存着重要资料的主力机上长期开着,高风险动作也该留一道人工确认。
过去两年,AI 操作电脑一直在比谁的模型更会看图。agent-desktop 提醒的是另一件事:比看懂更重要的,是看得见。
而它能不能看见,最终不取决于 AI,取决于软件愿不愿意把界面交出来。