From radicale
This skill should be used when managing calendars and contacts on a self-hosted Radicale CalDAV/CardDAV server. Use when the user asks to "list my calendar", "what's on my calendar this week", "show me my events", "when is my next event", "add to my calendar", "create an event", "schedule a meeting", "schedule an event", "delete an event", "cancel event", "remove event", "find a contact", "what's someone's email", "search my contacts", "look up [person] in contacts", "add a contact", "save contact", "save someone's phone number", or mentions Radicale, CalDAV, CardDAV, calendar events, or contact management operations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/radicale:radicaleThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage calendars (events) and contacts on a self-hosted Radicale server using CalDAV and CardDAV protocols.
Manage calendars (events) and contacts on a self-hosted Radicale server using CalDAV and CardDAV protocols.
Type: Read & Write (calendar events and contacts)
This skill enables comprehensive calendar and contact management through a self-hosted Radicale server. It provides read and write access to:
All operations use the Python caldav library which implements the CalDAV (RFC 4791) and CardDAV (RFC 6352) protocols.
Install required Python libraries:
pip install caldav vobject icalendar
Script Permissions:
The Python script can be made executable (optional but recommended):
chmod +x skills/radicale/scripts/radicale-api.py
You can then run it directly:
./scripts/radicale-api.py --help
Or without executable permissions using Python:
python scripts/radicale-api.py --help
Configure these values in plugin userConfig. The hook writes
${XDG_CONFIG_HOME:-~/.config}/lab-radicale/config.env with mode 600.
~/.lab/.env remains a fallback during migration:
RADICALE_URL="http://localhost:5232"
RADICALE_USERNAME="admin"
RADICALE_PASSWORD="password"
Security:
.env files are local-only (never commit credentials)chmod 600 ~/.lab/.envAll operations use the scripts/radicale-api.py wrapper script. Output is JSON format for easy parsing.
python scripts/radicale-api.py calendars list
Returns array of calendars with name, URL, and ID.
List events in a calendar within a date range:
python scripts/radicale-api.py events list \
--calendar "Personal" \
--start "2026-02-08" \
--end "2026-02-15"
Parameters:
--calendar (required) - Calendar name (case-sensitive)--start (optional) - Start date (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)--end (optional) - End date (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)Default behavior: If start/end not specified, uses current date + 7 days.
Returns array of events with UID, summary, description, location, start, end, and timestamps.
python scripts/radicale-api.py events create \
--calendar "Personal" \
--title "Meeting" \
--start "2026-02-10T14:00:00" \
--end "2026-02-10T15:00:00" \
--location "Conference Room" \
--description "Team sync"
Required parameters:
--calendar - Calendar name--title - Event title/summary--start - Start datetime (YYYY-MM-DDTHH:MM:SS)--end - End datetime (YYYY-MM-DDTHH:MM:SS)Optional parameters:
--location - Event location--description - Event descriptionImportant: Use ISO 8601 datetime format (YYYY-MM-DDTHH:MM:SS). End must be after start.
python scripts/radicale-api.py events delete \
--calendar "Personal" \
--uid "event-uid-here"
Get UID from events list output.
python scripts/radicale-api.py contacts addressbooks
Returns array of addressbooks with name, URL, and ID.
python scripts/radicale-api.py contacts list \
--addressbook "Contacts"
Returns array of contacts with UID, name, email, and phone.
python scripts/radicale-api.py contacts search \
--addressbook "Contacts" \
--query "David"
Search behavior: Case-insensitive substring match against name and email fields.
python scripts/radicale-api.py contacts create \
--addressbook "Contacts" \
--name "John Doe" \
--email "john@example.com" \
--phone "+1-555-1234"
Required parameter:
--name - Contact full nameOptional parameters:
--email - Email address--phone - Phone numberpython scripts/radicale-api.py contacts delete \
--addressbook "Contacts" \
--uid "contact-uid-here"
Get UID from contacts list or contacts search output.
When users make natural language requests, translate them to script commands:
User: "What's my calendar look like this week?"
Action:
python scripts/radicale-api.py events list --calendar "Personal" --start "YYYY-MM-DD" --end "YYYY-MM-DD"User: "Add to my calendar Billy Strings in Athens, GA 02/07/2026 7PM EST"
Action:
python scripts/radicale-api.py events create --calendar "Personal" --title "Billy Strings" --start "2026-02-07T19:00:00" --end "2026-02-07T23:00:00" --location "Athens, GA"User: "What's David Ryan's work email?"
Action:
python scripts/radicale-api.py contacts search --addressbook "Contacts" --query "David Ryan"User: "Add John Doe to my contacts, email john@example.com"
Action:
python scripts/radicale-api.py contacts create --addressbook "Contacts" --name "John Doe" --email "john@example.com"When user mentions calendars or contacts:
Determine operation type:
events listevents createevents deletecontacts searchcontacts createcontacts deleteIdentify target:
Extract parameters:
Execute command:
Present results:
Important considerations:
YYYY-MM-DDTHH:MM:SSCommon translations:
All operations return JSON with status. Check for:
Connection errors:
ERROR: .env file not found → Guide user to create .env fileERROR: Failed to connect to Radicale → Check Radicale is running, verify URLERROR: Authentication failed → Verify credentials in .envResource errors:
ERROR: Calendar 'X' not found → List available calendars with calendars listERROR: Addressbook 'X' not found → List addressbooks with contacts addressbooksData errors:
ValueError: Invalid isoformat string → Fix datetime format to ISO 8601Read-Write Operations:
Performance:
Limitations:
Security:
.env file (gitignored)Bundled references (load as needed):
references/caldav-library.md — Python caldav library guide (auth patterns, CalDAV/CardDAV operations, error handling)references/quick-reference.md — command examples with sample outputsreferences/troubleshooting.md — installation, connection, auth, and data errorsExternal:
Run this skill's scripts with the Bash tool directly:
python ./skills/radicale/scripts/radicale-api.py [args]
npx claudepluginhub jmagar/dendrite --plugin radicaleCreates bite-sized, testable implementation plans from specs or requirements, with file structure and task decomposition. Activates before coding multi-step tasks.