What it does
Google Calendar feeds your daily schedule into morning briefings and end-of-day digests. It pulls events from all your calendars — primary, shared, and subscribed. Meeting prep uses it to identify upcoming meetings and pull attendee context.
Used by
Setup
Connect via Claude
Go to claude.ai/settings/connectors and connect your Google Calendar. This gives Claude read access to your events.
Set up direct API access (optional)
For scheduled automations, the menu bar app needs direct Calendar API access. If you already set up Gmail's direct API access, this is already done — both use the same Google OAuth credentials and the setup script requests both scopes.
If you haven't set up Gmail's direct API access yet, follow the steps on the Gmail connection page. The OAuth setup covers both Gmail and Calendar in one flow.
Multiple calendars
By default, Patina reads from your primary calendar. To add more calendars, edit scripts/read-calendar-api.sh and add your calendar IDs to the CALENDARS array. You can find calendar IDs in Google Calendar Settings under each calendar's "Integrate calendar" section.
Test it
Run /morning in Claude Code. Your briefing should show today's schedule.
How it works
Interactive sessions use Claude's MCP connector. Headless mode uses scripts/read-calendar-api.sh, which fetches today's events from all configured calendars and formats them as time-sorted entries. Scopes requested: calendar.readonly.
