Imported from saorsa-labs/fae (
native/macos/Fae/Sources/Fae/Resources/Skills/calendar-caldav/SKILL.md). Install upstream withnpx skills add saorsa-labs/fae --skill calendar-caldav. Copyright stays with the author.
Calendar CalDAV
Calendar CalDAV lets Fae work with cross-platform calendar servers, including iCloud and Google CalDAV, through a Python executable skill. It is additive to the privileged macOS EventKit path in AppleTools.swift.
When to Use
- The user asks about calendars in a cross-platform or non-Apple context.
- The user wants to list upcoming events from iCloud/Google CalDAV using app-specific credentials.
- The user asks to create, update, or delete a simple event on a configured CalDAV calendar.
- Prefer the built-in
calendartool for macOS-local EventKit workflows unless portability is the point.
Prerequisites
- Credentials must be stored in Keychain and injected with
run_skill.secret_bindings; never store passwords in files or prompts. - Required environment variables:
CALDAV_URL,CALDAV_USERNAME, andCALDAV_PASSWORD. - Optional environment variables:
CALDAV_CALENDARfor the display name to prefer,CALDAV_DEFAULT_TZfor floating times. - iCloud users need an app-specific password. Google users need the correct CalDAV URL and app/OAuth credential flow for their account.
- The script uses
uv run --scriptwith inline Python dependencies (caldav,vobject); Fae's Python runtime handles installation.
How to Run
Use run_skill with skill calendar-caldav and script calendar_caldav.
{
"name":"calendar-caldav",
"script":"calendar_caldav",
"params":{"action":"list_events","days":7},
"secret_bindings":{
"CALDAV_URL":"productivity.calendar.url",
"CALDAV_USERNAME":"productivity.calendar.username",
"CALDAV_PASSWORD":"productivity.calendar.password"
}
}
Quick Reference
| Action | Required params | Purpose |
|---|---|---|
status |
none | Check environment readiness without revealing secrets |
list_calendars |
none | List visible calendars for the principal |
list_events |
optional days, calendar, start, end |
List events in a date range |
create_event |
summary, start, end |
Create a simple VEVENT |
update_event |
uid or href; plus changed fields |
Update summary/start/end/description/location |
delete_event |
uid or href |
Delete a matching event |
Procedure
- Run
statusif setup is uncertain. If anything is missing, ask only for the missing setup item. - For read-only questions, call
list_eventswith the smallest range that answers the user. - Before creating/updating/deleting events, restate the exact calendar, date/time, title, and attendees/details if any; ask for confirmation.
- Use ISO 8601 times. Include a timezone offset when possible.
- After mutation, run
list_eventsfor the affected window or return the serverhref/uidas proof.
Pitfalls
- CalDAV URLs differ by provider and account. Ask for the provider setup page or test credentials rather than guessing.
- Floating datetimes can land in the wrong timezone. Prefer offset timestamps such as
2026-06-13T09:30:00+01:00. - Recurring event edits are provider-sensitive. This v1 skill handles simple events; ask before touching recurrence.
- Do not reveal
CALDAV_PASSWORDor raw Authorization headers in user-visible output.
Verification
list_calendarsshows the expected iCloud or Google calendar.list_eventsover the next seven days returns real event titles and times.- Create an event named
fae-skill-test, then delete it byuidorhref. - AppleTools calendar tests still pass; this skill does not replace EventKit.