Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review calendar agenda, find available meeting slots, and schedule events. Displays today's or week's schedule, suggests meeting times based on availability, creates calendar events with explicit user confirmation. Use when user mentions calendar, schedule, meetings, or availability. Never creates or modifies events without confirmation.
.claude/skills/evolution-foundation-gog-calendar/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 273% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 272% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 943% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 280% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 324% | 0% |
Review your schedule, find meeting slots, and create events with smart suggestions.
Use this skill when:
Important: This skill NEVER creates or modifies events without explicit user confirmation.
The following live data is available:
Today's agenda:
!`gog calendar events --today --json 2>/dev/null || echo "GOG_NOT_CONFIGURED"`When user says "what's on my calendar today" or "show today's schedule":
bash gog calendar events --today --json
markdown # Today's Agenda — Day], Date]
## Morning
9:00 AM - 9:30 AM | Team Standup
10:00 AM - 11:00 AM | 1:1 with Manager
## Afternoon
2:00 PM - 3:30 PM | Client Demo
4:00 PM - 5:00 PM | Project Planning
---
Summary:
Preparation needed:
When user says "what's my week look like" or "show this week":
bash # Calculate date range for this week FROM_DATE=$(date +%Y-%m-%d) TO_DATE=$(date -v+7d +%Y-%m-%d) # macOS
# Fetch events in range gog calendar events --from "$FROM_DATE" --to "$TO_DATE" --json
markdown # Week Agenda — Week of Date]
## Monday, Date]
Total: 1.5 hours]
## Tuesday, Date]
Total: 3.5 hours]
## Wednesday, Date]
Total: 0.5 hours] — Light day! 💚
...]
---
Week Summary:
When user says "find time for a meeting" or "when am I free":
markdown Let me find available meeting times. A few questions:
bash # Get busy periods gog calendar freebusy primary \ --from "2026-01-29T00:00:00Z" \ --to "2026-01-31T23:59:59Z" \ --json
Note: GOG CLI v0.9.0 doesn't have find-slots. Instead, use freebusy to get busy periods, then calculate free gaps between them. For example:
Parse the busy periods and suggest slots in the free time.
markdown # Available Meeting Slots
## Top 5 Options (60 minutes)
---
Recommendation: Option 1 (Wed at 2pm) — Best mid-week timing
Which slot works best? Or need more options?
When user says "schedule a meeting" or "create a calendar event":
markdown Let me create that calendar event. I need:
markdown ## Proposed Event
Title: Q2 Planning Meeting Date: Wednesday, January 29, 2026 Time: 2:00 PM - 3:00 PM (1 hour) Attendees:
Location: Zoom (meeting link will be generated) Description: Discuss Q2 goals, budget allocation, and team priorities.
Conflicts check: ✅ No conflicts found for you
⚠️ Note: Cannot check attendees' availability without access to their calendars.
Does this look correct? Any changes needed?
markdown Ready to create this event? It will:
Reply "yes, create" to confirm.
bash # Calculate end time from duration START_TIME="2026-01-29T14:00:00Z" END_TIME="2026-01-29T15:00:00Z" # 1 hour later
gog calendar create primary \ --summary "Q2 Planning Meeting" \ --from "$START_TIME" \ --to "$END_TIME" \ --attendees "alice@company.com,bob@company.com,carol@company.com" \ --location "Zoom" \ --description "Discuss Q2 goals, budget allocation, and team priorities." \ --with-meet \ --json
Note:
primary as the calendar ID for the user's main calendar--summary is the event title (not --title)--from and --to are absolute times (not --start and --duration)--with-meet automatically generates a Google Meet linkmarkdown ✅ Event Created
Event ID: event_abc123 Title: Q2 Planning Meeting When: Wednesday, Jan 29 at 2:00 PM Invitations sent to: 3 attendees
Next steps:
markdown Would you like me to draft an email to attendees with:
Not implemented in MVP - User should use calendar client directly for modifications. If user requests, suggest:
markdownTo modify this event, please use your calendar app directly: - Google Calendar: calendar.google.com - Outlook: outlook.office.com Or tell me what you'd like to change and I can help you communicate it to attendees via email.
markdown# Today's Agenda — [Day], [Date] ## Morning [Time range] | [Title] - Location: [location] - Attendees: [count or names] - Status: [Confirmed/Tentative] ## Afternoon [Same format] --- **Summary**: - Total meetings: [N] - Total time: [X hours] - Free blocks: [time ranges] **Preparation needed**: - [Action items before meetings]
markdown# Available Meeting Slots ## Top [N] Options ([duration]) 1. **[Day, Date] at [Time] - [Time]** - [Context/rationale] - [Conflict status] [...] --- **Recommendation**: [Which slot and why]
markdown## Proposed Event [All event details clearly listed] **Conflicts check**: [Status] Does this look correct? --- Ready to create? Reply "yes, create" to confirm.
markdown✅ **Event Created** Event ID: [id] Title: [title] When: [readable date/time] Invitations sent to: [N attendees] **Next steps**: [Suggested follow-up actions]
User: "What's on my calendar today?"
Assistant:
[Fetches today's agenda...]
# Today's Agenda — Tuesday, January 28
## Morning
**9:00 AM - 9:30 AM** | Team Standup
- Location: Zoom (https://zoom.us/j/123456789)
- Attendees: Engineering team (8 people)
- Status: Confirmed
**11:00 AM - 12:00 PM** | Product Review
- Location: Conference Room B
- Attendees: Product, Design, Eng leads
- Status: Confirmed
## Afternoon
**2:00 PM - 3:30 PM** | Client Demo — Acme Corp
- Location: Zoom
- Attendees: 5 external guests
- Status: Confirmed
- 📎 Agenda: Demo new features, Q&A, pricing discussion
**4:00 PM - 4:30 PM** | 1:1 with Sarah
- Location: Her office
- Status: Confirmed
---
**Summary**:
- Total meetings: 4
- Total time: 3.5 hours
- Free blocks: 9:30 AM - 11:00 AM (1.5 hrs), 12:00 PM - 2:00 PM (2 hrs)
- Day ends at: 4:30 PM
**Preparation needed**:
- Finish demo slides (before 2pm)
- Review Acme account history (before 2pm)
- Prepare 1:1 talking points for Sarah (before 4pm)
Your afternoon is packed. Want me to help prep for the client demo?User: "Schedule a meeting with alice@company.com and bob@company.com for tomorrow at 2pm, 1 hour, to discuss Q2 budget"
Assistant:
## Proposed Event
**Title**: Q2 Budget Discussion
**Date**: Wednesday, January 29, 2026
**Time**: 2:00 PM - 3:00 PM (1 hour)
**Attendees**:
- alice@company.com
- bob@company.com
**Location**: Virtual meeting (Zoom link will be generated)
**Description**: Discuss Q2 budget allocation and priorities.
**Conflicts check**: ✅ No conflicts found on your calendar
⚠️ **Note**: Cannot check Alice and Bob's availability without calendar access. The invitation will ask them to accept/decline.
Does this look correct? Any changes needed?User: "Looks good, create it"
Assistant:
Ready to create this event? It will:
- Add to your calendar
- Send invitations to Alice and Bob
- Generate a Zoom meeting link
Reply "yes, create" to confirm.User: "yes, create"
Assistant:
[Creates event...]
✅ **Event Created**
Event ID: event_xyz789
Title: Q2 Budget Discussion
When: Wednesday, Jan 29 at 2:00 PM (1 hour)
Location: Zoom — https://zoom.us/j/987654321
Invitations sent to: 2 attendees (alice@company.com, bob@company.com)
**Next steps**:
- Prepare budget spreadsheet?
- Draft agenda email to attendees?
- Create task for pre-meeting prep?
Want me to draft an agenda email to Alice and Bob?User: "When am I free for a 30-minute meeting this week?"
Assistant:
Let me check your availability.
[Searches calendar...]
# Available Meeting Slots
## Top 5 Options (30 minutes)
1. **Wednesday, Jan 29 at 10:00 AM - 10:30 AM**
- Morning slot, good focus time
- No conflicts before or after
2. **Wednesday, Jan 29 at 3:00 PM - 3:30 PM**
- Afternoon slot
- 1 hour buffer before next meeting
3. **Thursday, Jan 30 at 9:00 AM - 9:30 AM**
- Early morning, fresh start
- No conflicts
4. **Thursday, Jan 30 at 2:00 PM - 2:30 PM**
- Post-lunch
- No conflicts
5. **Friday, Jan 31 at 11:00 AM - 11:30 AM**
- Late morning
- Last slot before lunch
---
**Recommendation**: Option 1 (Wed at 10am) — Quietest day, good timing
Which slot works for you? Or need to check other times?Symptom: Dynamic context shows GOG_NOT_CONFIGURED
Resolution:
gog auth login to authenticate with calendar access"Symptom: User says "schedule meeting tomorrow" without specifying time
Resolution:
Symptom: User is in different timezone than system
Resolution:
date +%ZSymptom: Calendar is fully booked, no free slots found
Resolution:
Symptom: User provides malformed email address
Resolution:
Symptom: Proposed time overlaps with existing event
Resolution:
To safely test this skill using only user@example.com:
Test 1: View Agenda (Read-Only, Always Safe)
In Claude Code:
Test 2: Find Slots (Read-Only, Always Safe)
Test 3: Create Event (Draft-to-Self Only, Safe)
See skills/gog/_shared/references/testing.md for complete test plan.
gog-email-triage: Calendar conflicts inform email prioritizationgog-email-draft: Can draft meeting invitations or agenda emailsgog-tasks: Meeting prep can become tasksgog-followups: Track meeting follow-ups| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 9,777 | 4,703 | -52% | 1 | 1 | 0% | 1,820 | 5,278 | +190% | 0 | 0 | — |
case-02 | fail→fail | 3,752 | 5,453 | +45% | 1 | 1 | 0% | 626 | 5,311 | +748% | 0 | 0 | — |
case-03 | pass→pass | 9,231 | 2,661 | -71% | 1 | 1 | 0% | 1,534 | 5,369 | +250% | 0 | 0 | — |
case-04 | fail→pass | 7,535 | 2,307 | -69% | 1 | 1 | 0% | 1,479 | 5,511 | +273% | 0 | 0 | — |
case-05 | fail→pass | 8,314 | 2,159 | -74% | 1 | 1 | 0% | 1,459 | 5,422 | +272% | 0 | 0 | — |
case-06 | fail→fail | 13,369 | 8,852 | -34% | 1 | 1 | 0% | 2,244 | 5,475 | +144% | 0 | 0 | — |
case-07 | fail→fail | 5,021 | 3,381 | -33% | 1 | 1 | 0% | 876 | 5,607 | +540% | 0 | 0 | — |
case-08 | fail→fail | 9,257 | 2,679 | -71% | 1 | 1 | 0% | 1,861 | 5,425 | +192% | 0 | 0 | — |
case-14 | fail→pass | 3,777 | 8,823 | +134% | 1 | 1 | 0% | 642 | 6,696 | +943% | 0 | 0 | — |
case-09 | fail→pass | 9,308 | 6,719 | -28% | 1 | 1 | 0% | 1,638 | 6,231 | +280% | 0 | 0 | — |
case-10 | fail→pass | 8,049 | 4,689 | -42% | 1 | 1 | 0% | 1,352 | 5,738 | +324% | 0 | 0 | — |
case-11 | pass→pass | 8,092 | 3,624 | -55% | 1 | 1 | 0% | 1,535 | 5,642 | +268% | 0 | 0 | — |
case-12 | pass→pass | 7,486 | 5,168 | -31% | 1 | 1 | 0% | 1,333 | 5,977 | +348% | 0 | 0 | — |
case-13 | pass→pass | 3,414 | 6,811 | +100% | 1 | 1 | 0% | 489 | 5,599 | +1045% | 0 | 0 | — |
case-15 | pass→pass | 4,153 | 1,429 | -66% | 1 | 1 | 0% | 623 | 5,253 | +743% | 0 | 0 | — |
case-16 | pass→pass | 12,929 | 5,645 | -56% | 1 | 1 | 0% | 2,207 | 6,174 | +180% | 0 | 0 | — |
case-17 | fail→pass | 10,117 | 4,712 | -53% | 1 | 1 | 0% | 1,701 | 5,873 | +245% | 0 | 0 | — |
case-18 | pass→pass | 4,446 | 2,396 | -46% | 1 | 1 | 0% | 697 | 5,409 | +676% | 0 | 0 | — |
case-19 | pass→pass | 12,014 | 5,068 | -58% | 1 | 1 | 0% | 1,716 | 5,915 | +245% | 0 | 0 | — |
case-20 | fail→pass | 6,574 | 1,757 | -73% | 1 | 1 | 0% | 995 | 5,275 | +430% | 0 | 0 | — |
case-21 | pass→pass | 8,801 | 2,989 | -66% | 1 | 1 | 0% | 1,443 | 5,493 | +281% | 0 | 0 | — |
case-22 | pass→pass | 9,822 | 4,937 | -50% | 1 | 1 | 0% | 1,563 | 5,948 | +281% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.