Skip to content
All Skills

Google Calendar Weekly Review

Generates a weekly calendar review: time spent in meetings vs focus work, meeting categories, overload analysis, and improvement recommendations. Prerequisites: gcalcli, gcloud, curl, jq.

Calendar & Scheduling|v1|Updated 5/18/2026
MCP get_skill({ skillId: "google-calendar-weekly-review-d513bea1" })

Use this skill with your agent

Create a free account and connect via MCP

Get Started Free
# Google Calendar Weekly Review

Analyze the past week's calendar to generate insights on time allocation, meeting load, and schedule optimization opportunities.

## When to Use

- "Review my week"
- "How much time did I spend in meetings this week?"
- "Give me a weekly schedule analysis"

## Requirements

- **gcalcli** or **Google Cloud CLI** with Calendar API
- `jq` for JSON parsing
- `bc` or `python3` for calculations

## Workflow

### Step 1 — Fetch Past Week's Events

```bash
# Using gcalcli
gcalcli agenda "last monday" "next monday" --details all --tsv

# Using Calendar API
ACCESS_TOKEN=$(gcloud auth print-access-token)
TIME_MIN=$(date -d 'last monday' -u '+%Y-%m-%dT00:00:00Z')
TIME_MAX=$(date -d 'next monday' -u '+%Y-%m-%dT00:00:00Z')

curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=${TIME_MIN}&timeMax=${TIME_MAX}&singleEvents=true&orderBy=startTime&maxResults=100" | \
  jq '[.items[] | {summary: .summary, start: .start.dateTime, end: .end.dateTime, attendees: (.attendees // [] | length), duration_min: (((.end.dateTime | sub("\\.[0-9]+"; "") | strptime("%Y-%m-%dT%H:%M:%S%z") | mktime) - (.start.dateTime | sub("\\.[0-9]+"; "") | strptime("%Y-%m-%dT%H:%M:%S%z") | mktime)) / 60)}]'
```

### Step 2 — Categorize Events

Classify each event:
- **External meetings** — attendees from outside your org
- **Internal meetings** — attendees from your org
- **1:1s** — exactly 2 attendees
- **Focus blocks** — no attendees, or labeled as focus/deep work
- **Personal** — from personal calendar
- **Recurring** — part of a recurring series

### Step 3 — Calculate Metrics

| Metric | Calculation |
|--------|-------------|
| Total meeting hours | Sum of all events with attendees |
| Focus hours | Workday hours minus meeting hours |
| External vs internal ratio | External / total meetings |
| Longest focus block | Largest gap between meetings |
| Busiest day | Day with most meeting hours |
| Meeting-free windows | Gaps > 1 hour |
| Recurring meeting load | % of meetings that are recurring |

### Step 4 — Generate Weekly Report

Save to `outputs/YYYY/weekly/YYYY-WXX-review.md`:

```markdown
# Weekly Review — Week {N}, {YEAR}

## Time Allocation
| Category | Hours | % of Work Week |
|----------|-------|----------------|
| External meetings | 4.5h | 11% |
| Internal meetings | 8.0h | 20% |
| 1:1s | 3.0h | 8% |
| Focus time | 22.5h | 56% |
| Admin/breaks | 2.0h | 5% |

## Daily Breakdown
| Day | Meetings | Focus | Score |
|-----|----------|-------|-------|
| Mon | 3h | 5h | 🟢 |
| Tue | 6h | 2h | 🔴 |
| Wed | 2h | 6h | 🟢 |
| Thu | 4h | 4h | 🟡 |
| Fri | 0.5h | 7.5h | 🟢 |

## Insights
- Tuesday was meeting-heavy (6h) — consider blocking Tuesdays as meeting-lite
- 5 recurring meetings consume 40% of meeting time — review if all are needed
- Longest focus block: 3h on Wednesday afternoon

## Recommendations
1. Decline or shorten [Meeting X] — 1h weekly meeting with 8 attendees, consider async
2. Batch 1:1s onto one day to protect other days
3. Add a "No Meetings Wednesday" policy
```

### Step 5 — Compare to Previous Weeks

If previous reports exist in `outputs/YYYY/weekly/`, compare trends:
- Meeting hours trending up or down?
- Focus time improving?
- Any new recurring meetings added?

## Important Rules

- Read-only — never modify calendar without explicit request
- Don't expose attendee names in shared reports unless asked
- Use 40h work week as baseline for percentages

## Example Prompts

- "Review my calendar this week"
- "How many hours of meetings did I have?"
- "Compare this week's schedule to last week"
#google-calendar#gcalcli#review#analyticsgcalcligcloudcurljq