在后台驱动 macOS 应用:Cua Driver 为基于智能体自动化提供的解决方案
能够像人类一样操作计算机的智能体(Agent)的兴起,凸显了桌面自动化中的一个重大障碍:无法在不劫持用户活跃会话的情况下驱动图形用户界面(GUI)应用程序。传统的 UI 自动化通常会导致混乱的用户体验,例如光标移动异常、键盘焦点被夺走以及窗口意外跳转到前台。这种干扰在历史上迫使开发者转向虚拟机或 GUI 容器来进行并发、后台执行,但随着智能体变得更加复杂并需要共享主机访问权限,这种解决方案无法高效扩展。
Cua Driver 是一个受 Codex Computer-Use 发布启发的项目,为 macOS 提供了一个开创性的解决方案。它提供了一个后台计算机使用驱动程序,允许智能体在人类用户的光标、最前端应用和 Space(调度中心)保持不受干扰的情况下,点击、输入、打字、滚动并读取原生应用。这项创新对于在主机上直接实现安全、并发且非侵入式的智能体操作至关重要。
核心问题:UI 自动化与用户干扰
根本挑战在于 macOS 如何处理输入事件和窗口管理。Cua Driver 的作者 Francesco 详细说明了几种尝试及其局限性:
CGEventPost:此方法通过硬件输入流路由事件,不可避免地导致光标跳变并干扰用户。CGEvent.postToPid:虽然这避免了光标跳变,但 Chromium 系列应用(如 Chrome、Electron 应用)将这些事件视为不可信,并在渲染器边界静默丢弃点击操作,导致其失效。- 激活目标应用:显式激活一个应用程序以与其交互会提升其窗口并夺取焦点,这完全违背了后台执行的目的,并可能导致用户在不同的 Space 之间跳转。
- 被遮挡的 Electron 应用:Electron 应用带来了一个进一步的复杂性,当它们的窗口被遮挡时,它们通常会停止维护有用的辅助功能(Accessibility, AX)树,除非使用私有的远程感知 SPI。
这些问题共同说明了 macOS 缺乏一种一等公民级别的 API,能够真正驱动应用程序而不干扰用户。
Cua Driver 的创新解决方案
Cua Driver 的突破来自于对晦涩的系统内部机制的结合使用和巧妙的技术:
- SkyLight (
SLEventPostToPid):这是一个私有 API,是公开的 per-PID 调用函数的同级,它通过 WindowServer 通道路由事件,Chromium 系列应用会将其视为可信。这对于与这些广泛使用的应用进行可靠交互至关重要。 - Yabai 的“无需提升窗口”模式:通过采用类似于窗口管理器 yabai 的技术,Cua Driver 可以将输入定向到应用程序,而无需将其窗口带到前台。
- 离屏预热点击:使用坐标
(-1, -1)的点击作为预热,确保随后的点击能够正确着陆,而无需窗口提升。
这种组合允许点击和其他输入被有效地传递给目标应用,即使是后台或被遮挡的应用,且不会对用户造成任何视觉干扰。
处理不同类型的应用
Cua Driver 开发过程中的一个关键经验是,一刀切的方法对于应用交互是不够的。正确的寻址模式因应用而异:
- 原生 macOS 应用:这些应用通常提供丰富的辅助功能(AX)树,提供关于 UI 元素的结构化信息。
- Chromium 系列应用:由于其渲染架构,通常需要一种混合方法,将 AX 树检查与截图分析相结合。
- 复杂工具(Blender, CAD):这类应用可能暴露的有用 AX 表面非常少,因此需要更多基于视觉的交互策略。
作者强调,仅仅默认使用像素或仅仅使用 AX 是一个错误;需要一种细致入微的方法。
关键用例与应用
Cua Driver 的功能解锁了一系列强大的智能体驱动工作流:
- 委托式演示录制:智能体可以驱动应用,同时
cua-driver recording start捕获整个交互过程,包括轨迹、截图、动作和点击标记,从而生成类似于 Screen Studio 的产品演示视频。 - 替换 Browser-Use CLI:它可以消除对 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 的框架是围绕基于智能体的计算机使用场景构建的,但其底层能力显然可以扩展到任何需要后台执行的 macOS UI 自动化任务。
跨平台兴趣
人们也表达了对 Windows 平台的类似解决方案的兴趣,评论者指出 Codex Computer-Use 计划在未来支持 Windows。这表明了整个行业对于跨操作系统实现非侵入式 UI 自动化的一项广泛需求。
审计追踪与可解释性
随着智能体智能体集成到关键工作流中,审计和可解释性的需求日益显现。一位评论者提出了向合规团队解释智能体决策的挑战,特别是在与 ERP 系统交互时。这突出了未来智能体工具的开发方向:不仅是智能体做了 what,而且是 why。
历史背景
一位评论者将此与 ARexx 联系起来,这是一种在近 40 年前为 AmigaOS 发布的脚本语言,暗示了现代计算正在追赶一些几十年前就已引入的先进自动化能力。
未来智能体友好型计算
Cua Driver 代表了 macOS 上基于智能体自动化的重要一步。通过解决非侵入式后台 UI 交互的核心问题,它为更复杂、并发且集成的智能体工作流打开了门。Cua Driver 克服的挑战也引发了人们对操作系统(如 macOS)是否会演进到提供更多一等公民级别的、智能体友好的 API,是否会增强智能于智能体友好的 Linux/Android 环境的动力,以应对这些未满足的需求。