Google Calendar + Tasks Access
Quick start
- Create a Google Cloud OAuth client (Desktop app) and save the credentials JSON to
~/.config/google-calendar/credentials.json. - Install dependencies (venv recommended):
python3 -m venv ~/.config/google-calendar/venv ~/.config/google-calendar/venv/bin/pip install -r <skill_dir>/scripts/requirements.txt - Authenticate and store a token:
- Calendar only:
<skill_dir>/scripts/gcal-auth
- Tasks only:
<skill_dir>/scripts/gcal-auth --scopes https://www.googleapis.com/auth/tasks
- Calendar + Tasks (single token):
<skill_dir>/scripts/gcal-auth --scopes https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/tasks
- Calendar only:
- Call the API:
<skill_dir>/scripts/gcal list-calendars
Credentials and tokens
- Credentials are expected at
~/.config/google-calendar/credentials.jsonby default. - Tokens are stored at
~/.config/google-calendar/token.jsonby default. - Use
--tokenorGCAL_TOKEN_PATHto switch accounts or isolate environments.
Date/time rules
- Use RFC3339 for timed events (e.g.,
2026-01-22T10:00:00-08:00). - Use
YYYY-MM-DDfor all-day events and setendto the next day (exclusive). - Set
--time-zonewhen the datetime has no offset.
Common commands
- List calendars:
<skill_dir>/scripts/gcal list-calendars
- List events:
<skill_dir>/scripts/gcal list-events --calendar-id primary --time-min 2026-01-22T00:00:00-08:00 --time-max 2026-01-22T23:59:59-08:00
- Search events:
<skill_dir>/scripts/gcal list-events --calendar-id primary --q "standup" --time-min ... --time-max ...
- Create event (simple):
<skill_dir>/scripts/gcal create-event --calendar-id primary --summary "Review" --start 2026-01-22T10:00:00-08:00 --end 2026-01-22T11:00:00-08:00
- Update event (simple):
<skill_dir>/scripts/gcal update-event --calendar-id primary --event-id <id> --summary "New title"
- Delete event:
<skill_dir>/scripts/gcal delete-event --calendar-id primary --event-id <id>
- Free/busy:
<skill_dir>/scripts/gcal freebusy --calendars primary,team@company.com --time-min ... --time-max ...
- List task lists:
<skill_dir>/scripts/gcal list-tasklists
- List tasks:
<skill_dir>/scripts/gcal list-tasks --tasklist <tasklist_id>
- Create task:
<skill_dir>/scripts/gcal create-task --tasklist <tasklist_id> --title "Buy milk" --due 2026-01-22T10:00:00-08:00
- Update task:
<skill_dir>/scripts/gcal update-task --tasklist <tasklist_id> --task-id <id> --notes "Bring receipt"
- Delete task:
<skill_dir>/scripts/gcal delete-task --tasklist <tasklist_id> --task-id <id>
Advanced usage
- Use
callto hit any Calendar API endpoint:<skill_dir>/scripts/gcal call GET /users/me/calendarList<skill_dir>/scripts/gcal call POST /calendars/primary/events --body-file /path/to/event.json
- Use
--body-fileor--body(JSON string) for complex payloads (attendees, recurrence, conferenceData). - Run multiple accounts by using different token files with
--token.
Safety
- Confirm intent before creating, updating, or deleting events.
- Keep OAuth credentials and token files out of git.