skills/meeting-prep/SKILL.md
Research a person and/or company before a meeting — prospect, cold lead, current client, or unknown contact. Builds a structured briefing by first checking institutional knowledge (wiki + client memory + Granola history) and only then supplementing with external web research. Use whenever the user mentions an upcoming meeting, a new lead, an email they got from someone unfamiliar, or asks "what do we know about X" / "research this person" / "prep for my call with Y". Also handles post-meeting wiki updates. Triggered by phrases like "meeting with", "have a call with", "research <name>", "prep for", "what do we know about", "background on <person/company>", "/meeting-prep".
npx skillsauth add rdfitted/claude-code-setup meeting-prepInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Research a counterpart before a meeting and produce a structured briefing. Always check institutional knowledge first — the wiki and client memory exist precisely so we don't pay for the same research twice. External web research is the last step, not the first.
/client-meetings or the granola skillFlexible. Any of:
/meeting-prep <name> — e.g. /meeting-prep Aaron Warshow/meeting-prep <email> — e.g. /meeting-prep [email protected]/meeting-prep <name> <company> — combines both signals/meeting-prep <name> <email> <company> — fullest signalAlways preserve the user's spelling initially, but verify against the email domain and authoritative sources (LinkedIn, ZoomInfo). Surface spelling corrections explicitly (e.g. Warshaw not Warshow).
The wiki and client memory may already have everything the user needs. Hitting external sources before checking is a sin.
Wiki — client pages: Grep ~/.ai-docs/wiki/clients/ for the person's name, surname variants, company name, and email domain.
Grep tool, path: C:\Users\USERNAME\.ai-docs\wiki\clients
patterns to try (in order): full name → surname → company name → email domain → first name
Wiki — full sweep: If no client-page match, grep all of ~/.ai-docs/wiki/ (patterns, practices, research, log.md). Sometimes a person shows up in practices/sow-conventions.md or a research page.
Client memory: Grep ~/.claude/clients/ (CLIENT.md, context.md, decisions.md, status.md across all client folders). Don't forget the index at ~/.claude/clients/CLIENTS.md.
Personal memory: Grep ~/.claude/projects/C--Users-RDuff/memory/ for the name — sometimes people are tagged in feedback_*.md or person_*.md files.
Result handling:
Even if the wiki has no entry, prior meetings may exist.
Granola local cache — open %APPDATA%\Granola\cache-v6.json via Python and search documents by:
titlepeople arraytitle or notespeople[].emailGranola API — if the user is a known client (slug exists), use the granola skill to list meetings and pull transcripts/panels for any matches. The local cache only retains ~3 transcripts; the API has full history.
Extract: meeting dates, attendees, decisions, action items, sentiment, anything noted that needs follow-up.
Only after Phases 1–2 leave gaps. Be surgical, not exhaustive.
Spelling / disambiguation — if name is uncertain, use the email domain or company name to nail the right spelling before flooding searches with the wrong term. Email domain is ground truth for last name in most cases.
Web search — paired queries first:
"<Full Name>" <Company>"<Full Name>" <industry> (if industry hinted by domain or user)"<email>" (exact-match in quotes catches contact databases)Company website probe — WebFetch https://<domain> AND https://www.<domain>. If both fail (ECONNREFUSED, timeout):
nslookup via Bash) to confirm the domain resolvesAuthoritative sources (use WebFetch for these, they have structured data):
https://www.linkedin.com/company/<slug>https://www.zoominfo.com/c/<slug>/<id> (often in search results)https://rocketreach.co/<name>-email_<id>Name collision check — search the exact name in quotes alone. Multiple people share names (e.g. Aaron Warshaw the restoration operator vs. Aaron Warshaw the Ogletree Deakins employment lawyer). Flag collisions explicitly so the user doesn't accidentally walk into the wrong context.
Adjacent context — if the email is at a new/spin-out domain, search for prior employer connections. A "President of X at Y" who now has a new domain is almost certainly a spin-out — chase the linkage.
Compile a structured briefing. Adapt sections to what's actually known — don't pad with empty headers.
## TL;DR
2-3 lines: who they are, what they do, why this meeting matters.
## Person
- Role, employer, location
- Background (education, prior roles) — only if non-obvious
- Family / personal context (only if surfaced and relevant to the conversation)
- Side ventures / other businesses
## Company
- What they do, who they serve
- Size (headcount, revenue) with source
- Geography
- Leadership team
- Tagline / positioning
- Distinctive operating model
## Existing Relationship (if any)
- Past meetings (dates, summaries)
- Decisions on record
- Sentiment signals
- Active commitments
## Linked Entities
- Prior employer / spin-out parent
- Mutual contacts (esp. the introducer)
- Companies in the same orbit
## Sensitive Context (flagged INTERNAL ONLY)
- Legal disputes, NDAs, departure messiness
- Adversarial relationships
- Anything that should NOT be referenced externally
## Spelling / Identity Confirmation
- Confirmed spelling
- Name collisions to disregard
## Suggested Angle for the Meeting
- Opening questions that pay off
- Frames likely to land
- Things to avoid
## Sources
- Markdown hyperlinks to everything cited
Keep it tight. The user is heading into a meeting — they need a brief, not a dossier.
After the meeting, the user will often say "add them to the wiki" or "that went well, save it." When they do — or proactively when the user signals the call happened — follow the full institutional-update routine:
Wiki page — create ~/.ai-docs/wiki/clients/<slug>.md (or update existing) using the frontmatter format from ~/.ai-docs/schema.md:
---
title: <Company Name> (<Primary Contact>)
category: clients
last_updated: YYYY-MM-DD
cross_refs: []
learned_from:
- <Granola meeting source>
- Web research <date>
---
Sections to consider: Primary Stakeholder, Departure Context (if sensitive), Industry/Operating Model, Pain Points, Pitch Framing That Landed, IP terms discussed, Linked Entities, Status, Sources.
Register in index — add a one-liner to ~/.ai-docs/wiki/index.md under ## Clients.
Log the operation — append to ~/.ai-docs/wiki/log.md:
## YYYY-MM-DD | add | New client page clients/<slug>.md — <one-line description>. <Granola doc id if applicable>. <key flags>.
Client memory — if the user wants the full ops folder (decisions log, status board, structured contact list), also create ~/.claude/clients/<slug>/ with:
CLIENT.md (profile, contacts, departure context flagged)context.md (domain knowledge, pain points, tech stack assumptions, productization fit)decisions.md (append-only, with date + rationale + source)status.md (current stage, next steps, watch items, meeting cadence)Add to ~/.claude/clients/CLIENTS.md index. Match the format of existing clients (ubs, gvb, tog) for consistency.
Slug choice — short and consistent with existing clients (gvb, ubs, tog, totum, scattered-ashes-maui, summit-rb). Initials work when the company name is long.
find -delete, heredocs that break in pwsh, Unix paths.~/CLAUDE.md: never bleed knowledge across client boundaries unless an explicit cross-ref or shared integration justifies it. The Phase 1 sweep should be read-only across all clients, but the briefing focuses on the target only./meeting-prep Aaron Warshow [email protected]
/meeting-prep Tom Tinervin
/meeting-prep [email protected] Cloud Capital Funding
/meeting-prep "what do we know about Sam Lamphere"
C:\Users\USERNAME\.ai-docs\wiki\C:\Users\USERNAME\.ai-docs\schema.mdC:\Users\USERNAME\.ai-docs\wiki\log.mdC:\Users\USERNAME\.ai-docs\wiki\index.mdC:\Users\USERNAME\.claude\clients\C:\Users\USERNAME\.claude\clients\CLIENTS.mdC:\Users\USERNAME\.claude\projects\C--Users-RDuff\memory\%APPDATA%\Granola\cache-v6.jsonC:\Users\USERNAME\.claude\skills\granola\SKILL.mdC:\Users\USERNAME\.claude\commands\client-meetings.mdC:\Users\USERNAME\.claude\commands\sync-client.md/client-meetings <slug> — pull cached Granola meetings for a known clientgranola skill — full Granola API access beyond the 3-meeting local cache (sentiment mining, full transcripts)/sync-client <slug> — refresh a client memory folder from authoritative sources/curate-learnings — flow project-specific learnings upward into the global wiki (run at session end if meeting yielded patterns worth generalizing)development
Restore from the Kopia backup repo in one of two opinionated modes. **wikis** (frequent, default) syncs per-project `.ai-docs/` directories from backup to local project trees — used to move compound-knowledge wikis between machines via the backup drive as sneakernet. **full** (rare) restores all sources to original paths for greenfield machine rebuild. Use when the user says "restore wikis", "sync wikis from backup", "pull the wikis", "I plugged in the backup drive on this machine", "rebuild this machine", "greenfield restore", or "restore everything". For ad-hoc single-file restores, use `backup-ops restore` instead.
documentation
# /bp-iterate Iterate the Fitted Business Plan(s). Manages the **internal canonical** and the **external partner/investor variant**, snapshot-on-version-bump lineage, redaction enforcement between variants, and cross-document coupling. ## When this runs - User says `/bp-iterate`, "iterate the BP," "bump the BP," "update the business plan," "version up the BP," "create / update / refresh the external variant" - A material trigger fires per the BP's own Iteration Log (first 2 new closes / fundi
tools
Run Kopia-based backups of key Windows files and config to an external drive. Use when the user says "back up", "run a backup", "snapshot", "the backup drive is plugged in", or wants to set up / configure backups for the first time. Handles initial repo setup, drive detection by volume label, source enumeration, and snapshot creation with structured exclusions.
testing
Secondary backup operations against the Kopia repo — verify integrity, run maintenance/prune, mirror to a second destination, restore files/folders, or run a quick top-up snapshot of hot directories. Use when the user says "verify backups", "check backup integrity", "prune old snapshots", "restore from backup", "mirror backups to cloud", "quick backup", "top up the backup", or asks about backup health. For the primary backup run, use the `backup` skill instead.