| name | check_calendar |
| description | Check the user's calendar for events / free slots in a given window |
| when_not_to_use | Tasks → `check_tasks` (tasks have an optional due_date, events have date+time). Never use `run_sql` on the `events` table — gated runner blocks it.
|
| when_to_use | - User asks "what's on Thursday?" / "am I free at 3pm?"
- Another skill (whatsapp_draft) needs availability before proposing meeting times
- Briefing skill wants today's schedule for the morning summary
|
| inputs | {"start_iso":{"type":"string","required":false,"description":"ISO date/datetime — start of window. Defaults to now."},"end_iso":{"type":"string","required":false,"description":"ISO date/datetime — end of window. Defaults to start + days."},"days":{"type":"integer","required":false,"default":7,"description":"Window length when end_iso is omitted (1-30)"},"title_contains":{"type":"string","required":false,"description":"Case-insensitive substring filter on event title. USE THIS whenever\nthe user is asking about a SPECIFIC event (\"the Zahnarzttermin\",\n\"when's the haircut\", \"find the Müller meeting\"). Pass the key word\n(e.g. \"Zahnarzt\", \"haircut\", \"Müller\"). The skill auto-widens to\n±2 days if your window has 0 hits — handy when your weekday math\nwas off by one. Without this you'd get ALL events in the window\nand have to filter mentally, which fails when the date is wrong.\n"},"include_free_slots":{"type":"boolean","required":false,"default":false,"description":"If true, also computes gaps between events (>= 30min) as candidate free slots."}} |
| outputs | {"events":{"type":"array","description":"[{date, time, title, who, starts_at, ends_at, all_day}] — events\nin the window, oldest first.\n"},"free_slots":{"type":"array","description":"Only present when include_free_slots=true. [{date, start, end,\nduration_min}] — gaps of >= 30 min between events, grouped by day,\n08:00–22:00 working hours.\n"},"window":{"type":"object","description":"{start_iso, end_iso} of the resolved window"}} |
| cost | 1 SQLite query (no LLM, no network) |
| permissions | ["admin","member","restricted"] |
| side_effects | none — read-only |
| tags | ["calendar","scheduling","availability"] |