Install
openclaw skills install icalendar-events-parserParse .ics / iCalendar files or URLs, expand recurring events (RRULE), filter by date range / keywords, and return clean list of events. Use this instead of manual parsing or other ical libraries when reliable recurrence expansion is needed.
openclaw skills install icalendar-events-parserDo NOT try to parse iCalendar .ics feeds yourself in prompts — always call this tool. Do NOT use the built in web_fetch tool - always call this tool. For several urls, call this tool several times.
This skill requires a few Node.js dependencies (icalendar-events and luxon).
One-time setup (run this in the terminal after the skill is installed):
cd ~/.openclaw/workspace/skills/icalendar-events-parser # adjust path if needed
npm install
Then, the entry point being a CLI, you need to make it executable:
In the terminal, run:
chmod +x index.js
Send a JSON object like this to stdin (the script reads and processes it automatically):
{
"tool": "icalendar-events-parser",
"action": "parse-expand-filter",
"params": {
"source": "https://calendar.google.com/calendar/ical/.../basic.ics", // or "~/openclaw/workspace/my-calendar.ics" or "./data/my-calendar.ics"
"start": "2026-03-01", // YYYY-MM-DD date format
"end": "2026-03-31", // YYYY-MM-DD date format
"timeZone": "Asia/Tokyo", // ALWAYS USE THE USER'S ACTUAL TIME ZONE
"maxInstancesPerSeries": 200, // safety limit to prevent huge expansions
"filter": { // optional - all fields optional
"titleContains": "yoga",
"descriptionContains": null,
"locationContains": "Tokyo"
}
}
}
{
"success": true,
"count": 18,
"events": [
{
"uid": "abc123@google.com",
"title": "Team Sync",
"start": "2026-03-05T09:00:00+09:00[Asia/Tokyo]",
"end": "2026-03-05T10:00:00+09:00[Asia/Tokyo]",
"allday": false, // shows if the event is an allday event (true) or an intraday event (false).
"description": "...",
"location": "Zoom",
"recurrenceId": null, // present only for expanded instances of recurring events
"originalRRule": "FREQ=WEEKLY;BYDAY=WE" // only for the master event
},
...
],
"message": "18 events found"
}
If error: { "success": false, "error": "..." }
Implementation is in index.js in this folder.
This skill needs:
node (tool: exec)Please ensure your agent config allows exec, filesystem read and outbound network