Skill
desktop-gui-automation-cua
可泛用的 macOS 桌面 GUI 自动化(computer use):cua-driver 做 AX→像素→桌面的三档降级,对任意 app 先 probe 判定模式再驱动;含识图定位、隐私处理、微信/iPhone 镜像案例。遇点击/输入/滚动/截图任意本机 app,或微信/IPhone 镜像/canvas 等 AX 空或稀疏的软件时用。
- Source
- afa-cloud
- stars
- 1 stars
- License
- MIT
- Updated
- Updated yesterday
Readme
# desktop-gui-automation-cua
给 AI agent 用的 **macOS 桌面 GUI computer-use** 技能包:用 [cua-driver](https://github.com/trycua/cua) 驱动任意本机应用(点击 / 输入 / 滚动 / 拖拽 / 截图),自动做 **AX → 像素 → 桌面** 三档降级。对微信 4.x、iPhone 镜像、Blender/canvas 这类 **AX 树为空或极稀疏**的软件尤其有用。
开箱即用的目标:**`git clone` → `install.sh` → 在系统设置授权 → 配一个多模态 key → 就能让它驱动你的桌面**。
> **双形态发布**:本仓库同时提供 **skill 形态**(SKILL.md + scripts,装进各 agent 技能目录)与
> **DSH 插件形态**(`plugin/`,通过 `/cua` 命令挂进 DeepSeek Harness)。二者**共享同一份
> `scripts/` 单一事实源** —— skill 用符号链接、插件用子进程调用,**都不复制脚本**,因此
> 改一次仓库两端立即一致,不会随迭代漂移。见文末「双形态与更新」。
## 特性
- **泛用**:一套脚本驱动任意 app(`computer_use.py`),不绑定具体软件
- **三档自动降级**:AX-token(后台不抢焦点)→ 窗口像素(聊天区/canvas)→ 桌面纯视觉(iPhone 镜像)
- **识图定位**:内置 `vision.py` 走任意 OpenAI 兼容多模态端点,做视觉定位与结果验证
- **App 案例配方**:`send_wechat.py`(微信发消息)、`iphonemirror.py`(iPhone 镜像操控)
- **可移植**:全部脚本只用 Python 标准库;识图端点完全可配置
## 文档
| 文档 | 内容 |
|---|---|
| [docs/overview.md](docs/overview.md) | 原理与设计(AX→像素→桌面三档降级、Skyshot/取证、识图、安全) |
| [docs/app-guides.md](docs/app-guides.md) | App 实操教程(原生 app / 微信 / QQ / iPhone 镜像)+ 排障 |
| [docs/reference.md](docs/reference.md) | 脚本 / API / 依赖 参考 |
## 安装(macOS)
**给 AI agent 的一条指令(给你的 Claude / Codex / DSH agent 说这句,它就能自动装):**
> 请安装 desktop-gui-automation-cua:`git clone https://github.com/afa-cloud/desktop-gui-automation-cua.git && cd desktop-gui-automation-cua && ./install.sh`。装完告诉我需要我提供多模态 API key、以及在「系统设置 → 隐私与安全性 → 辅助功能 / 屏幕录制」授予 CuaDriver 和本 agent 的权限。
装完只剩两件只能你本人做(脚本无法代办):**① 在系统设置授予 macOS 权限;② 提供识图 API key**。其余全自动。
**手动安装:**
```bash
git clone https://github.com/afa-cloud/desktop-gui-automation-cua.git
cd desktop-gui-automation-cua
./install.sh # 也可加 --no-cua / --no-plugin / --force
```
`install.sh` 会:
1. 检测/安装 **cua-driver**(若无)
2. 用**符号链接**把 skill 装进你的 agent 技能目录(自动识别 `~/.dsh/skills`、`~/.claude/skills`、`~/.agents/skills` 等)—— 指向本仓库 `scripts/` 与 `SKILL.md`,**不复制**
3. 检测到 DSH web profile 时,**自动安装 DSH 插件**(symlink `plugin/src/index.js` + 追加 `cordis.patch.yml` insert,幂等)
4. 生成识图配置模板 `~/.config/vision-config.json`
5. 引导授予 macOS 权限
### 装完还剩 2 步(必须手动,无法脚本代做)
**① 授权(macOS TCC,唯一硬门槛)** —— 让驱动能看屏幕、能操控界面:
```bash
cua-driver permissions grant
```
然后打开 **系统设置 → 隐私与安全性 → 辅助功能 / 屏幕录制**,勾选 `CuaDriver` 和你的 agent/终端 App,之后**完全退出并重开该 App** 使授权生效。(验证:`cua-driver permissions status --json` 应输出 `accessibility:true` `screen_recording:true`。)
**② 配一个多模态识图 key**(用于视觉定位/验证):
```bash
cp ~/.config/vision-config.json ~/.config/vision-config.json.bak
# 编辑 ~/.config/vision-config.json 填你自己的 OpenAI 兼容多模态服务
```
`~/.config/vision-config.json` 内容:
```json
{
"base_url": "https://api.openai.com/v1",
"api_key": "sk-your-key",
"model": "gpt-4o"
}
```
> 也可以用环境变量,`base_url` 和 `api_key` **至少提供一个**,建议都给:
> `export VISION_BASE_URL=https://api.openai.com/v1 VISION_API_KEY=sk-... VISION_MODEL=gpt-4o`
>
> 任意 OpenAI 兼容 `/chat/completions` 多模态 endpoint 都行(OpenAI / DeepSeek / SiliconFlow / 本地 vLLM 等)。
### 快速自检
```bash
# 1) 权限
cua-driver permissions status --json
# 2) 识图(配好 key 后应能描述图)
python3 ~/.dsh/skills/desktop-gui-automation-cua/scripts/vision.py 某张图.png "描述一下"
# 3) probe 一个 app
python3 ~/.dsh/skills/desktop-gui-automation-cua/scripts/computer_use.py probe 访达
```
## 使用
见 `scripts/SKILL.md`(完整手册)。常用:
```bash
D=~/.dsh/skills/desktop-gui-automation-cua/scripts
# 泛用驱动任意 app
python3 $D/computer_use.py probe <app> # 判定 A/B/C 档
python3 $D/computer_use.py snapshot <app> --out t.png # AX + 截图
python3 $D/computer_use.py inspect <app> "描述界面" # 识图
python3 $D/computer_use.py click <app> --token s000.. # AX 点击(后台不抢焦点)
python3 $D/computer_use.py click <app> --x 120 --y 750 # 像素点击(window-local px)
python3 $D/computer_use.py type <app> "你好" # 文本输入
python3 $D/computer_use.py key <app> Return # 按键
# App 案例配方
python3 $D/send_wechat.py "某人" "消息" # 微信发消息
python3 $D/iphonemirror.py tap "Dock栏的照片" # iPhone 镜像操控
```
### 工作流(对任意 app)
```
1. 定位 computer_use.py windows <app> # 找窗口
2. 判定 computer_use.py probe <app> # AX→像素→桌面 三档
3. 快照 snapshot / inspect # 取证
4. 交互 A档 AX / B档像素 / C档桌面(前台)
5. 验证 重新 snapshot / scroll到底 / vision 确认
```
## 平台限制
- **macOS 完全支持**(脚本针对 macOS AX / CGEvent / sips 机制)
- **Windows / Linux**:cua-driver 本身跨平台,但本仓库的 app 配方(`send_wechat.py`/`iphonemirror.py`)含 macOS 特定逻辑,需适配;直接驱动核心(`computer_use.py` 的 A/B 档)在 cua-driver 支持的前提下可试
## 目录结构
```
├── README.md # 本文件(快速上手)
├── docs/ # 用户向文档
│ ├── overview.md # 原理与设计
│ ├── app-guides.md # App 实操教程
│ └── reference.md # 脚本/API 参考
├── SKILL.md # 完整技能手册(= 安装后 agent 的手册)
├── install.sh # 一键安装(skill → 符号链接)
├── update.sh # 一键更新(git pull + 重建链接 + 版本自检)
├── plugin/ # DSH 插件壳(/cua 命令, 子进程调用仓库 scripts)
│ ├── package.json
│ ├── cordis.patch.yml
│ ├── src/index.js
│ └── README.md
├── config/
│ └── .vision-config.example.json # 识图配置模板
├── scripts/
│ ├── cua_lib.py # 通用底层(调 cua-driver / 三档决策 / __version__ 单一事实源)
│ ├── computer_use.py # 泛用驱动入口(任意 app)
│ ├── vision.py # 多模态识图(可配置端点)
│ ├── send_wechat.py # 微信发消息配方
│ └── iphonemirror.py # iPhone 镜像操控配方
└── LICENSE
```
## 双形态与更新
本仓库用「**单一事实源 + 不复制**」消灭双形态漂移:
| 形态 | 装的方式 | 脚本来源 | 会不会漂移 |
|------|---------|---------|-----------|
| **skill** | `install.sh` → **符号链接**到仓库 `scripts/` | 仓库(链接) | 不会(物理同一份) |
| **DSH 插件** | `plugin/` 的 `/cua` 命令 → **子进程**调用仓库 `scripts/` | 仓库(子进程) | 不会(物理同一份) |
两个形态都以仓库 `scripts/` 为准,改一次立刻两端一致。升级只需在仓库里:
```bash
git pull
./update.sh # 重建链接 + 版本自检(检测已装副本 vs 仓库是否漂移)
```
每个脚本都带 `--version`(来自 `cua_lib.__version__`),可随时比对已装副本与仓库版本。
## 安全与隐私
- 保持 cua-driver 的 **standard 权限档**,不要轻易用 `--dangerously-bypass-approvals`
- 识图只在内存处理截图,不落盘(`computer_use.py`/脚本默认不写图文件)
- 对不可寻址目标 cua-driver 会结构化拒绝,不会静默假成功
- 让 agent 操作真实 app 前请确认:你授权它操作的范围是可控的
## 相关
- [cua-driver / trycua](https://github.com/trycua/cua) — 底层驱动
- 原理与"AX 不可达应用"研究:见 `SKILL.md` 参考
## License
[MIT](LICENSE)
Install
# Skills are files: copy them into $DSH_HOME/skills/desktop-gui-automation-cua (defaults to ~/.dsh/skills/desktop-gui-automation-cua)
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install afa-cloud-desktop-gui-automation-cua from the hub