Agents
A working library of the AI agents I've built and actually use. Grab one, copy it, make it yours.
Skill
Granola Meeting Export
Pull your Granola meeting notes and full transcript without leaving your editor, then optionally save them to disk.
granola-export.md
---
name: granola-export
description: "Extract and export meeting transcripts and summary notes from Granola. Trigger this skill whenever the user wants to pull, view, export, or read their Granola meeting notes, transcript, or summary for a specific meeting or their most recent one. Trigger on phrases like 'get my Granola notes', 'pull the transcript from my last meeting', 'export my meeting notes', 'show me the notes from [meeting name]', 'grab the transcript', 'get the summary from my [meeting name] call', 'pull meeting notes from Granola', 'what are my notes from [X]', or any request to retrieve content from a Granola meeting. Always use this skill even if the user says 'just grab the notes' or frames it as a quick task."
---
# Granola Meeting Exporter
Extract and surface the full transcript and summary notes from a Granola meeting. The output should be clean, readable, and ready to paste, share, or feed into downstream workflows.
## Parameters
All parameters are optional:
- **meeting_name**: A name, partial name, description, or keyword identifying the meeting. Defaults to the most recent meeting if omitted.
- **date**: The date of the meeting in any recognizable format ("April 15", "yesterday", "last Tuesday"). Narrows results when a name is ambiguous or not given.
- **time**: Approximate start time ("2pm", "morning", "afternoon"). Disambiguates multiple meetings on the same date.
- **save**: Whether to write notes and transcript to local markdown files. Defaults to false. Set to true when the user says "save," "write to file," or "export to disk."
## Workflow
### Step 1 -- Find the Meeting via MCP
Use the Granola MCP to locate the meeting.
**Time range:**
- If a **date** was given, use `time_range: "custom"` with `custom_start` and `custom_end` set to that date. Resolve relative dates ("yesterday", "last Tuesday") to actual calendar dates before querying.
- If no date was given but a **meeting_name** was, use `time_range: "last_30_days"`.
- If neither was given (most recent), use `time_range: "this_week"`, falling back to `time_range: "last_week"` if nothing is found.
**Selecting the meeting:**
1. Call `Granola:list_meetings` with the appropriate time range.
2. Filter by **meeting_name** if provided (fuzzy match is fine).
3. If **time** was given, use it to disambiguate: morning = before noon, afternoon = noon--5pm, evening = after 5pm.
4. If only a date was given and exactly one meeting falls on it, use it. If multiple meetings fall on that date, list them (title + start time) and ask the user to pick.
5. If multiple meetings still match after all filtering, list the top 3--5 (title + date + start time) and ask. Do not guess.
### Step 2 -- Pull Meeting Details and Transcript
With the meeting ID in hand, make two parallel calls:
1. `Granola:get_meetings` with the meeting ID -- pulls summary notes, attendees, AI-generated overview, and metadata.
2. `Granola:get_meeting_transcript` with the meeting ID -- pulls the verbatim transcript.
### Step 3 -- Format and Present
Present the content in this structure:
---
## [Meeting Title]
**Date:** [date]
**Attendees:** [list of names]
---
### Summary Notes
[Paste the AI-generated summary / structured notes here, preserving any sections like Action Items or Key Decisions.]
---
### Full Transcript
[Paste the verbatim transcript here, preserving speaker labels. Do not truncate unless the transcript exceeds 10,000 words, in which case summarize the middle and note what was cut.]
---
### Step 4 -- Save to Files (if requested)
If **save** is true (or the user asks after seeing the output), write two markdown files:
- `Notes/YYYY-MM-DD - [Meeting Name] - Notes.md`
- `Transcripts/YYYY-MM-DD - [Meeting Name] - Transcript.md`
`YYYY-MM-DD` is the meeting date. `[Meeting Name]` is the title as it appears in Granola, with any filename-invalid characters (`/ \ : * ? " < > |`) replaced with a dash. Create the `Notes/` and `Transcripts/` subdirectories if they don't already exist.
After presenting the output, offer one line: "Want me to save these as markdown files?" Don't repeat the offer.
## Edge Cases
- **Meeting not found:** Tell the user clearly. Ask if they want to try a different date range or different keywords.
- **Transcript unavailable:** Note it and present the summary notes only. Short meetings or huddles may have no transcript.
- **Summary notes empty:** Note it and present the transcript only.
- **Meeting under 5 minutes old:** Granola may not have processed it yet. Let the user know and suggest retrying in a few minutes.Skill
Granola Meeting Export
Pull your Granola meeting notes and full transcript without leaving your editor, then optionally save them to disk.
Workflow
Prompt
Inbox Triage
Sort, draft, and surface what actually needs you, so you start the day with a plan, not a pile.
Productivity
No agents match that. Try a different filter.
