在背景執行 macOS App:Cua Driver 為代理型自動化提供的解決方案

隨著能夠像人類一樣操作電腦的智慧代理(intelligent agents)興起,桌面自動化面臨了一個重大障礙:無法在不劫持使用者當前工作階段的情況下驅動圖形使用者介面(GUI)應用程式。傳統的 UI 自動化通常會導致混亂的使用者體驗,例如游標隨機移動、鍵盤焦點被奪走,以及視窗意外跳到最前端。這種干擾在過去迫使開發者轉向使用虛擬機或 GUI 容器來進行並行、背景執行,但隨著代理變得更加複雜並需要共享主機存取權限時,這種解決方案無法有效擴展。

Cua Driver 是一個受 Codex Computer-Use 發佈啟發的專案,為 macOS 提供了一個突破性的解決方案。它提供了一個背景電腦使用驅動程式,允許代理在人類使用者的游標、最前端應用程式和 Space 保持不受干擾的情況下,對原生應用程式進行點擊、打字、捲動和讀取。這項創新對於在主機上直接實現安全、並行且非侵入性的代理操作至關重要。

核心問題:UI 自動化與使用者干擾

根本的挑戰在於 macOS 如何處理輸入事件和視窗管理。Cua Driver 的作者 Francesco 詳細說明了幾次嘗試及其局限性:

  • CGEventPost:此方法透過硬體輸入流傳遞事件,不可避免地會導致游標跳動並干擾使用者。
  • CGEvent.postToPid:雖然這避免了游標跳動,但 Chromium 系列應用程式(如 Chrome、Electron apps)會將這些事件視為不可信,並在渲染器邊界靜默丟棄點擊,導致其失效。
  • 激活目標應用程式:明確地激活一個應用程式以進行互動會將其視窗拉至前端並奪取焦點,這完全違背了背景執行的目的,並可能導致使用者在不同的 Space 之間跳轉。
  • 被遮擋的 Electron Apps:另一個複雜的問題出現在 Electron 應用程式中,當其視窗被遮擋時,它們通常會停止維護有用的輔助功能(Accessibility, AX)樹,除非使用私有的遠端感知 SPI。

這些問題共同說明了 macOS 目前缺乏一個一等公民級別的 API,能真正驅動應用程式而不干擾使用者。

Cua Driver 的創新解決方案

Cua Driver 的突破來自於對隱晦的系統內部機制與巧妙技術的結合:

  • SkyLight (SLEventPostToPid):這是一個私有 API,與公開的 per-PID 調用是同級關係,它透過 WindowServer 通道傳遞事件,Chromium 系列應用程式會將其視為可信。這對於與這些廣泛使用的應用程式進行可靠互動至關重要。
  • Yabai 的「焦點不提升」模式:透過採用類似視窗管理員 yabai 的技術,Cua Driver 可以將輸入導向應用程式,而無需將其視窗拉至最前端。
  • 離屏啟動點擊 (Off-Screen Primer Click):在座標 (-1, -1) 進行點擊作為啟動動作,確保隨後的點擊能正確著陸,且視窗從未被提升至前端。

這種組合允許點擊和其他輸入有效地傳遞給目標應用程式,即使是在背景或被遮擋的應用程式,且不會對使用者造成任何視覺干擾。

處理不同類型的應用程式

從 Cua Driver 的開發中可以學到的一個關鍵經驗是,單一模式的處理方式對於應用程式互動是不夠的。正確的定址模式會因應用程式而異:

  • 原生 macOS Apps:這些應用程式通常提供豐富的輔助功能(AX)樹,提供關於 UI 元件的結構化資訊。
  • Chromium 系列應用程式:由於其渲染架構,通常需要混合模式,結合 AX 樹檢查與螢幕截圖分析。
  • 複雜工具 (Blender, CAD):這類應用程式可能僅暴露極少的有用 AX 介面,因此需要更多基於視覺的互動策略。

作者強調,僅預設使用像素或僅預設使用 AX 是錯誤的;需要一種細緻的處理方式。

關鍵使用案例與應用

Cua Driver 的功能解鎖了一系列強大的代理驅動工作流:

  • 委派式 Demo 錄製:代理可以驅動應用程式,同時透過 cua-driver recording start 捕捉整個互動過程,包括軌跡、螢幕截圖、動作與點擊標記,以生成類似 Screen Studio 的產品 Demo。
  • 取代 Browser-Use CLIs:它可以消除對 Chrome DevTools Protocol 的需求,讓 Claude Code 等代理可以直接與瀏覽器互動。
  • 開發循環 QA 代理:代理可以在開發者的編輯器保持在最前端的情況下,重現視覺錯誤、修改代碼、重新構建並驗證 UI 變更。
  • 個人助理流程:代理可以透過通用型代理 CLI 進行 iMessage 等應用程式的操作。
  • 提取視覺上下文:代理可以從 Chrome、Figma、Preview 或 YouTube 視窗中提取資訊,且無需依賴特定的應用程式 API,即使這些視窗並非處於活躍狀態。

社群回應與更廣泛的影響

技術社群普遍讚賞 Cua Driver 為 macOS 駭客技術的一次令人印象深刻的成就。

"Ex-Apple engineer here. I really like your implementation. A few years ago I built a similar tool to help me automate the testing of some of my native macOS apps. Being able to run multiple UI automation tests simultaneously was the big win in my case." — @LatencyKills

另一位評論者對快速開發與詳細的技術文章表示讚賞,並強調了對此類解決方案的需求。

遙測數據隱私疑慮

雖然技術成就受到讚賞,但一位前 Apple 工程師提出了關於隱私的常見疑慮:

"My only criticism is enabling telemetry by default. I'm a fan of having people opt-in." — @LatencyKills

這項回饋強調了使用者對數據收集的控制權的重要性,特別是在與使用者系統進行深度互動的工具中。

通用自動化 vs. 代理型

對於該專案是否專門針對代理,還是具有作為通用自動化函式庫的潛力,產生了一個問題。雖然 Cua Driver 的架構是圍繞著基於代理的電腦使用(computer-use)展開的,但其底層能力顯然可以擴展到任何需要背景執行來進行 macOS UI 自動化的形式。

跨平台興趣

也有人對 Windows 上的類似解決方案表示興趣,並提到 Codex Computer-Use 計劃在未來支持 Windows。這表明了整個產業對跨作業系統的非侵入性 UI 自動化需求。

審計軌跡與可解釋性

隨著代理變得更加整合進關鍵工作流,審計軌跡與可解釋性的需求也隨之浮現。一位評論者提到了向合規性團隊解釋代理決策的挑戰,特別是在與 ERP 等系統互動時。這強調了代理工具的未來方向:不僅是「為什麼」代理做了什麼,而是「為什麼」它做了這件事。

歷史背景

一位評論者將其與 ARexx 進行類比,ARexx 是將近 40 年前為 AmigaOS 發佈的腳本語言,這暗示了現代運算技術仍需追趕一些數十年前就已引入的先進自動化能力。

代理友善型運算的未來

Cua Driver 代表了 macOS 上基於代理的自動化邁出了重要的一步。透過解決非干擾性背景 UI 互動的核心問題,它為更複雜、並行且整合的代理工作流開啟了門戶。Cua Driver 克服的挑戰也引發了對作業系統(如 macOS)是否會演進以提供更多一等公民級別的、代理友善的 API,或是隨著這些未滿足的需求,代理友善的 Linux/Android 環境的勢頭可能會隨之增強。

Sources