这是什么
Computer Use 为千手大师提供一套桌面操作能力。它以一个 MCP Server 的形式挂载进主 CLI,服务名固定为 computer-use,工具名形如 mcp__computer-use__<tool>。模型通过这些工具截取屏幕、生成鼠标键盘事件、读写剪贴板、枚举与管理应用窗口。
它的工作是分级的:会话启动时会自动注册这个 MCP Server 并把工具加入允许列表,但任何实际操作前都必须先由模型调用 request_access 向用户申请权限。用户在对话框里批准一组应用后,本次会话才能对这些应用执行截图与输入操作。
只在交互式会话中挂载
主 CLI 仅在交互式会话中加载 Computer Use;非交互模式(-p / print 模式)会跳过初始化,工具不会出现在该会话中。
平台与权限
三个平台的后端实现方式不同,能力完整度也不同。下表以仓库源码为准。
| 平台 | 截图 | 键鼠 | 窗口绑定 | 实现方式 |
|---|---|---|---|---|
| macOS | 原生 | 原生 | 支持(SCContentFilter) | Swift / enigo 原生模块(@ant/computer-use-swift + @ant/computer-use-input) |
| Windows | Python Bridge | PowerShell + Win32 | 支持(SendMessageW / PrintWindow) | 跨平台 executor + platforms/win32.ts + Win32 专属模块 |
| Linux | xdotool / scrot | xdotool | 不支持窗口级输入 | platforms/linux.ts(xdotool · scrot · xrandr · wmctrl),完整度与验证程度低于前两者 |
macOS 系统授权
macOS 需要两项 TCC 权限:辅助功能(Accessibility)与屏幕录制(Screen Recording)。权限缺失时,首次 request_access 不会显示应用列表,而是显示一个 TCC 面板,提供两个选项直接跳转系统设置,并在授权后选择「Try again」重试:
- Open System Settings → Accessibility
- Open System Settings → Screen Recording
Windows 与 Linux 依赖
| 平台 | 必需组件 | 用途 |
|---|---|---|
| Windows | Python(mss + Pillow) |
截图;缺少时截图会直接报错 |
| Windows | PowerShell(系统内置) | 全局键鼠输入、显示器枚举 |
| Linux | xdotool |
鼠标、键盘、窗口查询 |
| Linux | scrot |
全屏与区域截图 |
| Linux | wmctrl / xrandr |
窗口列表、显示器枚举 |
| Linux | ImageMagick convert(或 ffmpeg) |
把 scrot 的 PNG 转为 JPEG |
安装与启用
Computer Use 由编译期 feature flag CHICAGO_MCP 控制,该 flag 已包含在默认构建列表中。日常开发与构建无需额外开关,只有需要显式指定时才手动开启。
-
确认 feature flag 已启用:开发模式下所有 feature 默认开启;构建产物默认包含
CHICAGO_MCP。如需显式指定,用环境变量形式:# 显式指定 CHICAGO_MCP 后启动 FEATURE_CHICAGO_MCP=1 qsdashi -
启动一个交互式会话:
qsdashi -
用自然语言提出任务,例如「打开记事本并输入一段文字」。模型会先调用
request_access,弹出权限申请对话框。 - 在对话框中批准应用。macOS 若尚未授权 TCC,会先出现系统权限面板(辅助功能 / 屏幕录制),授权后点「Try again」;授权完成后再选择允许的应用。
-
后续操作自动执行。经批准的应用在本次会话内保持授权,
mcp__computer-use__*工具已加入允许列表,不再逐次弹窗。
独立 MCP Server
Computer Use 本身是一个标准的 stdio MCP Server,可以脱离主 CLI 单独启动,供任意 MCP 客户端使用:
qsdashi --computer-use-mcp
该命令通过 stdio 传输协议通信,收到 stdin 关闭时退出。对应的客户端配置示例:
{
"mcpServers": {
"computer-use": {
"command": "qsdashi",
"args": ["--computer-use-mcp"]
}
}
}
主 CLI 内部如何使用它
主 CLI 启动时会把 computer-use 注册为动态 MCP 配置(type: stdio)。实际调用由 MCP 客户端按服务名拦截,并使用进程内 Server 处理,因此不会真的再拉起一个子进程;--computer-use-mcp 主要供外部客户端或进程外场景使用。
工具与能力
工具按平台分为三组:全平台通用工具 24 个、Windows 专属工具 11 个、教学模式工具 3 个(共 38 个)。通用工具在未绑定窗口时,操作对象是整个屏幕。
通用工具(全平台)
| 分类 | 工具 | 说明 |
|---|---|---|
| 权限 | request_access · list_granted_applications |
申请应用控制权限(其他工具的前置条件);列出本会话已授权应用 |
| 截图 | screenshot · zoom · switch_display |
全屏截图(可存盘)、按坐标区域放大截图、切换目标显示器 |
| 鼠标 | left_click · double_click · triple_click · right_click · middle_click · mouse_move · left_click_drag · left_mouse_down · left_mouse_up · cursor_position |
各类点击、移动、拖拽、按下/松开与光标位置查询,坐标基于最近一次截图 |
| 键盘 | type · key · hold_key |
输入文字、按键/组合键(如 ctrl+s)、按住指定时长 |
| 滚动 | scroll |
在指定坐标按方向(up/down/left/right)滚动 |
| 应用 | open_application |
打开应用;Windows 上会自动绑定窗口 |
| 剪贴板 | read_clipboard · write_clipboard |
读取/写入剪贴板文本,需在 request_access 中单独申请 |
| 辅助 | wait · computer_batch |
等待指定秒数;批量执行多个动作以减少 API 往返 |
Windows 专属工具
仅在 Windows 平台可见,核心是绑定窗口后的独立操作——通过窗口消息直达目标 HWND,不抢占焦点、不移动真实鼠标键盘。
| 分类 | 工具 | 说明 |
|---|---|---|
| 窗口绑定 | bind_window · activate_window |
绑定/解绑/查询窗口(list · bind · unbind · status);激活绑定窗口并确保焦点 |
| 窗口管理 | window_management |
最小化、最大化、恢复、关闭、聚焦、移出屏幕、移动缩放、读取矩形(全部走 Win32 API,不触发系统快捷键) |
| 虚拟鼠标 | virtual_mouse · mouse_wheel |
绑定窗口内的窗口级点击/拖拽(SendMessageW,不动真实鼠标);WM_MOUSEWHEEL 滚轮 |
| 虚拟键盘 | virtual_keyboard |
绑定窗口内输入、组合键、按住/松开(WM_CHAR / WM_KEYDOWN) |
| 元素操作 | click_element · type_into_element |
按无障碍名称/角色/automationId 查找并操作 UI 元素 |
| 终端交互 | open_terminal · prompt_respond |
打开终端并启动 agent CLI(claude / codex / gemini / custom);应答 Yes/No、选择菜单、输入提示等 |
| 状态指示 | status_indicator |
控制绑定窗口底部浮动状态标签的显示与隐藏 |
教学模式工具
request_teach_access · teach_step · teach_batch 三个工具仅在 teachMode 开启时可用,用于把操作拆成分步引导提示。默认关闭。
截图附带结构化元素列表
Windows 上窗口已绑定时,每次 screenshot 会同时返回截图与 GUI 元素列表(角色、名称、坐标、automationId)。模型据此可选择按坐标点击,或按名称调用 click_element,后者不受窗口缩放与 DPI 影响,更稳定。
配置项
Computer Use 的运行时子开关由动态配置 tengu_malort_pedway 读取,普通用户无需修改。下表是离线或未下发配置时的默认值。
| 配置键 | 默认值 | 作用 |
|---|---|---|
enabled |
true |
总开关,与 CHICAGO_MCP feature flag 共同决定是否启用 |
coordinateMode |
pixels |
坐标模式;首次读取后冻结,用于统一工具描述与坐标换算 |
hideBeforeAction |
true |
操作前隐藏目标应用窗口,回合结束时自动恢复 |
mouseAnimation |
true |
鼠标移动时播放动画 |
autoTargetDisplay |
true |
按目标应用自动选择所在显示器 |
clipboardGuard |
true |
剪贴板保护,避免意外覆盖用户剪贴板内容 |
clipboardPasteMultiline |
true |
多行文本输入走剪贴板粘贴快速路径 |
pixelValidation |
false |
点击前像素校验(当前 CLI 环境下跳过) |
实战示例
以下是模型侧工具调用序列的示意,用于说明典型流程。用户只需用自然语言描述任务,模型会自行组织这些调用。
流程一:全屏操作
request_access(apps=["Notepad"], reason="输入并保存一段文本")
open_application(app="Notepad") # Windows 上自动绑定窗口
screenshot
left_click(coordinate=[500, 300])
type(text="hello world")
key(text="ctrl+s")
流程二:绑定窗口操作(Windows,不干扰用户)
request_access(apps=["Notepad"])
bind_window(action="list")
bind_window(action="bind", title="记事本")
screenshot # PrintWindow 截取绑定窗口
virtual_mouse(action="click", coordinate=[500, 300])
virtual_keyboard(action="type", text="hello world")
virtual_keyboard(action="combo", text="ctrl+s")
mouse_wheel(coordinate=[500, 400], delta=-5)
bind_window(action="unbind")
流程三:按元素名称操作(Windows)
bind_window(action="bind", title="记事本")
screenshot # 附带 GUI 元素列表
click_element(name="保存", role="Button")
type_into_element(role="Edit", text="new content")
常见问题与排错
macOS 截图空白或返回空图片
最常见原因是屏幕录制权限未授予。请在系统设置 → 隐私与安全性 → 屏幕录制中授权给运行千手大师的程序,然后重新发起 request_access。权限补齐前,坐标查询与区域放大(zoom)都无法工作。
Windows 截图报错
错误信息会提示 Ensure python3 + mss + Pillow are installed。Windows 截图完全依赖 Python Bridge,请安装 Python 及 mss、Pillow 两个包。
虚拟键盘/鼠标对某些应用无效
基于 SendMessageW 的 virtual_keyboard / virtual_mouse 对 Windows Terminal(ConPTY)、UWP/WinUI 以及浏览器网页内容无效,因为这些界面不处理 Win32 消息。此时应改用通用工具(left_click / type / key),并先用 window_management(action="focus") 激活窗口。
权限被拒 / IDE 与终端受限
权限分两级:full 可执行全部操作;click 仅允许左键点击与滚动。IDE 与终端类应用默认只授予 click,键盘输入、右键/中键点击、拖拽都会被拒绝。这是防止模型操控 IDE 终端的安全设计,需要在对话框中选择更高权限的应用才能执行完整操作。
Linux 先安装外部工具
Linux 后端依赖外部命令(xdotool、scrot、wmctrl、xrandr、ImageMagick convert)。任一缺失都会导致对应能力静默降级或失败,建议先确认这些命令都在 PATH 中。