- 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 构建的桌面 computer use 自动化工具:它通过操作系统的无障碍树(accessibility tree)让任意 agent 看懂并操作真实桌面应用,而不是靠截图和像素猜测。当自动化流程中动作失败时,agent-desktop 会返回结构化的错误代码(如STALE_REF、AMBIGUOUS_TARGET)。本文是一份面向新手的错误代码诊断清单,逐条解释每种错误的含义,并给出最快的恢复方法。
一、读懂错误信封:3个字段快速定位问题 📌
agent-desktop 的所有命令都返回统一的 JSON 信封。成功时"ok": true,失败时错误对象形如:
{ "ok": false, "command": "click", "error": { "code": "STALE_REF", "message": "...", "suggestion": "..." } }排错时只需按顺序看三个字段(错误码定义见 error_code.rs):
| 字段 | 作用 | 使用方式 |
|---|---|---|
code | 机器可读的错误代码 | 对照本文清单确定故障类别 |
suggestion | 官方恢复建议 | 直接按提示执行下一步 |
details | 结构化上下文(如候补元素、最后观测状态) | 判断"到底发生了什么" |
disposition.retry | 本次操作是否已送达 | safe才能重试,否则盲目重试会重复点击/重复提交 |
所有内置建议文本集中定义在 adapter_error.rs,恢复提示结构见 recovery_hint.rs。
二、12种高频错误代码完整清单
| 错误代码 | 含义 | 最快恢复方法 |
|---|---|---|
PERM_DENIED | 无障碍/屏幕录制权限未授予 | 系统设置 → 隐私与安全性 → 辅助功能中放行启动 agent 的应用 |
ELEMENT_NOT_FOUND | 元素无法解析到实时 UI | 重跑snapshot,用新的 ref 重试 |
APP_NOT_FOUND | 目标应用未运行 | 先用launch启动应用 |
ACTION_FAILED | 动作被拒绝或结果与预期矛盾 | 查disposition.retry与details.post_state,不要重复执行 |
ACTION_NOT_SUPPORTED | 该元素不支持此操作 | 换用其他命令或语义动作 |
STALE_REF | ref 已过期,无法重新定位元素 | 重跑snapshot(建议--skeleton)获取新 ref |
AMBIGUOUS_TARGET | 旧 ref 身份匹配到多个候选元素 | 重拍快照,选择更具体的 ref |
SNAPSHOT_NOT_FOUND | 快照 ID 缺失或已过期 | 重新snapshot,使用返回的新 ID |
POLICY_DENIED | 交互策略拦截了物理/有头操作 | 如确需物理交互,用显式 mouse/focus 命令(CLI 加--headed) |
APP_UNRESPONSIVE | 应用无响应,存活探测也失败 | 等待应用恢复,用新快照检查状态后再决定 |
WINDOW_NOT_FOUND | 没有匹配的窗口 | 核对应用名,用list-windows确认真实窗口 |
TIMEOUT | 等待或可操作性条件在时限内未满足 | 查看details.kind与最后报告,再决定加大预算 |
此外还有 4 个辅助代码:PLATFORM_NOT_SUPPORTED(该平台未实现,换平台适配器)、INVALID_ARGS(参数错误,检查命令语法)、NOTIFICATION_NOT_FOUND(通知索引失效,重跑list-notifications)、INTERNAL(读message/suggestion,重试一次,持续失败说明环境问题)。
三、4个最容易卡住的错误:重点诊断 🎯
STALE_REF / SNAPSHOT_NOT_FOUND:refs 过期,重新拍快照
这是新手最常遇到的错误。原因很简单:ref 是快照作用域内的身份标识,UI 在你拍照和点击之间发生了变化,旧 ref 就"过期"了。
恢复方法只有两步:
- 重新执行
snapshot(推荐snapshot --skeleton,先拿骨架概览,token 消耗可降 98.8%); - 用新快照返回的 ref 重试原操作。
骨架概览如何把一次完整读取从 30,743 tokens 压缩到 383 tokens:
AMBIGUOUS_TARGET:多个候选,绝不"猜一个"
与"随便选一个最像的"不同,agent-desktop 的严格重新识别策略在发现多个合理候选时会拒绝猜测并返回此错误。恢复方式:重拍快照,改用更具体的 ref(例如先find缩小到某个区域,或加--window-id限定实例)。
ACTION_FAILED:先查 disposition.retry,防止重复执行
ACTION_FAILED不代表动作没做——它可能已经送达但结果验证失败。只有disposition.retry为safe(即not_delivered)时才允许重试;其他情况下应先读details.post_state判断实际状态,再基于观察到的状态行动。macOS 平台的具体排障步骤见 macos.md。
TIMEOUT:两种 kind,处理方式不同
TIMEOUT的details.kind决定 schema:
wait_timeout:等待条件超时,携带last_observed或last_error,先看最后观测到什么再调整;chain_deadline:链式预算耗尽。若mutated: true,重试前必须重新读取元素;mutated: false表示状态未变,可直接安全重试。
四、哪些错误可以安全重试?✅
agent-desktop 内置了可重试性判定(retryability 判定逻辑):只有以下 4 类错误在明确标记retryable: true时才算"可重试的解析失败":
STALE_REF—— 重拍快照后重试AMBIGUOUS_TARGET—— 重拍快照后换更具体 refTIMEOUT—— 查看最后报告后调整APP_UNRESPONSIVE—— 等待恢复后检查再决定
其余错误要么不可重试(重试会产生副作用),要么应修正参数。记住一条黄金法则:送达状态不确定时,永远先看状态再动手。
五、FFI(C 库)侧读错误:errno 风格 last-error
如果你通过 C-ABI cdylib 调用(Python/Swift/Go/Node 等宿主),错误以负数字典码返回,完整对照表见 error.rs(STALE_REF = -6、AMBIGUOUS_TARGET = -15、PERM_DENIED = -1,数值 ABI 稳定、只追加不重排),头文件在 agent_desktop.h。
失败后用线程局部的 last-error 访问器读取诊断:
| 访问器 | 返回内容 |
|---|---|
ad_last_error_message() | 人类可读描述 |
ad_last_error_suggestion() | 恢复建议 |
ad_last_error_platform_detail() | 平台细节(AX 码、HRESULT、AT-SPI) |
ad_last_error_details() | 结构化 JSON(ACTION_FAILED的可操作性报告、AMBIGUOUS_TARGET的候选摘要等) |
注意:指针在下一次失败调用前一直有效(类 POSIXerrno语义),且details可能包含屏幕上的敏感内容,不要直接写入共享日志。完整契约见 error-handling.md。
从架构图可以看到:agent 发出命令 → agent-desktop 走原生 API 操作应用 → 返回 JSON + refs,所有失败都会在这条链路上转化为上述结构化错误:
六、一张图看懂诊断决策流程 🧭
遇到报错,按下面顺序 30 秒内定位:
PERM_DENIED?→ 系统设置里授予无障碍/屏幕录制权限APP_NOT_FOUND?→ 先launch启动应用WINDOW_NOT_FOUND?→ 用list-windows核对窗口STALE_REF/SNAPSHOT_NOT_FOUND?→ 重跑snapshot --skeleton,换新 refAMBIGUOUS_TARGET?→ 重拍快照,选更具体的 refACTION_FAILED/APP_UNRESPONSIVE?→ 查disposition.retry和post_state,确认实际状态后再动POLICY_DENIED?→ 确需物理交互时用--headed显式 mouse/focus 命令INVALID_ARGS?→ 检查命令拼写与参数TIMEOUT?→ 按details.kind分情况处理INTERNAL?→ 读message/suggestion,重试一次;持续失败即环境问题
错误码本身只是"体检报告",真正让 agent 快速恢复的是code → suggestion → disposition这套组合:机器能读懂代码、官方给出建议、送达状态决定能不能重试。掌握这份清单后,绝大多数自动化故障都能在两次命令内恢复。更多错误场景示例可参考 SKILL.md 与 docs/faq.md。
- 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.
相关推荐
InstColorization对比分析:为什么实例感知着色比传统方法更优秀
InstColorization对比分析:为什么实例感知着色比传统方法更优秀 在计算机视觉领域,图像着色是一个充满挑战的任务。InstColorization(
计算机视觉图像处理Flutter微信SDK wechat_kit:一站式集成微信登录、分享与支付
Flutter微信SDK wechat_kit:一站式集成微信登录、分享与支付 wechat_kit是一款专为Flutter开发者打造的微信SDK,提供便捷的微
Code Llama错误恢复终极指南:如何快速修复生成代码中的语法错误
Code Llama错误恢复终极指南:如何快速修复生成代码中的语法错误 Code Llama作为强大的代码生成模型,在帮助开发者提高编程效率的同时,偶尔也会生成
人工智能大模型基础模型代码模型本地部署
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考