
我折腾过不少让 AI 操作电脑的方案,绕来绕去,卡住的地方几乎都一样:模型对着截图猜坐标,点下去偏几个像素,按钮没按到,流程就断了。agent-desktop 换了一个思路,不让模型看图猜位置,而是直接读系统给出的无障碍结构树——界面上每个能点的东西都有一个编号,模型按编号下指令,完事再重新读一遍确认。这一步改动不大,稳定性却完全是两回事。
它的用法也直白。装好之后先列出当前能操作的应用,再对某个应用做一次快照,返回的是结构化的 JSON,里面每个可交互元素都带编号。点某个编号,改某个输入框的值,滚到某个区域,都是按编号来。操作完再快照一次,看状态是不是真的变了,变了才算数。这种“看一眼、动一下、再看一眼”的循环,恰好就是人操作电脑时的习惯,只不过以前靠眼睛,现在靠结构树。

我最喜欢的一点是它默认不动你的鼠标和焦点。很多桌面自动化工具一跑起来,整个屏幕就被接管了,你没法同时干别的。agent-desktop 默认走无障碍接口在后台操作,不抢焦点、不动指针,只有明确要求时才允许真实输入。这对要把 agent 挂在自己工作机上跑的人来说很关键:它在后台帮你点,自己还能继续写代码。
还有一处设计很克制:每次命令都是独立进程,输出统一是一份 JSON 信封,成功给数据,失败给错误码、能不能重试和建议。写胶水代码的人都懂这份克制的价值——不用再猜输出格式,不用再用正则从日志里抠结果。出错时它会明确告诉你是编号过期了、目标不唯一了,还是参数不对,照着提示处理就行,不用靠玄学重试。

但有几个坑,得提前说清楚。第一,编号只属于某一次快照,界面一变就过期,拿着旧编号去点会被拒绝,必须重新快照。这不是 bug,是设计,但写循环时一定要把“过期就重拍”写进去。第二,应用窗口一多,目标可能不唯一,得先指定窗口再操作。第三,界面元素特别密的应用,先用骨架模式画个大地图,再钻进某个区域细看,一上来就全量快照会把上下文撑爆。第四,Windows 的 PowerShell 里编号要加引号,不然会被当成别的语法。第五,快照、剪贴板、截图里都可能含私人内容,别随手贴进公开日志或上传。
平台覆盖是它另一个加分项:macOS、Windows、Linux 都能用,核心是 Rust 写的,许可证是 Apache-2.0。macOS 要先给无障碍权限,Windows 对同级应用基本不用额外授权,Linux 要走图形会话和 AT-SPI,Wayland 下有些能力会受限。除了命令行,它还提供 C 库,程序可以直接在进程里调用,不用每次都起新进程。

所以它适合谁?我觉得最适合三类人:给 agent 做电脑操作能力的开发者,终于不用再维护一套截图猜坐标的脆弱逻辑;做桌面自动化和回归测试的人,结构树比像素稳定得多;还有想在本地跑 agent 助手、又不想屏幕被抢走的人。反过来,如果你的场景必须精确到像素,比如图形软件里的拖拽选区,或者目标应用根本不提供无障碍信息,那它就不是合适的工具,先拿自己的目标应用实测一遍再决定。
上手建议也简单:先装上,列出应用,对一个常用应用拍一次快照,手动点一个编号,再看一次快照确认状态变了。十分钟走通这个循环,你就知道它适不适合你的场景了。