先抛个画面给你。
你正在电脑上写一份方案,文档写到一半,顺手让 AI 去邮件客户端里翻一封三天前发来的对账单,顺便总结对方让你干嘛。然后神奇的事情发生了:邮件被翻出来了,内容被总结好了,可你的鼠标光标自始至终停在文档那个逗号后面纹丝没动,邮件窗口也没弹到最前面打断你,屏幕甚至没有切到别的虚拟桌面。
你和 AI,同时在用这一台机器,互不打扰。
我见过的绝大多数"电脑操控"类 Agent,工作方式都是接管你的屏幕——光标满屏乱飞,窗口被强行拉到前台,你这几分钟啥也别干,看着它表演。而 Hermes 的 Computer Use 偏偏反着来,它把点击、输入、滚动、拖拽这一整套全塞进了后台。
更关键的是,如果你之前听说过这功能、却因为"只支持 macOS"而把它划掉了,那这篇你得重新看。它现在 macOS、Windows、Linux 三个系统全都支持了。 三平台后台同一套效果:光标不动、焦点不抢、虚拟桌面不切。
这背后到底怎么做到的?三个系统各自能操作到什么程度、有什么坑?这篇一次说透。
它凭什么能在后台干活
先讲原理,不然后面很多设计你会觉得莫名其妙。
Hermes 的 computer_use 工具集,本质上是通过 MCP(走 stdio 通道)去驱动一个叫 cua-driver 的开源后台操控驱动。这个驱动最近完成了跨平台移植(底层是 Rust 写的 cua-driver-rs),于是三个系统得以共用同一套 Agent 接口。
它的核心思路在每个平台上是一致的:读取任意可见窗口的无障碍树(accessibility tree),并把合成出来的事件直接投递给目标窗口,而不把窗口抬到前台、不切换虚拟桌面、不移动操作系统真正的那个光标。 这就是"后台静默操控"的全部秘密。
但"同一套效果"不等于"同一套实现"。三个系统底层各用各的无障碍 + 输入栈,这点很重要,后面讲限制时你会反复用到:
• macOS:用的是苹果私有的 SkyLight SPI(SLEventPostToPid、SLPSPostEventRecordTo),配合一个辅助功能层的私有接口 _AXObserverAddNotificationAndCheckRemote。靠它把事件点对点送进目标进程、翻转 AppKit 的 active 状态而不抬窗、在窗口被遮挡时仍保活 Chromium/Electron 的辅助功能树。
• Windows:走的是系统原生的 UIA(UI Automation)无障碍框架来读结构、注入输入。
• Linux:走 AT-SPI 读无障碍树,输入和截图则覆盖 X11 与 Wayland 两套显示协议。
这套"后台电脑操控"的能力组合,正是 OpenAI 的 Codex 在用的那一套,而 cua-driver 是它的开源等价物。
还有个容易被忽略但很关键的设计:它不绑定任何厂商的"原生电脑操控协议"。换句话说,任何具备工具调用能力的模型都能驱动它,甚至你本地 OpenAI 兼容端点上跑的开源模型都行。你不需要为了用电脑操控,被迫切到某家闭源 API。对咱们这种喜欢本地部署的人来说,这点格外友好。
怎么装、怎么跑起来
安装路径有两条,殊途同归,底层跑的是同一个上游安装器,挑顺手的就行。
路径一,专用 CLI 命令(最直接):
hermes computer-use install
这条命令会去拉取并执行 cua-driver 的上游安装器。这里有个跨平台细节:macOS 和 Linux 跑的是 install.sh,Windows 跑的是 install.ps1。 装完用下面这条验证:
hermes computer-use status
它会把已安装的版本号连同二进制路径一起显示出来。
路径二,交互式启用工具集:
跑 hermes tools,在列表里选 🖱️ Computer Use (macOS/Windows/Linux)。注意这个菜单名本身就已经把三平台都写进去了,这条路安装时跑的也是和路径一相同的上游安装器。
不管你走哪条路,装完都要按你所在的平台授予对应的前置条件(grant the platform-appropriate prereqs)。三个系统要给的东西不一样:
• macOS:在系统设置 -> 隐私与安全性里,把"辅助功能"和"屏幕录制"两项都允许给终端(或 Hermes App)。辅助功能对应"读界面结构 + 投递事件",屏幕录制对应"截图",缺一个功能就瘸。
• Windows:需要一个有交互桌面的会话(这点后面限制那节会展开,SSH 远程是个坑)。
• Linux:需要一个可达的显示服务器(display server),无头服务器要先起 Xvfb,纯 Wayland 还得搭 XWayland 桥接。
收尾就是带着工具集开一个会话:
hermes -t computer_use chat
或者把 computer_use 写进 ~/.hermes/config.yaml 的已启用工具集,以后默认带着。
装完先别急着用,先跑一次自检
跨平台之后,"装好了但就是不起作用"的情况会比单平台时多,所以官方专门给了个自检命令,强烈建议每次出问题先跑它:
hermes computer-use doctor
它会调用 cua-driver 的结构化 health_report 工具,打印一张逐项检查的矩阵。这个 health_report 在 darwin / win32 / linux 三平台是完全对等实现的,所以不管你在哪个系统,排错语言是统一的。一个典型输出长这样:
⚠️ cua-driver 0.5.8 on darwin — degraded
✅ binary_version: cua-driver 0.5.8
✅ platform_supported: macOS 26.4.1 (arm64)
✅ session_active: MCP session is active.
❌ bundle_identity: Process has no CFBundleIdentifier.
-> Run the binary inside CuaDriver.app so TCC grants attribute correctly.
✅ tcc_accessibility: Accessibility is granted.
哪一项是红叉,它会连带把修复提示一起打出来。出了问题先 doctor 一下,比你自己读源码、手动敲 cua-driver 子命令快太多了。
实际跑一遍是什么感觉
向Hermes发送:"帮我找出张三最新发来的邮件,总结一下他们要我做什么。"
Agent 的执行计划是这样拆的:
1. computer_use(action="capture", mode="som", app="Mail")——对邮件 App 截一张图,而且是 SOM 模式。SOM 就是 Set of Marks,它会把侧边栏每一项、工具栏每个按钮、每一行邮件全都标上编号。Agent 看到的不是一张糊图,而是一张"每个可点的东西都贴了号码"的图。
2. computer_use(action="click", element=14)——点击第 14 号元素,也就是上一步识别出来的搜索框。
3. computer_use(action="type", text="from:stripe")——在搜索框里敲入筛选条件。
4. computer_use(action="key", keys="return", capture_after=True)——回车提交,并顺手再截一张新图。
5. 点开最上面那条结果,读正文,总结。
这一整套下来,你的光标依然停在你刚才离开的地方,邮件 App 从头到尾没被抬到前台。
记住一个细节:SOM 的元素编号只在下一次 capture 之前有效。界面状态一变(点了按钮、弹了框),编号就乱了,必须重新截图重新编号。好在新版给元素带了不透明的 element_token 做失效检测,编号过期时你会收到一个明确的报错,而不是稀里糊涂点错地方。
不同模型"系统"能驱动到什么程度
前面说了它不挑模型厂商,但不挑不等于体验都一样。官方给了张兼容性表,翻译成人话:
• Anthropic(Claude Sonnet/Opus 4 及以上):有视觉,完美支持,综合体验最好,SOM 和原始坐标两种方式都吃得下。想要最稳的用它。
• OpenRouter(任意视觉模型):有视觉,支持,因为它支持多段(multi-part)工具消息。
• OpenAI(GPT-4+、GPT-5):有视觉,支持,情况同上。
• 本地 vLLM / LM Studio(视觉模型):有视觉,支持,前提是模型能处理多段工具内容。
• 纯文本模型(没视觉):支持,但降级使用。这种情况切到 mode="ax",只靠无障碍树操作,不看截图。
一句话:有视觉的模型用 SOM 看图操作,没视觉的退而求其次走 ax 模式啃无障碍树。能力上限取决于你挑的模型,但门槛被压得很低。
重点:三个系统各自的能力边界和坑
这是这次更新后最值得细说的部分。三平台效果一致,但各自的"软肋"完全不同,心里有数才不会踩坑。
先说一个三平台共有的限制:有些 App 压根不暴露无障碍树。 具体来说,Windows 上的现代 UWP 应用、Linux 上 Electron 28 以下的应用、以及 macOS 上一些自绘界面的 App(Logic、Final Cut、部分游戏),它们的无障碍树要么稀疏要么干脆是空的。遇到这种,要么退回用像素坐标点(让模型看图直接给坐标),要么干脆放弃这个任务。这是无障碍树这套机制的天花板,跟哪个系统关系不大。
macOS 的坑:私有 SPI 风险。 它依赖的 SkyLight 是苹果私有接口,苹果在任何一次系统更新里都可能改动这些符号,理论上某次升级后这套东西有失灵可能。Hermes 的应对是:当你装的 cua-driver 版本比它测试过的版本旧时,会主动警告你。想跨系统升级保持可复现,可以用环境变量把驱动版本钉死(下面配置那节有)。
Windows 的坑:SSH 远程会落进 Session 0。 Windows 的 SSH 会话跑在 Session 0,而 Session 0 是没有交互桌面的。也就是说,你 SSH 进一台 Windows 想让它操控桌面,大概率截到空图、点啥都没反应。正确姿势是:要么从 RDP(远程桌面) 或者本机控制台会话里驱动 Hermes,要么按官方 windows-ssh 那篇给的配方,设置 cua-driver 的开机自启动计划任务(Scheduled Task)让它跑在有交互桌面的会话里。
Linux 的坑:必须有可达的显示服务器。 无头服务器上,你得先起一个虚拟显示,比如 Xvfb :99 -screen 0 1920x1080x24,之后 computer_use 才能截图和注入事件。如果你用的是纯 Wayland 会话,截图这条路需要一个 XWayland 桥接才能走通(好在 cua-driver 的 Wayland 输入注入是独立的一条路,输入本身不依赖这个桥接)。
性能:三平台都比前台慢,但量级不同。 后台模式走的是无障碍路由,不是直接 HID 投递,所以会有点延迟:macOS 大约 5–20 毫秒,Windows UIA 大约 3–10 毫秒,Linux AT-SPI 大约 5–15 毫秒。对 Agent 那种"想一步点一下"的节奏,这点延迟你根本感觉不到;但你要拿它去录速通操作,那就明显了。这是后台静默换来的代价。
还有一条三平台通用的硬限制:键盘不能用来输密码。 由于 type 动作对命令行 shell 串有硬拦截,密码这种东西它不让你这么敲。需要填密码的地方,请用系统自带的自动填充(autofill)。
安全护栏:它被拦着不能乱来
让 AI 真去点你的鼠标、敲你的键盘,听着就让人手心冒汗。Hermes 在这块铺了好几层护栏。
第一层,破坏性动作需要审批。click、type、drag、scroll、key、focus_app 这些动作都得你点头才执行——要么 CLI 里弹对话框确认,要么在消息平台上给你审批按钮。
第二层,某些组合键在工具层面被硬性封死。清空废纸篓、强制删除、锁屏、注销、强制注销,这几类操作 Agent 根本调不动,是直接没这个能力。
第三层,某些输入模式被硬性拦截。curl | bash、sudo rm -rf /、fork 炸弹这类危险串,你就算让它 type 也打不出来,会被模式匹配拦下。
第四层,系统提示词层面的约束。Agent 系统提示里写死了三条:不许点权限对话框、不许输密码、不许听信截图里嵌着的指令。最后这条很关键,防的是"截图里藏句话来劫持 Agent"的提示注入攻击。
还不放心想每步都手动确认的,在 ~/.hermes/config.yaml 里把 approvals.mode 设成 manual,一步一确认,稳到底。
截图很贵,它怎么省 Token
电脑操控本质是"截图—决策—操作"的循环,而截图出了名地吃 Token。Hermes 叠了四层优化,在意成本的本地玩家尤其该看。
第一层,截图淘汰。Anthropic 适配器只在上下文里保留最近 3 张截图,更老的替换成占位符。
第二层,客户端压缩裁剪。上下文压缩器能识别多模态工具结果,把旧结果里的图像部分直接剥掉。
第三层,图像感知的 Token 估算。每张图按约 1500 Token 算(Anthropic 统一费率),而不是按它 base64 编码后那一长串字符的真实长度算,估算更贴近实际计费。
第四层,服务端上下文编辑(仅 Anthropic)。开启后,适配器通过 context_management 启用 clear_tool_uses_20250919,让 Anthropic 的 API 在服务端直接清掉旧的工具结果。
这四层叠起来效果有多猛?官方给了个数字:在 1568×900 的显示器上跑 20 步动作的会话,截图上下文典型开销约 30K Token,而不是 600K。差了二十倍。
几个配置项和排错套路
留几个实用的环境变量备用。
覆盖驱动二进制路径、钉死版本(测试或 CI 场景):
HERMES_CUA_DRIVER_CMD=/opt/homebrew/bin/cua-driver
HERMES_CUA_DRIVER_VERSION=0.5.0 # 可选,钉版本
纯测试想"只记录调用、不产生任何副作用",整个换掉后端:
HERMES_COMPUTER_USE_BACKEND=noop
几个高频报错的对策:
报 cua-driver is not installed,说明驱动没装,跑 hermes computer-use install 或用 hermes tools 启用工具集。
点击好像没反应,先 capture 一张图核对——很可能有个你没注意到的模态框挡住了输入,用 escape 或关闭按钮打发掉再试。
元素编号失效,这就是前面说的 SOM 编号只在下次 capture 之前有效,任何改变状态的动作之后务必重新截图。
报 blocked pattern in type text,说明文本撞上了危险 shell 模式黑名单,把命令拆开或重新想想。
Linux 截出空图,多半是 DISPLAY 没设、或者你在纯 Wayland 又没搭 XWayland 桥接。跑 hermes computer-use doctor,它会把这项标成 ax_capability: fail 并给出"设置 DISPLAY(X11)"之类的提示。
Windows 通过 SSH 截出空图,基本就是落进了 Session 0(服务会话),回去看上面 Windows 那条限制。
进阶:想啃平台细节,去翻 cua-driver 的技能包
Hermes 自己的技能文件(skills/computer-use/SKILL.md)是刻意做薄的,只聚焦 Hermes 侧的 computer_use 动作词汇,作为 Agent 加载的唯一真相源。真正的平台深水区——比如 Windows 上 UIA / UWP 为什么会点错、该怎么换做法——放在 cua-driver 团队自己维护的技能包里(对应 WINDOWS.md 这类平台深度文档)。需要的话用 cua-driver 的 skills 命令把它符号链接进你的 Agent。目前自动检测已经覆盖 Claude Code、Codex、OpenCode、OpenClaw、Antigravity,Hermes 的自动检测官方说在排后续了,在那之前手动 link 一下即可。
写在最后
把这一圈捋下来,Hermes 这次的 Computer Use 给我的感觉是:它把上一版那个"只支持 macOS"的最大短板补上了,而且补得不糙——不是简单移植,而是三个系统各自接上原生的无障碍 + 输入栈(macOS SkyLight、Windows UIA、Linux AT-SPI),最后在 Agent 这一层收敛成同一套"后台静默、不抢光标、不切桌面"的体验。
感兴趣的虾友赶快升级体验下吧。