| name | macos-native-apps |
| description | Control macOS native apps from the terminal — Apple Notes (memo CLI), iMessage/SMS (imsg CLI), and Find My (AppleScript + screenshot). All tools require macOS, Homebrew installations, and appropriate system permissions (Automation, Full Disk Access, Screen Recording). |
| license | MIT |
| metadata | {"version":"1.0.1","hermes":{"tags":["macOS","Apple","native-apps","CLI","notes","messaging","location","iMessage","FindMy"],"related_skills":["macos-applescript-integration"]}} |
macOS Native Apps — Terminal Control
Control macOS stock applications from the terminal. All tools are macOS-only and require appropriate system permissions.
Common Prerequisites
All tools need:
- macOS with the relevant app signed into iCloud
- Homebrew (
brew) installed
- Terminal app granted needed permissions (System Settings → Privacy)
- Confirm destructive actions (sending messages, deleting notes) with the user before executing
Section A: Apple Notes — memo CLI
Manage Apple Notes via memo. Notes sync across Apple devices via iCloud.
Setup
brew tap antoniorodr/memo && brew install antoniorodr/memo/memo
Grant Automation access to Notes.app (System Settings → Privacy → Automation).
Commands
memo notes
memo notes -f "Folder Name"
memo notes -s "query"
memo notes -a
memo notes -a "Note Title"
memo notes -e
memo notes -d
memo notes -m
memo notes -ex
Limitations
- Cannot edit notes containing images or attachments
- Interactive prompts need terminal access (
pty=true if running through a non-tty harness)
Section B: iMessage/SMS — imsg CLI
Send and read iMessages/SMS via macOS Messages.app using imsg.
Setup
brew install steipete/tap/imsg
Needs Full Disk Access for terminal (System Settings → Privacy → Full Disk Access) and Automation permission for Messages.app.
Safety
Always echo the resolved recipient and message back to the user before invoking imsg send — phone-number lookups can match unexpected chats.
Commands
imsg chats --limit 10 --json
imsg history --chat-id 1 --limit 20 --json
imsg history --chat-id 1 --limit 20 --attachments --json
imsg send --to "+141****1212" --text "Hello!"
imsg send --to "+141****1212" --text "Check this" --file /path/to/image.jpg
imsg send --to "+141****1212" --text "Hi" --service imessage
imsg send --to "+141****1212" --text "Hi" --service sms
Read Mode
imsg history --chat-id 1 --limit 5 --json | python3 -c "import sys,json; msgs=json.load(sys.stdin); [print(f'[{m[\"sender\"]}] {m.get(\"text\",\"(attachment)\")}') for m in msgs]"
Section C: Find My (Devices & AirTags)
Track Apple devices and AirTags via FindMy.app. No CLI exists — drive via AppleScript + screenshot + vision_analyze.
Setup
- Devices/AirTags already registered in iCloud
- Screen Recording permission for terminal (System Settings → Privacy → Screen Recording)
- Recommended:
brew install steipete/tap/peekaboo for reliable UI clicks
Method 1 — AppleScript + screencapture (no extra deps)
osascript -e 'tell application "FindMy" to activate'
sleep 3
screencapture -w -o /tmp/findmy.png
Then:
vision_analyze(image_url="/tmp/findmy.png",
question="What devices/items are shown and what are their locations?")
Switch tabs to see People/Devices/Items:
osascript -e '
tell application "FindMy" to activate
delay 1
tell application "System Events"
tell process "FindMy"
click button "Items" of toolbar 1 of window 1
end tell
end tell'
Method 2 — Peekaboo (recommended for reliability)
peekaboo FindMy --click "Items"
peekaboo FindMy --dump
peekaboo FindMy --snapshot /tmp/findmy.png
Tabs available
- People — friends who shared their location
- Devices — all Apple devices on your iCloud
- Items — AirTags and third-party Find My network items
Related Skills
macos-applescript-integration — general AppleScript patterns for macOS apps