计算机控制

CLI-JAW 使用 CDP 自动操作网页 DOM,使用 Computer Use 操作桌面界面。Computer Use 是 MCP 工具,不是员工。

两种方式

方式方法最适用于
CDP (Chrome DevTools Protocol)通过 src/browser/ 进行浏览器自动化网页、精确的 DOM 交互
Computer Use (CU)通过 jaw-computer-use MCP 或 Codex 原生插件操作桌面原生应用、桌面 UI 交互

CDP 浏览器自动化

CLI-JAW 通过 CDP 启动并控制 Chrome:

# Start browser
jaw browser start

# Take a screenshot
jaw browser screenshot

# Take a DOM snapshot with ref attributes
jaw browser snapshot

# Click an element by ref
jaw browser click ref123

# Type text into an element
jaw browser type ref456 "Hello World" --submit

# Navigate to a URL
jaw browser navigate https://example.com

# Get page text
jaw browser text

视觉点击管线

当 DOM ref 属性和直接坐标都不适用时,视觉点击管线使用 AI 视觉来定位并点击 UI 元素:

jaw browser vision-click "Submit button" --provider codex

管线流程:截图 → AI 视觉提取坐标 → DPR 校正 → 点击 → 验证。

明确指定 $computer-use 时使用暴露的 Computer Use 工具,不得改用 CDP。Jaw 为除 Codex 以外支持 MCP 的 CLI 注册 jaw-computer-use 服务器(js 工具;在 Claude 中为 mcp__jaw-computer-use__js)。Codex 使用原生插件。先阅读首次工具调用返回的文档,确认 cua.getApp(name)、app.getAXState()、app.click(index|[x,y]) 等受支持操作。

macOS TCC 权限

安装并打开带有 Computer Use 的 ChatGPT 桌面应用,然后重启 jaw 以注册 MCP 服务器。在 macOS 上,启动 jaw 服务的进程或二进制文件可能需要访问其他应用数据的权限(ChatGPT Computer Use 容器的 TCC App Data)。具体“隐私与安全性”面板名称因 macOS 版本而异。未获授权的 Terminal 启动实例可能在首次应用调用时阻塞。其他 TCC 权限可用下列命令检查:

# Check TCC permissions
jaw doctor --tcc

Jaw 按本次运行的权限策略处理应用批准提示:auto 批准,safe 拒绝并报告 not approved。若未暴露工具,报告 precondition failed: no Computer Use surface;若首次应用调用被阻塞,报告 precondition failed: computer-use app access blocked。Windows 同样需要 Codex 桌面插件缓存。Linux、WSL 和 Docker 没有主机 Computer Use 接口;普通 DOM 工作仍可使用 CDP。

Safari 提示

要进行 Safari 自动化,请在 Safari 的"开发"菜单中启用"允许远程自动化"。不过,通过 CDP 使用 Chrome 是推荐的最佳支持路径。

浏览器 API 端点

方法路径描述
POST/api/browser/start启动浏览器
POST/api/browser/stop停止浏览器
GET/api/browser/status浏览器状态
GET/api/browser/snapshot带 ref 的 DOM 快照
POST/api/browser/screenshot截取屏幕截图
POST/api/browser/act点击、输入、按键、悬停
POST/api/browser/vision-click基于视觉的点击
POST/api/browser/navigate导航到 URL

运行时诊断

# Check browser runtime health
jaw browser status

# Doctor check for orphan processes
GET /api/browser/doctor

# Cleanup orphan runtimes
POST /api/browser/cleanup-runtimes