iCalendar Sync
Secure iCloud Calendar operations for OpenClaw with CalDAV and macOS native bridge providers. Use when tasks require calendar listing, event retrieval, event...
Secure iCloud Calendar operations for OpenClaw with CalDAV and macOS native bridge providers. Use when tasks require calendar listing, event retrieval, event...
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Use this skill to perform iCloud calendar CRUD operations from OpenClaw agents.
Use App-Specific Passwords only (never the primary Apple ID password).
Prefer keyring storage:
python -m icalendar_sync setup --username user@icloud.com
Use non-interactive setup for automation:
export ICLOUD_USERNAME="user@icloud.com" export ICLOUD_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx" python -m icalendar_sync setup --non-interactive
Use file storage only when keyring is unavailable (headless or GUI-restricted runtime):
python -m icalendar_sync setup --non-interactive --storage file --config ~/.openclaw/icalendar-sync.yaml
--provider auto: macOS uses native bridge, non-macOS uses CalDAV.--provider caldav: force direct iCloud CalDAV.--provider macos-native: force Calendar.app bridge (macOS only).For CalDAV diagnostics, add:
--debug-http --user-agent "your-agent/1.0"
List calendars:
python -m icalendar_sync list
Get events:
python -m icalendar_sync get --calendar "Personal" --days 7
Create event:
python -m icalendar_sync create --calendar "Personal" --json '{ "summary": "Meeting", "dtstart": "2026-02-15T14:00:00+03:00", "dtend": "2026-02-15T15:00:00+03:00" }'
Update event (simple):
python -m icalendar_sync update --calendar "Personal" --uid "event-uid" --json '{"summary":"Updated title"}'
Update recurring event instance:
python -m icalendar_sync update \ --calendar "Work" \ --uid "series-uid" \ --recurrence-id "2026-03-01T09:00:00+03:00" \ --mode single \ --json '{"summary":"One-off change"}'
Modes for recurring updates:
single: update one instance (use --recurrence-id)all: update whole seriesfuture: split series and update this+future (use --recurrence-id)Delete event:
python -m icalendar_sync delete --calendar "Personal" --uid "event-uid"
For
create, require at least:
summary (string)dtstart (ISO datetime)dtend (ISO datetime, must be later than dtstart)Optional fields:
descriptionlocationstatuspriority (0-9)alarmsrrule0600).If CalDAV auth/network fails on macOS and provider is
auto/caldav, switch to macos-native and retry the same operation.
If JSON payload is supplied as file path, ensure file size stays within safe limits before parsing.
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.