Manage calendar events, check conflicts, handle scheduling from emails. Use when adding events or coordinating meetings to ensure proper timezone handling and conflict detection.
Use this skill when:
Load preferences from ~/.claude/office-admin-config.json:
{
"personal": {
"timezone": "America/Chicago",
"workingHours": {
"start": "09:30",
"end": "16:30",
"lunchStart": "12:00",
"lunchEnd": "13:30"
}
},
"calendar": {
"defaultDuration": 30,
"bufferMinutes": 15,
"schedulingLink": "https://user.cal.com/schedule",
"autoAddFromEmail": true,
"eventNaming": {
"includeLocation": true,
"includeAttendees": false
}
}
}
Look for in the email:
Handle conversational dates:
BEFORE creating the event:
# Get user's calendar for that date
mcp__pd__google_calendar-list-events(
instruction="Get all events for [date], between [start_time - bufferMinutes] and [end_time + bufferMinutes]"
)
Look for:
Tell the user:
If free:
You're free at [time] on [date].
If conflict exists:
That conflicts with:
- [event name] from [start] to [end]
Your schedule that day:
9:30am - 10:30am: Team standup
10:30am - 12:00pm: FREE
12:00pm - 1:30pm: Lunch
1:30pm - 3:00pm: [Proposed event would go here]
3:00pm - 4:00pm: Client call
If user confirms or no conflict exists:
mcp__pd__google_calendar-create-event(
instruction="Create event with:
- Title: [descriptive title with location if includeLocation=true]
- Date: [YYYY-MM-DD]
- Start time: [HH:MM] [timezone]
- End time: [HH:MM] [timezone]
- Location: [physical address or link]
- Description: [context about who invited, what it's about]
- Attendees: [email addresses]
"
)
Title format examples:
includeLocation: true: "Lunch with Mike at Soho House"includeLocation: false: "Lunch with Mike"includeAttendees: true: "Meeting with Mike, Sarah, John"Timezone: Always use user's timezone from config unless explicitly scheduling with someone in another timezone.
Provide:
For events pending confirmation:
Create with "HOLD:" prefix
Title: "HOLD: Call with Jean (pending confirmation)"
Add note in description
Description: "(pending confirmation) Call with Jean Labuschagne about consulting opportunity"
Update when confirmed
Delete if falls through
Use user's timezone from config:
Time: 2:00 PM America/Chicago
When scheduling with someone in another timezone:
Specify both timezones in email:
"How about 9am Chicago time (4pm Zurich)?"
Double-check conversion:
Common international contacts: Keep a mental note of frequent timezone conversions:
Create event in user's timezone:
Title: "Call with Jean in Zurich"
Time: 9:00 AM America/Chicago
Description: "9am Chicago / 4pm Zurich - Call with Jean Labuschagne"
When someone asks "when are you free?":
Based on config defaults:
9:30am - Start of working day
↓
[Morning block for meetings/work]
↓
12:00pm - 1:30pm - Lunch (avoid scheduling)
↓
[Afternoon block for meetings/work]
↓
4:30pm - End of working day
Apply bufferMinutes (default: 15) between events:
10:00am - 11:00am: Meeting A
[15 min buffer]
11:15am - 12:00pm: Meeting B
Don't schedule back-to-back unless user explicitly requests.
For recurring events (weekly standups, monthly check-ins):
mcp__pd__google_calendar-create-event(
instruction="Create recurring event:
- Title: [name]
- Frequency: [daily/weekly/monthly]
- Day: [Monday, Tuesday, etc. for weekly]
- Time: [HH:MM]
- Duration: [minutes]
- Until: [end date or 'indefinitely']
"
)
For work blocks or focus time:
mcp__pd__google_calendar-create-event(
instruction="Create focus time block:
- Title: 'Focus Time' or 'Deep Work'
- Mark as: Busy
- Visibility: Private (optional)
- Duration: [typically 2-4 hours]
- Recurring: [if regular pattern]
"
)
When email-management skill sees scheduling language:
Seamless handoff between skills.
Email: "Want to grab lunch next Tuesday?"
1. Check calendar for next Tuesday
2. Check lunch hours (12:00-1:30pm from config)
3. Look for conflicts in that window
4. Report: "You're free for lunch on Tuesday Dec 5"
5. Create tentative hold
6. Once confirmed, create proper event with restaurant location
Email: "Can we meet Monday or Tuesday afternoon?"
1. Check both Monday and Tuesday afternoons
2. Identify all free slots after lunch
3. Report: "You're free:
- Monday 2:00pm-4:30pm
- Tuesday 1:30pm-3:00pm, 4:00pm-4:30pm"
4. Let user choose
5. Create event for chosen slot
Email from Switzerland: "9am your time?"
1. Confirm user's timezone (America/Chicago)
2. Calculate Switzerland time (4pm CET)
3. Check 9am Chicago for conflicts
4. Report availability
5. Create event with both timezones in description
Problem: Double-booking user Solution: ALWAYS check calendar before confirming availability
Problem: Event created in wrong timezone, user misses meeting Solution: Use timezone from config, verify conversions carefully
Problem: Back-to-back meetings with no break Solution: Apply bufferMinutes between events
Problem: Booking meetings during lunch hours Solution: Check workingHours.lunchStart/End from config
Problem: "Meeting" with no context Solution: Include who, what, where based on eventNaming preferences
Problem: User verbally commits but event not tracked Solution: Always create HOLD events for tentative commitments
Before completing a calendar task:
You're managing calendar well when:
Calendar management is about protecting user's time and making scheduling effortless. Be proactive, be accurate, and always check conflicts first.