Apple Calendar
SkillProductivityRead and create Calendar.app events through a local macOS helper. Use when the user wants to inspect Apple Calendar calendars, summarize a day, check upcoming events, or create a new Calendar.app event from Codex.
Use Apple Calendar in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Apple Calendar and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Apple Calendar skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by hashgraph-online/awesome-codex-plugins in plugins/matk0shub/apple-productivity-mcp/skills/apple-calendar/SKILL.md and read by Ahel’s review.
Overview
Use this skill to work with the local macOS Calendar app through the bundled helper at ../../scripts/apple_calendar.py. The helper now uses an EventKit/Swift backend for data operations. Prefer the quick commands today, tomorrow, agenda, free, and add over lower-level calls unless you need raw JSON or direct lifecycle operations like update-event, delete-event, reminder changes, or .ics export/import.
Workflow
- Confirm the task is meant for Apple Calendar on macOS, not Google Calendar or Outlook.
- Never run Calendar helper commands in parallel. The helper now serializes access to Calendar.app, and parallel calls only add latency.
- For daily summaries, start with
todayortomorrow. These default to the configured personal calendars in../../config.jsoninstead of scanning every subscribed calendar. - Use
agendaorlist-eventsonly when you need a specific date window or raw JSON payload. - Normalize relative dates into exact local timestamps before reasoning about conflicts or creating an event.
- Prefer
add --if-freefor new events so overlapping slots are blocked unless the user explicitly wants a conflict. - For changing an existing event, use
find-eventsfirst when you do not already have the eventuid.
Commands
List calendars and configured aliases:
/usr/bin/python3 ../../scripts/apple_calendar.py list-calendars
Today's agenda across the configured personal calendars:
/usr/bin/python3 ../../scripts/apple_calendar.py today
Tomorrow's agenda:
/usr/bin/python3 ../../scripts/apple_calendar.py tomorrow
List one day's events from a named calendar or alias:
/usr/bin/python3 ../../scripts/apple_calendar.py list-events \
--calendar "prace" \
--date today
Human-readable agenda for a specific day:
/usr/bin/python3 ../../scripts/apple_calendar.py agenda \
--date 2026-03-27
Find free windows:
/usr/bin/python3 ../../scripts/apple_calendar.py free \
--date today \
--slot-minutes 30
Quick-add a new event with conflict protection:
/usr/bin/python3 ../../scripts/apple_calendar.py add \
--calendar "doma" \
--title "Design Review" \
--date tomorrow \
--start-time 15:00 \
--duration-minutes 30 \
--location "Zoom" \
--notes "Bring the launch checklist." \
--if-free
Find an event by title and day:
/usr/bin/python3 ../../scripts/apple_calendar.py find-events \
--calendar doma \
--title "Stolní Tenis" \
--date today
Update an event:
/usr/bin/python3 ../../scripts/apple_calendar.py update-event \
--calendar doma \
--title "Stolní Tenis" \
--date today \
--set-location "Velká nad Veličkou 276"
Replace reminders:
/usr/bin/python3 ../../scripts/apple_calendar.py set-reminder \
--calendar doma \
--title "Stolní Tenis" \
--date today \
--minutes-before 30
Clear reminders:
/usr/bin/python3 ../../scripts/apple_calendar.py clear-reminders \
--calendar doma \
--title "Stolní Tenis" \
--date today
Export to .ics:
/usr/bin/python3 ../../scripts/apple_calendar.py export-ics \
--calendar doma \
--date tomorrow \
--days 1 \
--output /tmp/my-events.ics
Import from .ics:
/usr/bin/python3 ../../scripts/apple_calendar.py import-ics \
--calendar doma \
--input /tmp/my-events.ics \
--if-free
Delete an event:
/usr/bin/python3 ../../scripts/apple_calendar.py delete-event \
--calendar doma \
--title "Stolní Tenis" \
--date today
Safety
- Treat
addandcreate-eventas write operations. - Do not invent calendar names. Use the exact name or alias returned by
list-calendars. - The helper serializes Calendar.app access with a lock and timeout; avoid parallel tool calls into the helper.
- Use
--if-freeby default for new events. Use--allow-conflictonly when the user explicitly wants an overlapping event. - Duplicate detection defaults to
title+start+end. Set--dedupe-by noneonly when a true duplicate is intended. - macOS may prompt for Calendar automation access the first time the helper runs.
Output Conventions
- Use exact dates and local times in the response.
- Summaries should explain why a window is free or blocked instead of dumping raw JSON.
- When creating an event, echo the final title, calendar, start, end, and any location or notes that were applied.
- When
today,tomorrow,agenda, orfreeis sufficient, prefer those outputs over raw JSON.
Signals
- GitHub stars
- 1k
- Forks
- 316
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
apple-calendar-hashgraph-online- Source
- github.com/hashgraph-online/awesome-codex-plugins
github.com/hashgraph-online/awesome-codex-plugins
Related picks
Skill · emilkowalski
The pick for Swiftswift-concurrency-expert
Skill · davila7
The pick for Swiftoutlook_calendar
Skill · win4r
The pick for Outlookanalyzing-outlook-pst-for-email-forensics
Skill · mukul975
The pick for Outlooksocial
Skill · coreyhaines31
More in Productivitygws-calendar
Skill · googleworkspace
More in Productivity