$npx -y skills add disler/mac-mini-agent --skill steermacOS GUI automation CLI. Use steer to see the screen, click elements, type text, send hotkeys, scroll, drag, manage windows and apps, run OCR on Electron apps, and wait for UI conditions.
| 1 | # Steer — macOS GUI Automation |
| 2 | |
| 3 | Binary: `apps/steer/.build/release/steer` |
| 4 | |
| 5 | Run `steer --help` and `steer help <command>` to learn each command's flags before using it. |
| 6 | |
| 7 | ## Commands |
| 8 | |
| 9 | | Command | Purpose | |
| 10 | | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 11 | | `see` | Takes a screenshot (PNG) and walks the accessibility tree. Screenshot always succeeds. Elements are best-effort — may be empty for Electron apps. Pass `--ocr` to fall back to OCR when the tree is empty. | |
| 12 | | `click` | Click by element ID, label, or coordinates | |
| 13 | | `type` | Type text into focused element or a target | |
| 14 | | `hotkey` | Keyboard shortcuts (cmd+s, return, escape, etc.) | |
| 15 | | `scroll` | Scroll up/down/left/right | |
| 16 | | `drag` | Drag between elements or coordinates | |
| 17 | | `apps` | List, launch, or activate apps | |
| 18 | | `screens` | List displays with resolution and scale | |
| 19 | | `window` | Move, resize, minimize, fullscreen, close windows | |
| 20 | | `ocr` | Takes a screenshot and runs Vision OCR on it. Returns text with x/y positions. Use `--store` to make results clickable (O1, O2, etc.). Use when `see` returns no elements. | |
| 21 | | `focus` | Show currently focused element | |
| 22 | | `find` | Search elements by text in latest snapshot | |
| 23 | | `clipboard` | Read/write system clipboard | |
| 24 | | `wait` | Wait for app launch or element to appear | |
| 25 | |
| 26 | Always pass `--json` for structured output. |
| 27 | |
| 28 | ## How to Work |
| 29 | |
| 30 | You are controlling a real macOS desktop. You cannot see anything unless you explicitly look. You cannot assume anything worked unless you verify. |
| 31 | |
| 32 | ### 1. Know your environment first |
| 33 | |
| 34 | Before doing anything, understand the display setup, what's running, and capture the current state of every screen: |
| 35 | |
| 36 | ``` |
| 37 | steer screens --json → which monitors exist, their resolution |
| 38 | steer apps --json → what apps are running |
| 39 | steer see --screen 0 --json → screenshot of screen 0 (primary) |
| 40 | steer see --screen 1 --json → screenshot of screen 1 (if exists) |
| 41 | ``` |
| 42 | |
| 43 | Take a screenshot of **each screen** returned by `steer screens`. Read them. This gives you a baseline of the desktop before you start making changes. |
| 44 | |
| 45 | ### 2. Focus the app, then verify |
| 46 | |
| 47 | Before interacting with any app, make sure it's the active window on the right screen: |
| 48 | |
| 49 | ``` |
| 50 | steer apps activate Safari --json |
| 51 | steer see --app Safari --json → verify it's in front, read the state |
| 52 | ``` |
| 53 | |
| 54 | ### 3. One action, then observe |
| 55 | |
| 56 | **NEVER cha |