数据截至 (上游 commit ead48da2032c)
这是什么 · 全景 · 阅读地图
30 秒导读:
open-computer-use(仓库名open-codex-computer-use)把"让 AI 操作电脑"(Computer Use)封装成一个 MCP 服务。任何支持 MCP 的 agent(Codex、Claude Code、Gemini CLI…)装上它,就能在 macOS / Linux / Windows 上用无障碍树(Accessibility)+ 截图去点按、输入、滚动真实应用——而且是后台非抢占式的:它操作 App 的时候,你还能继续用别的窗口。
1. 这是什么(零基础也能懂)
一句话定义
它是一个"手脚服务":给已经会思考的 AI 补上"在真实电脑上动手"的能力,并用 MCP 这个通用插头对外暴露。
大模型本身只会输出文字。要让它真的去"点那个按钮、在输入框里打字",需要有人把它的意图落到屏幕上的真实控件。这个仓库就 是干这件事的,而且把它做成任何 agent 都能即插即用的形态。
给谁用 / 解决什么问题
设想你在用一个 AI 编码助手(如 Codex CLI),你说"帮我在 TextEdit 里新建一个文档并写一段话"。模型知道该做什么,但它没有鼠标键盘。open-computer-use 就是补上这一环的服务:
- 对 agent 开发者: 不用自己写一套跨平台的 UI 自动化,
npm i -g装上就有 9 个标准工具。 - 对终端用户: 一条命令把它装进你已有的 agent,AI 从此能替你操作桌面 App。
一个关键取舍:非抢占式(non-intrusive)
这是本项目最核心的一个立场。对比两种做法就清楚了:
- 传统视觉 CUA: 截图给模型看 → 模型说"点坐标 (x, y)" → 合成一次物理鼠标点击。问题是侵入:鼠标会真的动、窗口要抢到前台、坐标一错就点歪。
- 本项目(非抢占式): 除了截图,还把应用的无障碍树(操作系统为读屏软件暴露的结构化 UI 树)给模型看,每个可操作元素都编了号(
element_index)。模型说"操作 3 号元素",服务就直接调用系统的语义化无障碍动作(如AXPress「按下」)——不移动物理鼠标,应用甚至不用在前台。物理指针合成只作可选兜底,默认关闭。
所以它能在后台操作 App,你的前台工作不被打断。README 明确写了这一点:"操作 App 的时候,用户可以继续用电脑上的其它 App"(见 packages/OpenComputerUseKit/Sources/OpenComputerUseKit/MCPServer.swift 里 computerUseServerInstructions 给模型的说明)。
它从哪来:复刻 Codex Computer Use
作者的灵感来自 OpenAI 的 Codex Computer Use——官方证明了"基于 Accessibility 就能做出非抢占式 CUA"(Computer Use Agent,计算机操作代理)。作者于是照着逆向观察做了一个开源版(仓库属主 iFurySt,见 README.md:16)。设计源头被记录在 docs/references/codex-computer-use-reverse-engineering/baseline-architecture.md:那份文档里观察到官方的 SkyComputerUseService 暴露出的能力面(Accessibility 树、ScreenCaptureKit 截图、EventTap 输入、ComputerUseCursor 光标、MCP/StdioTransport),以及一模一样的一组 tools(list_apps / get_app_state / click / …)。本仓库就是对这套设计的开源实现,而非 OpenAI 官方仓库。
对外的 9 个工具(一句话看清能力面)
都是"一个动作"级别的原子能力,细节见 02:
| 工具 | 干什么 |
|---|---|
list_apps | 列出可操作的应用(运行中的 + 近期用过的) |
get_app_state | 拉当前应用的 UI 快照(无障碍树 + 截图),每回合动手前必须先调 |
click | 按 element_index 或像素坐标点击 |
type_text | 往聚焦的输入框敲文字 |
press_key | 敲按键 / 组合键(支持 xdotool 的 key 语法) |
scroll | 把某个元素往某方向滚动若干页 |
drag | 从一个坐标拖到另一个坐标 |
set_value | 直接给一个可写元素设值(无障碍层面) |
perform_secondary_action | 触发元素暴露的次级动作(如 Raise/展开菜单) |
用起来什么样(最小示例)
安装(npm 包同时提供短命令 ocu,见 README.md:43-46):
npm i -g open-computer-use
# macOS 首次运行需授权 Accessibility 和 Screen Recording;Windows/Linux 不需要
open-computer-use # 或 ocu
装进你的 agent(以 Codex 为例,一键写入 ~/.codex/config.toml):
open-computer-use install-codex-mcp
或手动加进任意 MCP 客户端(README.md:65-74):
{
"mcpServers": {
"open-computer-use": {
"command": "open-computer-use",
"args": ["mcp"]
}
}
}
也能不经 agent、直接命令行调一个工具试水(README.md:126-128):
open-computer-use call list_apps
open-computer-use call get_app_state --args '{"app":"TextEdit"}'
一句话直觉/类比
把它想成"给 AI 的一副遥控手套"。 手套自己不思考;模型说"点第 7 个元素",手套就精确地替它按下去。而"第 7 个元素"是谁,来自上一步拿到的一张当前界面清单(无障碍树 + 截图)——而不是让 AI 举着鼠标去戳屏幕。