Overview
View calendars from multiple Google accounts (work, personal, etc.) at once and provide an integrated schedule.
- Use pre-authenticated refresh token (no need to log in every time)
- Fast retrieval via parallel Subagent execution
- Detect schedule conflicts between accounts
Trigger conditions
View
- "today's schedule", "tell me this week's schedule"
- "check calendar", "what's my schedule"
- "next meeting", "what's happening tomorrow"
- "check for schedule conflicts"
Create
- "create a new event", "add a meeting"
- "schedule a meeting for tomorrow at 3"
- "create a team meeting next Monday"
Modify
- "change the event time", "change the meeting time"
- "change sync meeting to 14:21"
- "change the meeting title"
Delete
- "delete the event", "cancel the meeting"
- "remove the event"
Prerequisites
1. Set up Google Cloud project
- Google Cloud Consolecreate a project at
- Enable Calendar API
- Create OAuth 2.0 Client ID (Desktop type)
credentials.jsondownload →references/credentials.jsonsave to
2. Authenticate per account (first time only)
# 회사 계정
uv run python .claude/skills/google-calendar/scripts/setup_auth.py --account work
# 개인 계정
uv run python .claude/skills/google-calendar/scripts/setup_auth.py --account personal
Log in with Google in the browser → refresh token will be accounts/{name}.jsonsaved to
Workflow
1. Check registered accounts
ls .claude/skills/google-calendar/accounts/
# → work.json, personal.json
2. Run Subagents in parallel
Call the Task tool for each account in parallel:
# 병렬 실행 - 단일 메시지에 여러 Task 호출
Task(subagent_type="general-purpose", prompt="fetch calendar for work account")
Task(subagent_type="general-purpose", prompt="fetch calendar for personal account")
Each subagent executes the following:
uv run python .claude/skills/google-calendar/scripts/fetch_events.py \
--account {account_name} \
--days 7
3. Merge results
- Sort events from all accounts chronologically
- Events in the same time slot = marked as conflicts
- Distinguish by color/icon per account
Output format
📅 2026-01-06 (월) 일정
[09:00-10:00] 🔵 팀 스탠드업 (work)
[10:00-11:30] 🟢 치과 예약 (personal)
[14:00-15:00] 🔵 고객 미팅 - 삼양 (work)
⚠️ 충돌: 개인 일정과 겹침
[14:00-14:30] 🟢 은행 방문 (personal)
📊 오늘 총 4개 일정 (work: 2, personal: 2)
⚠️ 1건 충돌
Execution example
User: "tell me this week's schedule"
1. accounts/ 폴더 확인
└── 등록된 계정: work, personal
2. Subagent 병렬 실행
├── Task: work 계정 이벤트 조회
└── Task: personal 계정 이벤트 조회
3. 결과 수집 (각 subagent 완료 대기)
├── work: 8개 이벤트
└── personal: 3개 이벤트
4. 통합 및 정렬
└── 11개 이벤트, 2건 충돌 감지
5. 출력
└── 일별로 그룹화하여 표시
Error handling
| Situation | Handling |
|---|---|
| accounts/ folder is empty | Guide initial setup (how to run setup_auth.py) |
| Token for a specific account expired | Guide re-authentication for that account, other accounts still work normally |
| API quota exceeded | Guide to retry after a moment |
| Network error | Request to check connection |
Scripts
| File | Purpose |
|---|---|
scripts/setup_auth.py |
OAuth authentication and token storage per account |
scripts/fetch_events.py |
View events for a specific account (CLI) |
scripts/manage_events.py |
Create/modify/delete events (CLI) |
scripts/calendar_client.py |
Google Calendar API client library |
Schedule management (create/modify/delete)
Create event
uv run python .claude/skills/google-calendar/scripts/manage_events.py create \
--summary "팀 미팅" \
--start "2026-01-06T14:00:00" \
--end "2026-01-06T15:00:00" \
--account work
Create all-day event
uv run python .claude/skills/google-calendar/scripts/manage_events.py create \
--summary "연차" \
--start "2026-01-10" \
--end "2026-01-11" \
--account personal
Modify event
uv run python .claude/skills/google-calendar/scripts/manage_events.py update \
--event-id "abc123" \
--summary "팀 미팅 (변경)" \
--start "2026-01-06T14:21:00" \
--account work
Delete event
uv run python .claude/skills/google-calendar/scripts/manage_events.py delete \
--event-id "abc123" \
--account work
Options
| Options | Description |
|---|---|
--summary |
Event Title |
--start |
Start Time (ISO format: 2026-01-06T14:00:00 or 2026-01-06) |
--end |
End Time |
--description |
Event Description |
--location |
Location |
--attendees |
Attendee Emails (comma-separated) |
--account |
Account (work, personal, etc.) |
--adc |
Use gcloud ADC |
--timezone |
Timezone (default: Asia/Seoul) |
--json |
Output in JSON format |
References
| Documentation | Content |
|---|---|
references/setup.md |
Detailed Initial Setup Guide |
references/credentials.json |
Google OAuth Client ID (gitignore) |
File Structure
.claude/skills/google-calendar/
├── SKILL.md # 이 파일
├── scripts/
│ ├── calendar_client.py # API 클라이언트
│ ├── setup_auth.py # 인증 설정
│ ├── fetch_events.py # 이벤트 조회 CLI
│ └── manage_events.py # 이벤트 생성/수정/삭제 CLI
├── references/
│ ├── setup.md # 설정 가이드
│ └── credentials.json # OAuth Client ID (gitignore)
└── accounts/ # 계정별 토큰 (gitignore)
├── work.json
└── personal.json
Security Precautions
accounts/*.json: includes refresh token, never commitreferences/credentials.json: includes Client Secret, do not commit.gitignoremust be added to