home / skills / foogunlana / skills / calendar-audit

calendar-audit skill

/.claude/skills/calendar-audit

This skill protects deep work by auditing your calendar, scoring meetings, and reclaiming focus time across tools.

npx playbooks add skill foogunlana/skills --skill calendar-audit

Review the files below or copy the command above to add this skill to your agents.

Files (8)
SKILL.md
14.9 KB
---
name: calendar-audit
description: Protect your deep work time. Calendar Audit scores every meeting on your calendar, calculates your deep work gap, and makes specific suggestions to reclaim focus time. Supports multiple calendar tools (screenshot, Google Calendar MCP, Apple Calendar, icalBuddy, gcalcli) and scoring frameworks (5-Dimension, Eisenhower, RACI, Value vs Effort, Custom). Value first — your first audit takes 2 minutes with just a screenshot. Just say "calendar-audit" to get going.
---

# Calendar Audit

A skill that protects deep work time by auditing your calendar and scoring every meeting.

> *Protect the maker. Score the meetings. Reclaim the time.*

## Core Design Principle

**Value first, setup later.** A new user sees their first audit within 2 minutes. No tools to install. No questions to answer first. Screenshot in, audit out.

## Two Flows

| Condition | Flow |
|-----------|------|
| No `.claude/calendar-audit.md` exists | **Onboarding Flow** — instant audit from screenshot, then setup |
| `.claude/calendar-audit.md` exists | **Regular Flow** — FAST approach, scores from configured calendar tool |

---

## Onboarding Flow (First Run Only)

**Detection:** Check if `.claude/calendar-audit.md` exists. If no config exists, run this flow. Otherwise skip to Regular Flow.

**Goal:** Deliver an audit immediately, then calibrate preferences.

### Step 1: Welcome (10 seconds)

Read `references/branding.md` and display verbatim:
1. Logo
2. Origin quote
3. Workflow diagram
4. Key concepts

Then immediately:

```
Let's audit your calendar right now. No setup needed.

Take a screenshot of your calendar for this week (the week view works best)
and paste it here.

This is a fast first pass — we can set up automated calendar access afterwards
so future audits are hands-free.
```

**Wait for screenshot.**

### Step 2: Quick Focus Question (30 seconds)

After receiving the screenshot, before auditing, ask ONE question:

```
How much focus time do you think you need each week?

Research says knowledge workers need 3-4 hours of uninterrupted focus daily.
I recommend at least 60% focus / 40% meetings — that's ~24h focus out of a
40h week, with at least one 4-hour contiguous block of deep work per day.

What feels right for you?
→ 60/40 (recommended — player-coach, technical leader)
→ 70/30 (IC-heavy, needs more building time)
→ 50/50 (manager-heavy, lots of direct reports)
→ Other
```

**Wait for answer.** Use their choice as the focus target for the audit.

### Step 3: Instant Audit (2 minutes)

Using the screenshot + focus target, immediately run the full audit:

1. **Extract events** from the screenshot using vision — for each event capture: day, time, title, duration
2. **Calculate totals** — meeting hours, focus hours, contiguous blocks, per-day breakdown (see Regular Flow Step 1a for formulas)
3. **Score every meeting** using the **5-Dimension framework as default** (no framework choice yet — that comes in setup). See `references/frameworks.md` for scoring rules.
4. **Present the full audit** in the standard output format (Red/Orange/Yellow/Green zones with suggestions — see Regular Flow Step 3 output format)
5. **Show the gap**: current vs target

Then ask:

```
Here's your audit. Take a look at the scores.

Anything look wrong? Correct any scores and I'll regenerate suggestions.
For example: "Abdul 1:1 should be Green not Yellow" or "Sales standup
score is right but I need to keep it for political reasons"
```

**Wait for corrections.** When user provides corrections:
- Update scores
- Record overrides with reasons
- Regenerate the zone tables and suggestions
- Repeat until user is satisfied

### Step 4: Full Setup (after audit is done)

Once the user is happy with the audit:

```
Great — that's your first audit done.

Let's set up so next time is automated. I'll ask a few quick questions
to save your preferences.
```

Then run the setup wizard:

```
1. What should I call you?

2. What's your role? (e.g. CTO, Engineering Manager, IC)

3. How many direct reports? (helps score 1:1s correctly)

4. Top 3 priorities that need deep work this quarter?

5. How should I access your calendar going forward?

   Zero setup (you provide data each time):
   a) Screenshot — paste an image each week
   b) Copy-paste — paste your schedule as text
   c) ICS file — export from any calendar app

   Automated (one-time setup, then hands-free):
   d) Google Calendar MCP [recommended for Google users]
   e) Apple Calendar MCP [recommended for macOS]
   f) icalBuddy [macOS CLI]
   g) gcalcli [Google Calendar CLI]

   See references/calendar-setup.md for setup instructions.

6. Which decision framework do you prefer?

   a) 5-Dimension [default] — what we just used. Scores 5 factors. Most comprehensive.
   b) Eisenhower — simple Urgent vs Important grid. Fastest.
   c) RACI — classifies your role (Accountable/Responsible/Consulted/Informed). Best for cutting meetings where you're just "Informed".
   d) Value vs Effort — scores value generated vs time invested.
   e) Custom — define your own dimensions and scoring.

   See references/frameworks.md for details on each.
```

Parse the response and use sensible defaults for skipped fields:
- role: "Engineering Leader"
- focus_ratio: value from Step 2 (default 60)
- calendar.tool: "screenshot"
- framework.name: "5-dimension"
- maker_days: ["Tuesday", "Thursday"]

If user picks Custom framework, run the guided creation flow from `references/frameworks.md` (Custom section).

Write `.claude/calendar-audit.md` config with all answers (see `references/config-guide.md` for format).

Create `.claude/modules/meeting-scores.md` with scores from the first audit (see Regular Flow Step 5 for format).

```
You're all set. Run /calendar-audit anytime — ideally Monday mornings.

Your config: .claude/calendar-audit.md
Meeting history: .claude/modules/meeting-scores.md
```

**Exit after onboarding and first audit.**

---

## Regular Flow (Every Subsequent Run)

**FAST approach — no questions, just audit:**
1. Gather context (calendar, goals, config)
2. Calculate deep work budget and gap
3. Score every meeting using configured framework
4. Present audit with specific suggestions
5. User reviews and overrides
6. Save decisions to meeting memory

### Step 1: Gather Context

#### 1a. Calendar

Read `calendar.tool` from config and pull the week's events:

| Tool | How |
|------|-----|
| `google-calendar-mcp` | Call MCP `list-events` for current week (Mon-Fri) |
| `apple-calendar-mcp` | Call MCP tool for current week |
| `icalbuddy` | Run: `icalBuddy -f "" -nc -nrd -df "%Y-%m-%d" -tf "%H:%M" eventsFrom:today to:+5d` |
| `gcalcli` | Run: `gcalcli agenda "$(date +%Y-%m-%d)" "$(date -v+5d +%Y-%m-%d)" --details all --tsv` |
| `ics-file` | Read file at `calendar.ics_path`, parse VEVENT components, filter to current week |
| `screenshot` | Ask user: "Paste a screenshot of your calendar for this week (week view works best)" — extract events via vision |
| `copy-paste` | Ask user: "Paste your schedule for this week as text" — parse events |
| `manual` | Ask user: "List your meetings for this week (name, day, time, duration)" |

- If invoked on a weekend or late Friday, pull next week instead
- Calculate:
  - **Total meeting hours** (raw duration of all meetings)
  - **Effective meeting cost** (raw hours + 15 min context-switch per meeting)
  - **Total focus hours** (remaining time after effective meeting cost)
  - **Contiguous focus blocks** (2+ hours uninterrupted by meetings)
  - **Per-day breakdown** (meetings vs focus per day)
- Flag:
  - Days without a contiguous focus block of at least `min_daily_focus` hours (default 4)
  - Days with 5+ meetings
  - Back-to-back meetings without breaks
  - Scheduling conflicts (overlapping events)

#### 1b. Goals & Work Profile

Read context to understand what deep work is needed:

- **User config** (`.claude/calendar-audit.md`) for role, priorities, preferences
- **Weekly note** (if exists) for this week's tasks — estimate deep work hours needed
- **Monthly goals** (if exists) for north star priorities
- **Meeting memory** (`.claude/modules/meeting-scores.md`) for previous scores and overrides

If no weekly note or goals exist, ask: "What's the most important deep work you need to do this week?"

#### 1c. Calculate Deep Work Budget

Based on context, calculate:

```
Deep Work Budget
────────────────
Work week:              [work_hours, default 40]h
Target focus ratio:     [focus_ratio, default 60]%
Target focus hours:     [work_hours * ratio]h
Target meeting hours:   [work_hours * (1-ratio)]h
Min daily focus block:  [min_daily_focus, default 4]h contiguous

Current meetings:       Xh (raw) / Yh (with transitions)
Current focus:          Zh
Current ratio:          Z/work_hours = N%

Gap:                    [target - current]h to reclaim
```

**Minimum thresholds (always flag if violated):**
- Every day must have at least one contiguous block of `min_daily_focus` hours (default 4h) — scattered focus doesn't count
- No day with zero focus time
- At least 1 "maker day" (4+ contiguous hours focus) per week

### Step 2: Set Deep Work Goals

Based on tasks and priorities, propose specific deep work goals with time estimates and proposed calendar slots.

**Format:**

```
## Deep Work Goals This Week

| # | Goal | Est. Time | Priority | Proposed Slot |
|---|------|-----------|----------|---------------|
| 1 | [goal from tasks/priorities] | [hours] | P1 | [day, time range] |
| 2 | [goal] | [hours] | P2 | [day, time range] |

**Total deep work needed:** Xh
**Total deep work available:** Yh
**Gap:** Zh (need to free up Z hours from meetings)
```

If there's a gap, proceed to Step 3 to find meeting time to reclaim.
If no gap, still run the audit — meeting load creeps up over time.

### Step 3: Score and Rank Meetings

Read `framework.name` from config (default: "5-dimension"). Apply that framework's scoring model from `references/frameworks.md`.

Score every non-focus, non-personal event on the calendar.

#### Framework-Specific Scoring

**5-Dimension:** Score 5 dimensions (Decision Power, Delegation, Async Potential, Frequency Fit, Duration Fit) 1-3 each. Total 5-15. Zones: Green (5-7), Yellow (8-9), Orange (10-11), Red (12-15).

**Eisenhower:** Score Urgency and Importance 1-3 each. Total 2-6. Zones: Green/Do (2), Yellow/Schedule (3), Orange/Delegate (4-5), Red/Delete (6).

**RACI:** Classify role: Accountable (Green), Responsible (Green), Consulted (Yellow), Informed (Red).

**Value vs Effort:** Score Value and Effort 1-3 each. Total 2-6. Quadrants: Quick Win/Green (2), Strategic-or-Evaluate/Yellow (3), Filler-or-Evaluate/Orange (4-5), Trap/Red (6).

**Custom:** Use dimensions and zones from `framework.custom` config.

See `references/frameworks.md` for complete scoring rules and guidelines for each framework.

#### Applying Overrides

Before presenting results, check `scoring.overrides` in config. For any meeting matching an override, use the override zone instead of the calculated score. Note in output: "(override: [reason])".

If the meeting has been scored before (from meeting memory), note any changes in score and flag if a previously optimised meeting has regressed.

#### Output Format

Present the audit sorted by zone (Red first). Use the output columns specified in `references/frameworks.md` for the active framework.

```
## Meeting Audit — Week of [date]

**Framework:** [framework name]
**Current:** Xh meetings / Yh focus (Z% focus)
**Target:** Ah meetings / Bh focus (C% focus)
**Gap:** Need to reclaim ~Dh

### Red Zone (Eliminate/Delegate) — saves ~Xh
[framework-specific columns]

### Orange Zone (Restructure) — saves ~Xh
[framework-specific columns]

### Yellow Zone (Optimise) — saves ~Xh
[framework-specific columns]

### Green Zone (Keep)
[framework-specific columns]

**Total recoverable:** ~Xh
**Projected after changes:** Xh meetings / Yh focus (Z% focus)
```

### Step 4: User Review

After presenting the audit:

1. Ask user to confirm, override, or adjust any scores
2. For overrides, record the reason (e.g. "Keep despite score — important relationship")
3. Save all decisions to meeting memory

If user is resistant to cutting a meeting, ask:
- "What would happen if you skipped this for 2 weeks as an experiment?"
- "Could you send a delegate and get a 2-line summary?"

### Step 5: Save to Meeting Memory

Update `.claude/modules/meeting-scores.md` with:
- Current scores for all meetings (with framework used)
- User overrides and reasons
- Week-over-week comparison
- Running trend (are meetings increasing or decreasing?)

If the file doesn't exist, create it:

```markdown
# Meeting Scores

> Running log of meeting audit scores and decisions.

## Current Scores

| Meeting | Last Scored | Framework | Score | Zone | User Decision | Notes |
|---------|-------------|-----------|-------|------|---------------|-------|

## Weekly Snapshots

<!-- Append weekly totals here -->

| Week | Framework | Meetings (h) | Focus (h) | Focus % | Meetings Optimised |
|------|-----------|-------------|-----------|---------|-------------------|
```

---

## Key Principles

- **Contiguous blocks matter more than total hours.** 3 hours scattered across 30-min gaps is worth less than 1 contiguous 2-hour block. The target is one 4-hour uninterrupted stretch per day — that's where real work happens.
- **Don't just count meetings — count transitions.** Each meeting has ~15 min of context-switching cost. A day with 6x30min meetings costs ~4.5h, not 3h.
- **Batch meetings on specific days** when possible. Aim for 1-2 "maker days" (mostly focus) and 2-3 "manager days" (meetings batched).
- **Morning focus is often more valuable than afternoon focus** for creative and learning work.
- **The goal is not zero meetings** — it's the right meetings at the right frequency and duration.
- **Meeting load creeps.** Without regular audits, meetings accumulate 1-2 per month. This skill is the counterweight.
- **Career items are the first to drop** when meetings increase. Deep work protection is career protection.

---

## Research & References

This skill draws from:

- **Cal Newport, Deep Work** — Knowledge workers need 3-4h of uninterrupted focus daily for meaningful output
- **Paul Graham, Maker's Schedule** — Meetings destroy maker productivity disproportionately; a single meeting can ruin a half-day
- **Parkinson's Law** — Meetings expand to fill the time allotted; default to 25min or 50min
- **Context-switching research (Gloria Mark, UC Irvine)** — Takes ~23 minutes to fully refocus after an interruption
- **Meeting cost formula** — A 1h meeting with 8 people costs 8 person-hours + 8x15min context switches = 10h of organisational productivity

---

## File Paths

| Type | Path |
|------|------|
| Config | `.claude/calendar-audit.md` |
| Meeting Memory | `.claude/modules/meeting-scores.md` |
| Calendar Setup Guide | `references/calendar-setup.md` |
| Decision Frameworks | `references/frameworks.md` |
| Config Reference | `references/config-guide.md` |
| Branding | `references/branding.md` |
| Weekly Notes | Varies by user's planning setup |
| Monthly Goals | Varies by user's planning setup |

Overview

This skill protects your deep work time by auditing every meeting on your calendar, scoring each event, and producing actionable recommendations to reclaim focus hours. Value-first: the first audit runs in about two minutes from a single screenshot so you see results immediately. It supports multiple calendar inputs and several scoring frameworks to fit your role and priorities.

How this skill works

Provide a calendar snapshot or connect an automated calendar source and the skill extracts events, computes meeting costs (including context-switch overhead), and calculates your deep work budget and gap. It scores each meeting using the configured framework (default: 5-Dimension), groups meetings into actionable zones (Red/Orange/Yellow/Green), and proposes concrete time to reclaim and slots for deep work. You can review, override scores with reasons, and the skill records decisions to meeting memory for future audits.

When to use it

  • Weekly check (ideally Monday mornings) to protect maker days
  • When meetings feel to have crept up and you need to reclaim focused hours
  • Before a high-priority work sprint or quarterly planning
  • To evaluate which recurring meetings to cut, delegate, or restructure
  • When onboarding to set preferences and automated calendar access

Best practices

  • Start with a screenshot for a quick first audit — no setup required
  • Pick a target focus ratio (recommend 60/40) and a min daily contiguous focus block (default 4h)
  • Prefer automated calendar access for hands-free, consistent weekly audits
  • Use meeting overrides with a reason to build meeting memory and preserve context
  • Batch meetings to manager days and protect 1–2 maker days per week

Example use cases

  • Engineering leader audits weekly calendar to free 8–12 hours for coding work
  • ICs verify they have one 4-hour contiguous deep work block per day during a product sprint
  • Managers identify recurring meetings where they are only "informed" and delegate attendance
  • Teams trial skipping a low-value recurring meeting for two weeks to validate impact
  • Product teams restructure long recurring syncs into async updates to reduce meeting cost

FAQ

How fast is the first audit?

First audit can complete in about two minutes from a pasted screenshot; setup for automated access happens after you review the results.

Which calendar sources are supported?

Supports screenshot input, Google Calendar MCP, Apple Calendar MCP, icalBuddy, gcalcli, ICS files, and copy-paste/manual entry.

Can I change the scoring framework?

Yes — choose from 5-Dimension (default), Eisenhower, RACI, Value vs Effort, or create a Custom framework during setup.