# Pto Plan

> Develops a PTO coverage plan for priority workstreams and meetings, assigning lead delegates from team email and calendar activity. Creates a Google Doc matching the team PTO plan format. Use when the user asks for a PTO plan, out-of-office coverage, delegate assignments, or planned time off preparation.

- Skill: `cgray-redhat/pto-plan` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add cgray-redhat/pto-plan`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cgray-redhat/pto-plan/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: cgray-redhat (https://skillmd.com/u/cgray-redhat)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/cgray-redhat/pto-plan

---


# 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](https://docs.google.com/document/d/1K9QLwY_Nuaqrvep5fB6YHCIHTSHZQ-A83S3ziHmvpOQ/edit?tab=t.0)

## Prerequisites

1. `gws` CLI authenticated (`gws auth status`). Scopes: `tasks`, `calendar`, `gmail.modify`, `documents`, `drive`.
2. Read `ME.md` at the project root (if present) for name, title, and contact context.
3. Read `TEAM.md` at the project root (if present) for workstream context.
4. **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

```bash
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 with `delegateCandidates`
- **`meetings`** — calendar events during PTO with `delegateCandidates` and `suggestedCoverage`
- **`allDelegateEmails`** — emails needing Dataverse lookup
- **`warnings`** — auth or data gaps

If the script fails, follow the manual fallback in [reference.md](reference.md).

### Step 3 — Score and assign delegates

For each priority and meeting:

1. **Lead delegate** = highest-scoring `delegateCandidates` entry (email + meeting traffic on the workstream topic).
2. Prefer Red Hat (`@redhat.com`) teammates who appear in **both** email threads and meeting invites for that topic.
3. Do not assign the requester, Lauren Gray (`lwgray526@gmail.com`), calendar bots, or `noreply` addresses.
4. 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`:

```json
{
  "jane.doe@redhat.com": {
    "name": "Jane Doe",
    "title": "Director, ...",
    "email": "jane.doe@redhat.com"
  }
}
```

Re-run gather with delegate map if needed:

```bash
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](#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

```bash
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](reference.md) — gws commands, scoring rules, manual fallback
- `TEAM.md` at project root — workstream context (if present)
- [Veronica example doc](https://docs.google.com/document/d/1K9QLwY_Nuaqrvep5fB6YHCIHTSHZQ-A83S3ziHmvpOQ/edit?tab=t.0)

