From work
Analyze calendar events across all Google accounts for any time range — today, this week, last week, next week, or custom dates. Categorizes events, calculates meeting load vs targets, checks Deep Work Thursday protection, identifies focus blocks, and generates actionable recommendations. Supports retrospective analysis, prospective planning, and full weekly review. Trigger on: "calendar review", "review my calendar", "time review", "what meetings do I have", "how did I spend my time", "meeting load", "zone of genius check", "next week prep", "deep work check", "calendar analysis", "check my schedule", "today's calendar", "tomorrow's meetings", "weekly review calendar", or any question about calendar-based time allocation or upcoming schedule.
How this skill is triggered — by the user, by Claude, or both
Slash command
/work:gtd-calendar-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Analyze calendar events across **all connected Google accounts** for any time range. Categorize events, measure time allocation against targets, identify violations and opportunities, and generate actionable recommendations.
Analyze calendar events across all connected Google accounts for any time range. Categorize events, measure time allocation against targets, identify violations and opportunities, and generate actionable recommendations.
TOKEN EFFICIENCY — API Selection:
- Use
mcp__google__calendar_events_list_all_accountsas PRIMARY — one call covers all 3 accounts- ALWAYS set tight
timeMin/timeMax— API returns ~13k tokens per response without filtering- Never fetch more than 7 days per call — split longer ranges into multiple calls
- Skip all-day events in calculations (they are labels, not meetings)
- Single-day queries are cheapest (~2-3k tokens)
Parse the user's argument (or lack thereof) into timeMin and timeMax in Europe/Madrid timezone:
| Argument | timeMin | timeMax | Mode |
|---|---|---|---|
| (none) / "today" | Today 00:00 | Today 23:59 | Single-day |
| "tomorrow" | Tomorrow 00:00 | Tomorrow 23:59 | Single-day |
| "this week" | This Monday 00:00 | This Sunday 23:59 | Mixed (past days = retro, future = prospective) |
| "last week" / "past week" | Last Monday 00:00 | Last Sunday 23:59 | Retrospective |
| "next week" | Next Monday 00:00 | Next Sunday 23:59 | Prospective |
| "March 20-25" / custom | Parsed start 00:00 | Parsed end 23:59 | Auto-detect (past/future/mixed) |
| "weekly review" | Last Monday 00:00 | Next Sunday 23:59 | Full (retro + prospective) |
Default with no argument: today.
For "this week" and custom ranges that span past and future, split the analysis at the current time boundary — events before now get retrospective treatment, events after now get prospective treatment.
Load these from plugins/work/skills/gtd-calendar-review/ before processing:
event-rules.json — deterministic event categorization by title patterns, attendee domains, calendar sourcetargets.json — quantitative targets for time allocation comparisonLoad rule files — read event-rules.json and targets.json
Parse scope — determine timeMin, timeMax, and analysis mode from the user's argument. Convert to ISO 8601 with Europe/Madrid offset.
Fetch events — call mcp__google__calendar_events_list_all_accounts with computed timeMin and timeMax. If range exceeds 7 days, split into multiple calls (e.g., "weekly review" = 2 calls: last week + next week).
Filter:
Categorize each event by applying rules in priority order:
Priority 1 — Calendar source (event-rules.json → by_calendar).
Match the calendar name or ID. Personal/Gym calendars get direct category assignment.
Priority 2 — Title exact match (event-rules.json → by_title_exact).
Exact title match for recurring meetings with stable names.
Priority 3 — Title pattern match (event-rules.json → by_title_pattern).
Regex match against event title. Array — first match wins. Each pattern maps to a category.
Priority 4 — Attendee domain rules (event-rules.json → by_attendee_domain).
Check all attendee email domains. Use the role field to infer category:
internal (neurons-lab.com) → check attendee count:
INTERNAL_1ON1INTERNAL_SYNCrole: "client" → CLIENT_EXTERNALSALES_BD or CLIENT_EXTERNAL (check if NL staff are present to distinguish)Priority 5 — General heuristics (no rule matched):
DEEP_WORK_BLOCK or OTHER based on titleOTHERPERSONALINTERNAL_SYNCOTHERCompute duration for each event in hours (decimal). Handle:
The analysis adapts to the mode determined by scope:
Generate a chronological schedule view:
# Calendar — [Day, Date]
## Schedule
| Time | Duration | Event | Category | Prep |
|------|----------|-------|----------|------|
| 09:00-10:00 | 1h | [c-suite] Weekly Sync | INTERNAL_SYNC | — |
| 10:00-11:30 | 1.5h | Visa<>Neurons Lab | CLIENT_EXTERNAL | Check #account-visa |
| 11:30-14:00 | — | **Focus gap (2.5h)** | | |
| 14:00-15:00 | 1h | 1:1 Nik | INTERNAL_1ON1 | Check last 1:1 notes |
| ... | | | | |
## Day Summary
- Meetings: Xh (Y events)
- Focus gaps >30min: [list with time windows]
- Deep work blocks: Xh
- Violations: [evening cutoff, overloaded]
## Prep Hints
- **[Meeting name]** (HH:MM) — [what to check: Slack channel, Notion page, Clay contact, email thread]
For today: split past (already happened) vs remaining (upcoming). Mark past events with checkmarks.
For each upcoming meeting, generate prep hints:
CLIENT_EXTERNAL → "Check #account-[client] Slack channel, [client] Notion project page, recent email threads, Clay contact for [external attendees]"INTERNAL_1ON1 → "Check pending feedback items, last 1:1 notes"INTERVIEW → "Review candidate profile, CV"SALES_BD → "Check Clay contact, last email thread, web search for [company/person]"INTERNAL_SYNC → "Check relevant Notion project page, Slack channel"# Calendar Review — [date range] (Retrospective)
## Time Allocation
| Category | Hours | % of [N]h | vs Target |
|----------|-------|-----------|-----------|
| Client/External | Xh | Y% | — |
| Internal Syncs | Xh | Y% | — |
| Internal 1:1s | Xh | Y% | — |
| Interviews | Xh | Y% | — |
| Sales/BD | Xh | Y% | — |
| Deep Work Blocks | Xh | Y% | Target: 50% → [delta] |
| Gym | Xh | Y% | — |
| Personal | Xh | Y% | — |
| Other | Xh | Y% | — |
| **Total Meetings** | **Xh** | **Y%** | **Warn >35%, Crit >45%** |
Denominator: [N weekdays] x 8h = [total]h standard productive capacity.
## Daily Breakdown
| Day | Meetings | DW Blocks | Personal | Total | Longest Gap | Violations |
|-----|----------|-----------|----------|-------|-------------|------------|
| Mon | Xh | Yh | Zh | Wh | Nh | — |
| Tue | Xh | Yh | Zh | Wh | Nh | — |
| ... | | | | | | |
| Thu | Xh | Yh | Zh | Wh | Nh | DW violated |
## Target Checks
| Target | Status | Detail |
|--------|--------|--------|
| ZoG >= 50% | FAIL/PASS | Actual: X% (Yh of Zh) |
| DW Thursday | FAIL/PASS | N meetings: [list] |
| Evening cutoff 21:00 | FAIL/PASS | N violations: [list] |
| Max 5h meetings/day | FAIL/PASS | [days over] |
| Weekend work-free | FAIL/PASS | [events found] |
## Top Meeting Consumers
1. [Client/Account] — Xh across Y meetings
2. [Client/Account] — Xh across Y meetings
3. ...
## Meeting Patterns
- Recurring meetings: Xh (Y% of meeting time)
- One-off meetings: Xh (Y% of meeting time)
- 1:1 ratio: Xh of Yh total (Z%)
- Average meeting density: X meetings/weekday
## Observations
1. [Key insight — what displaced ZoG this period]
2. [Pattern worth noting]
3. ...
# Calendar Preview — [date range]
## Meeting Density
| Day | Meetings | Hours | Available Focus | Status |
|-----|----------|-------|-----------------|--------|
| Mon | N | Xh | Yh | [green/yellow/red] |
| Tue | N | Xh | Yh | [green/yellow/red] |
| ... | | | | |
Status: green = <3h meetings, yellow = 3-5h, red = >5h
## Available Focus Blocks (gaps > 2h)
- **Monday:** 09:00-11:30 (2.5h), 14:00-17:00 (3h)
- **Tuesday:** [none — overloaded]
- ...
## Deep Work Thursday
Status: **PROTECTED** / **AT RISK** (N meetings) / **VIOLATED** (N meetings)
[If not protected: list events and recommend what to move/decline]
## Upcoming Meetings + Prep Hints
### [Day — Date]
| Time | Meeting | Category | Attendees | Prep |
|------|---------|----------|-----------|------|
| 10:00 | Visa Sync | CLIENT | [names] | Check #account-visa, Notion |
| ... | | | | |
### [Day — Date]
...
## Recommendations
1. [Specific actionable recommendation with quantified impact]
2. [e.g., "Move [meeting] from Thursday to [day with gap] — protects DW day"]
3. [e.g., "Add 2h focus block on Wednesday 14:00-16:00 — currently empty"]
4. ...
## Zone of Genius Forecast
- Protected deep work blocks next week: Xh (Y% of 40h)
- If recommendations applied: Zh (W%)
Combine retrospective for last Mon-Sun + prospective for next Mon-Sun, separated by a horizontal rule. Use the full retrospective and prospective formats above.
100 Periodics/Weekly/Week [N]/[YYYY-MM-DD]-calendar-review.md where Week N is the upcoming week number. Create the folder if it doesn't exist.Chief of Staff analyst. Data-driven, concise tables over prose. Surface violations and recommendations prominently — the user wants to know what is wrong and what to do, not a neutral summary. Use bold for violations. Keep observations to 3-5 bullet points maximum.
calendar_event_create, gcal_create_event, gcal_update_event, or gcal_delete_eventAfter each run, if events were classified by heuristics (Priority 5) rather than deterministic rules:
event-rules.json with the exact JSON to addnpx claudepluginhub rachnog/alex-honchar-claude-for-life --plugin workDesigns a structured weekly review ritual to process tasks, plan the week, and maintain control of commitments and projects.
Transforms calendar events into meeting briefings, standup notes, and workflows with git commits/PR context. Handles ICS files, JSON feeds, or manual input.
Analyzes secretary plugin SQLite DB for productivity: prioritizes commitments via urgency scoring and Eisenhower Matrix, reports session metrics and completion rates.