Skip to content
All Skills

Google Calendar Daily Planner

Pulls today's or tomorrow's Google Calendar events via gcalcli, analyzes meeting density, identifies focus blocks, and generates a time-blocked daily plan. Prerequisites: gcalcli, gcloud, curl, jq.

Calendar & Scheduling|v1|Updated 5/18/2026
MCP get_skill({ skillId: "google-calendar-daily-planner-147a026a" })

Use this skill with your agent

Create a free account and connect via MCP

Get Started Free
# Google Calendar Daily Planner

Pull your Google Calendar events, analyze meeting density, find focus blocks, and generate an optimized time-blocked daily plan.

## When to Use

- "Plan my day based on my calendar"
- "What does tomorrow look like?"
- "Find focus time blocks in my schedule today"

## Requirements

- **gcalcli** installed (`pip install gcalcli`)
- Google Calendar OAuth configured (`gcalcli init`)
- Alternative: **Google Cloud CLI** (`gcloud`) with Calendar API enabled

## Workflow

### Step 1 — Fetch Today's Events

```bash
# Using gcalcli
gcalcli agenda "today" "tomorrow" --details all --tsv 2>/dev/null

# Alternative: using Google Calendar API directly
ACCESS_TOKEN=$(gcloud auth print-access-token)
TIME_MIN=$(date -u '+%Y-%m-%dT00:00:00Z')
TIME_MAX=$(date -u -d 'tomorrow' '+%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" | \
  jq '.items[] | {summary: .summary, start: .start.dateTime, end: .end.dateTime, attendees: [.attendees[]?.email], location: .location, status: .status}'
```

### Step 2 — Classify Events

For each event, apply labels:

| Label | Criteria |
|-------|----------|
| 🔴 **External** | Has attendees from different email domains |
| 🟡 **Internal** | All attendees share your domain |
| 🔵 **Personal** | No attendees, or in personal calendar |
| ⚡ **Focus Block** | Calendar event with "focus" or "deep work" in title |
| 🍽️ **Lunch** | Overlaps 12:00-13:00, or titled lunch/break |

### Step 3 — Analyze Schedule Quality

Calculate:
- **Total meeting hours** — sum of all events
- **Largest free block** — longest gap between events
- **Context switches** — number of back-to-back events with different attendee groups
- **Focus time available** — total unscheduled time in 30+ min blocks

### Step 4 — Generate Time-Blocked Plan

Fill gaps between meetings with task blocks:

```markdown
# Daily Plan — {DATE}

## Schedule
| Time | Block | Type |
|------|-------|------|
| 08:00-08:30 | Morning routine & inbox scan | ⚡ Focus |
| 08:30-09:00 | Review PRs from yesterday | ⚡ Focus |
| 09:00-09:30 | Standup with Team | 🟡 Internal |
| 09:30-11:00 | Deep work — {top priority task} | ⚡ Focus |
| 11:00-12:00 | Client sync — Acme Corp | 🔴 External |
| 12:00-13:00 | Lunch | 🍽️ Break |
| 13:00-15:00 | Deep work — {second priority task} | ⚡ Focus |
| 15:00-15:30 | 1:1 with manager | 🟡 Internal |
| 15:30-16:00 | Email + Slack catchup | 📧 Admin |

## Day Score: 🟢 72%
- Focus time: 3.5h / 4h target
- Meetings: 2.5h (under 4h threshold ✅)
- Largest focus block: 1.5h (09:30-11:00)
- Context switches: 3 (moderate)
```

### Step 5 — Suggest Optimizations

If the day is meeting-heavy:
- Identify moveable meetings (internal, optional, or recurring)
- Suggest declining or rescheduling specific events
- Recommend batching short meetings together

Save plan to `outputs/YYYY/MM/YYYY-MM-DD-daily-plan.md`.

## Important Rules

- Read-only — never create, modify, or delete calendar events without explicit user request
- Respect event privacy — don't expose attendee lists unless asked
- Factor in commute time for in-person meetings with locations

## Example Prompts

- "Plan my day"
- "What's my schedule tomorrow?"
- "Find 2 hours of focus time today"
- "Rate how productive my Wednesday looks"
#google-calendar#gcalcli#planning#productivitygcalcligcloudcurljq