macos-app-automation

Automate native macOS apps with AppleScript, URL schemes, System Events, and computer-use fallbacks.

115|9|Updated Aug 5, 2026
One-click install
npx skills add https://github.com/AtlasOmnia/donna-starter --skill macos-app-automation-atlasomnia
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: macos-app-automation
Source: https://github.com/AtlasOmnia/donna-starter/tree/main/skills/apple/macos-app-automation
Command: npx skills add https://github.com/AtlasOmnia/donna-starter --skill macos-app-automation-atlasomnia

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Controlling native macOS applications programmatically is unreliable: AppleScript calls hang on TCC permission prompts, GUI automation sessions expire, and Spotlight or CLI tools report misleading state. This Skill provides a verified automation ladder and troubleshooting playbooks so app control tasks succeed or fail with accurate, evidence-based diagnoses. ## Core Features & Use Cases - Layered automation ladder: Escalates from AppleScript dictionaries to URL schemes, System Events accessibility scripting, and finally Hermes computer-use GUI control, verifying each layer before promising capability. - TCC/Automation permission diagnosis: Distinguishes permission blocks from genuine unscriptability using tccd log inspection, and identifies the exact execution identity that needs approval. - App-specific playbooks: Covers Apple Mail multi-account search, Apple Notes bulk property fetching, Safari WebDriver testing, Things 3, Terminal recovery, Electron/Tauri smoke testing, iCloud dataless files, and desktop launcher creation. - Use Case: A user asks whether a message exists in their email. The Skill inventories CLI mail accounts, falls back to Apple Mail's configured Google account via bounded AppleScript probes, and reports the exact account, folder, and date scope searched instead of falsely claiming the message is absent. ## Quick Start Ask the assistant to check whether it can automate a specific macOS app, for example by requesting it to verify AppleScript access to Apple Mail and search recent messages.

Frequently Asked Questions about macos-app-automation

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I automate a native macOS app with AppleScript?

Start by locating the app's bundle ID with osascript, verify basic access by reading its version, then inspect its scripting dictionary with sdef. Test bounded object reads before attempting any create, update, or delete operations.

Why does AppleScript hang on object operations but version reads work?

This pattern usually means macOS TCC Automation permission is blocking the real execution identity, not that the app is unscriptable. Inspect tccd logs for TCCAccessRequestIndirect entries and grant Automation permission to the exact controller named, such as Terminal or Python.

How do I search Apple Mail across multiple accounts?

Inventory the accounts visible to your CLI mail tool first, then probe Apple Mail's configured accounts with bounded AppleScript queries. Search sender and subject variants separately per mailbox, and report the exact account, folder, and date scope searched.

Can I use Safari for automated browser testing instead of Chrome?

Yes, through safaridriver with Selenium after enabling Remote Automation and running sudo safaridriver --enable. Validate every screenshot's pixels because Safari WebDriver can return successful but all-black PNGs, and never substitute Chromium results as Safari evidence.

What should I do when computer_use reports the cua-driver session ended?

Revive the exact session ID from the error through the direct cua-driver CLI with start_session, then continue via direct calls rather than repeating the failed wrapper call. Change the wrapper call signature or go fully direct if the repeated-call guardrail has fired.

Why does sqlite3 fail to open Apple Notes or other protected app databases?

TCC denies direct sqlite3 access to protected app containers like NoteStore.sqlite, returning authorization denied even in read-only mode. Use AppleScript bulk property fetches or raw byte reads via strings instead of building a sqlite query path.