PTO Plan
Build a PTO Coverage Plan Google Doc: key priorities with lead delegates, meeting coverage (optional or delegate), and a delegate roster with directory emails.
Reference example: Veronica's PTO Coverage Plan
Prerequisites
gwsCLI authenticated (gws auth status). Scopes:tasks,calendar,gmail.modify,documents,drive.- Read
ME.mdat the project root (if present) for name, title, and contact context. - Read
TEAM.mdat the project root (if present) for workstream context. - Dataverse MCP (
user-Dataverse) — delegate email addresses from RoverPeople directory.
Workflow
PTO Plan:
- [ ] Step 1: Confirm PTO dates
- [ ] Step 2: Gather context
- [ ] Step 3: Score and assign delegates
- [ ] Step 4: Dataverse email lookup
- [ ] Step 5: Compose coverage document
- [ ] Step 6: Create Google Doc
- [ ] Step 7: Confirm with user
Step 1 — Confirm PTO dates
Require start and end dates (inclusive). If the user did not provide them, ask before proceeding.
Optional inputs: --days email lookback (default 30), --timezone (default America/New_York).
Step 2 — Gather context
python3 ~/.cursor/skills/pto-plan/scripts/gather_pto_context.py \
--start-date "2026-07-14" \
--end-date "2026-07-18" \
--format json
Output includes:
priorities— Group 1 (Urgent and Important) tasks withdelegateCandidatesmeetings— calendar events during PTO withdelegateCandidatesandsuggestedCoverageallDelegateEmails— emails needing Dataverse lookupwarnings— auth or data gaps
If the script fails, follow the manual fallback in reference.md.
Step 3 — Score and assign delegates
For each priority and meeting:
- Lead delegate = highest-scoring
delegateCandidatesentry (email + meeting traffic on the workstream topic). - Prefer Red Hat (
@redhat.com) teammates who appear in both email threads and meeting invites for that topic. - Do not assign the requester, Lauren Gray (
lwgray526@gmail.com), calendar bots, ornoreplyaddresses. - If no strong candidate exists, mark
[needs delegate — confirm with manager]; do not guess names.
Meeting coverage (every PTO meeting gets exactly one):
| Condition | Coverage |
|---|---|
| User is not organizer and ≥2 other attendees | Chris optional |
| Title contains "optional", "FYI", or "office hours" | Chris optional |
| User is organizer or sole driver | Delegate: {name} ({email}) |
| 1:1 where the other person owns the agenda | Chris optional |
Override suggestedCoverage from the gather script when context clearly supports a different choice.
Step 4 — Dataverse email lookup
For every delegate in allDelegateEmails, use dataverse-people-lookup to resolve name, title, and email (MAIL field). Save results to /tmp/pto-delegates.json:
{
"jane.doe@redhat.com": {
"name": "Jane Doe",
"title": "Director, ...",
"email": "jane.doe@redhat.com"
}
}
Re-run gather with delegate map if needed:
python3 ~/.cursor/skills/pto-plan/scripts/gather_pto_context.py \
--start-date "2026-07-14" \
--end-date "2026-07-18" \
--delegates-json /tmp/pto-delegates.json \
--format json
Step 5 — Compose coverage document
Write the plan body to /tmp/pto-plan-body.txt using the document template. Use ME.md for the requester name/title. Synthesize priority notes from task notes, linked emails, and TEAM.md (if present). Mark unknowns [needs input]; do not invent status.
Step 6 — Create Google Doc
python3 ~/.cursor/skills/pto-plan/scripts/create_pto_doc.py \
--title "PTO Coverage Plan — Chris Gray — July 14–18, 2026" \
--body-file /tmp/pto-plan-body.txt
If Docs scope is missing, save the body as a markdown file in the project notes/ folder and share the path with the user.
Step 7 — Confirm with user
Report:
- PTO date range and priority count
- Meeting count (optional vs delegated)
- Delegate roster summary
- Link to the new Google Doc
- Any
[needs delegate]or[needs input]items to resolve before PTO
Document template
Match the Veronica example structure:
PTO Coverage Plan
{Name} — {Start Date} through {End Date}
Prepared: {today's date}
Title: {title from ME.md}
---
OVERVIEW
I will be out of office from {start} through {end}. This document outlines coverage for key workstreams and meetings during my absence.
---
KEY PRIORITIES & LEAD DELEGATES
| Priority / Workstream | Context / Next Steps | Lead Delegate | Email |
| --- | --- | --- | --- |
| {Group 1 task title} | {brief status from notes/email} | {Name} | {email@redhat.com} |
...
---
MEETING COVERAGE
| Date | Time | Meeting | Coverage |
| --- | --- | --- | --- |
| {date} | {time} | {title} | Chris optional |
| {date} | {time} | {title} | Delegate: {Name} ({email}) |
...
---
DELEGATE ROSTER
| Name | Email | Title | Covering |
| --- | --- | --- | --- |
| {Name} | {email} | {title from Dataverse} | {priorities and meetings} |
...
---
NOTES
- {Any handoff notes, escalation paths, or open decisions}
Quality rules
- Group 1 only for key priorities unless the user asks to include Group 2.
- Every delegate must have an email from Dataverse; do not use display names alone.
- Facts trace to gathered tasks, calendar, email, or
TEAM.md; do not fabricate project status. - Deduplicate delegates in the roster; one row per person with combined coverage areas.
Example prompts
- "PTO plan for July 14–18"
- "Create my out-of-office coverage plan"
- "Who should cover my priorities while I'm on PTO next week?"
Additional resources
- reference.md — gws commands, scoring rules, manual fallback
TEAM.mdat project root — workstream context (if present)- Veronica example doc