# Meetings Prep

> Interactive meeting preparation — builds a relationship brief and talking points before a call. Use when the user says "prep me for my call with", "I'm meeting with X", "prepare me for", "what should I bring up with", "meeting prep", "get ready for my call", or wants to review history with someone before a meeting.

- Skill: `flonat/meetings-prep` (Agent Skill)
- Install (CLI): `npx skillmds@latest add flonat/meetings-prep`
- Raw SKILL.md: https://api.skillmd.com/api/skills/flonat/meetings-prep/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: flonat (https://skillmd.com/u/flonat)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/flonat/meetings-prep

---


# meetings-prep

Interactive meeting preparation that searches your entire conversation history with someone, synthesizes a relationship brief, and produces talking points — before you walk into the room.

## How it works

This is a multi-phase interactive flow, not a single command. Walk the user through each phase using the available structured-question mechanism, pushing back on vague answers.

### Phase 0: Calendar auto-detect (optional, runs first)

Before asking who the user is meeting with, check if upcoming meetings are available from any calendar source. Try these in order — use the first that works:

**1. Calendar connector** (preferred):
If the active client has a calendar connector, use its list-events operation to query today's remaining events:
```
gcal_list_events(
  timeMin: "<now ISO, e.g. 2026-03-19T14:00:00>",
  timeMax: "<end of day, e.g. 2026-03-19T23:59:59>",
  condenseEventDetails: false
)
```
Do NOT hardcode a timezone — let the connector use the user's calendar default. Parse attendees, event titles, and times to find the next upcoming meeting with other people (skip all-day events and events with no attendees).

**2. `gog` CLI** (if installed):
```bash
gog calendar list --today --json -a <account> 2>/dev/null
```

**3. Apple Calendar (osascript)** (every Mac, zero install):
```bash
osascript -e 'tell application "Calendar" to get {summary, start date} of (every event of every calendar whose start date >= (current date) and start date < ((current date) + 1 * days))'
```

**4. None available** — skip to Phase 1 and ask manually.

**If upcoming meetings are found:**
Present via the available structured-question mechanism: "I see you have these meetings coming up today:
- [time] — [title] with [attendees]
- [time] — [title] with [attendees]

Which one are you prepping for?"

Options: list each meeting + "None of these — I want to prep for something else"

If the user picks a meeting, auto-populate the person name and skip Phase 1. Pull attendee names from the calendar event directly.

**If no upcoming meetings or calendar unavailable:**
Silently skip to Phase 1. Don't error or apologize — just ask manually.

### Phase 1: Who are you meeting with?

If Phase 0 already identified the person, skip this phase.

Otherwise, ask via the available structured-question mechanism: "Who are you meeting with?"

**If the answer is specific** (a name like "Alex" or "Case"):
→ Search all past meetings:
```bash
minutes search "<name>" --limit 50
```
Also search common variations — first name, last name, nickname.

**If the answer is vague** ("the team", "everyone", "my usual meeting"):
→ Push back: "Be specific. Name one person who'll be in the room. I'll search everything you've discussed with them."

**If the answer is a topic** ("the pricing meeting", "the Q2 planning call"):
→ Adapt to topic-based prep:
```bash
minutes search "<topic>" --limit 20
```
Skip the relationship brief and go straight to a topic brief instead.

### Phase 2: Relationship brief

**Step 1: Check persistent relationship file.** Before searching all meetings, check for an existing relationship file:

```bash
cat ~/.minutes/relationships/{first-name}.md 2>/dev/null
```

If it exists, read it — it contains cumulative intelligence from all past prep/debrief cycles with this person. Use it as a head start (skip re-deriving information already captured). If the file is >30 days old, supplement with a fresh meeting search.

**Step 2: Search meeting history.** (Skip if relationship file is <7 days old and comprehensive.)

```bash
minutes search "<name>" --limit 50
```

Read each matching meeting file with `Read`. Build a relationship brief:

**Meeting history:**
- Total meetings with this person, first and most recent dates
- Meeting frequency trend (increasing/decreasing/stable)

**Recurring topics:**
- Topics that come up across multiple meetings
- Topic trending: which topics are appearing MORE recently (↑) vs fading (↓)
- Flag any topic that appeared 3+ times in the last 2 weeks — "Something's on their mind"

**Open commitments:**
- Items YOU owe THEM (from `action_items` where assignee matches the user)
- Items THEY owe YOU (from `action_items` where assignee matches the other person)
- Flag any overdue items (due date in the past, status still `open`)

**Decision history:**
- Recent decisions involving this person (from `decisions:` frontmatter)
- Any volatile decisions (changed 2+ times) — flag as "still in flux"

Present the relationship brief to the user. Don't ask for approval — just show it and move to Phase 3.

**If there are zero past meetings AND no relationship file:**
Say: "I don't have any recorded meetings with [name]. This will be your first meeting on record. What's the context — how do you know them?"

Then skip the relationship brief and go straight to Phase 3 with whatever context the user provides.

### Phase 3: What do you want to accomplish?

Ask via the available structured-question mechanism: "What's the one thing you'd regret not discussing in this meeting?"

**If the answer is specific** ("finalize the pricing at monthly billing", "get a commitment on the hire"):
→ Frame talking points around that goal. Connect it to relationship data — e.g., "Alex's mentioned pricing 3 times recently. She's ready for this conversation."

**If the answer is vague** ("just catch up", "the usual"):
→ Push back with evidence: "Based on your last 3 meetings with Alex, these topics are active: [list]. Which one matters most today?"

**If the user skips** ("I don't know yet" / "nothing specific"):
→ Accept it. Frame as an open-ended catch-up. Still produce talking points based on open items and recent topics.

### Phase 4: Save prep file

Save the prep brief to `~/.minutes/preps/` for later pickup by `meetings-debrief`:

```bash
mkdir -p ~/.minutes/preps
```

Write the file as `~/.minutes/preps/YYYY-MM-DD-{person-first-name}.prep.md` with this structure:

```markdown
---
person: {full name}
date: {today ISO}
goal: {what they want to accomplish}
meeting_count: {total past meetings}
---

## Relationship Brief
{the brief from Phase 2}

## Talking Points
{the talking points}

## Goal
{their stated goal, quoted}
```

Set permissions to 0600:
```bash
chmod 600 ~/.minutes/preps/YYYY-MM-DD-{slug}.prep.md
```

Use the person's first name (lowercase) as the slug — e.g., `sarah`, not `sarah-chen` — because transcript attendee names are often abbreviated.

### Phase 5: Closing ritual

End with three beats:

1. **Signal reflection** — Quote a specific thing the user said during the session.
   "You said '[exact quote from their structured-question answers]' — that's your north star for this call."

2. **Assignment** — One concrete real-world action before the meeting. Not "go build it" — something specific.
   Examples: "Text Alex before your call that you want to finalize pricing."
   "Review the competitor grid Case sent you — it's still in your action items."

3. **Next skill nudge** — "After your call, run `meetings-debrief` to capture what you decided and compare it to what you planned."

## Gotchas

- **Calendar auto-detect is best-effort** — If no calendar source is available, silently fall back to asking manually. Never error or nag the user about calendar setup. Use the active client's registered calendar connector when present.
- **Calendar attendee names may differ from meeting transcript names** — Calendar says "Alex Chen (sarah@company.com)" but transcripts say "Alex" or "SPEAKER_0". Match on first name.
- **Skip all-day events and solo events** — Only show events with 2+ attendees as prep candidates. All-day events and events where the user is the only attendee aren't meetings.
- **Push back on vague answers** — This is the most important pattern. Vague prep = useless prep. "Everyone" → "Name one person." "Catch up" → "What would you regret not discussing?"
- **First-name slug for prep files** — Use `sarah` not `sarah-chen`. Transcript attendees are often abbreviated. Debrief matches on first name.
- **Zero past meetings is not an error** — It's a first meeting. Adjust the flow, don't apologize.
- **Don't hallucinate meeting history** — If you searched and found nothing, say so. Never invent meetings or conversations that don't appear in the search results.
- **Prep files are sensitive** — They contain relationship intelligence. Always 0600 permissions.
- **Multiple people in the meeting** — If the user names 2-3 people, search for each and combine the briefs. For >3, suggest picking the most important person to focus on.
- **Stale prep files** — meetings-debrief ignores preps older than 48 hours. The user can prep the day before and still get the debrief connection.

