vercel-labs/agent-desktop
摘要
Vercel Labs 发布了 agent-desktop,这是一个开源的 CLI 和 C 库,让 AI 智能体能够通过操作系统的辅助功能树来读取并操作 macOS、Windows 和 Linux 桌面应用,使用带有元素引用的 JSON 快照,而非像素匹配。
查看缓存全文
缓存时间: 2026/11/02 15:21
vercel-labs/agent-desktop
来源:https://github.com/vercel-labs/agent-desktop
agent-desktop
AI 智能体的 Computer use 能力:通过操作系统的无障碍(accessibility)树读取并操作桌面应用。提供适用于 macOS、Windows 和 Linux 的 CLI 与 C 库。
一次快照(snapshot)会返回 JSON,其中每个智能体可操作的元素都带有一个 ref。智能体对 ref 执行操作,然后再次快照进行验证,全程无需像素匹配;循环逻辑保留在你自己的智能体中。
在 macOS 上,CLI 调用会在每个快照命名空间和二进制构建中复用一个私有的命令宿主(command host)。它保留原生无障碍对象,因此被移除的行不会悄悄地解析到具有相同标识符的存活行上。宿主在空闲 15 分钟后退出。TMPDIR 必须由当前用户所有且权限为 0700;macOS 标准的按用户临时目录即满足此要求。无头(headless)调用仍然禁止前台激活和合成输入。
快照、剪贴板读取、截图、命令输出和调试产物都可能包含私密的桌面内容。请勿将它们写入公开日志或上传。
可选的 JEV helper 会将屏幕描述发送到已配置的模型提供商,它与原生 CLI 相互独立。参见隐私与数据处理。
安装
在 macOS、Windows 或 Linux 上使用 npm 安装:
npm install -g agent-desktop
agent-desktop version
Bun、Yarn 和 pnpm 也可以安装同一个包。该包包含适用于 x64 和 ARM64 的原生二进制文件和平台辅助程序。
如需不依赖 JavaScript 启动器直接执行,请从 GitHub Releases(https://github.com/vercel-labs/agent-desktop/releases)下载对应的原生存档,并将其辅助程序放在可执行文件旁边。
官方的 Homebrew 和 Scoop 软件包正在提交中,尚未进入默认仓库。该仓库不再维护自定义的 Homebrew tap 或 Scoop bucket。
- macOS 需要辅助功能(Accessibility)权限:
agent-desktop permissions --guide。 - Windows 对于与你的终端完整性级别相同的应用无需额外授权。
- Linux 需要用户的图形会话以及
at-spi2-core。
参见安装与权限了解软件包管理器行为、发布归档以及从源码构建的说明。
快速开始
观察、对 ref 执行操作、再次观察。agent-desktop list-apps 返回的任何应用名都可以使用;下面以 macOS 的 Finder 为例。每条命令都会打印一个 JSON 信封(envelope);命令后面附有一个精简后的快照。
agent-desktop snapshot --app Finder -i # 交互元素,每个都带 ref
agent-desktop click @s8f3k2p9:e8 # 对该快照中的 ref 执行操作
agent-desktop snapshot --app Finder -i # 再次观察以验证
{
"version": "2.5",
"ok": true,
"command": "snapshot",
"data": {
"app": "Finder",
"window": {
"id": "w-204749",
"title": "Downloads"
},
"snapshot_id": "s8f3k2p9",
"ref_count": 59,
"complete": true,
"tree": {
"role": "window",
"name": "Downloads",
"children": [
{
"role": "treeitem",
"name": "Documents",
"ref_id": "@s8f3k2p9:e8",
"available_actions": ["Click"]
}
]
}
}
}
- Ref 属于其所在的快照。 单独的
@e8会被拒绝并返回INVALID_ARGS。当 UI 发生变化时,操作会返回STALE_REF或AMBIGUOUS_TARGET:请获取新快照并使用其中的 ref。 - 多个窗口会导致
AMBIGUOUS_TARGET;snapshot会在error.details中列出候选窗口 id。用--window-id传入其中一个。 - 元素密集的应用: 先用
snapshot --skeleton --app Slack -i --compact绘制全局地图,再用snapshot --root @s8f3k2p9:e3 -i --compact深入某个区域。 - 默认无头模式。 Ref 操作通过无障碍 API 执行,不会移动指针或抢占焦点。全局
--headed标志允许物理输入。 - PowerShell。 每个 ref 都要用引号包起来(
'@s8f3k2p9:e8'),因为裸的@token是 PowerShell 的 splatting 运算符。
面向 AI 智能体
二进制文件自带与版本匹配的文档:
agent-desktop skills get desktop # 循环、ref、验证与重试规则
agent-desktop skills get platform # 你所运行操作系统的差异说明
agent-desktop --help # 单条命令的标志说明
从 skills.sh(https://skills.sh/vercel-labs/agent-desktop/agent-desktop)将该 skill 安装到智能体框架中:
npx skills add https://github.com/vercel-labs/agent-desktop --skill agent-desktop
或者将以下内容添加到你的 AGENTS.md:
Use `agent-desktop` to see and operate desktop apps. Before the first use, run `agent-desktop skills get desktop` and `agent-desktop skills get platform`, and follow them.
每条命令都会打印一个信封,包含 ok 字段以及 data 或 error。错误中带有 code、disposition,通常还有 suggestion;仅当 error.disposition.retry 为 safe 时才重试。
契约、错误码和退出码见 docs/json-output.md。
命令
该工具包含 60 个命令名,其中 56 个为可操作命令。另外四个(key-down、key-up、mouse-down、mouse-up)在守护进程能够释放按住的按键或鼠标按钮之前拒绝执行。
| 分组 | 命令 |
|---|---|
| 观察 | snapshot、find、get、is、screenshot、list-surfaces |
| 对 ref 执行操作 | click、double-click、triple-click、right-click、type、set-value、clear、focus、select、toggle、check、uncheck、expand、collapse、scroll、scroll-to |
| 键盘与鼠标 | press、hover、drag、mouse-move、mouse-click、mouse-wheel、key-down、key-up、mouse-down、mouse-up |
| 应用与窗口 | launch、close-app、list-apps、list-windows、list-displays、focus-window、resize-window、move-window、minimize、maximize、restore、open-system-surface |
| 通知 | list-notifications、dismiss-notification、dismiss-all-notifications、notification-action |
| 剪贴板 | clipboard-get、clipboard-set、clipboard-clear |
| 等待 | wait |
| 会话 | session、trace、cursor-overlay |
| 系统 | status、permissions、version、batch、skills |
平台支持
| macOS | Windows | Linux | |
|---|---|---|---|
| 无障碍树 | 是 | 是 | 是(AT-SPI) |
| 点击 / 输入 / 键盘 | 是 | 是 | AT-SPI;X11 / GNOME 键盘 |
| 鼠标输入 | 是 | 是 | X11,--headed |
| 截图 | 是 | 是 | X11 窗口;Wayland portal |
| 剪贴板 | 是 | 是 | 是;Wayland 需要 wl-clipboard |
| 应用与窗口管理 | 是 | 是 | 启动/列出;X11 窗口控制 |
| 通知 | 是 | 是 | GNOME Shell |
Shell 界面(open-system-surface) | 计划中 | 是 | GNOME 托盘、Action Center |
Windows 的 surface 和 launch 说明,以及 Linux 的 X11 和 Wayland 说明见 docs/install.md。agent-desktop skills get platform 会打印你所运行操作系统的完整能力表。
语言绑定
每个版本还为 macOS、Linux 和 Windows 提供 libagent_desktop_ffi,这样程序可以在进程内直接调用该工具,而无需为每条命令启动 CLI。agent-desktop skills get ffi 涵盖入口点、内存所有权和线程规则。
import ctypes
lib = ctypes.CDLL("./lib/libagent_desktop_ffi.dylib")
lib.ad_adapter_create.restype = ctypes.c_void_p
lib.ad_adapter_destroy.argtypes = [ctypes.c_void_p]
assert lib.ad_init(6) == 0 # AD_RESULT_OK,前提是头文件的 AD_ABI_VERSION_MAJOR 与库匹配
adapter = lib.ad_adapter_create()
lib.ad_adapter_destroy(adapter)
开发
每个平台适配器只能在其对应的操作系统上构建,因此请将 cargo 的作用域限定到宿主平台的包。在 macOS 上:
HOST_PKGS=(-p agent-desktop-core -p agent-desktop-macos -p agent-desktop -p agent-desktop-ffi)
cargo test "${HOST_PKGS[@]}"
cargo clippy "${HOST_PKGS[@]}" --all-targets -- -D warnings
在 Windows 上,将该列表中的 agent-desktop-macos 替换为 agent-desktop-windows;在 Linux 上,替换为 agent-desktop-linux。
CONTRIBUTING.md 列出了所有关卡(gate)。从源码构建见 docs/install.md。
文档
| 我想…… | 阅读 |
|---|---|
| 修复安装问题、授权权限、验证下载或从源码构建 | docs/install.md |
| 解析 JSON 信封、错误码和退出码 | docs/json-output.md |
| 作为 AI 智能体驱动该工具 | agent-desktop skills get desktop(skills/agent-desktop/) |
| 了解某个操作系统上的差异 | macOS、Windows、Linux |
| 调用 C 库 | skills/agent-desktop-ffi/ |
| 查阅术语:ref、快照、会话 | CONCEPTS.md |
| 参与贡献并通过所有关卡 | CONTRIBUTING.md |
| 阅读工程规范 | AGENTS.md |
| 从历史 bug 和经验中学习 | docs/solutions/ |
| 查找常见问题的答案 | docs/faq.md |
| 报告安全漏洞 | SECURITY.md |
| 获取帮助 | SUPPORT.md |
许可证
Apache-2.0
相似文章
@yyyole: 以防有人不知道!! 现在任何 Agent 都能直接装上Computer Use! Vercel Labs 正式开源了 agent-desktop,能给任何编程 Agent 加上桌面级的 Computer Use。 它和以前的做法不一样: …
Vercel Labs 开源了 agent-desktop,能让任何编程 Agent 获得桌面级 Computer Use 能力,直接读取系统无障碍树而非截图,支持后台运行和多 Agent 同时操作,兼容 macOS、Windows 和 Linux。
我构建了 agent-browser,但用于操作系统自动化。
作者介绍了 agent-ctrl,这是一个基于 Rust 的开源 CLI 工具,允许 AI 代理通过辅助功能树与原生应用程序 UI 进行交互,从而实现操作系统自动化。
桌面AI代理的新篇章——集成不再是问题。
一家初创公司宣布了一种桌面AI代理的新方法,该方法通过操作系统级别的方式而非计算机使用来与应用程序集成,旨在实现可扩展性和降低成本。
@reagan_hsu:潜在的 Browser Use Desktop(https://github.com/browser-use/desktop…) 用户们好!!如果你用过这款应用,无论喜欢还是…
Browser Use Desktop 是一款用于运行 AI 浏览器智能体的开源应用,支持 Cookie 同步与键盘快捷键,并兼容 Anthropic 和 Codex 模型。
@justinsunyt:介绍 Capy Desktop——在你的所有设备上编排 coding agent 的最佳方式。远程控制并访问本地文件/……
介绍 Capy Desktop,一款在多设备间编排 coding agent 的工具,提供远程控制、本地文件/Shell 访问、云端任务延续,支持 macOS、Windows 和 Linux。