---
name: keynote
description: Full speaking engagement lifecycle — log details, prep, debrief, and feed insights back into the voice system.
---

# /keynote Command

Manage the full lifecycle of a speaking engagement: save details, prep, deliver, debrief.

## Usage

- `/keynote new` — Log a new speaking engagement
- `/keynote prep [event name]` — Build prep doc for an upcoming engagement
- `/keynote deck [event name]` — Map the locked talk spine to a slide-by-slide outline, wait for approval, then hand to build-pptx. For new material, `/writers-room` comes first (spine → beats → say-once ledger).
- `/keynote debrief [event name]` — Post-event debrief with transcript processing
- `/keynote list` — Show upcoming engagements
- `/keynote` — Auto-detect: if an engagement is tomorrow/today, offer prep. If a transcript is in Downloads, offer debrief. Otherwise, ask what to do.

---

## Phase 1: Log a New Engagement (`/keynote new`)

Ask for (accept partial info — fill in what you can, flag what's missing):
- Event name
- Date and time
- Format (keynote, panel, fireside chat, webinar, podcast interview, workshop)
- Audience (DMOs, travel advisors, executives, entrepreneurs, mixed)
- Organizer / point of contact
- Co-panelists or co-presenters (if any)
- Topic or angle (if known)
- Duration
- Any special notes (recording policy, Q&A format, etc.)

### Create the engagement file

**Location:** `20_Areas/Keynotes/YYYY-MM-DD_Event-Name.md`

**Template:**

```markdown
---
type: speaking-engagement
status: scheduled
date: YYYY-MM-DD
time: HH:MM ET
format: [keynote/panel/fireside/webinar/podcast/workshop]
event: [Event Name]
organizer: [Name/Org]
audience: [Description]
copanelists: []
topic: [Topic if known]
duration: [Duration]
tags: []
---

# [Event Name] — [Date]

## Details
- **Format:** [format]
- **Audience:** [audience description]
- **Duration:** [duration]
- **Organizer:** [name/org]
- **Co-panelists:** [names or "solo"]

## Prep Status
- [ ] Co-panelist research (30-day publication scan)
- [ ] Regional partner brief (in-person U.S. events — run /partner-brief)
- [ ] Speaking positions reviewed
- [ ] Prep doc built
- [ ] Talking points finalized

## Notes
[Any context from the booking conversation]
```

### Create a prep reminder task

Create a task in `00_Inbox/` with `due_date` set to **2 days before** the event:

```markdown
---
type: task
status: todo
created: [today]
due_date: [event date - 2 days]
priority: high
tags: [speaking-prep]
---

# Prep for [Event Name]

Run `/keynote prep [event name]` to build the full prep doc.
Event date: [date]. Format: [format].
```

Offer to run `/podium` so the new engagement lands in the pipeline view with its gaps visible from day one.

---

## Phase 2: Prep (`/keynote prep`)

This is the heavy lift. Run when Janette says "prep me for [event]" or when `/today` surfaces the prep task.

### Step 1: Load engagement details

Read the engagement file from `20_Areas/Keynotes/`.

### Step 2: Load Janette's voice (CRITICAL — always do this)

Read these files and use them as the foundation for all prep content:

1. **`99_System/Context_Library/speaking_positions.md`** — Her real positions on every topic
2. **`99_System/Context_Library/quotable_moments.md`** — Her best lines and stories
3. **`30_Resources/Webinar_Transcripts/TOPIC_INDEX.md`** — Find which transcripts cover the event's topics

Based on the event's topic/angle, identify which speaking position sections are relevant and pull them.

### Step 3: Research co-panelists (parallel agents)

**Preferred engine: the `research-sweep` workflow** — one entity per co-panelist, angles `["vault", "web"]` (add `"email"` when a prior relationship is likely), `event` = this engagement:

```
Workflow({name: "research-sweep", args: {
  entities: [{name: "Co-Panelist Name", org: "Their Org"}, ...],
  angles: ["vault", "web"],
  event: "<event name> panel — where do they align or differ from Janette"
}})
```

Fallback (Workflow tool unavailable): for EACH co-panelist, launch a parallel agent to:
- Search `20_Areas/People/` for existing profile
- Search `20_Areas/Calls/` for prior interactions
- Web search for publications, LinkedIn posts, articles, and op-eds from the **prior 30 days**
- Summarize: who they are, what they've been saying recently, where they align or differ from Janette

### Step 3.5: Regional partner brief (in-person U.S. engagements only)

If the engagement is **in person** (`format` = keynote / panel / fireside / workshop) and has a U.S. `state`, the Brand USA partners in that state are people Janette may meet, acknowledge from stage, or follow up with. Generate the field brief so she walks in knowing who's there.

- The state is already known from the engagement file — **skip `/partner-brief` Step 1 (engagement resolution)** and feed the state straight into its Step 2.
- Invoke the `partner-brief` skill for the engagement's state. It pulls the relevant partners for that state, the one geographic Partner-Engagement owner, and pins the host org if its DMO is in the state.
- Save the PDF and **link it from the prep doc** under `## Regional Partners` with a one-line summary (e.g. "N active partners in [state]; host = [org]; owner = [name]").
- **Skip for** podcasts, remote webinars, and international stops — partners-in-state doesn't apply.

### Step 4: Build the prep doc

Update the engagement file with:

```markdown
## Context
[Brief summary of the event, why it matters, what the organizer is looking for]

## Co-Panelist Research
### [Name 1]
- **Role:** [title, org]
- **Recent publications:** [last 30 days — titles, key points]
- **Alignment with Janette:** [where they agree, where they might differ]
- **Watch for:** [topics they might raise that Janette should be ready for]

### [Name 2]
[Same format]

## Regional Partners (in-person U.S. events)
[Link to the partner field brief PDF + a one-line summary: N active partners in [state], host = [org], Partner-Engagement owner = [name]. Call out anyone Janette should make a point to greet or follow up with.]

## Janette's Positions for This Event
[Pull relevant sections from speaking_positions.md — her actual positions, real examples, and quotable lines that map to this event's topic]

## Suggested Talking Points
[5-8 talking points drawn from her real positions, tailored to this specific audience. Use her actual language. Include specific stats/examples.]

## Potential Questions & Answers
[Anticipate 5-8 questions based on the topic, audience, format, and co-panelists. Draft answers using her real voice from the context files.]

## Soundbites
[Pull 3-5 of her strongest one-liners from quotable_moments.md that fit this event]

## Delivery Must-Haves (four forcing functions — required in every prep, per the micebook debrief)
1. **"Do not skip" slides:** [Name the 3 slides that MUST be delivered even off-script — strongest concrete proof point, strongest visual hook, closing tactical takeaway. Note the physical anchor: ★ on the run-of-show or a notecard with the 3 slide numbers.]
2. **Audience-check questions:** [1-2 show-of-hands questions for the first 5 minutes, e.g. "Who here has tried X?"]
3. **Named-attendee callouts:** [2 specific people likely in the room whose names Janette can call live — cross-reference the attendee brief / co-panelist research.]
4. **Jargon watchwords swept:** [Confirm the talking points and any deck contain zero: "moat", "agentic" (translate to the outcome), "MCP-enabled" (translate to the user-facing outcome), "tier N"/"layer N" framework-speak. List anything swapped.]

**Section-count check:** If the talk opens with "I'll cover three things," the deck must strictly enforce three deliveries — otherwise default to "two ideas, then one action."

## Checklist
- [ ] Review talking points
- [ ] Review co-panelist research
- [ ] Review regional partner brief — flag anyone to greet or follow up with
- [ ] Check for any new stats (Mindtrip, partner data) to reference
- [ ] Identify 1-2 stories to tell (NYC example, Broadway parallel, etc.)
```

### Step 4.5: Namecheck Pass (required before reporting done)

Run the `/namecheck` skill on the prep doc just built. Apply its auto-corrections, include its report (or the one-line clean confirmation) in the confirmation below, and carry any ❓ unverified names (co-panelists, organizers) into the doc using the `[unverified: Name]` convention rather than guessing.

### Step 5: Done Gate, then confirm

Verify every item mechanically before reporting the prep done:

1. **Voice files actually read** — `speaking_positions.md` and `quotable_moments.md` were loaded and the prep's positions/soundbites trace to them (never composed from inference; a missing story is a question for Janette, never a fill).
2. **Co-panelist count matches** — every name in the engagement file's `copanelists:` has a research section with a 30-day publication scan.
3. **Partner brief linked** — if in-person U.S. engagement, the `## Regional Partners` section links the PDF; otherwise a one-line skip reason.
4. **Delivery Must-Haves filled** — all four forcing functions have real content, none left as placeholders.
5. **Namecheck report** included (Step 4.5); **stylecheck** run on the prep doc (`python3 ~/.claude/skills/stylecheck/scripts/stylecheck.py <path>`) with every ERROR fixed — the jargon-watchword rule IS must-have #4, mechanically enforced.
6. **Prep Status checkboxes** in the engagement file updated to reflect what's actually done.

Then tell Janette: "Prep doc built at [path]. [X] co-panelists researched. Key positions loaded: [list relevant topics]. Ready to walk through it?"

If she wants to walk through, go point by point and adjust based on her feedback.

---

## Phase 2.5: Deck Outline (`/keynote deck`)

Run after `/keynote prep` is complete and Janette is ready to build slides. This phase **never builds slides directly** — it produces a sourced outline she approves, then hands to `build-pptx`.

### Step 0: Spine gate (before anything else)

Check the engagement file for `## Talk Spine (Locked)` (produced by `/writers-room`).

- **Spine exists →** the outline below is a mechanical mapping: each beat becomes 1–3 slides, the beat's MOMENT (not its CLAIM) drives the slide type, the say-once ledger governs which slide owns each claim, and the playbook's Distribution Discipline section governs the format mix (Named Concept budget of 3, story-slide plurality, transitions counted).
- **No spine and the talk is new material** (no prior deck for this audience/topic being reused) → do NOT invent an arc here. Say: "This talk hasn't been through the writers' room — the arc isn't decided yet. Want to run `/writers-room [event]` first? It's the difference between reacting to a finished outline and building the argument together." Proceed without a spine only if she explicitly says to skip it.
- **Reused/adapted deck →** an existing proven arc counts as the spine; note which deck it comes from and continue.

### Step 1: Load the prep doc and slide playbook

- Read the engagement file from `20_Areas/Keynotes/` (the prep doc built in Phase 2)
- Read `99_System/Context_Library/slide_playbook.md` (canonical design and voice system — REQUIRED before any deck work)
- Read `30_Resources/Brand_USA_Brand_Resources/BRANDING_USAGE_NOTE.md` if this is Brand USA-branded

### Step 2: Inventory available imagery

Before proposing visuals, scan what already exists:
- List relevant images in `30_Resources/AI_Generated_Images/` (with filename + approximate aspect ratio if known from metadata)
- Note any prior keynote decks for this audience/topic in `20_Areas/Keynotes/` that have reusable slides or framings
- Flag image gaps that will need new generation (and note the target aspect ratio)

### Step 3: Propose a slide-by-slide outline

Produce a markdown outline in the engagement file under `## Deck Outline (Draft — Awaiting Approval)`:

```markdown
## Deck Outline (Draft — Awaiting Approval)

**Arc:** [One-sentence narrative spine]
**Slide count target:** [N]
**Format mix:** [e.g., 3 Story slides, 2 Named Concepts, 1 framework card, 4 declarative]

### Slide 1: [Title]
- **Type:** [Story / Named Concept / Framework / Declarative / Section break]
- **Content:** [Headline + 1-line body]
- **Visual:** [Image filename from AI_Generated_Images OR "needs generation: [prompt + aspect ratio]"]
- **Source for any stat/claim:** [file path or "no claim"]

### Slide 2: [Title]
[Same format]

[...continue for all slides]

### Image gaps to fill before build
- [List any slides needing new imagery, with prompts + aspect ratios]

### Open questions for Janette
- [Anything ambiguous — arc choice, which stat to lead with, whether to include X]
```

### Step 4: STOP and wait for approval

Present the outline and ask explicitly:

"Outline drafted at [path]. Before I invoke build-pptx, please review:
- Arc framing
- Slide order and count
- Any stats/sources that need swapping
- Image gaps — should I generate now or do you want to crop your own?

Reply with edits or 'approved, build it.'"

**Do NOT proceed to build-pptx without explicit approval.** Do not synthesize an "approval" from a vague response. If Janette responds with edits, revise the outline and re-present — do not jump ahead.

### Step 5: Hand to build-pptx

Only after explicit approval, invoke the `build-pptx` skill with the approved outline as the blueprint. Pass through:
- Brand (default: Brand USA corporate unless engagement metadata says otherwise)
- Approved slide list with content, visuals, and sources
- Image paths (or generation prompts if she approved generating during outline review)

### Step 6: Post-build verification

After build-pptx returns, do not declare done until:
- The .pptx opens without corruption (run `unzip -t [file]` or equivalent integrity check)
- Every cited stat in the outline appears verbatim in the final deck
- Every Story slide image was aspect-checked against the slide layout (widescreen ≥1.6 = full-bleed; square/portrait = split layout — per slide playbook rule)
- No "BRAND USA" appears as typed text (always wordmark PNG)

Report: "Deck built at [path]. [N] slides, [M] images. Verified: integrity, sources, image aspects, no typed wordmarks."

---

## Phase 3: Debrief (`/keynote debrief`)

Run after the event, usually when Janette drops a transcript or says "let's debrief."

### Step 1: Find the transcript

Check `~/Downloads/` for recent transcript files matching the event date. If not found, ask Janette for it.

### Step 2: Process the transcript

Read the full transcript. Extract:
- **What Janette actually said** — her key points, new framings, stories she told
- **Audience questions** — what did people ask? What surprised her?
- **Co-panelist contributions** — anything worth citing or responding to
- **New positions or evolved positions** — did she say something she hasn't said before?
- **Lines that landed** — anything that got a strong reaction, laughter, or follow-up

### Step 3: Debrief interview

Ask Janette these questions (one at a time, conversational):

1. "What landed well? What got the strongest reaction?"
2. "Anything you wish you'd said differently?"
3. "Any new connections or follow-ups from this event?"
4. "Did any audience question surprise you or change how you think about something?"
5. "Anything you want to add to your standard talking points?"

### Step 4: Update the engagement file

Mark status as `completed`. Add a `## Debrief` section with:
- Key moments from the transcript
- Janette's reflections from the interview
- Follow-up actions (create tasks in `00_Inbox/`)

### Step 5: Feed insights back into the system (RULE — verify, don't checkbox)

This is what makes the system compound. **It is NOT a TODO list.** The skill does not report success until each applicable distribution is complete and verified.

- **Update `speaking_positions.md`** — If she articulated a new or evolved position, add it to the relevant section with the event as source.
- **Update `quotable_moments.md`** — If she said something new that landed well, add it under the right theme.
- **Update `TOPIC_INDEX.md`** — If this event produced a transcript, add it to the index with topic tags.
- **Update People profiles** — For co-panelists or notable audience members, update `20_Areas/People/`.
- **Log partner connections** — If a regional partner brief was generated for this event, note any partner Janette actually met in that Company file's Engagement Timeline and the contact's People profile Relationship History. This closes the loop: prep surfaced who's there, the debrief records who she connected with.
- **Update `DaaS_Conversations_and_Reactions`** — If DaaS came up substantively, add the stakeholder reaction.
- **Create call notes** — If hallway conversations happened, create call notes via `/call`.
- **Offer to repurpose the recording** — If a recording of the talk exists, offer `/repurpose` on it (webinar page, vertical clip, carousel, LinkedIn post, newsletter section — transcript and highlights selected once).

**Verification before reporting success:**
- For each context file you touched, grep the file for a string from the new content (a person's name, a verbatim phrase, a date) to confirm the addition landed.
- Never write a `- [ ] Update speaking_positions.md` checkbox in the keynote doc as a substitute for executing the work. Either execute it now or write a one-line note explaining why distribution wasn't applicable for this event.
- If the keynote doc has a "Quotable Moments" or "New Positions" section listed, those quotables/positions MUST be in the context library before the debrief is considered complete. The keynote doc is the staging area; the context library is the destination.

### Step 5.5: Namecheck Pass (required before reporting done)

Run the `/namecheck` skill on the engagement file and any Company/People files written or edited during this debrief. Apply its auto-corrections, include its report (or the one-line clean confirmation) in the final summary, and carry any ❓ unverified names into the note itself using the `[unverified: Name]` convention rather than guessing.

### Step 6: Confirm

Only after every applicable distribution is verified, report:

"Debrief complete. Updated: [list each context file you touched with a one-line summary of what was added]. [X] follow-up tasks created."

If you skipped any distribution because it wasn't applicable, say so explicitly: "No new positions / quotables / DaaS material this round — debrief is just the keynote doc."

---

## How `/today` Interacts with This Skill

When `/today` runs, it should:
- Check `20_Areas/Keynotes/` for any engagement files with `status: scheduled` and a date within the next 7 days
- Surface them under `## Upcoming Speaking Engagements` in the daily agenda
- If the event is **today or tomorrow**, prominently flag it and link to the prep doc
- If there's a prep task due today, remind Janette to run `/keynote prep`

---

## Guidelines

- Always start prep from `speaking_positions.md` and `quotable_moments.md` — never draft talking points from scratch or polish external prep docs
- Use Janette's actual language, real examples, and real data
- For panels: research ALL co-panelists, not just the most prominent one
- For podcast interviews: note that material may be used in both print and audio — clear, memorable soundbites serve both
- The debrief is where the system compounds — always feed new insights back into the context files
- If a PR team sends a prep doc, treat it as a question list only — discard their suggested answers and rebuild from Janette's voice
