Loading...
Loading...
Automates macOS apps via Apple Events using AppleScript (discovery), JXA (legacy), and PyXA (modern Python). Use when asked to "automate Mac apps", "write AppleScript", "JXA scripting", "osascript automation", or "PyXA Python automation". Foundation skill for all macOS app automation.
npx skill4agent add spillwavesolutions/automating-mac-apps-plugin automating-mac-appstell application "Finder" to get name of first item in desktoptry { ... } catch (e) { console.log('Error:', e.message); }try ... on error errMsg ... end tryosascript -e 'tell application "Finder" to get name of home'osascripttell application "System Events" to click button 1 of window 1 of process "App"Application('System Events').processes.byName('App').windows[0].buttons[0].click()Application("App").running()skills/automating-mac-apps/scripts/request_automation_permissions.sh.pyskills/automating-<app>/scripts/set_up_<app>_automation.{sh,py}skills/automating-voice-memos/scripts/set_up_voice_memos_automation.shapp.lists().reminders().title()# Install PyXA
pip install mac-pyxa
# Or with pip3 explicitly
pip3 install mac-pyxa
# Requirements:
# - Python 3.10+ (check with: python3 --version)
# - macOS 12+ (Monterey or later recommended)
# - PyObjC is installed automatically as a dependency
# Verify installation
python3 -c "import PyXA; print(f'PyXA {PyXA.__version__} installed successfully')"Note: All app-specific skills in this plugin that show PyXA examples assume PyXA is installed. See this section for installation.
import PyXA
# Launch Safari and navigate
safari = PyXA.Safari()
safari.activate()
safari.open_location("https://example.com")
# Get current tab URL
current_url = safari.current_tab.url
print(f"Current URL: {current_url}")import PyXA
reminders = PyXA.Reminders()
work_list = reminders.lists().by_name("Work")
# Add new reminder
new_reminder = work_list.reminders().push({
"name": "Review PyXA documentation",
"body": "Explore modern macOS automation options"
})pip install pyobjc
# Installs bridges for major frameworksfrom Foundation import NSAppleScript
# Execute AppleScript from Python
script_source = '''
tell application "Safari"
return URL of current tab
end tell
'''
script = NSAppleScript.alloc().initWithSource_(script_source)
result, error = script.executeAndReturnError_(None)
if error:
print(f"Error: {error}")
else:
print(f"Current Safari URL: {result.stringValue()}")from ScriptingBridge import SBApplication
# Control Mail app
mail = SBApplication.applicationWithBundleIdentifier_("com.apple.Mail")
inbox = mail.inboxes()[0] # Access first inbox
# Get unread message count
unread_count = inbox.unreadCount()
print(f"Unread messages: {unread_count}")automating-[app]ci-cd-tccmastering-applescriptJSON.stringify(result)console.log(JSON.stringify({files: files, count: files.length}))osascriptautomating-mac-apps/references/basics.mdautomating-mac-apps/references/applescript-basics.mdautomating-mac-apps/references/recipes.mdautomating-mac-apps/references/cookbook.mdautomating-mac-apps/references/applescript-performance.mdautomating-mac-apps/references/ci-cd-tcc.mdautomating-mac-apps/references/shell-environment.mdautomating-mac-apps/references/ui-scripting-inspector.mdautomating-mac-apps/references/pyxa-core-api-reference.mdautomating-mac-apps/references/pyxa-basics.mdautomating-mac-apps/references/applescript-to-pyxa-conversion.mdautomating-mac-apps/references/translation-checklist.mdautomating-mac-apps/references/helpers.jswhoseautomating-mac-apps/references/whos-batching.mdautomating-mac-apps/references/dictionary-strategies.mdautomating-mac-apps/references/applescript-asobjc.mdweb-browser-automation