| name | meetings-prep |
| description | 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. |
| user_invocable | true |
| skill-dependencies | ["meetings-debrief"] |
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):
gog calendar list --today --json -a <account> 2>/dev/null
3. Apple Calendar (osascript) (every Mac, zero install):
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:
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:
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:
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.)
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:
mkdir -p ~/.minutes/preps
Write the file as ~/.minutes/preps/YYYY-MM-DD-{person-first-name}.prep.md with this structure:
---
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:
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:
-
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."
-
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."
-
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.