Google Calendar
gog is a command-line interface (CLI) for interacting with Google services like Gmail, Calendar, Drive, and more. This skill guide shows how to use gog to interact with Google Calendar.
Prerequisites
Before using calendar commands, ensure the account is configured and authenticated.
Check auth status
bash
gog auth list --check # Verify tokens are usable gog auth status # Show current auth state/services
Environment setup
Source the config file before running commands:
bash
source /home/slzatz/claude-sessions/.claude/gmail.env
This sets GOG_ACCOUNT to the configured email address.
Non-interactive mode
For agent/automated use, add --no-input to fail instead of prompting:
bash
gog --no-input calendar events primary --today
Config location
- •Linux:
~/.config/gogcli/config.json
Troubleshooting auth
If commands fail with auth errors:
- •Run
gog auth list --checkto verify token validity - •If token is revoked/expired, re-authorize:
gog auth add <email> --force-consent - •If using file-based keyring (no GNOME Keyring), ensure
GOG_KEYRING_PASSWORDis set
Calendar Commands
bash
# Calendars gog calendar calendars gog calendar acl <calendarId> # List access control rules gog calendar colors # List available event/calendar colors gog calendar time --timezone America/New_York gog calendar users # List workspace users (use email as calendar ID) # Events (with timezone-aware time flags) gog calendar events <calendarId> --today # Today's events gog calendar events <calendarId> --tomorrow # Tomorrow's events gog calendar events <calendarId> --week # This week (Mon-Sun by default; use --week-start) gog calendar events <calendarId> --days 3 # Next 3 days gog calendar events <calendarId> --from today --to friday # Relative dates gog calendar events <calendarId> --from today --to friday --weekday # Include weekday columns gog calendar events <calendarId> --from 2025-01-01T00:00:00Z --to 2025-01-08T00:00:00Z gog calendar events --all # Fetch events from all calendars gog calendar event <calendarId> <eventId> gog calendar get <calendarId> <eventId> # Alias for event gog calendar search "meeting" --today gog calendar search "meeting" --tomorrow gog calendar search "meeting" --days 365 gog calendar search "meeting" --from 2025-01-01T00:00:00Z --to 2025-01-31T00:00:00Z --max 50 # Search defaults to 30 days ago through 90 days ahead unless you set --from/--to/--today/--week/--days. # Tip: set GOG_CALENDAR_WEEKDAY=1 to default --weekday for calendar events output. # Create and update gog calendar create <calendarId> \ --summary "Meeting" \ --from 2025-01-15T10:00:00Z \ --to 2025-01-15T11:00:00Z gog calendar create <calendarId> \ --summary "Team Sync" \ --from 2025-01-15T14:00:00Z \ --to 2025-01-15T15:00:00Z \ --attendees "alice@example.com,bob@example.com" \ --location "Zoom" gog calendar update <calendarId> <eventId> \ --summary "Updated Meeting" \ --from 2025-01-15T11:00:00Z \ --to 2025-01-15T12:00:00Z # Send notifications when creating/updating gog calendar create <calendarId> \ --summary "Team Sync" \ --from 2025-01-15T14:00:00Z \ --to 2025-01-15T15:00:00Z \ --send-updates all gog calendar update <calendarId> <eventId> \ --send-updates externalOnly # Recurrence + reminders gog calendar create <calendarId> \ --summary "Payment" \ --from 2025-02-11T09:00:00-03:00 \ --to 2025-02-11T09:15:00-03:00 \ --rrule "RRULE:FREQ=MONTHLY;BYMONTHDAY=11" \ --reminder "email:3d" \ --reminder "popup:30m" # Add attendees without replacing existing attendees/RSVP state gog calendar update <calendarId> <eventId> \ --add-attendee "alice@example.com,bob@example.com" gog calendar delete <calendarId> <eventId> # Invitations gog calendar respond <calendarId> <eventId> --status accepted gog calendar respond <calendarId> <eventId> --status declined gog calendar respond <calendarId> <eventId> --status tentative gog calendar respond <calendarId> <eventId> --status declined --send-updates externalOnly # Propose a new time (browser-only flow; API limitation) gog calendar propose-time <calendarId> <eventId> gog calendar propose-time <calendarId> <eventId> --open gog calendar propose-time <calendarId> <eventId> --decline --comment "Can we do 5pm?" # Availability gog calendar freebusy --calendars "primary,work@example.com" \ --from 2025-01-15T00:00:00Z \ --to 2025-01-16T00:00:00Z gog calendar conflicts --calendars "primary,work@example.com" \ --today # Today's conflicts
Special Event Types
bash
# Focus time gog calendar create primary \ --event-type focus-time \ --from 2025-01-15T13:00:00Z \ --to 2025-01-15T14:00:00Z # Out of office gog calendar create primary \ --event-type out-of-office \ --from 2025-01-20 \ --to 2025-01-21 \ --all-day # Working location gog calendar create primary \ --event-type working-location \ --working-location-type office \ --working-office-label "HQ" \ --from 2025-01-22 \ --to 2025-01-23 # Dedicated shortcuts (same event types, more opinionated defaults) gog calendar focus-time --from 2025-01-15T13:00:00Z --to 2025-01-15T14:00:00Z gog calendar out-of-office --from 2025-01-20 --to 2025-01-21 --all-day gog calendar working-location --type office --office-label "HQ" --from 2025-01-22 --to 2025-01-23
Team Calendars
Requires Cloud Identity API for Google Workspace:
bash
gog calendar team <group-email> --today # Show team's events for today gog calendar team <group-email> --week # Show team's events for the week (use --week-start) gog calendar team <group-email> --freebusy # Show only busy/free blocks (faster) gog calendar team <group-email> --query "standup" # Filter by event title
JSON Output
JSON event output includes timezone and localized times (useful for agents):
bash
gog calendar get <calendarId> <eventId> --json
# {
# "event": {
# "id": "...",
# "summary": "...",
# "startDayOfWeek": "Friday",
# "endDayOfWeek": "Friday",
# "timezone": "America/Los_Angeles",
# "eventTimezone": "America/New_York",
# "startLocal": "2026-01-23T20:45:00-08:00",
# "endLocal": "2026-01-23T22:45:00-08:00",
# "start": { "dateTime": "2026-01-23T23:45:00-05:00" },
# "end": { "dateTime": "2026-01-24T01:45:00-05:00" }
# }
# }
Examples
View today's schedule
bash
gog calendar events primary --today
Create a meeting with attendees
bash
# Find a free time slot gog calendar freebusy --calendars "primary" \ --from 2025-01-15T00:00:00Z \ --to 2025-01-16T00:00:00Z # Create the meeting gog calendar create primary \ --summary "Team Standup" \ --from 2025-01-15T10:00:00Z \ --to 2025-01-15T10:30:00Z \ --attendees "alice@example.com,bob@example.com"
Respond to an invitation
bash
gog calendar respond primary <eventId> --status accepted
Global Flags
All commands support these flags:
- •
--account <email|alias|auto>- Account to use (overrides GOG_ACCOUNT) - •
--json- Output JSON to stdout (best for scripting) - •
--plain- Output stable, parseable text to stdout (TSV; no colors) - •
--no-input- Never prompt; fail instead (useful for automation) - •
--verbose- Enable verbose logging - •
--help- Show help for any command