- GUI 自动化
- AI 应用
- 桌面应用
- AI 技能
【免费下载链接】agent-desktop
Agent Desktop gives any agent reliable computer use on the desktop. Built with Rust, it sees any app's real UI structure through OS accessibility trees and operates it — refs stay stable and actions stay safe to retry, instead of guessing from pixels.
agent-desktop 是一款用 Rust 构建的开源桌面自动化框架,它通过操作系统的无障碍树(accessibility tree)让任意 AI Agent 可靠地"看见并操控"电脑上的真实应用。本文将带你完整预览它的路线图(Roadmap):当前已交付的 macOS 能力、即将落地的Windows / Linux 跨平台适配,以及让 AI 宿主原生接入的MCP Server 模式(Phase 4)。无论你是想让自己的 Agent 自动操作电脑,还是关心它何时支持 Windows 与 Linux,这份前瞻都能给你一个清晰的答案。
项目定位:不看像素,直接读懂应用的 UI 结构
传统"截屏 + 视觉模型"的桌面自动化,本质是在猜像素。agent-desktop 走的是另一条路:调用系统原生的无障碍 API,直接拿到应用的真实 UI 树——每个按钮、输入框、菜单项的层级、角色、状态和坐标都结构化地摆在这里。
它的核心工作循环只有四步:请求快照 → 读取原生树 → 返回 JSON + ref 引用 → 按 ref 执行并验证。每个元素都会得到一个快照作用域内的引用(例如@s8f3k2p9:e7),Agent 无需记坐标,直接"点名"操作,且引用稳定、动作可安全重试。
这套设计带来一个直观的好处——token 效率极高。以一个 Slack 窗口为例,普通全量快照需要 3 万多 token,而 agent-desktop 的"骨架概览 + 定点钻取"策略只需要几百 token,阅读量直接减少 98.8%。
这种"先读小地图、再钻细节"的机制由平台无关的核心实现,因此天然可以复用到 Windows 和 Linux——这正是后文跨平台适配能低成本的底层原因。
路线图总览:五阶段,从单平台到全平台
项目把整个演进拆成清晰的五个阶段,每个阶段都以**追加式(additive)**的方式构建在上一阶段的稳定契约之上,从不重写已交付的命令语义。
| 阶段 | 名称 | 状态 | 覆盖平台 |
|---|---|---|---|
| 1 | 基础 + macOS MVP | ✅ 已完成(v0.1.x) | macOS |
| 1.5 | FFI 分发(C 库) | ✅ 已完成 | macOS / Windows / Linux |
| 1.6 | Playwright 级可靠性契约 | ✅ 已完成 | 核心(macOS 承载) |
| 2 | Windows 适配器 | 🕓 计划中(2.0–2.15) | macOS + Windows |
| 3 | Linux 适配器 | 🕓 计划中(3.0–3.15) | macOS + Windows + Linux |
| 4 | MCP Server 模式 | 🕓 计划中 | 全平台 |
| 5 | 生产就绪(daemon / 审计) | 🕓 计划中 | 全平台 |
其中阶段 2 与阶段 3 严格"Windows 先行":Windows 全部子阶段合并进主分支后,Linux 才开始,并直接复用同一套子阶段模板。这种依赖排序保证了跨平台契约始终一致。
Phase 2:Windows 适配——16 个子阶段渐进交付
Windows 不是"一次大 PR",而是拆成2.0 到 2.15 的 16 个依赖有序的子阶段,每个子阶段独立评审、独立合并到feat/windows-adapter集成分支,且每次合并后整个工作区必须保持绿色。
💡 小提示:项目坚持"证据优先"——在写任何 Rust 适配器之前,先用 PowerShell / C# 原始脚本对 Notepad、Explorer、VS Code 做真实探查,把 UIA 的真实行为"钉"进仓库,再据此实现。文档若与实测冲突,以实测为准。
关键能力与对应 Windows API:
| 能力 | 技术 | 说明 |
|---|---|---|
| 读取 UI 树 | IUIAutomation.ElementFromHandle() | 以窗口句柄为根,无头安全 |
| 点击 | InvokePattern.Invoke() | 模式化、不依赖坐标 |
| 设值 | ValuePattern.SetValue() | 无头写入 |
| 展开/折叠 | ExpandCollapsePattern | 原生 UIA 模式 |
| 键盘/鼠标 | SendInput | 仅作显式物理输入兜底 |
| 剪贴板 | OpenClipboard等 | 类型化ClipboardContent |
| 截图 | Windows.Graphics.Capture | 现代逐窗口捕获 + 旧版兜底 |
为什么这样拆?项目为跨平台立了一条不可妥协的**无头优先(headless-first)**约束:普通命令绝不能抢占焦点、弹出窗口或移动鼠标。因此 Windows 采用"UIA 优先、SendInput兜底"——UIA 模式与焦点无关、更可靠,而SendInput受 UIPI 完整性级别限制,只在显式--headed物理输入时才用。
值得注意的是,骨架遍历是平台无关的:核心已拥有整套逻辑(见 crates/core/src/snapshot_ref.rs),Windows 适配器只需约 50 行胶水代码(ControlViewWalker+FindAll+ 每次钻取新建缓存请求)即可让深度 3 骨架、children_count标注、--root钻取在 Windows 上原样工作。
Phase 3:Linux 适配——AT-SPI2 与显示服务器双路检测
Linux 的适配与 Windows一对一镜像(3.0–3.15),只是把 UIA 替换为AT-SPI2 / D-Bus,并额外处理 X11 与 Wayland 的碎片化问题。
| 能力 | 技术 | 说明 |
|---|---|---|
| 读取 UI 树 | atspi Accessible+zbus | 纯 Rust,经 D-Bus 异步调用 |
| 点击 | Action.DoAction(0) | AT-SPI 动作优先于坐标输入 |
| 设文本 | Text.InsertText | 兜底走剪贴板粘贴 |
| 键盘/鼠标 | xdotool(X11)/ydotool(Wayland) | 运行时检测显示服务器 |
| 剪贴板 | xclip/wl-clipboard | 按显示服务器分流 |
| 截图 | PipeWire ScreenCast(Wayland)/XGetImage(X11) | 门户处理用户授权 |
Linux 特有的两个挑战:
- 显示服务器双路检测:运行时判断
$WAYLAND_DISPLAY/$DISPLAY,为输入、剪贴板、截图分别走 X11 或 Wayland 路径;两者都缺失则返回结构化的PLATFORM_NOT_SUPPORTED并给出排查指引。 - 无障碍总线可用性:AT-SPI2 需要
org.a11y.Bus会话总线在跑(GNOME 默认开启)。缺失时会给出"如何启用"的精确指令;Flatpak / Snap 沙箱则需--talk-name=org.a11y.Bus权限,项目会在技能文档里给出现成的 override 配置。
📌 一个细节:Linux 是整个工作区第一个引入异步运行时
tokio的平台(D-Bus 需要异步),Windows 与 macOS 在此之前都保持同步——这体现了"按平台真实需求演进依赖"的克制。
Phase 4:MCP Server 模式——让 Agent 宿主原生接入
如果说 CLI 和 FFI 面向"会调命令的你",那MCP(Model Context Protocol)Server 模式就是面向"已经内置 AI 的宿主"。它给 agent-desktop 加了一层新的 I/O,把全部命令原样包装成 MCP 工具,从而被 Claude Desktop、Cursor、VS Code Copilot、Gemini CLI 等 MCP 兼容宿主直接调用。
设计精髓:MCP crate 里没有任何"逐工具"或"逐平台"代码。它只遍历 CLI 与 FFI 共用的那份确定性命令描述注册表,把每个条目暴露为一个 MCP 工具,并转发到与 CLI 完全相同的execute()函数。于是:
- 每个 MCP 工具与一条 CLI 命令1:1 对应(如
desktop_click↔click @s8f3k2p9:e5) - 未来新增命令(如
watch、text select-range)自动变成 MCP 工具,crates/mcp/零改动 - 测试、调试、文档永不分叉
几个值得关注的工程决策:
| 设计点 | 说明 |
|---|---|
| 启动方式 | agent-desktop --mcp或 stdin 为管道时进入 Server 模式 |
| 传输层 | 主用stdio;另实现Streamable HTTP与 SSE,供云端宿主(如 MS Agent Framework)使用 |
| 能力分级 | 观察类工具自由调用;交互类工具需interactive能力;破坏性工具(如close-app)需destructive能力 + 审计日志 |
| 会话隔离 | 每个 MCP 会话拥有独立内存 RefMap,按session_id隔离,互不串扰 |
| 事件流 | watch推送事件以 MCP 通知形式流式下发,宿主无需轮询 |
| 能力上报 | initialize时声明平台、权限三态、当前实际可用工具集,宿主可先决断是否补权限 |
工具参数也刻意对齐Playwright-MCP 的 ref 惯用法:工具接受{ref: "@s8f3k2p9:e5"}而非裸坐标,让 Agent 在不同 MCP 服务间切换时"无需重学选择器"。
Phase 5:生产就绪(前瞻)
路线图最后一步,把"能用"变成"企业级可靠":常驻daemon(热快照 <50ms)、并发会话多路复用、安全三件套(--dry-run/--confirm/ 追加式审计日志)、对自定义渲染 UI 的OCR 视觉兜底(find --visual)、OpenTelemetry 追踪导出,以及 brew / winget / snap / apt 等原生包管理器分发(安装时做 Sigstore 供应链校验)。
总结:一张路线图看清演进
- 今天:macOS 上已交付 58 个命令名、稳定 ref、骨架钻取与 Playwright 级可靠性(阶段 1 / 1.5 / 1.6 完成),FFI C 库已跨五平台发布。
- 下一步(Phase 2):Windows 通过 16 个子阶段渐进交付,UIA 优先、无头安全、骨架零改动复用。
- 随后(Phase 3):Linux 一对一镜像,AT-SPI2 + 显示服务器双路检测。
- 打通宿主(Phase 4):MCP Server 模式零重复地把全部命令变成 MCP 工具,让 Claude Desktop / Cursor 等原生接入。
- 企业级(Phase 5):daemon、审计、视觉兜底与原生分发。
对开发者而言,最值得记住的一条主线是:核心契约先行、平台只做"适配器实现"、传输层(CLI/FFI/MCP)零重复。这解释了为什么 agent-desktop 能从单平台快速、低风险地走向三平台,并把 AI 宿主接入变成一件"加一层壳"就完成的事。
📖 想深入了解每个子阶段的范围、退出标准与 API 映射,可阅读官方路线图 docs/phases.md,以及 CONCEPTS.md 中对 ref、快照、会话与可操作性的统一术语说明。
- GUI 自动化
- AI 应用
- 桌面应用
- AI 技能
【免费下载链接】agent-desktop
Agent Desktop gives any agent reliable computer use on the desktop. Built with Rust, it sees any app's real UI structure through OS accessibility trees and operates it — refs stay stable and actions stay safe to retry, instead of guessing from pixels.
相关推荐
SQLAlchemy异步编程指南:asyncio集成与最佳实践
SQLAlchemy异步编程指南:asyncio集成与最佳实践 SQLAlchemy是Python中最流行的ORM框架之一,随着异步编程的普及,SQLAlche
如何在Windows、Linux与macOS系统上轻松部署SQLGlot:跨平台安装指南
如何在Windows、Linux与macOS系统上轻松部署SQLGlot:跨平台安装指南 SQLGlot是一个功能强大的SQL解析器和转译器,支持31+种SQL
后端数据库Mamba跨平台支持:Linux/Windows/macOS适配
Mamba跨平台支持:Linux/Windows/macOS适配 概述 Mamba作为新一代状态空间模型(State Space Model),在序列建模领域展
人工智能深度学习基础模型
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考