Skills calendar-reminders
Calendar reminders pipeline: config-driven wrapper around gcalcli (Google Calendar) plus optional CalDAV source via vdirsyncer+khal, and a reminder planner that outputs a JSON plan for one-shot OpenClaw reminders.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/adorostkar/calendar-reminders" ~/.claude/skills/clawdbot-skills-calendar-reminders && rm -rf "$T"
manifest:
skills/adorostkar/calendar-reminders/SKILL.mdsource content
gcalcli calendar wrapper + reminder planner
This skill provides:
— wrapper aroundscripts/calendargcalcli
— produces a JSON plan for reminder schedulingscripts/calendar_reminder_plan.py
— example config formatreferences/openclaw-calendar.example.json
Config
Copy the example config to a private location and edit it:
- Default path:
~/.config/openclaw/calendar.json - Override with env:
OPENCLAW_CALENDAR_CONFIG=/path/to/calendar.json
Requirements
- Required:
,python3gcalcli - Optional (for CalDAV/iCloud):
,vdirsyncerkhal
Security notes (why ClawHub may flag this)
This skill invokes external binaries and is config-driven.
- The planner runs
/gcalcli
usingkhal
(argument-list form; safe against shell injection from event titles).subprocess.check_output([...], shell=False) - If you wire a cron job to run
, make sure you run it as an argv list (vdirsyncerSyncCommand
), not as a shell string.subprocess.run(cmd_list, shell=False) - Only point
/gcalcliPath
to trusted binaries (prefer absolute paths). Don’t run untrusted paths.khalBin
Auth (Google)
gcalcli requires OAuth. On headless servers you may need SSH port-forwarding.
The wrapper uses --noauth_local_server to print instructions.
Reminder planning
The planner outputs a JSON blob describing reminders to schedule. A separate cron job (or an agent turn) can read it and create one-shot OpenClaw reminders.
Defaults:
- Ignore birthdays.
- Timed events are considered important.
- All-day events only trigger reminders if their title matches configured keywords.
Wiring a daily reminder scheduler (OpenClaw)
Create a daily cron job (e.g. 00:05 local time) that:
- If CalDAV is enabled in config, runs the configured
sync command.vdirsyncer - Runs
to get a JSON plan.scripts/calendar_reminder_plan.py - For each planned reminder, creates a one-shot OpenClaw
reminder atsystemEvent
.reminderAtUtc - Writes a small state file so you don’t schedule duplicates.
(Our skill intentionally provides the wrapper + planner; scheduling is left to your cron/agent wiring.)