# Daily Wrapup

> Creates Gmail draft follow-up emails for past meetings the user organized with more than two invitees. Uses Gemini notes and transcripts when available; otherwise drafts a standard thank-you from the calendar invite and recent emails. Use for daily wrap-up, meeting follow-ups, or wrapup for a specific past date.

- Skill: `cgray-redhat/daily-wrapup` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add cgray-redhat/daily-wrapup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cgray-redhat/daily-wrapup/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/daily-wrapup

---


# Daily Wrapup

Produce **exactly one** Gmail draft per qualifying meeting on the **target date** (default: today).

- **`detailed`** drafts (Gemini notes or transcript available): executive themes, action items, agenda/email context.
- **`standard`** drafts (no Gemini artifacts): thank attendees, reference the meeting, and share context from the calendar invite and recent emails only — do not invent discussion outcomes.

If no meetings qualify for the target date, report that and stop — **no drafts is expected**.

For tomorrow's calendar prep, use the separate **daily-prep** skill.

## Prerequisites

1. `gws` CLI installed and authenticated (`gws auth status`). Scopes: `calendar`, `drive`, `documents`, `gmail.modify`.
2. Read `ME.md` at the project root (if present).

## Workflow

```
Daily Wrapup:
- [ ] Step 0: Check connections
- [ ] Step 1: Resolve target date
- [ ] Step 2: Gather meetings + artifacts + context
- [ ] Step 3: Infer tone from sent mail
- [ ] Step 4: Draft one email per meeting
- [ ] Step 5: Create Gmail drafts (deduplicated)
- [ ] Step 6: Confirm with user
- [ ] Step 7: Ask for feedback and improve the skill
```

### Step 0 — Check connections

Run **refresh-connections** before gathering. **Google Workspace (gws)** is required (`calendar`, `drive`, `documents`, `gmail.modify`). Slack is optional — wrapup does not use Slack context today.

```bash
python3 ~/.cursor/skills/refresh-connections/scripts/check_connections.py \
  --services gws
```

If `gws` auth fails, run `gws auth login` before continuing. Report connection status to the user.

### Step 1 — Resolve target date

- **Default ("daily wrapup"):** **today only** in `America/New_York` (override with `--timezone` if needed). Do not gather other dates unless the user explicitly asks.
- **Explicit past day:** parse the user's request into `YYYY-MM-DD` before gathering (e.g. "wrapup for June 5").
- **Zero meetings:** if today yields **0 qualifying meetings**, report and stop. Do not fall back to yesterday or other dates.

| User says | Use |
|---|---|
| (nothing) / "daily wrapup" | today only |
| yesterday | previous calendar day (only when user asks) |
| last Tuesday | most recent Tuesday before today (only when user asks) |
| June 5 / 2026-06-05 | that date (only when user asks) |

### Step 2 — Gather meetings and context

```bash
python3 ~/.cursor/skills/daily-wrapup/scripts/gather_wrapup_meetings.py \
  --date "<YYYY-MM-DD>" \
  --format json
```

Returns meetings where **you are the organizer** and **more than 2 invitees** (non-organizer, non-declined).

Each meeting includes: `draftSubject`, `draftType`, `agenda`, `inviteEmail`, `relatedEmails`, Gemini notes/transcript excerpts, warnings.

**Draft every qualifying meeting.** Use `draftType` to pick the template. Never skip solely because Gemini artifacts are missing.

See [reference.md](reference.md) for manual fallback.

### Step 3 — Infer tone

From `toneSamples` (recent sent mail, calendar invites excluded). Match greeting, formality, and sign-off. Default to warm executive tone from `ME.md` if thin. Validated tone: "Hi all" opening, concise bullets, "Best, C" or full name sign-off.

### Step 4 — Draft one email per meeting

**Recipients:** every email in `invitees` — include required and optional attendees; exclude the organizer only.

**Subject:** use `draftSubject` exactly (ASCII ` - ` separator, not an em dash). Write the body in plain text with `•` bullets — the send script converts them to HTML `<ul>` lists in Gmail.

#### Template — `detailed`

Sources: `agenda` → `relatedEmails` → `notes.excerpt` / `transcript.excerpt`

```
{Warm thank-you — 1 sentence.}

Key themes:
• {Theme — executive-level, ~15 words max}
• {Theme 2}
• {Theme 3–4 max}

Action items:
• {action} — {owner}

{Closing gratitude — 1 sentence.}

{Sign-off}
{Sender name}
```

Synthesize 2–3 headline themes; do not restate every note detail. ~150–220 words.

#### Template — `standard`

Sources only: `agenda`, `inviteEmail`, `relatedEmails`. No invented outcomes.

```
Hi all,

Thank you for joining {Meeting Title} on {date}. I appreciated everyone making the time.

{1–2 sentences on purpose from agenda/invite.}

Context:
• {Topic from invite or agenda}
• {Pre-meeting update from relatedEmails, if any}

{Closing — appreciation and openness to async follow-up.}

{Sign-off}
{Sender name}
```

~100–160 words. Mark gaps `[needs input]` rather than guessing.

### Step 5 — Create Gmail drafts (deduplicated)

**Always use the helper script** — never call `gws gmail users drafts create` directly.

```bash
python3 ~/.cursor/skills/daily-wrapup/scripts/create_wrapup_draft.py \
  --title "<Meeting Title>" \
  --date-label "<Month D, YYYY>" \
  --to "a@example.com,b@example.com" \
  --body-file /tmp/wrapup-body.txt
```

One draft per meeting. Skips if subject already exists (use `--force` to replace). Drafts are multipart (plain text + HTML with formatted bullet lists). **Do not send.**

### Step 6 — Confirm with user

Report: target date, meeting count, drafts created / skipped (duplicate), or **no qualifying meetings** if zero. Link to [Gmail drafts](https://mail.google.com/mail/#drafts) when drafts exist.

### Step 7 — Ask for feedback and improve the skill

After creating drafts (or reporting zero meetings), ask the user for feedback on:

- **Theme synthesis** — did the executive summary capture the right headlines?
- **Action items** — correct owners and completeness?
- **Tone and length** — adjust only if the user flags an issue (default validated tone is fine)

Incorporate recurring feedback into this skill (`SKILL.md`), `reference.md`, or the gather/draft scripts.

## Example prompts

- "Daily wrapup"
- "Daily wrapup for Thursday"
- "Wrap up my meetings from 2026-06-05"

## Additional resources

- [reference.md](reference.md)

