What it does
Gmail gives Patina access to your inbox, sent messages, and archives. Your morning briefing surfaces emails that need replies. Your digest cross-references sent messages to verify what's actually open vs. already handled. People and client syncs extract relationship context from conversations.
Used by
Setup
Connect via Claude
Go to claude.ai/settings/connectors and connect your Gmail account. This uses Claude's built-in MCP connector — no API keys or OAuth setup needed.
Set up direct API access (optional)
For scheduled automations (morning briefings, nightly digests), the menu bar app needs direct API access since Claude connectors aren't available in headless mode.
- Create a Google Cloud project and enable the Gmail API
- Create OAuth 2.0 credentials (Desktop app type)
- Store your credentials in macOS Keychain:
$ security add-generic-password -U -s gabos-google-client-id -a gabos -w YOUR_CLIENT_ID
$ security add-generic-password -U -s gabos-google-client-secret -a gabos -w YOUR_CLIENT_SECRET - Run the OAuth setup script:
$ bash scripts/google-auth-setup.sh
This opens your browser for consent, captures the auth code, and stores the refresh token in your Keychain.
Test it
Open Claude Code in your Patina repo and run /morning. Your briefing should include email summaries.
How it works
When running interactively in Claude Code, Gmail is accessed through Claude's MCP connector. When running headlessly (via the menu bar app), the system uses scripts/read-email-api.sh which refreshes an OAuth token from your Keychain and calls the Gmail API directly. Both paths read from inbox, sent, and archived folders.
Scopes requested: gmail.readonly (read-only access, never sends or modifies email).
