Skip to main content

computer-use

通过 cua-driver 控制本机 macOS 桌面:截图、鼠标点击/拖拽、键盘输入、滚动、打开 URL/应用等。cua-driver 未安装时自动帮用户装好。

설치로 이동

소스 정보

저장소
llm011/ethan-agent
최근 소스 활동
2026년 8월 2일 17:36
감지된 SKILL.md 언어
중국어
스타
8
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
computer-use
trigger
截图|操作电脑|控制桌面|鼠标点击|键盘输入|打开应用|打开软件|GUI|桌面自动化|computer use|take screenshot|click|type on screen|open app|desktop|scroll screen|drag
description
通过 cua-driver 控制本机 macOS 桌面:截图、鼠标点击/拖拽、键盘输入、滚动、打开 URL/应用等。cua-driver 未安装时自动帮用户装好。
channels
["web","repl","lark"]
fast_path
false
# computer-use 技能 用 `computer_use` 工具控制本机 macOS 桌面。 ## 第一步:确认环境就绪 **Docker 容器环境(存在 /.dockerenv)跳过此步**——cua-driver 运行在宿主机上, 通过 cua-bridge 桥接访问,容器内没有也不需要 cua-driver 命令。直接调用 `computer_use` 即可。 **宿主机原生环境**,先检查 cua-driver 是否在运行: ```bash cua-driver status ``` - **正常输出**(含 running/active)→ 直接跳到操作部分 - **command not found** 或错误 → 执行以下安装命令(需要用户同意),完成后再继续: ```bash curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/cua-driver/scripts/install.sh | bash && cua-driver install ``` 安装完毕后验证:`cua-driver status` ## ⚠️ 关键限制:Electron 应用必须前台化 **这是最重要的规则,违反它会导致操作静默失败(返回 ok=True 但实际没生效)。** ### 根因 macOS 的 `CGEventPostToPid`(cua-driver 带 pid 的键盘事件投递机制)对 **Electron 后台窗口**无效: - 事件被 Electron 的多进程架构静默丢弃 - `hotkey`/`press_key`/`type` 都返回 `ok=True`,但界面没有任何变化 - 这是 macOS + Chromium 的固有限制,不是工具 bug ### 哪些是 Electron 应用 VS Code、TRAE、TRAE Work、Slack、Discord、飞书/Lark(部分)、Cursor、Obsidian、Notion 等。 **判断方法**:应用进程名含 "Helper" 或 `app_name` 在下列列表中,按 Electron 处理。 ### 正确做法(必读) 操作 Electron 应用时,**必须先 `activate_app` 前台化,再操作,最后切回原窗口**: ``` 1. activate_app(target="TRAE Work CN") # 前台化(必须) 2. sleep 1~1.5s # 等待窗口真正前台化 3. click(x, y) # 点击输入框定位光标 4. paste_text(text="...") # 粘贴(自动备份+恢复剪贴板) 5. press_key(key="return") # 发送 ``` **不要尝试用 `set_focus(pid)` + 后台 `hotkey` 的组合**——对 Electron 应用无效。 `set_focus` 只设置 CGEvent 投递目标 pid,不改变视觉前台,对 Electron 后台窗口的键盘事件无效。 ### 原生应用 vs Electron 应用对照 | 应用类型 | 示例 | 后台操作 | 前台化 | |---------|------|---------|--------| | 原生 | TextEdit, Notes, Safari | ✅ `set_focus` + `type` 可后台 | 不需要 | | Electron | TRAE, VS Code, Slack | ❌ 后台键盘事件被丢弃 | ✅ 必须 `activate_app` | ## 使用原则 1. **先截图,再行动**:每次操作前先调 `screenshot` 看当前屏幕,找准坐标 2. **操作后再截图验证**:点击/输入后截一张确认效果 3. **坐标以像素为单位**,原点左上角。先用 `get_screen_size` 了解屏幕尺寸 4. **Electron 应用必须前台化**:见上方"关键限制"章节 5. **输入文字优先用 paste_text**:`type` 用 CGEventPostToPid 对 Electron 无效;`paste_text`(pbcopy + cmd+v)更可靠 ## 操作速查 ### 基础操作 | 操作 | action | 必填参数 | 备注 | |------|--------|----------|------| | 截图 | `screenshot` | — | 操作前后都截一张 | | 获取屏幕尺寸 | `get_screen_size` | — | — | | 左键点击 | `click` | x, y | 可带 pid 定位后台窗口 | | 双击 | `double_click` | x, y | — | | 右键点击 | `right_click` | x, y | — | | 移动光标 | `move` | x, y | — | | 拖拽 | `drag` | x, y, end_x, end_y | — | | 滚动 | `scroll` | x, y, direction, clicks | direction: up/down | | 翻页 | `page` | direction | direction: up/down | | 缩放截图 | `zoom` | x, y, end_x, end_y | 截取区域并放大 | ### 键盘输入 | 操作 | action | 必填参数 | 备注 | |------|--------|----------|------| | 输入文字 | `type` | text | **原生应用用这个** | | 粘贴文字 | `paste_text` | text | **Electron 应用用这个**(pbcopy+cmd+v,自动备份并恢复原剪贴板,不污染) | | 按键 | `press` | key | 如 "return", "escape", "delete" | | 组合键 | `hotkey` | keys | 如 ["cmd", "c"] | **注意**:cua-driver 的按键方法名是 `press_key`(不是 `press`)。工具内部已做映射,调 `computer_use(action="press")` 即可。 ### 窗口管理 | 操作 | action | 必填参数 | 备注 | |------|--------|----------|------| | 列出窗口 | `list_windows` | — | 可用 title_filter 过滤 | | 列出应用 | `list_apps` | — | 可用 title_filter 过滤 | | 设置焦点 | `set_focus` | pid | 设置 CGEvent 投递目标(仅原生应用有效,Electron 必须用 activate_app) | | 激活应用 | `activate_app` | target | **osascript activate(macOS 专用),Electron 应用前台化必用** | | 隐藏应用 | `hide_app` | — | cmd+h | | 最小化窗口 | `minimize_window` | — | cmd+m | | 启动应用 | `launch` | target | — | | 打开 URL | `open` | target | 启动 Safari + 输入 URL | | 杀掉应用 | `kill_app` | pid | — | **注意**:macOS 下 cua-driver 的 `bring_to_front` 不可用,前台化窗口必须用 `activate_app`(走 osascript `tell application "X" to activate`)。 ### AX 辅助 | 操作 | action | 必填参数 | 备注 | |------|--------|----------|------| | 获取 AX 树 | `get_accessibility_tree` | — | Electron 应用通常只暴露菜单栏,内容区缺失 | | 设置元素值 | `set_value` | element_token, value | AX 方式赋值 | | 获取光标位置 | `get_cursor_position` | — | — | | 检查权限 | `check_permissions` | — | accessibility + screen_recording | ## 典型流程 ### 原生应用(TextEdit, Notes 等)——可后台操作 ``` computer_use(action="list_windows", title_filter="TextEdit") computer_use(action="set_focus", pid=12345) computer_use(action="click", x=500, y=500, pid=12345) computer_use(action="type", text="Hello World", pid=12345) ``` ### Electron 应用(TRAE, VS Code, Slack 等)——必须前台化 ``` # 1. 找到窗口 pid computer_use(action="list_windows", title_filter="TRAE Work") # 2. 前台化(必须!后台操作对 Electron 无效) computer_use(action="activate_app", target="TRAE Work CN") # 等待 1~1.5s 让窗口真正前台化 # 3. 点击输入框定位光标 computer_use(action="click", x=900, y=1000, pid=88851) # 4. 粘贴文字(自动备份+恢复剪贴板) computer_use(action="paste_text", text="Hello from AI") # 5. 发送 computer_use(action="press", key="return", pid=88851) # 6.(可选)切回原窗口 computer_use(action="activate_app", target="原应用名") ``` ### 打开浏览器访问网址 ``` computer_use(action="launch", target="Safari") computer_use(action="screenshot") computer_use(action="hotkey", keys=["cmd", "l"]) computer_use(action="type", text="https://example.com\n") ``` ## 常用快捷键 | 效果 | keys | |------|------| | 复制 | `["cmd", "c"]` | | 粘贴 | `["cmd", "v"]` | | 全选 | `["cmd", "a"]` | | 新标签页 | `["cmd", "t"]` | | 关闭窗口 | `["cmd", "w"]` | ## 注意 - **type vs paste_text**:`type` 用 CGEventPostToPid,对 Electron 后台窗口无效(返回 ok=True 但不输入)。Electron 应用必须用 `paste_text` + `activate_app`。 - **activate_app vs set_focus**:`set_focus` 只设置 CGEvent 投递目标 pid,不前台化,对 Electron 无效;`activate_app` 真正前台化窗口(osascript),Electron 必须用这个。 - **paste_text 不污染剪贴板**:内部自动 备份→写入→cmd+v→恢复。 - 截图需要视觉模型(如 claude-sonnet)才能解读图片内容 - 操作的是真实桌面,执行前告知用户可能影响当前窗口 - 坐标因分辨率/缩放不同而变化,每次操作前重新截图定位 - 截图失败时(`screenshot` 带 pid 返回空),尝试不带 pid 截全屏,或用 `get_window_state(pid, window_id)` 获取窗口截图 ## 踩坑记录 1. **cua-driver 按键方法名是 `press_key` 不是 `press`**:工具内部已映射,调 `computer_use(action="press")` 即可。直接调 bridge 时用 `press_key`。 2. **cua-driver 所有操作都要求带 pid**:不带 pid 会返回 "Missing required integer field: pid"。`list_windows`/`get_screen_size`/`activate_app`/`set_clipboard`/`get_clipboard`/`restore_clipboard` 等管理类方法除外。 3. **Electron 后台窗口键盘事件被静默丢弃**:`hotkey`/`press_key`/`type` 带 pid 时返回 ok=True 但事件不到达 Electron 后台窗口。必须 `activate_app` 前台化。 4. **macOS 下 cua-driver 的 bring_to_front 不可用**:前台化窗口必须用 `activate_app`(osascript)。 5. **activate_app 超时**:osascript 激活应用可能较慢,bridge 端超时设为 10s,调用后建议 sleep 1~1.5s。
GitHub에서 보기