Block Calendar Time
Block a time period, identify affected meetings, and handle notifications and rescheduling
If User Analysis Results (file: writing-style.md) doesn't exist or is empty, offer to capture it:
"I don't have your email writing style yet - I can draft notifications, but
they'll be generic. Want me to quickly analyze your Gmail to match your tone?
Takes about 2 minutes."
If yes → run Build Gmail Profile (from
Gmail Discovery)
If no → continue with professional defaults from Calendar Blocking Guide
Parse the time window from the user's request.
Determine:
- Start datetime (if "until X", start is now)
- End datetime
- Whether it's all-day or specific hours
Check Service Profiles for user's timezone.
Convert to YYYY-MM-DD or ISO8601 format for the calendar fetch.
Analyze the affected events and classify each one:
Skip (no action needed):
- Focus time, personal blocks, OOO markers
- All-day reminders (birthdays, holidays)
- Events where you're already marked as declined
Needs action:
- 1:1s with colleagues → notify + reschedule
- External/client meetings → notify + reschedule (professional tone)
- Meetings you organized → notify attendees
- Team meetings where you're optional → just decline
Present findings succinctly - skip the verbose categories, get to the point:
"Ignoring [X] and [Y] (personal blocks, not relevant).
A couple things to handle:
- 1:1 with Sarah - suggest moving to Friday 2pm
- Client call - need to notify them and reschedule
Want me to do this, or any changes?"
Only ask clarifying questions if genuinely ambiguous (e.g., team ritual where
their role is unclear). Don't ask about every meeting - propose a sensible
default and let user correct if needed.
Wait for user confirmation before proceeding.
Prepare ONE consolidated action preview with _action frontmatter.
Match the user's writing style (captured earlier) or use professional
defaults if they declined. Structure:
_action:
label: "Send notifications & update calendar"
prompt: "Send emails via Gmail, update calendar events, create blocking event"
isComplete: false
Emails to send
[Each email with To/Subject/Body - use professional templates]
Calendar updates
[List of declines/reschedules]
New blocking event
[Title, time range, visibility]
User reviews and edits, then clicks to execute all actions.
After user approves, summarize what was done:
- [N] notifications sent
- [N] meetings declined
- Calendar blocked from [start] to [end]
To run this task you must have the following required information:
> Time window to block (e.g., 'Saturday', 'until Thursday 6pm', 'tomorrow 2-6pm'). Optional: reason for blocking, notification preferences.
If you don't have all of this information, exit here and respond asking for any extra information you require, and instructions to run this task again with ALL required information.
---
You MUST use a todo list to complete these steps in order. Never move on to one step if you haven't completed the previous step. If you have multiple CONSECUTIVE read steps in a row, read them all at once (in parallel). Otherwise, do not read a file until you reach that step.
Add all steps to your todo list now and begin executing.
## Steps
1. [Read Calendar Blocking Guide]: Read the documentation in: `skills/sauna/[skill_id]/references/calendar.block.guide.md` (Notification tone and rescheduling strategies)
2. [Read User Analysis Results]: Discover relevant information in the user's filesystem at `documents/user/analysis/*.md`. (Check if writing style exists (file: writing-style.md))
3. If `documents/user/analysis/*.md` (file: writing-style.md) doesn't exist or is empty, offer to capture it:
"I don't have your email writing style yet - I can draft notifications, but
they'll be generic. Want me to quickly analyze your Gmail to match your tone?
Takes about 2 minutes."
If yes → run `skills/sauna/[skill_id]/references/recipes/gmail.inbox.setup.md` (from `skills/sauna/[skill_id]/references/skill/gmail.inbox.discovery`)
If no → continue with professional defaults from `skills/sauna/[skill_id]/references/calendar.block.guide.md`
4. [Read Time Expressions Guide]: Read the documentation in: `skills/sauna/[skill_id]/references/world.time.expressions.md` (How to interpret flexible time expressions)
5. Parse the time window from the user's request.
Determine:
- Start datetime (if "until X", start is now)
- End datetime
- Whether it's all-day or specific hours
Check `documents/user/services/*.md` for user's timezone.
Convert to YYYY-MM-DD or ISO8601 format for the calendar fetch.
6. [Gather Arguments: Fetch Calendar Events] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `startDate`: Start date in YYYY-MM-DD format
- `endDate`: End date in YYYY-MM-DD format
- `outputPath`: session/calendar-affected-events.json
7. [Run Code: Fetch Calendar Events]: Call `run_script` with:
```json
{
"file": {
"path": https://sk.ills.app/code/calendar.google.events/preview,
"args": [
"startDate",
"endDate",
"outputPath"
]
},
"packages": null
}
```
8. [Read Affected Calendar Events]: Read the file at `session/calendar-affected-events.json` into context (Events in the blocked time window)
9. Analyze the affected events and classify each one:
**Skip (no action needed):**
- Focus time, personal blocks, OOO markers
- All-day reminders (birthdays, holidays)
- Events where you're already marked as declined
**Needs action:**
- 1:1s with colleagues → notify + reschedule
- External/client meetings → notify + reschedule (professional tone)
- Meetings you organized → notify attendees
- Team meetings where you're optional → just decline
Present findings succinctly - skip the verbose categories, get to the point:
"Ignoring [X] and [Y] (personal blocks, not relevant).
A couple things to handle:
- **1:1 with Sarah** - suggest moving to Friday 2pm
- **Client call** - need to notify them and reschedule
Want me to do this, or any changes?"
Only ask clarifying questions if genuinely ambiguous (e.g., team ritual where
their role is unclear). Don't ask about every meeting - propose a sensible
default and let user correct if needed.
Wait for user confirmation before proceeding.
10. [Read External Actions Guide]: Read the documentation in: `skills/sauna/[skill_id]/references/sauna.actions.external.md` (Preview pattern for external actions - loaded just before use)
11. Prepare ONE consolidated action preview with _action frontmatter.
Match the user's writing style (captured earlier) or use professional
defaults if they declined. Structure:
---
_action:
label: "Send notifications & update calendar"
prompt: "Send emails via Gmail, update calendar events, create blocking event"
isComplete: false
---
## Emails to send
[Each email with To/Subject/Body - use professional templates]
## Calendar updates
[List of declines/reschedules]
## New blocking event
[Title, time range, visibility]
User reviews and edits, then clicks to execute all actions.
12. After user approves, summarize what was done:
- [N] notifications sent
- [N] meetings declined
- Calendar blocked from [start] to [end]