---
name: folder-recipe-run
description: Run one Recipe (a fixed extraction schema) across every meeting in a Granola Folder and return one table with one row per call, with cited quotes and confidence tags. Works two ways, inside Granola (paste the Recipe into Granola chat on the Folder) or in Claude Code over the Granola MCP. Use when someone says "run this across my calls", "every call in this folder", "batch these transcripts", "run the recipe on the folder", or "what do all my calls from last month say about X".
---

# Folder Recipe Run

One call tells you about one buyer. A folder of calls tells you about your market. The trick is to ask every call the same questions in the same format, so the answers stack into a table you can count.

A Recipe here is a fixed schema: the same fields, the same rules, every call. The Recipe texts for pasting into Granola live in this skill's `recipes/` folder.

## Pick the Recipe

| Recipe | Row fields | Feeds |
|---|---|---|
| `win-loss` | see `win-loss-icp-update` | ICP and signal updates |
| `buying-signals` | account, date, pain quote, moment signals, competitor, next step, rep C | Account Contexts, prioritization |
| `deal-qual` | account, MEDDPICC 0-2 per element, total, readiness | pipeline review |
| `voc` | account, pain phrases, objections, competitor lines, feature requests | messaging, product |
| `health` | account, status, risk signals, expansion signals, renewal date | CS review |
| custom | the user's own fields | anything |

For a custom Recipe, ask for the fields and one rule per field. Refuse fields that cannot be answered from a call (for example ARR, unless the user supplies it) and say why.

## Path A: Run it in Granola, finish in Claude

1. In Granola, open the Folder, open chat, type `/`, and pick the Recipe (or paste the Recipe text from `recipes/`). If your Granola version does not offer Recipes in Folder chat, run the Recipe meeting by meeting or use Path B.
2. Copy Granola's output into a file in `folders/<folder>/granola-output.md`, or paste it here.
3. This skill validates every row (Step 3 below) and builds the table.

Path A is fast and needs no setup. Its weakness: Granola chat works mostly from its own notes, so quotes may be paraphrased. Step 3 catches that.

## Path B: Run it in Claude Code over MCP

Setup once: `claude mcp add granola --transport http https://mcp.granola.ai/mcp`, then run `/mcp` and authenticate. Folder listing and raw transcripts need a paid Granola plan.

1. `list_meeting_folders`. Ask the user which Folder. Confirm the meeting count before running.
2. List the meetings in that Folder (`list_meetings`; if it cannot filter by folder, use `query_granola_meetings` with the folder name, then confirm the list with the user).
3. For each meeting, in batches of 5:
   - `get_meetings` for typed notes and attendees.
   - `get_meeting_transcript` for the transcript. If unavailable, mark the row `notes only` and tag every field Inferred.
   - Run `granola-capture-markers` (Part C) and `transcript-denoise`. Save to `calls/<date>-<slug>/`.
   - Apply the Recipe to the ledger. Write the row.
4. Save progress after each batch so a stopped run resumes where it left off. Report "batch 2 of 6 done" lines only.

Path B is slower and gives Verified quotes with timestamps.

## Step 3: Validate every row (both paths)

- A quote with no meeting or timestamp: tag Inferred.
- A quote that cannot be found in the transcript (Path B): tag Inferred, note "not found verbatim".
- A field the call did not cover: write `not discussed`. Never leave it blank, never guess.
- Duplicate meetings (same account, same day): keep one, note it.
- Seller words in a buyer field: remove the row value and note it.

## Output

`folders/<folder>/<recipe>-table.md` and `.csv`, plus a header:

```markdown
# <Recipe> across <folder>
Meetings: <n> | With transcript: <n> | Notes only: <n> | Date range:
Path: A (Granola) or B (MCP)
Fields not discussed most often: <field, count>

| Meeting | Date | Account | <fields...> | Rep C | Confidence summary |
```

Then 3 lines: the most common value per key field, counted by account, not by mention.

## Rules

- Same schema for every row. No free-form summaries in cells.
- Count by account. Five calls with one account is one account.
- The table is evidence. Patterns and recommendations belong to the next skill (`win-loss-icp-update`, `voice-of-customer-scan`), which reads this table.
