agent-desktop 完整教學 2026:不靠截圖的 AI 電腦操作

Vercel Labs 開源的 agent-desktop(★18,588、Apache-2.0、Rust)讓 AI 代理操作桌面程式,但不用截圖也不是像素比對——它讀作業系統的無障礙樹,把每個可操作元素變成一個 ref。本文拆解 ref 生命週期、視窗身分為何要綁 process-generation、auto-wait 與 actionability 檢查、60 個命令的分組、MCP 與 C library 兩種接法,以及 macOS/Windows/Linux 各自的門檻。

  • Dennis
  • 8 分鐘閱讀
agent-desktop 完整教學 2026:不靠截圖的 AI 電腦操作

一句話結論

大多數「computer use」是讓模型看截圖、猜座標;agent-desktop 走另一條路:直接讀作業系統的無障礙樹(accessibility tree),把畫面上每個可操作元素變成一張有身分證的 ref,然後叫 agent 點那個 ref。

它由 Vercel Labs 開源(★18,588、Apache-2.0、Rust 撰寫),同時提供 CLI、C library,還能把所有命令掛成 MCP server。npm 上線不到一年、近 30 天下載 53,251 次,最新版 1.2.0(2026-11-05)。

最重要的一句話寫在 README 裡:「The loop lives in your agent; agent-desktop has no model inside.」——它自己不帶模型,只負責「看見」與「操作」。

一表看懂

項目內容
GitHubvercel-labs/agent-desktop
星數/分支★18,588/1,350 forks(2026-11-07 查詢)
授權/語言Apache-2.0/Rust
版本npm 1.2.0(2026-11-05 發布,13 個 release 資產)
規模3,746 個檔案,含 43 KB 的 CONCEPTS.md 與 22 KB 的 AGENTS.md
安裝npm install -g agent-desktop(也有 Homebrew;Bun/pnpm/Yarn 皆可)
平台macOS 13+/Windows 10 1809+/Ubuntu 24.04+

截圖派 vs 無障礙樹派

面向截圖+視覺定位agent-desktop(無障礙樹)
判斷依據像素、模型看圖猜位置OS 提供的語意樹(角色、名稱、可用動作)
解析度敏感度高(DPI、縮放、主題都會影響)無關(不碰畫素)
定位精度座標,可能點偏ref id,指到具體元素
驗證方式再截一張圖比對(還是靠眼睛)再 snapshot 一次,比對結構
遮擋/離屏可能誤判有 visible、occlusion 等原生證據
成本每步都要送圖給模型一步送一次 JSON

代價是:沒有無障礙實作的程式(例如全自繪的遊戲、部分 Electron/Flutter 應用)就看不見。這是路線取捨,不是 bug。

核心機制:ref 是快照的產物

操作循環只有三步,官方 quick start 直接示範:

agent-desktop snapshot --app Finder -i      # 取快照,每個元素帶 ref
agent-desktop click @s8f3k2p9:e8            # 對 ref 動作
agent-desktop snapshot --app Finder -i      # 再觀察,驗證結果

snapshot 回傳的是一個 JSON envelope(version、ok、command、data),data 裡有 snapshot_id、ref_count、complete 與整棵 tree。每個節點長這樣:

{ "role": "treeitem", "name": "Documents", "ref_id": "@s8f3k2p9:e8", "available_actions": ["Click"] }

三條規則是硬性的:

  1. ref 屬於它的快照。 只寫 @e8 會被拒(INVALID_ARGS);UI 變了再動作,會回 STALE_REF 或 AMBIGUOUS_TARGET,正確做法是重取快照。
  2. 多視窗會回 AMBIGUOUS_TARGET,錯誤細節會列出候選 window id,要用 --window-id 指定。
  3. 密集的程式先看骨架:snapshot --skeleton 抓大結構,再 --root @ref 鑽進某一區,避免一次吐幾千個節點。

五個值得抄的工程細節

這份 repo 的價值不只在功能,而在它把「讓 agent 安全操作 GUI」拆得非常細。官方 CONCEPTS.md 裡有五個設計可以直接借:

設計做法為什麼重要
視窗身分不是只看 window handle,而是 handle+process-generation token(由行程建立時間推導)作業系統會回收 handle 給別的視窗;只認 handle 就會操作到錯的視窗。世代不合時 fail closed,寧可失敗也不誤點
Auto-wait預設等 5000 ms(type 每字元再加 30 ms),--timeout-ms 0 回到「立刻動手」把「按鈕還沒出現」從競態變成可預期的等待;terminal 檢查(支援動作、政策、可否編輯)不等,直接失敗
Actionability battery派送前逐項檢查:可見、穩定、啟用、支援該動作、政策允許、可編輯讓「點不到」變成明確錯誤碼,而不是靜默失敗
Headless 預設ref 動作走無障礙 API,不移動游標、不搶焦點;--headed 才做實體輸入使用者可以繼續用電腦,agent 在背景操作
可重試語意錯誤帶 error.disposition.retry,只有 safe 才重試避免 agent 對「已經點成功但回應逾時」的動作重複點擊

60 個命令,分成 9 組

官方說法: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

安裝與第一次執行

npm install -g agent-desktop
agent-desktop status                # 平台、權限、可用介面
agent-desktop permissions --guide   # macOS:帶你完成「輔助使用」授權

macOS 與 Linux 也能 brew install agent-desktop。想直接用原生執行檔(不經 JS 啟動器),可從 GitHub Releases 下載對應平台的 archive,並把 helper 放在執行檔旁邊。

三種接法:CLI、MCP、C library

① CLI:每次呼叫回一個 JSON envelope,適合 shell 腳本與 subagent 直接跑。

② MCP:agent-desktop mcp 會把所有命令掛成 stdio 的 MCP 工具,命名是 desktop_snapshot、desktop_click、desktop_session_start 這種格式:

{ "mcpServers": { "agent-desktop": { "command": "agent-desktop", "args": ["mcp"] } } }

③ C library:每個 release 都附 libagent_desktop_ffi,讓程式在同一個行程內呼叫,不必開子行程。這也是它用 Rust 寫的原因之一——同一份 core,三種出口。

④ 給 agent 的說明書:執行檔內建與版本相符的指南,agent-desktop skills get desktop 給操作循環與重試規則,skills get platform 給平台差異。也能裝進 agent harness:

npx skills add https://github.com/vercel-labs/agent-desktop --skill agent-desktop

平台支援與門檻

平台最低版本使用的 API
macOS13 以上(Intel/Apple Silicon)AX API
Windows10 1809 以上(x64/ARM64)UI Automation
LinuxUbuntu 24.04 以上(x86_64/aarch64、X11 或 Wayland)AT-SPI

每個平台頁面另外寫清楚「哪些功能在 headless 下可用、哪些一定要 --headed、哪些直接拒絕」。這一點比多數同類工具誠實。

安全與隱私:官方自己劃的紅線

README 開頭沒在講功能,先講風險:

「Snapshots, clipboard reads, screenshots, command output, and debug artifacts can contain private desktop content. Keep them out of public logs and uploads.」

實務上要照做的三件事:

  1. 快照、剪貼簿、截圖、除錯產物都可能夾帶私人內容——不要直接丟進公開 log 或上傳。
  2. 敏感字串用 --stdin 管線餵進去(type、set-value、clipboard-set 都支援),避免密碼出現在 process arguments;批次 JSON 的文字仍會留在參數裡。
  3. PowerShell 要把 ref 加引號('@s8f3k2p9:e8'),因為裸的 @token 是 splatting 運算子。

該保留懷疑的地方

疑點說明
無障礙樹不是萬用自繪 UI、遊戲、部分跨平台框架沒有完整無障礙實作,這時它「看不見」;必要時得退回 screenshot 路線
仍是 Labs 產品2026-02 建庫、Vercel Labs 出品,定位是實驗性專案;187 個 open issue 說明還在快速變動
Linux 門檻偏高要求 Ubuntu 24.04 以上與 AT-SPI,舊發行版直接出局
不自帶模型判斷與重試策略要自己寫在 agent 裡;它只給「看見+操作」的原語
本文未實測這台機器沒有可互動的桌面環境(只有無顯示的 Xvfb),因此本文沒有任何自己跑出來的數字,所有規格與行為描述皆取自 repo 與官方文件(2026-11-07)

誰適合、誰先別碰

適合

  • 想讓 agent 操作桌面應用(Finder、Slack、Excel、內部 ERP)而不是網頁的人
  • 需要不搶使用者焦點的背景下操作:headless 預設正是為此設計
  • 想要結構化、可驗證的 computer use:snapshot 是 JSON,驗證就再 snapshot 一次,不必看圖
  • 已在用 MCP 生態的人:agent-desktop mcp 幾乎零成本接入

先別碰

  • 目標是網頁自動化:那是同家族的 Agent Browser 在處理的事,不用繞道桌面 API
  • 主要操作對象是自繪 UI 或遊戲:無障礙樹看不到
  • 需要長期穩定 API 的生產系統:Labs 專案、一個月多版,先當實驗品

站內延伸閱讀

本文為獨立整理,不含聯盟連結、未受 Vercel 或任何廠商贊助。規格、命令與行為描述取自 repo 內 README.md、CONCEPTS.md 與官方文件(2026-11-07 查證),下載量取自 npm 公開統計。本文未實際執行 agent-desktop,故不提供任何效能或成功率數字。

📬 訂閱 most.tw 電子報

每週精選 AI 工具教學與技術乾貨,直接送到你的信箱。免費、隨時可退訂。

訂閱即表示同意收到 most.tw 電子報,隨時可一鍵退訂。

💬 有問題想討論?加 LINE 聯絡我

歡迎透過 LINE 官方帳號直接留言,我會盡快回覆你的問題。

加入 LINE 好友