Tools

工具速评:Cua 把「给 Agent 一台电脑」拆成了五件套,从云端桌面到 6 字节的选择器

7 min read ·

「让 AI 操作电脑」这几年被讲得很热闹,但真正做过的人都知道,难点很少在「点按钮」这个动作上。真正的难点是你从哪弄到一台干净、可隔离、用完能回收的电脑,以及你敢不敢让它自己按下确认键

Cua 这个开源项目把这件事拆成了五个组件,而且每个组件的边界划得挺清楚。它的自我定位很直白:Give AI agents computers they can use.

一、五件套分别解决什么

先把全貌摆出来,再看细节:

组件层次解决什么问题
Cua Fleets云端按需分配隔离的云桌面,维护沙箱池与生命周期
Cua Driver本机通过 CLI、MCP 或类型化 SDK 操作原生桌面应用
CUA-S1模型用小而专的模型做表单类的高频决策
Lume本机在本地创建和管理 macOS 虚拟机
Cua Bench评测提供可复现的模拟任务与结果校验

官方把它们串成一个概念叫 Computer-Use 2.0:同一个任务里,Agent 可以在代码、API 和图形界面之间来回切换,而不是被锁死在某一种交互方式上。这个提法很实在——生产环境里最省事的路径往往是「能用接口就别点界面」,但总有一部分系统没有任何接口,只能点。

二、Fleets:把「一台机器」变成可申请的池子

Fleets 在云端提供隔离的 Linux 桌面。用法是池化思路:一个 Fleet 维护沙箱容量,你的代码从池子里认领一个桌面,然后用 Sandbox SDK 在里面跑命令、截屏、操作应用。

# 文档给的路径是三步:认领桌面 → 跑一条命令 → 截屏保存
uname -a

这套设计的核心价值是隔离。让 Agent 执行模型生成的代码,最怕的就是它在你的开发机上乱来。一个用完即弃的云桌面把所有副作用框在盒子里,这比任何「提示词里要求它别删文件」都有效。

⚠️ 沙箱池会在认领结束后继续保留付费容量

这是文档里明确提示的一条。演示任务跑完必须按清理步骤释放资源,否则账单会持续累积。做技术验证时最容易踩这个坑。

还有两个实际约束:本地沙箱和云 Fleets 共用同一套 Sandbox SDK,但凭证、镜像、可执行操作和运行时要求都不同;桌面运行时支持范围也有差异,选环境前要核对支持矩阵,不然会出现「本地能跑、云端跑不动」。

三、Driver:让 Agent 操作原生应用,但不抢你的鼠标

Driver 给 Agent 的是一组操作原生桌面应用与浏览器的能力,覆盖 macOS、Windows、Linux,接入方式有三种:命令行、MCP、类型化 SDK。

安装是一行脚本:

# macOS / Linux
/bin/bash -c "$(curl -fsSL https://cua.ai/driver/install.sh)"

# Windows PowerShell
irm https://cua.ai/driver/install.ps1 | iex

三种接入方式意味着它能嵌进不同的 Agent 生态:已经在用 MCP 的可以直接接,需要精细控制流的用类型化 SDK,只想快速试的走命令行。

但最值得注意的一个特性是后台投递:在应用和平台支持的情况下,Agent 可以在不移动你的指针、不抢走焦点的前提下完成任务。这一条听起来像体验优化,实际是可用性门槛——如果每次 Agent 干活都要抢占鼠标,这台机器就没法同时给人用了。官方给的支持范围说明值得细读,因为它是按平台和窗口类型分级的。

官方演示里有一个细节很能说明能力边界:两个 Driver 会话在欧姆archy 桌面上分别操作 LibreOffice Calc 的单元格和 Inkscape 的图形对象,同时终端始终保持在前台。三个应用各干各的,说明它不是简单的前台模拟点击。

四、CUA-S1:把决策从「生成」改成「打分」

CUA-S1 是五件套里最容易被误解的一个:它名字里有 S1,指的是 System 1,官方明确说明这是工程类比——用来描述「快而受限的决策,比如判断某个字段该填哪个值、或者某个元素该不该动」,不是对模型架构的严格分类,也不替代通用 Agent 的规划推理能力。

它的第一个研究方向是表单。做法和常规 Agent 很不一样:

  • 不从结构化界面元素和文档值里逐 token 生成响应,而是对候选决策打分
  • 动作的先后顺序由应用代码决定,模型只负责局部判断;
  • 可选的 Driver 集成负责执行,并且有显式的动作边界。

这个分工很有启发:把「顺序」这种确定性的东西交给代码,把「选择」这种模糊的东西交给模型。相比让一个大模型端到端输出整个动作序列,这种拆法在表单这类高频、边界清晰的任务上更容易控制。

但必须看清它的成熟度。 官方说得很直接:项目处于早期研究阶段,仓库提供的是模型代码、合成数据生成、训练与评测代码,不包含也不下载权重、数据集、演示程序和录屏,源码发布本身不构成任何检查点性能声明。已有检查点 cua-s1-form-v0 是面向表单类界面任务的专用版本,不应被视为通用助手。

安装与使用:

uv sync --project libs/cua-s1/python --extra pdf --group test
uv run --project libs/cua-s1/python pytest libs/cua-s1/python/tests
import cua_s1
print(cua_s1.__version__)

加载检查点需要本地提供 safetensors 文件和匹配的 JSON 配置——基于 pickle 的 PyTorch 检查点会被拒绝,这是一个明确的安全取舍。

五、安全边界:这套设计比功能列表更值得抄

CUA-S1 的安全声明写得比多数同类项目都狠,逐条看下来几乎是一份桌面 Agent 的准入清单:

  • 规划与执行分离,运行默认走干跑;
  • 要求恰好一个明确的目标窗口,避免操作到错误的窗口;
  • 使用快照绑定的元素标识,防止两次观察之间元素已经变化;
  • 每次变更后重新观察窗口,不复用过期状态;
  • 执行与提交是两个独立开关,必须分别显式打开;
  • PDF 访问被限制在配置的允许根目录内,未配置时默认使用当前工作目录,生产环境应改用专用的最小权限目录。

最值得关注的是提交动作的收窄:开启提交后,最多允许点击一个高置信度的、标准标签恰好为提交的按钮,其余点击决策一律省略

💡 这个保守度是对的设计

无人值守场景下最危险的失败不是「没点到」,而是「点错了但没人发现」。把不可逆操作收窄到最少、要求先看干跑计划,本质上是把最坏情况的可控性放在覆盖率之前。等观察到决策稳定之后再逐个场景放开,这个顺序值得所有桌面 Agent 借鉴。

MCP 服务 cua-s1-mcp 走标准输入输出传输,需要两个宿主配置:一个用「模块:属性」形式指定可信的规划器工厂,一个列出可以读取的 PDF 目录。文档特别提醒:导入工厂会以服务进程的权限执行代码,所以绝不能指向不可信模块。这个提醒很必要——MCP 把「加载一段配置」变成了「加载并执行一段代码」,权限边界必须自己想清楚。

六、Lume 与 Cua Bench:补齐两端

Lume 负责本地 macOS 虚拟机,官方教程是以创建一台 Tahoe 虚拟机并通过 SSH 连接为例。它的意义在于给需要 macOS 环境的任务(比如 iOS 相关、Safari 相关)一个可编排的本地运行环境,而不必依赖云端。

Cua Bench 负责评测。它提供创建与校验模拟任务的流程,配合 Driver 就能形成「造任务—跑轨迹—校验结果」的闭环。对计算机使用类 Agent 来说,评测的难点恰恰在于结果验证:不是看它点了什么,而是看最终状态对不对。这一点如果做不扎实,所有性能数字都没意义。

七、评:什么场景值得用

  • 值得:需要无人值守操作桌面应用;需要在评测环境里批量起隔离桌面;需要把已有 Agent(Claude Code、Codex、Cursor 等)接上原生应用操作能力;需要一个能自我约束的安全边界模板。
  • 可以等:想直接拿到一个可用的专用计算机使用模型——目前是研究脚手架,权重未发布。
  • 注意成本:云沙箱池的容量计费、本地与云端运行时的能力差异、生产环境必须使用专用最小权限目录。
  • 组合建议:网页内操作交给浏览器层工具,桌面与系统级操作交给 Cua,两层通过工作目录交换产物。这样每层都用自己的强项,整体最稳。

把「给 Agent 一台电脑」拆成五件可独立选用的组件,本身就是很成熟的工程判断——多数团队一开始并不会全用,但知道每一块的边界在哪,选型时就不会押错方向。

Frequently asked questions

Cua 和浏览器自动化库是竞争还是互补?
基本是互补关系,作用在不同层。浏览器库解决的是「在网页里找元素、点、抓数据」,它的世界止于浏览器标签页。Cua 解决的是「给 Agent 一台机器,让它在操作系统层面看屏幕、点鼠标、敲键盘」,它的世界包括原生窗口、文件管理器、桌面应用和终端。真实任务往往会跨越两层:先用桌面方式打开一个本地应用导出一份文件,再切到浏览器里上传。分层的做法是让两层各自做好自己那段,通过工作目录或剪贴板交换产物,而不是让其中一层去模拟另一层。
为什么说 CUA-S1 的「不发布权重」是个重要信息?
因为它标定了项目的成熟度。仓库里给的是模型代码、合成数据生成、训练与评测流程,但不包含也不下载权重、数据集、演示程序和录屏,官方也明确表示源码发布本身不构成任何检查点性能声明。这意味着你拿到的是一个可复现的研究脚手架,而不是一个可以直接上线的产品。对工程团队来说这其实是好事——边界清楚,就不会在错误的预期上排期;如果你需要的是评估与复现,它足够;如果你需要的是开箱即用的桌面代理,它还不够。
提交动作被收窄到一个按钮,会不会太保守?
在桌面自动化这个语境下,这个保守是必要的。Agent 在无人值守场景里最危险的失败模式不是「没点到」,而是「点错了但没人发现」——比如在一张单据上误点了确认,或者在没有复核的情况下提交了表单。把提交权限收窄到标准标签为提交的高置信度按钮、且最多允许一次,本质上是把不可逆操作的风险敞口压到最小。它牺牲的是一部分自动化覆盖率,换来的是「最坏情况可控」。等你跑够了干跑计划、观察到决策稳定之后,再逐个放开具体场景,这个顺序是对的。
云桌面的沙箱池有什么容易被忽略的成本?
最容易忽略的是「池子会在认领结束后继续保留付费容量」。也就是说你用完释放了使用权,池子本身可能还在占资源计费。这意味着随手跑一个演示任务,如果不按文档做清理,账单会一直长。除了钱,还有两个隐性成本:一是凭证与镜像在本地沙箱和云沙箱之间并不通用,运维能力并不通用;二是桌面的运行时支持范围有差异,选定环境前必须核对支持矩阵,否则会撞上「本机能跑、云上跑不动」的问题。
本地虚拟机和云桌面该怎么选?
按三件事判断。第一是权限边界:任务需要访问本机文件、内网系统或硬件设备时,本地虚拟机更直接;任务完全自包含、需要在隔离环境里跑陌生代码时,云端更安全。第二是并发需求:需要同时起几十个桌面做批量评测,云端的池化能力是决定性的,本地机器扛不住。第三是可复现性:评测场景要求每次环境完全一致,云端的镜像化环境更容易做到。实际团队常见的组合是本地跑开发调试、云端跑批量评测和生产执行。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.