Skills icalendar-events-parser
Parse .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.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/baptiste00001/icalendar-events-parser" ~/.claude/skills/openclaw-skills-icalendar-events-parser && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/baptiste00001/icalendar-events-parser" ~/.openclaw/skills/openclaw-skills-icalendar-events-parser && rm -rf "$T"
skills/baptiste00001/icalendar-events-parser/SKILL.mdiCal Events Parser with Recurrence Expansion
When to use this skill
- User gives an .ics URL or local path and asks to list, summarize, filter or process events
- Need to expand recurring events into individual instances
- Want date-range filtering, keyword search in title/description/location
- Need clean structured output for further processing (e.g. add to Google Calendar, check conflicts)
Do 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.
How to set up
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
How the agent should call it (JSON format)
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" } } }
What the tool returns
{ "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.
Required Permissions
This skill needs:
- Ability to execute
(tool: exec)node - Ability to read files on the file system
- Outbound network access for HTTP requests (fetch inside Node.js)
Please ensure your agent config allows
exec, filesystem read and outbound network