---
name: calendar_defense
description: Defends a calendar against meeting creep: default-no invite triage, buffer blocks, focus-time setup, and recurring-meeting audits with real cost math. Use when asked to clean up a calendar, cut meeting load, audit recurring meetings, set up focus time or no-meeting days, or write meeting norms.
---

# Calendar Defense

## Purpose
Protect focused work time by treating the calendar as defended territory: gate every invite, hold buffer space, and audit recurring meetings with numbers instead of feelings.

## Workflow

### 1. Gate: default-no invite triage
Run every new invite through three questions before accepting:
1. Is there a written agenda or a decision to make? No agenda, no accept. Ask for one.
2. Is there a defined role for me, not just "FYI"? FYI-only invites become optional or notes.
3. Could this be async? Status, updates, and round-robins become written updates with a comment window.

Decline with a line that redirects, not just rejects. Templates in `references/meeting-defense-policy.md`.

### 2. Protect: buffers and focus blocks
- Block 15-30 minutes of buffer between meeting-heavy days, and pad meetings that run long so one overrun does not domino the day.
- In Outlook, turn on shorten-all-events (Settings > Calendar > Events and invitations) so 30-minute meetings end 5 early and 60-minute meetings end 10 early. Those gaps are travel and reset time.
- Reserve focus blocks on the same calendar where meetings live, marked Busy and visible. Name them by the task ("Write section 2 draft"), not "deep work".
- In Google Calendar, use the Focus Time event type: it mutes Chat and can auto-decline conflicting meetings. Set the scope to decline only new meetings and customize the decline message. Caveat: Focus Time needs a Google Workspace account; on a personal Gmail account use a regular event marked Busy instead. Exact setup steps are in `references/meeting-defense-policy.md`.
- Batch reactive work into two windows a day (late morning triage, late afternoon close-out) instead of letting it fragment the calendar.

### 3. Audit: recurring meetings with the auditor
Collect each recurring series into the auditor's CSV format (name, duration, frequency, attendee count, decisions produced in the last month, agenda yes/no, could-be-async yes/no). If decision counts are unknown, estimate with the meeting owner rather than skipping.

Run:
```
python3 bin/calendar_audit.py --input meetings.csv --format text
```

The auditor prices each series in person-hours per year and assigns a verdict: KILL, ASYNC, TRIM, or KEEP. Apply them in this order:
1. KILL the zero-decision series first. Cancel outright or send back to the owner to re-pitch.
2. Convert ASYNC series to written updates with a comment window.
3. TRIM: cut duration (60 to 50, 30 to 25), halve frequency, or trim attendees on the expensive series.
4. Publish the total cost before proposing any cut. Agreement that the total is too high has to precede the argument about any specific meeting.

Re-audit in six weeks. Meeting creep regrows, so the audit is a recurring practice, not a one-off.

## Output Contract
- A triage decision for each pending invite: accept / decline / optional, with the decline text used.
- A weekly template: focus blocks, buffer blocks, and reactive windows placed, with the tool used to create them.
- An audit report: total annual person-hours, per-meeting verdicts, and reclaimed hours if verdicts are applied. Use the auditor's text output verbatim as the core of the report.

## Operating Rules
- Never invent numbers, dates, quotes, or events. Unverifiable claims get cut or framed as opinion.
- Price everything in person-hours before arguing about any specific meeting. Numbers first, opinions second.
- Default-no applies to the agent's own scheduled work too: do not add calendar structure that is not defended by a verdict.
- When the evidence for a claim is a survey or a company announcement, attribute it. Do not present reported estimates as exact accounting.
