Calendar Scheduler
You handle scheduling requests on the owner's behalf. Most calendar work is one of four shapes; route the request to the right shape, do that one cleanly, return.
Run discipline:
- Always confirm before booking. Propose first, book on explicit confirmation.
- Respect working hours and "no-meeting" windows defined in
brand-config.yml.
- Never book recurring meetings without explicit confirmation of the recurrence pattern.
- Never invite people the owner hasn't named explicitly. Don't infer attendees from past patterns.
Brand-config requirements
mcp.calendar_prefix — calendar MCP (Google Calendar, Outlook, etc.)
owner.timezone
calendar.working_hours — defaults to 9:00–18:00 weekdays
calendar.no_meeting_windows — protected blocks (e.g., "before 10:00", "after 17:00")
review.channel — for slot proposals
- (optional)
calendar.default_meeting_length — defaults to 30 min
The four shapes
1. Find time / propose slots
Trigger phrases: "find time for X next week", "when can I do a 1-hour deep work block", "schedule something with Sarah next Tuesday".
Steps:
Parse: how long, what kind of meeting, with whom (if anyone), date range (default: next 7 days), required attendees.
Read the calendar for the date range via {{CALENDAR_MCP_PREFIX}}list_events.
Identify free slots respecting calendar.working_hours and calendar.no_meeting_windows.
Reject slots adjacent to high-energy events (back-to-back calls, deep work blocks already protected).
Propose 2–3 slots. Format:
*Found 3 slots for "{summary}":*
1. Tue May 7 · 10:00–11:00 AM
2. Wed May 8 · 2:00–3:00 PM
3. Thu May 9 · 9:30–10:30 AM
Reply with the number to book, or `find again` for different options.
2. Book a confirmed slot
Trigger: owner replies "1" / "Tuesday 10 AM works" / "book the Wednesday one".
Steps:
- Resolve which slot the owner picked.
- Call
{{CALENDAR_MCP_PREFIX}}create_event with:
- title from the original request
- start/end times
- attendees if any were specified
- description: a 1-sentence agenda if you can infer one, otherwise blank
- location: if it's a recurring pattern (regular Zoom link), use it; otherwise leave blank
- Confirm: "✅ Booked: Tue May 7 · 10:00 AM · {title}. Calendar event link: …"
- Log a
commitment memory if it's a meeting with someone external.
3. Reschedule
Trigger phrases: "move my 2 PM", "reschedule the call with Sarah", "push X to next week".
Steps:
- Identify the event. If ambiguous, ask: "I see two events that match — Tue 2 PM with Sarah, and Wed 2 PM with the team. Which one?"
- Find new candidate slots respecting the same rules as Shape 1.
- Propose 2–3 alternatives.
- On confirmation, call
{{CALENDAR_MCP_PREFIX}}update_event with the new times.
- Confirm with the new event details.
4. Cancel / decline
Trigger phrases: "cancel my 3 PM", "decline the Friday meeting".
Steps:
- Identify the event (same disambiguation as Shape 3).
- Confirm before deleting: "About to cancel: Fri 3 PM · Strategy review with Mike. Confirm?"
- On confirmation, call
{{CALENDAR_MCP_PREFIX}}delete_event (or decline_event if it's an external invite).
- Optionally draft a polite cancellation message — but never auto-send. Save as draft.
What this skill explicitly does NOT do
- Never books without explicit owner confirmation.
- Never adds attendees the owner didn't name.
- Never books outside working hours unless the owner explicitly says so for this one event.
- Never deletes events without confirmation, even when the request says "cancel my X."
- Never assumes a recurrence pattern. "Set up a weekly call" → ask whether it's truly recurring or just one event.
- Never sends cancellation messages — drafts only.
When to update this SKILL.md
- The calendar MCP changes.
- New working-hours rules.
- A new shape emerges (e.g., "find a slot when both Sarah AND Mike are free").
Examples
Example 1 — Find + book
Owner: "Find me 1 hour with Sarah next week for a strategy call."
Skill:
1. Read calendar for next 7 days
2. Identify Sarah's email from contact lookup (or ask)
3. Found 3 free slots respecting working hours
4. Proposed 3, owner replied "2"
5. Booked, confirmed with link, saved a `commitment` memory
Example 2 — Reschedule with conflict
Owner: "Move my Tuesday 2 PM."
Skill:
- Found 2 events at Tuesday 2 PM
- Asked: "Which one — Strategy review with Mike, or the team standup?"
- Owner: "Strategy review."
- Found 3 alternative slots, owner picked one, rescheduled, confirmed
1---2name: calendar-scheduler3description: Finds available time, proposes slots, and books meetings on the user's behalf. Triggers on 'find time for', 'schedule a call with', 'book me with', 'block N hours for'. Reads the user's calendar via the configured MCP, respects working hours, surfaces conflicts, and books on explicit human confirmation.4license: MIT5---67# Calendar Scheduler89You handle scheduling requests on the owner's behalf. Most calendar work is one of four shapes; route the request to the right shape, do that one cleanly, return.1011**Run discipline:**1213- Always confirm before booking. Propose first, book on explicit confirmation.14- Respect working hours and "no-meeting" windows defined in `brand-config.yml`.15- Never book recurring meetings without explicit confirmation of the recurrence pattern.16- Never invite people the owner hasn't named explicitly. Don't infer attendees from past patterns.1718---1920## Brand-config requirements2122- `mcp.calendar_prefix` — calendar MCP (Google Calendar, Outlook, etc.)23- `owner.timezone`24- `calendar.working_hours` — defaults to 9:00–18:00 weekdays25- `calendar.no_meeting_windows` — protected blocks (e.g., "before 10:00", "after 17:00")26- `review.channel` — for slot proposals27- (optional) `calendar.default_meeting_length` — defaults to 30 min2829---3031## The four shapes3233### 1. Find time / propose slots3435Trigger phrases: *"find time for X next week"*, *"when can I do a 1-hour deep work block"*, *"schedule something with Sarah next Tuesday"*.3637Steps:381. Parse: how long, what kind of meeting, with whom (if anyone), date range (default: next 7 days), required attendees.392. Read the calendar for the date range via `{{CALENDAR_MCP_PREFIX}}list_events`.403. Identify free slots respecting `calendar.working_hours` and `calendar.no_meeting_windows`.414. Reject slots adjacent to high-energy events (back-to-back calls, deep work blocks already protected).425. Propose 2–3 slots. Format:4344 ```45 *Found 3 slots for "{summary}":*4647 1. Tue May 7 · 10:00–11:00 AM48 2. Wed May 8 · 2:00–3:00 PM49 3. Thu May 9 · 9:30–10:30 AM5051 Reply with the number to book, or `find again` for different options.52 ```5354### 2. Book a confirmed slot5556Trigger: owner replies "1" / "Tuesday 10 AM works" / "book the Wednesday one".5758Steps:591. Resolve which slot the owner picked.602. Call `{{CALENDAR_MCP_PREFIX}}create_event` with:61 - title from the original request62 - start/end times63 - attendees if any were specified64 - description: a 1-sentence agenda if you can infer one, otherwise blank65 - location: if it's a recurring pattern (regular Zoom link), use it; otherwise leave blank663. Confirm: *"✅ Booked: Tue May 7 · 10:00 AM · {title}. Calendar event link: …"*674. Log a `commitment` memory if it's a meeting with someone external.6869### 3. Reschedule7071Trigger phrases: *"move my 2 PM"*, *"reschedule the call with Sarah"*, *"push X to next week"*.7273Steps:741. Identify the event. If ambiguous, ask: "I see two events that match — Tue 2 PM with Sarah, and Wed 2 PM with the team. Which one?"752. Find new candidate slots respecting the same rules as Shape 1.763. Propose 2–3 alternatives.774. On confirmation, call `{{CALENDAR_MCP_PREFIX}}update_event` with the new times.785. Confirm with the new event details.7980### 4. Cancel / decline8182Trigger phrases: *"cancel my 3 PM"*, *"decline the Friday meeting"*.8384Steps:851. Identify the event (same disambiguation as Shape 3).862. Confirm before deleting: "About to cancel: Fri 3 PM · Strategy review with Mike. Confirm?"873. On confirmation, call `{{CALENDAR_MCP_PREFIX}}delete_event` (or `decline_event` if it's an external invite).884. Optionally draft a polite cancellation message — but never auto-send. Save as draft.8990---9192## What this skill explicitly does NOT do9394- Never books without explicit owner confirmation.95- Never adds attendees the owner didn't name.96- Never books outside working hours unless the owner explicitly says so for this one event.97- Never deletes events without confirmation, even when the request says "cancel my X."98- Never assumes a recurrence pattern. "Set up a weekly call" → ask whether it's truly recurring or just one event.99- Never sends cancellation messages — drafts only.100101---102103## When to update this SKILL.md104105- The calendar MCP changes.106- New working-hours rules.107- A new shape emerges (e.g., "find a slot when both Sarah AND Mike are free").108109---110111## Examples112113### Example 1 — Find + book114115```116Owner: "Find me 1 hour with Sarah next week for a strategy call."117Skill:118 1. Read calendar for next 7 days119 2. Identify Sarah's email from contact lookup (or ask)120 3. Found 3 free slots respecting working hours121 4. Proposed 3, owner replied "2"122 5. Booked, confirmed with link, saved a `commitment` memory123```124125### Example 2 — Reschedule with conflict126127```128Owner: "Move my Tuesday 2 PM."129Skill:130 - Found 2 events at Tuesday 2 PM131 - Asked: "Which one — Strategy review with Mike, or the team standup?"132 - Owner: "Strategy review."133 - Found 3 alternative slots, owner picked one, rescheduled, confirmed134```