flowdeck ui mac to run automation commands.
What It Does
Use macOS automation to:- Capture screenshots and accessibility trees from any running macOS app.
- Click elements, type text, scroll, drag, and navigate menus.
- Wait for UI state changes and assert UI conditions.
- Manage windows, launch/quit apps, and send keyboard shortcuts.
When to Use It
- Smoke tests for macOS app flows.
- Scripted demos or QA checks on native Mac apps.
- AI-driven interaction loops that need consistent UI state.
- Automating menu-driven workflows or window management.
Prerequisites
macOS automation requires two system permissions:- Accessibility — allows FlowDeck to read the accessibility tree and inject input.
- Screen Recording — allows FlowDeck to capture window screenshots (macOS 14+).
Quick Start
The
--app flag accepts an app name (e.g., "Safari"), bundle ID (e.g., "com.apple.Safari"), or PID (e.g., "12345"). It is required on most commands.Background Mode (the default)
Action commands drive the app without moving your cursor or stealing focus, and you don’t pass a flag to get that. Events are delivered straight to the target app through the accessibility layer (and window-targeted system events for coordinate clicks), so the app doesn’t need to be frontmost — you keep working while automation runs.Both element targets and
--point coordinates work in the background. An accessibility id or label is still the more robust choice, because coordinates break when the layout shifts.Foreground Mode (--foreground)
--foreground opts out: events go to the global event tap, which moves your real cursor and brings the app forward. Five commands have no background path and refuse to run without it:
--background still parses but is a no-op, kept so existing scripts don’t break. Earlier versions had this backwards: foreground was the default and --background was opt-in, so one forgotten flag interrupted whatever you were doing.Tangible Workflows
1) Automate a macOS app form fill
Use this to fill out a form in a native macOS app and verify the result.2) Drive a menu-based workflow
3) Window management
4) Verify a build output visually
Build and run your macOS app, then capture its UI:/tmp/current-ui.png with the expected design and iterate.
App Targeting
The--app flag resolves targets in this order:
- Numeric — treated as a PID (e.g.,
--app "12345") - Contains a dot — treated as a bundle ID (e.g.,
--app "com.apple.Safari") - Otherwise — fuzzy-matched against running app names (e.g.,
--app "Safari")
Differences from iOS Simulator Automation
Performance and Reliability Tips
- Prefer accessibility identifiers and use
--by-idfor clicks, finds, and assertions (fastest and most reliable). - For automation loops, start a session and read
latest-tree.json/latest.jpgfrom disk instead of callingscreenevery step. - For agent loops, run
flowdeck ui mac session start --app "MyApp" --jsonto capture tree + screenshots in the background and read from~/.flowdeck/automation/mac-sessions/<session-short-id>/(uselatest.json,latest.jpg, andlatest-tree.jsonto find the newest capture). Starting a session stops any active macOS UI session first. session startreturns the session directory pluslatest_screenshotandlatest_treepaths in JSON.- macOS UI sessions stop automatically when the owner process that started them exits. Set
FLOWDECK_OWNER_PIDto bind a session to a specific owner process. - Use
flowdeck ui mac screen --tree --json --app "MyApp"when you only need the accessibility tree (no screenshot). - Coordinates are screen-absolute points matching the values returned by
find. Do not scale by Retina factors. - Use
flowdeck ui mac findto discover element labels and IDs before interacting. - For smooth scrolling, use
--smoothon thescrollcommand. - Tune input timing with environment variables:
FLOWDECK_HID_STABILIZATION_MS(default 25) for click/gesture stabilityFLOWDECK_TYPE_DELAY_MS(default 1) for typing speed
