---
name: podium
description: Weekly 90-day speaking pipeline rollup — every upcoming engagement with prep depth, draft/advisory churn, travel state, the prep must-haves checklist, and an automatic co-panelist publication sweep for engagements inside 14 days. Flags the engagement closest to the door with the least prep. Runs Mondays from /weekstart; /keynote offers it after logging a new engagement.
allowed-tools: Bash(*), Read(*), Write(*), Edit(*), Grep(*), Glob(*), WebSearch, WebFetch, mcp__claude_ai_Microsoft_365__outlook_calendar_search, mcp__claude_ai_Microsoft_365__outlook_email_search
---

# /podium Command

Weekly, 90-day view of the entire speaking pipeline — every engagement's prep depth, draft churn, advisory status, travel state, and must-haves in one table. `/today`'s Speaking Pipeline section is daily and 21-day, tactical ("what needs prep this week"); `/keynote` goes deep on one engagement at a time. This is the only place that shows where *everything* stands at once, which is what catches an engagement that's close but under-prepped before it becomes urgent.

**Leave `/today`'s Speaking Pipeline section untouched** — this is a separate, weekly, wider-lens view, not a replacement.

## Step 1: Collect engagements

Scan `20_Areas/Keynotes/*.md` at the top level AND one level into subfolders. Keep engagements where:
- `date:` falls between today and today+90 days
- `status:` is not `delivered`, `cancelled`, or `archived` (same skip rule as `/today`'s Speaking Pipeline — reuse exactly)

Sort ascending by date.

**Unparseable dates** (e.g. `date: TBD-2026-06`, active status, target month already passed): don't drop these silently and don't guess a date. List them in a short separate line below the table: "Date TBD, needs scheduling: [[Event]] — target month already passed."

**Naming reality check:** big engagements don't always live in a dedicated subfolder — some (e.g. Virtuoso) have every draft version, deck export, and advisory review sitting flat in `20_Areas/Keynotes/` sharing a common filename prefix (`2026-08_Virtuoso-Travel-Tech-Summit*`). When gathering an engagement's related files, match by **filename prefix across the whole folder**, not just by looking inside a same-named subfolder — a subfolder may not exist at all.

## Step 2: Assess each engagement

**Days out and urgency tier** — reuse `/today`'s Speaking Pipeline thresholds exactly:
- ≤ 2 days: 🚨 FINAL PREP
- ≤ 7 days: ⏰ FINAL PREP
- ≤ 14 days: 🟡 BEGIN PREP
- ≤ 21 days: listed, no extra prompt
- \> 21 days: just the date and days-out count, no urgency prompt (this is 90-day territory `/today` doesn't cover)

**Prep depth** — reuse `/today`'s rubric on the main prep file:
- **Skeleton** — mostly frontmatter/headers, very little written content, or many `_[bracketed placeholders]_`
- **In progress** — substantive content but open checklist items or draft talking points
- **Ready** — checklist mostly complete, content fleshed out, no open placeholders

**Draft churn** — find files matching the engagement's prefix with a `*_v[0-9]*` pattern (in a subfolder if one exists, otherwise flat in `20_Areas/Keynotes/`). Count them and check the newest one's mtime. Report as `vN, last touched X days ago` — six versions with the newest three weeks old reads very differently from six versions with the newest yesterday.

**Advisory status** — grep for files matching the engagement's prefix plus `advisory` or `board-review` (again: check flat files, not just a subfolder). Report the latest round's date, composite score vs. threshold, and verdict if present (e.g. "round 2, 2026-07-02, 8.4/10 — APPROVED"), or "no advisory review yet."

**Travel state** — search Outlook (`mcp__claude_ai_Microsoft_365__outlook_calendar_search`, `query: "*"`) within ±2 days of the event date. **Use the wildcard, not a keyword-OR string** — `query: "flight OR hotel OR airport"` does not parse as boolean and silently returns zero results (confirmed 2026-07-03: a real booked Virtuoso flight was missed this way). Pull everything in the window with `*`, then classify by reading what comes back. Classify:
- **N/A — virtual** if the engagement's own format/location is a webinar/virtual platform (check the prep file first, don't waste a calendar call on an obviously-virtual event)
- **Booked** — an actual flight/hotel/transit event found (subject contains a flight number, "Hotel," "check-in," an airport, etc. — not just a placeholder all-day block)
- **Partial** — calendar shows placeholder blocks (an all-day "OOO"/conference-name block, a tentative session hold) but no confirmed transportation
- **Nothing found** — no calendar signal at all despite the event being in-person and soon

**Must-haves checklist** — from the prep file (and deck/talk draft if the prep file itself is thin), check for the four forcing functions from the keynote prep must-haves rule:
1. A "do not skip" 3-slide identification (explicit `★ DO NOT SKIP` markers, a callout list, or equivalent)
2. 1-2 pre-planned audience-check moments (show-of-hands / "who here has tried X" questions)
3. A named-attendee callout list (2 specific people)
4. A jargon watchwords pass (checked against: "moat," "agentic," "MCP-enabled," "tier 3"/"layer 2" of any framework)

Report as `[x]/[ ]` compactly, e.g. `2/4`.

**Logistics gaps** — no time/venue in frontmatter, no run-of-show table, count of unfilled `_[bracketed]_` placeholders.

## Step 3: Render

Append to the Monday agenda:

```markdown
## 🎤 Podium — 90-Day Speaking Pipeline

| Date | Days | Engagement | Prep | Draft | Advisory | Travel | Must-haves |
|------|------|-----------|------|-------|----------|--------|------------|

**⚠️ Attention order:** [1-3 lines — engagements ranked by (proximity × prep gap),
each with the single next action, e.g., "Virtuoso (37 days): v6 is 1 day old and
advisory round 2 is in at 8.4/10 (approved) — next: lock the deck / move to slide build."]
```

Keep the whole section under ~30 lines. The table is the product; the attention-order lines are the judgment call — don't just restate the table, say what to actually do next.

If Outlook is unavailable, render the table without the Travel column and add one line: "Travel state unavailable — Outlook unreachable this run."

## Step 4: Gap detection

Same calendar cross-check as `/today` Step 4, but over 90 days instead of 14: scan for calendar events whose title/attendees suggest a speaking engagement (`webinar`, `keynote`, `panel`, `fireside`, `podcast`, `speaker`, `presenter`, `host`, `interview`, `summit`, `conference`) with no matching file in `20_Areas/Keynotes/`. List under:

```markdown
**Missing prep docs — run `/keynote new`:**
- MM/DD — "[Calendar event title]"
```

Omit this block if nothing's missing.

## Step 4.5: Co-Panelist Sweep (automatic — puts a standing rule on autopilot)

Janette's standing rule: before any panel or speaking engagement, check recent publications for ALL co-panelists — articles, op-eds, LinkedIn posts from the prior 30 days, every panelist. This step executes it for each engagement **≤14 days out**:

1. Extract co-panelist/moderator names from the prep doc (frontmatter or body — panelist/moderator/speakers sections). If the prep doc names nobody and the format is a panel, check the event's public agenda page (WebFetch) for the lineup; if still empty, flag "panelists unknown — get the lineup" in the rollup and move on.
2. Skip panelists already swept: if the prep doc has a `## Co-Panelist Radar` section dated within the last 7 days covering that person, reuse it — no re-search.
3. For each new/unswept panelist, run WebSearch for their last-30-day output: articles, op-eds, interviews, LinkedIn posts, podcast appearances. 2-3 searches per person; keep the best 1-3 findings each.
4. Append/update a `## Co-Panelist Radar (auto, YYYY-MM-DD)` section in the prep doc: per person — name, role/org, what they published (title, date, link), one line on the position they're currently taking. Verify names against the vault (`/namecheck`-style) before writing; an unrecognized name gets `[unverified: Name]` treatment, never a guessed identity.
5. Note in the rollup table's Must-haves column whether the radar is done.

This step is the ONE exception to the read-only guardrail below — it appends the Radar section to prep docs and touches nothing else in them.

## Guardrails

- **Read-only over prep files, with one scoped exception.** This skill assesses and reports; `/keynote` does the actual prep work. The only write permitted in `20_Areas/Keynotes/` is appending/updating a `## Co-Panelist Radar` section (Step 4.5) — never any other edit.
- **Prep content stays out of the rollup.** Prep `.md` files are internal scratchpads — report states and gaps only (skeleton/in-progress/ready, draft counts, advisory scores, travel status), never talking points, positioning language, or anything that could leak into a public-facing summary.
- Keep the table + attention-order block under ~30 lines total.

## Auto-invocation wiring

- **`/weekstart`** — Step 3.5, right after Project Health Check. If an engagement is flagged critically underprepared (≤14 days out and prep = skeleton), carry it into the Weekly Focus suggested top 3.
- **`/keynote`** — after logging a new engagement (`/keynote new`), offers to run `/podium` so the new engagement lands in the pipeline view with its gaps visible from day one.
