원클릭으로
check-calendar
Check the user's calendar for events / free slots in a given window
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Check the user's calendar for events / free slots in a given window
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Create a new contact (person or business) with ALL its channels and address in one call.
Fetch the full body and metadata of a single email by message_id.
Record a new bill / recurring expense
Create a new calendar event in Yorik's local calendar
Attach a postal address (home, work, billing, shipping) to an existing contact.
Attach a channel (email, phone, whatsapp, signal, sms, website, social) to a contact.
| 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"] |
Queries family.db events table for a time window. The optional
include_free_slots toggle does the gap-detection arithmetic so a
caller asking "what time can I propose?" doesn't have to reason about
event overlaps client-side.
Free slots are bound to 08:00–22:00 (configurable later via app_settings if needed) and only emitted when ≥30 min — shorter gaps aren't useful for proposing meetings.