全平台操控

Computer Use

让模型直接看到屏幕并操作桌面:截取屏幕与窗口、模拟鼠标键盘、读写剪贴板、管理应用窗口,全部通过 MCP 工具暴露给会话。

  • macOS / Windows
  • MCP Server
  • 截图 · 键鼠 · 剪贴板

这是什么

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 已包含在默认构建列表中。日常开发与构建无需额外开关,只有需要显式指定时才手动开启。

  1. 确认 feature flag 已启用:开发模式下所有 feature 默认开启;构建产物默认包含 CHICAGO_MCP。如需显式指定,用环境变量形式:
    启用 CHICAGO_MCP
    # 显式指定 CHICAGO_MCP 后启动
    FEATURE_CHICAGO_MCP=1 qsdashi
  2. 启动一个交互式会话:
    启动会话
    qsdashi
  3. 用自然语言提出任务,例如「打开记事本并输入一段文字」。模型会先调用 request_access,弹出权限申请对话框。
  4. 在对话框中批准应用。macOS 若尚未授权 TCC,会先出现系统权限面板(辅助功能 / 屏幕录制),授权后点「Try again」;授权完成后再选择允许的应用。
  5. 后续操作自动执行。经批准的应用在本次会话内保持授权,mcp__computer-use__* 工具已加入允许列表,不再逐次弹窗。

独立 MCP Server

Computer Use 本身是一个标准的 stdio MCP Server,可以脱离主 CLI 单独启动,供任意 MCP 客户端使用:

作为独立 MCP Server 启动
qsdashi --computer-use-mcp

该命令通过 stdio 传输协议通信,收到 stdin 关闭时退出。对应的客户端配置示例:

MCP 客户端配置
{
  "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)

UI Automation
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 中。