# Cua Driver

Drive a native macOS app via the cua-driver MCP server or CLI, snapshot its AX tree...

- Repository: https://github.com/ThinkInAIXYZ/deepchat (6384 stars)
- Category: AI and agents
- License: Apache-2.0
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add ThinkInAIXYZ/deepchat --skill cua-driver -g -a claude-code -y`
Codex: `npx skills add ThinkInAIXYZ/deepchat --skill cua-driver -g -a codex -y`
Cursor: `npx skills add ThinkInAIXYZ/deepchat --skill cua-driver -g -a cursor -y`
Gemini CLI: `npx skills add ThinkInAIXYZ/deepchat --skill cua-driver -g -a gemini-cli -y`

## Description

Drive a native macOS app via the cua-driver MCP server or CLI, snapshot its AX tree, click/type/scroll by element_index, verify via re-snapshot. Use when the user asks you to operate, drive, automate, or perform a GUI task in a real macOS application on the host (e.g. "open a file in TextEdit", "navigate to /Applications in Finder", "click the Save button in Numbers").

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# cua-driver

Orchestrates macOS app automation via `cua-driver`. Whenever a user
asks to drive a native macOS app, follow the loop in this skill rather
than calling tools ad-hoc, the snapshot-before-action invariant is not
optional and silently breaks if you skip it.

## DeepChat MCP mode

When DeepChat auto-pins this skill because the Computer Use MCP server is
enabled, use the available Computer Use tools in the current tool list
directly. Treat examples such as `click({...})` or
`get_window_state({...})` as calls to the matching MCP tool with the same
JSON payload. Shell CLI examples are diagnostic references for
shell-based agents.

App-name resolution belongs here. When matching a user request to an
app, compare the request with each `list_apps` name and `bundle_id`.
Consider the user's language, system language, English product names,
English brand names, romanized or pinyin variants, and common
abbreviations. Treat `bundle_id` as the strongest identity signal. When
the requested app name is ambiguous, localized, translated, abbreviated,
or written in another script, call `list_apps`, resolve the most credible
bundle id, then call `launch_app` with that bundle id.

## Sparse visible UI fallback

Many media and Electron apps expose a shallow AX tree while still
showing enough pixels to act. Spotify-style snapshots with only
`AXWindow`, title-bar buttons, and a menu bar are still actionable when
the screenshot shows a visible, unambiguous target.

For a user-requested non-destructive action, continue within the same
turn through the safest visible options:

The rest: https://github.com/ThinkInAIXYZ/deepchat/blob/HEAD/plugins/cua/vendor/cua-driver/source/Skills/cua-driver/SKILL.md
