macOS AppleScript Fallback
Use local shell + AppleScript for 4 tasks:
- Create reminder (Reminders)
- Create note (Notes)
- Create calendar event (Calendar)
- Send iMessage (Messages)
Prefer bundled scripts in scripts/ over ad-hoc inline AppleScript for consistency and compatibility.
Quick Start
Run these scripts directly:
# reminder
./scripts/create_reminder.sh "今晚8点吃晚饭" "2026-03-22 20:00:00"
# note (HTML body required)
./scripts/create_note.sh "<h1>武汉三日游</h1><p>Day1 黄鹤楼...</p>" "iCloud"
# calendar
./scripts/create_calendar_event.sh "跑步" "个人" "2026-03-23 08:00:00" "2026-03-23 08:30:00"
# iMessage
./scripts/send_imessage.sh "zhangqianyi1995@icloud.com" "武汉下周末天气:..."
Workflow
Step 1: Clarify user intent + required fields
- Reminder: title, optional datetime
- Note: title/body content (render as HTML), optional account name
- Calendar: title, calendar name, start datetime, end datetime
- iMessage: recipient (phone or Apple ID), message text
If missing required fields, ask one concise follow-up question.
Step 2: Execute script (not plugin)
Always call the corresponding script in scripts/.
Why:
- avoids low-version parser differences
- centralizes fallback logic
- easier to debug and publish
Step 3: Confirm result to user
- If script returns an object/id or
sent, report success. - If no output but exit code is 0, still report success and suggest user verify in app UI.
Step 4: On failure, diagnose quickly
Use checks from references/troubleshooting.md.
Most frequent root causes:
- macOS Automation permission prompt not approved
- locale-dependent date parsing format
- Messages iMessage service/account not initialized
- target calendar/account name mismatch
Compatibility Rules (important)
- Avoid locale-fragile date strings where possible.
- Messages: resolve service by
service type = iMessage, not by hard-coded service name. - Calendar: if named calendar doesn’t exist, fallback to first calendar.
- Notes: if account
iCloudis missing, fallback to default account. - Notes body uses HTML (
<h1>,<p>) for stable rendering.
Output style to user
Keep concise and concrete:
- what was created/sent
- key details (time/target)
- returned ID (if any)
- one-line next step if verification needed
Bundled Resources
scripts/
create_reminder.sh- args:
<title> ["YYYY-MM-DD HH:MM:SS"]
- args:
create_note.sh- args:
<html-body> [account-name]
- args:
create_calendar_event.sh- args:
<title> <calendar-name> <start> <end>
- args:
send_imessage.sh- args:
<buddy(phone/appleid)> <message>
- args:
references/
troubleshooting.md- permission/automation prompts
- date parsing and locale issues
- Messages service/account init
- calendar/account fallback checks
- diagnostic commands