Creates macOS Calendar events with tiered sound alarms and paired Reminders for scheduling meetings, RSVPs, and reminders.
From productivity-toolsnpx claudepluginhub terrylica/cc-skills --plugin productivity-toolsThis skill is limited to using the following tools:
references/evolution-log.mdreferences/sound-reference.mdExecutes pre-written implementation plans: critically reviews, follows bite-sized steps exactly, runs verifications, tracks progress with checkpoints, uses git worktrees, stops on blockers.
Guides idea refinement into designs: explores context, asks questions one-by-one, proposes approaches, presents sections for approval, writes/review specs before coding.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Create macOS Calendar events with tiered sound alarms and paired Reminders so events are never missed across Mac and iOS.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
These rules are NON-NEGOTIABLE. Violating any of them defeats the purpose of this skill.
Every event MUST create BOTH:
sound alarm entries (custom sound per tier)Never create one without the other.
sound alarm, NOT display alarm-- CORRECT: audible alert with custom sound
make new sound alarm at end of sound alarms with properties {trigger interval:-60, sound name:"Glass"}
-- WRONG: silent visual banner only
make new display alarm at end of display alarms with properties {trigger interval:-60}
Each alarm supports its own sound name property. Use DIFFERENT sounds for different tiers so the user knows which alert level it is by sound alone.
Short sounds get missed and ignored. NEVER use sounds under 1.4 seconds.
APPROVED sounds only:
| Sound | Duration | Use For |
|---|---|---|
| Funk | 2.16s | At event time (loudest) |
| Glass | 1.65s | 1 hour before |
| Pop | 1.63s | Morning-of / 3 hrs before |
| Sosumi | 1.54s | Day-before |
| Ping | 1.50s | 30 min before |
| Submarine | 1.49s | Alternative |
| Blow | 1.40s | Gentle early reminder |
BANNED sounds: Hero, Basso, Bottle, Purr, Frog, Morse, Tink (all < 1.4s)
Minimum alarm tiers for any event:
| Tier | Trigger | Calendar Sound | Reminder |
|---|---|---|---|
| 1 day before | -1440 min | Blow | "TOMORROW: ..." |
| Morning-of 9 AM | Absolute | Sosumi | "TODAY: ..." |
| 3 hours before | -180 min | Pop | (via Calendar) |
| 1 hour before | -60 min | Glass | (via Calendar) |
| 30 min before | -30 min | Ping | (via Calendar) |
| At event time | 0 min | Funk | Due-time reminder |
Calendar notifications must be enabled in System Settings:
Open with: open "x-apple.systempreferences:com.apple.Notifications-Settings.extension"
1. Extract event details (title, date, time, location, notes, RSVP)
2. Create Calendar event with 6-tier sound alarms (Blow, Sosumi, Pop, Glass, Ping, Funk)
3. Create 3 Reminders (TOMORROW, TODAY morning, due-time)
4. Verify event and reminders created
5. Report full schedule to user
1. Ask user for: event name, date/time, duration, location
2. Create Calendar event with 6-tier sound alarms
3. Create 3 Reminders
4. Verify event and reminders created
5. Report full schedule to user
1. Create test Calendar event 3 min in future with sound alarms (1 min, 2 min tiers)
2. Create test Reminder 2 min in future
3. Wait for user confirmation of notifications
4. Clean up test event and reminders
NEVER use date "STRING" in AppleScript. String-based date parsing is locale-dependent and silently produces wrong results:
| Anti-pattern | What happens | Example |
|---|---|---|
date "April 1, 2026 at 6:00:00 PM" | On 24h systems, "PM" is ignored → 06:00 | 4 failures in amonic session |
date "2026-04-01 18:00:00" | ISO parsed as individual numbers → year 12169 | 1 failure |
set month before set day to 1 | Day 31 + April (30 days) → rolls to May 1 | 1 failure |
ALWAYS use programmatic date construction:
-- Build date safely: day-first-then-month prevents rollover
set d to current date
set day of d to 1 -- safe floor FIRST (prevents month rollover)
set month of d to April
set year of d to 2026
set day of d to 1 -- now set actual target day
set hours of d to 18 -- 24h format, no AM/PM ambiguity
set minutes of d to 0
set seconds of d to 0
tell application "Calendar"
set output to ""
repeat with c in calendars
set output to output & name of c & " (writable:" & writable of c & ")" & linefeed
end repeat
output
end tell
Use the first writable:true calendar. Never assume "Home" or "Calendar" exists.
tell application "Calendar"
-- Build start date programmatically
set startDate to current date
set day of startDate to 1
set month of startDate to MONTH_CONSTANT
set year of startDate to YEAR_INT
set day of startDate to DAY_INT
set hours of startDate to HOUR_24
set minutes of startDate to 0
set seconds of startDate to 0
-- Build end date (1 hour later)
set endDate to startDate + 1 * hours
tell calendar "WRITABLE_CALENDAR_NAME"
set newEvent to make new event with properties {summary:"EVENT_NAME", start date:startDate, end date:endDate, location:"LOCATION", description:"NOTES"}
tell newEvent
make new sound alarm at end of sound alarms with properties {trigger interval:-1440, sound name:"Blow"}
make new sound alarm at end of sound alarms with properties {trigger interval:-180, sound name:"Pop"}
make new sound alarm at end of sound alarms with properties {trigger interval:-60, sound name:"Glass"}
make new sound alarm at end of sound alarms with properties {trigger interval:-30, sound name:"Ping"}
make new sound alarm at end of sound alarms with properties {trigger interval:0, sound name:"Funk"}
end tell
end tell
reload calendars
end tell
tell application "Calendar"
tell calendar "WRITABLE_CALENDAR_NAME"
set matches to (every event whose summary is "EVENT_NAME" and start date > (current date))
repeat with e in matches
log (summary of e) & " | " & (start date of e) & " → " & (end date of e)
end repeat
end tell
end tell
tell application "Reminders"
set defaultList to default list
-- Build date programmatically (same pattern as Calendar)
set eventDate to current date
set day of eventDate to 1
set month of eventDate to MONTH_CONSTANT
set year of eventDate to YEAR_INT
set day of eventDate to DAY_INT
set hours of eventDate to HOUR_24
set minutes of eventDate to 0
set seconds of eventDate to 0
-- Due-time reminder
make new reminder in defaultList with properties {name:"EVENT_NAME", due date:eventDate, body:"LOCATION\nNOTES"}
-- Day-before
make new reminder in defaultList with properties {name:"TOMORROW: EVENT_NAME", due date:(eventDate - 1 * days), body:"Event tomorrow! LOCATION"}
-- Morning-of at 9 AM
set morningDate to eventDate
set hours of morningDate to 9
set minutes of morningDate to 0
make new reminder in defaultList with properties {name:"TODAY: EVENT_NAME", due date:morningDate, body:"Today! LOCATION"}
end tell
After modifying this skill:
hooks/calendar-reminder-sync.ts) aligned with skill rulessound alarm not display alarmAfter this skill completes, check before closing:
Only update if the issue is real and reproducible — not speculative.