skills/axctl/SKILL.md
macOS Accessibility CLI for automating native apps. Use when automating System Settings, Finder, Notes, or any native macOS app. Enables clicking buttons, typing text, reading UI state, and performing actions via the Accessibility API.
npx skillsauth add svenflow/dispatch axctlInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A CLI tool for automating macOS native applications via the Accessibility API. Like pyax but with interaction capabilities (click, type, actions).
Location: ~/code/axctl/axctl
DO NOT use for:
/chrome-control skill instead)The app must be running and have a window. To open apps:
open -a "System Settings"
open -a "Finder"
open -a "Notes"
| Command | Purpose |
|---------|---------|
| apps | List running apps with windows |
| tree | Dump accessibility tree |
| search | Find elements by criteria |
| click | Click buttons, checkboxes, etc. |
| action | Perform specific actions (AXPress, AXOpen) |
| type | Type text into text fields |
| get | Get attribute value from element |
| set | Set attribute value on element |
| focus | Bring app to foreground |
| wait | Wait for element to appear |
~/code/axctl/axctl apps
Lists all running applications that have windows. Useful to verify app names.
# Basic tree (shows AXRole, AXTitle, AXValue)
~/code/axctl/axctl tree "System Settings"
# With ref IDs for interaction
~/code/axctl/axctl tree "System Settings" --refs
# Show available actions on each element
~/code/axctl/axctl tree "System Settings" --list-actions
# All attributes
~/code/axctl/axctl tree "Notes" --all-attributes
# JSON output
~/code/axctl/axctl tree "Finder" --json
# Web area only (for apps with web views)
~/code/axctl/axctl tree "Safari" --web
Tip: Use --refs to get ref IDs, then use those refs in click/action/type commands.
# Find by exact title
~/code/axctl/axctl search "System Settings" --title "Notes"
# Find by role
~/code/axctl/axctl search "System Settings" --role AXButton
# Find by value
~/code/axctl/axctl search "Notes" --value "My note content"
# Find containing text (case-insensitive)
~/code/axctl/axctl search "System Settings" --contains "iCloud"
# Show available actions
~/code/axctl/axctl search "System Settings" --contains "Notes" --list-actions
# JSON output
~/code/axctl/axctl search "Finder" --role AXRow --json
The output shows index numbers you can use with --index in other commands.
# Click by title
~/code/axctl/axctl click "System Settings" --title "Notes"
# Click by value
~/code/axctl/axctl click "System Settings" --value "iCloud"
# Click by role (first match)
~/code/axctl/axctl click "Finder" --role AXButton
# Click specific match by index
~/code/axctl/axctl click "System Settings" --role AXCheckBox --index 2
# Click by description
~/code/axctl/axctl click "Notes" --desc "New Note"
# Click by ref ID (from tree --refs)
~/code/axctl/axctl click "System Settings" --ref ref_42
How it works: Tries AXPress first, then AXOpen, then first available action.
# Press action (same as click for most elements)
~/code/axctl/axctl action "System Settings" AXPress --title "Notes"
# Open action (for rows, files)
~/code/axctl/axctl action "Finder" AXOpen --role AXRow --index 0
# Show default action (for buttons)
~/code/axctl/axctl action "Notes" AXShowDefaultUI --role AXButton --index 0
# Cancel action
~/code/axctl/axctl action "System Settings" AXCancel --role AXSheet
Common actions:
AXPress - Click/press elementAXOpen - Open file/folderAXShowMenu - Show context menuAXConfirm - Confirm dialogAXCancel - Cancel dialogAXRaise - Bring to frontAXIncrement / AXDecrement - For sliders# Type into first text field
~/code/axctl/axctl type "Notes" "Hello world" --role AXTextArea
# Type into specific field by title
~/code/axctl/axctl type "Safari" "https://example.com" --title "Address and Search"
# Type by ref
~/code/axctl/axctl type "System Settings" "search term" --ref ref_15
Note: This sets AXValue directly, which works for most text fields. For some apps you may need to use osascript keystroke simulation.
# Get value of a checkbox
~/code/axctl/axctl get "System Settings" AXValue --role AXCheckBox --index 0
# Get title of focused element
~/code/axctl/axctl get "Finder" AXTitle --role AXTextField
# Get text content
~/code/axctl/axctl get "Notes" AXValue --role AXTextArea
# Get app's frontmost status
~/code/axctl/axctl get "System Settings" AXFrontmost
# Set text value
~/code/axctl/axctl set "Notes" AXValue "New content" --role AXTextArea
# Set checkbox (boolean)
~/code/axctl/axctl set "System Settings" AXValue true --role AXCheckBox --bool
# Set slider (integer)
~/code/axctl/axctl set "System Settings" AXValue 50 --role AXSlider --int
~/code/axctl/axctl focus "System Settings"
~/code/axctl/axctl focus "Finder"
Brings the app to the foreground and activates it.
# Wait for element with title (default 30s timeout)
~/code/axctl/axctl wait "System Settings" --title "Notes"
# Wait with custom timeout
~/code/axctl/axctl wait "Safari" --contains "Loading" --timeout 60
# Wait for element to appear after navigation
~/code/axctl/axctl wait "System Settings" --role AXCheckBox --timeout 10
Useful for automation scripts where UI takes time to load.
# Open System Settings
open -a "System Settings"
sleep 2
# Focus it
~/code/axctl/axctl focus "System Settings"
# Navigate to Apple ID
~/code/axctl/axctl click "System Settings" --title "Apple Account"
sleep 1
# Click iCloud
~/code/axctl/axctl click "System Settings" --title "iCloud"
sleep 1
# Find and click Notes
~/code/axctl/axctl click "System Settings" --title "Notes"
# Get the text from Notes app
~/code/axctl/axctl get "Notes" AXValue --role AXTextArea
# Open Finder to specific path
open ~/Documents
# Click on a file (first row)
~/code/axctl/axctl click "Finder" --role AXRow --index 0
# Get checkbox value (0 or 1)
~/code/axctl/axctl get "System Settings" AXValue --role AXCheckBox --title "Sync this Mac"
The app name must match what appears in the menu bar. Check with axctl apps.
When unsure about element names, search first:
~/code/axctl/axctl search "System Settings" --contains "iCloud" --list-actions
After opening an app or navigating, add a sleep or use wait:
open -a "System Settings"
sleep 2
# or
~/code/axctl/axctl wait "System Settings" --title "Apple Account"
When there are multiple matches, use --index:
# Click the 3rd checkbox
~/code/axctl/axctl click "System Settings" --role AXCheckBox --index 2
System Settings changes may trigger password dialogs - those require manual input.
To check state: get ... AXValue returns 0 (unchecked) or 1 (checked)
To set state: set ... AXValue 1 --int or use click to toggle
If typing doesn't work, try clicking the field first:
~/code/axctl/axctl click "App" --role AXTextField
~/code/axctl/axctl type "App" "text" --role AXTextField
| Role | What It Is | |------|------------| | AXButton | Clickable button | | AXCheckBox | Checkbox (value 0/1) | | AXTextField | Single-line text input | | AXTextArea | Multi-line text input | | AXStaticText | Read-only text label | | AXRow | Table/list row | | AXCell | Table cell | | AXPopUpButton | Dropdown menu | | AXSlider | Slider control | | AXRadioButton | Radio button | | AXTabGroup | Tab container | | AXTab | Individual tab | | AXSheet | Modal dialog | | AXWindow | Application window | | AXGroup | Container/grouping | | AXScrollArea | Scrollable region |
~/code/axctl/axctl tree "App Name" --all-attributes --list-actions
# Search with multiple criteria
~/code/axctl/axctl search "App" --contains "keyword" --list-actions --json
~/code/axctl/axctl apps | grep -i "app name"
~/code/axctl/axctl version
# axctl 1.0.0
development
Use when building React/Next.js components, dashboards, admin panels, apps, or any web interface. Trigger words - react, frontend, ui, dashboard, component, interface, web app, polish, audit, design review.
tools
Track flight status and get FlightAware links. Use when asked about flights, flight status, arrival times, or flight tracking. Trigger words - flight, flying, UA, AA, DL, landing, arriving, departure.
development
Query real-time locations of people sharing via Find My. Look up where someone is, reverse geocode GPS coordinates, set up geofence alerts. Trigger words - findmy, find my, location, where is, geofence, track location.
tools
Access Figma designs via MCP or Chrome. Use when asked about Figma files, design mockups, wireframes, or UI designs. Trigger words - figma, design, mockup, wireframe, UI design, FigJam.