Skip to content

Commit e7fdf50

Browse files
jlokosraycastbot
andauthored
Update granola extension (#21629)
* version 1.6 * Refactor AI assistant instructions and improve date handling in note retrieval * Update CHANGELOG.md and optimise images --------- Co-authored-by: raycastbot <bot@raycast.com>
1 parent ea0ecaa commit e7fdf50

22 files changed

+6415
-455
lines changed

extensions/granola/CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# Granola Changelog
22

3+
## [1.6] - 2025-09-17
4+
5+
### 🚀 New Commands
6+
- **Search People** - Browse and search people from your Granola meetings
7+
- **Search Companies** - Explore companies from your meetings
8+
9+
### ✨ New AI Tools
10+
- **Recipes Tool** - Use recipes from Granola within Raycast AI
11+
- **List Meetings Tool** - List meetings from Granola, with optional filtering by title, date, or folder
12+
13+
14+
### 🗑 Removed
15+
- **Browse Folders** command removed as redundant. Use `Search Notes` with the folder filter instead
16+
317
## [1.5.1] - 2025-08-19
418

519
### 🔧 Bug Fixes

extensions/granola/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ If you run into any issues, please verify the following:
1414
## Granola Commands
1515
- **Create Note** - Start a new note and recording immediately in Granola
1616
- **Search Notes** - View your notes in a list, see their details (including transcript), copy their links, or copy their contents as HTML or Markdown
17-
- **Browse Folders** - Navigate your folders and view notes within them with folder icons
17+
- **Search People** - Browse and search people from your Granola meetings, view their company affiliations and meeting history
18+
- **Search Companies** - Explore companies from your meetings, see associated people and meeting details
1819
- **Export Transcripts** - Select multiple notes and export their transcripts in bulk
1920
- **Export Notes** - Select multiple notes and export them in bulk
2021
- **Create Note from Transcript** - Create a new note from text transcripts or YouTube videos with AI-powered summaries
2122

2223
## AI Tools
2324
- **AI Notes** - Use Raycast AI on top of Granola and other AI extensions
25+
- **List Meetings** - Get meeting metadata (title, date, folders)
26+
- **Recipes** - Get recipes from Granola
2427
- **Get Transcript** - Retrieve the full transcript for any specific note
2528
- **Save to Notion** - Export one or more notes to Notion
2629

extensions/granola/ai.yaml

Lines changed: 81 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,17 @@
11
instructions: |
2-
You are an AI assistant for Granola, a note-taking and meeting management app. When responding to queries about notes, follow these instructions:
2+
You are an AI assistant for Granola. When you answer, follow these core rules:
33
4-
# Tool Usage Guidelines:
5-
When fetching notes from the ai-notes tool, you should use the correct parameters based on the user's query:
6-
7-
1. For finding the most recent note (when phrases like "latest", "last", "recent", or "newest" appear):
8-
- Do not set any title or content filters unless specifically mentioned
9-
- Do not set date filter (the API automatically sorts by most recent first)
10-
- IMPORTANT: Phrases like "most recent meeting", "latest meeting", "last meeting" should NOT use contentFilter - just get the most recent notes chronologically
11-
- TIME-BASED QUERIES TAKE PRIORITY: When time qualifiers are the PRIMARY focus ("list my most recent meeting", "show latest notes"), do NOT use contentFilter
12-
- EXCEPTION: If a specific topic is mentioned AFTER the time qualifier ("last meeting ABOUT product launch"), use title parameter for the topic
13-
14-
2. For transcript requests:
15-
- ALWAYS set "includeTranscript" to true when words like "transcript", "conversation", "dialog", or "what was said" appear in the query
16-
- When asked to summarize a transcript, you MUST set includeTranscript to true
17-
- NEVER set includeTranscript to true by default - only when explicitly requested
18-
- CRITICAL: The `includeTranscript` parameter MUST ALWAYS be included in ALL tool calls when querying for notes (ai-notes)
19-
- If transcript is NOT requested, you MUST explicitly set `includeTranscript` to `false`
20-
- IMPORTANT: Do NOT include `includeTranscript` parameter when performing folder operations (when `listFolders` is true)
21-
22-
3. For content and title searches:
23-
- Use "title" parameter when searching for notes with specific words in the title
24-
- For example, when user says "meetings about product launch", use title: "product launch"
25-
- When users ask for meetings/notes "about" specific topics, use title parameter with the topic
26-
- Use "contentFilter" when searching by note type, category, or general content keywords
27-
- IMPORTANT: When users ask for "meeting notes", "meetings", "calls", or similar note types (including variations like "project meeting", "team meeting", "client meeting"), use contentFilter with the relevant keyword (e.g., contentFilter: "meeting" or contentFilter: "project meeting")
28-
- CRITICAL RULE: If the query is ONLY about time-based retrieval without specific topics ("most recent meeting", "latest call"), do NOT use contentFilter. If there's a specific topic mentioned ("last meeting about X"), use title parameter for the topic
29-
- When in doubt between title and contentFilter for specific topics, prefer using the title parameter
30-
- When in doubt for note types or categories, use contentFilter
31-
32-
4. For content type selection:
33-
- Use "contentType: original" when users ask for "my notes", "what I wrote", "original content", "raw notes", "user notes"
34-
- Use "contentType: enhanced" when users ask for "AI notes", "enhanced notes", "processed notes", "formatted notes", "enhanced AI notes"
35-
- Default (auto) provides the best available content, preferring enhanced over original
36-
- Always respect user's explicit preference for content type
37-
- IMPORTANT: When users specifically mention "enhanced" or "AI notes" in their query, you MUST include the contentType parameter
38-
39-
5. For date filters:
40-
- Use proper date formats or relative terms like "today", "yesterday", "last week"
41-
- Don't use date filters when searching for "latest" or "most recent" notes
42-
43-
6. For folder-related queries:
44-
- When asked about folders (e.g., "what folders do I have", "show my folders"), set "listFolders" to true
45-
- When asked about notes within a specific folder, set "folderId" to the ID of the folder
46-
- Always include folder names/titles when presenting folder information
47-
- Show the number of notes in each folder when listing folders
48-
- Do NOT include `includeTranscript` parameter when `listFolders` is true
49-
50-
7. **get-transcript tool usage**:
51-
- Use this tool when users ask for detailed transcript content that wasn't included in the initial ai-notes call
52-
- When users want to see "exactly what was said" or need full conversation details
53-
- When summarizing a specific conversation in detail
54-
- Requires a specific noteId (get this from ai-notes first if needed)
55-
56-
8. **save-to-notion tool usage**:
57-
- Use when users ask to "save to Notion", "export to Notion", "share to Notion", or similar
58-
- Can handle single notes or multiple notes (provide array of noteIds)
59-
- Always inform users about the results (success/failure) and provide Notion page URLs when successful
60-
- If saving multiple notes, mention the batch processing approach
61-
62-
NOTE: The tool will always return results sorted by date (newest first). When a user asks for "latest" or "last", you don't need to add any filters - just use the first result returned.
63-
64-
# Output Format:
65-
- When summarizing a note or transcript, provide a concise summary that captures the key points
66-
- Format dates in a readable way (e.g., "April 10, 2025")
67-
- When showing transcript excerpts, maintain the original speaker attribution (e.g., "**Me:**", "**John:**")
68-
- When listing folders, present them in a clear, organized way with folder name, description (if available), and note count
69-
- When using save-to-notion, provide clear feedback about success/failure and include Notion URLs for successful saves
70-
- When using get-transcript, format the transcript content clearly with proper speaker attribution
4+
- CRITICAL: every `ai-notes` call must include the `includeTranscript` flag. Set it to true only when the user explicitly wants the transcript or a transcript summary; otherwise set it to false. Skip the flag only when you use `listFolders: true`. This applies even when you add other parameters like `date`, `contentFilter`, or `contentType`.
5+
- For task or action-item requests about the "latest" meeting (e.g., "What are the tasks from my latest meeting"), first call `list-meetings` with `{ "date": "latest", "limit": 1 }`, then call `ai-notes` with `{ "noteId": "<id>", "includeTranscript": false }`. Do not add `contentFilter` or `excludeContent` in that flow.
6+
- Use `list-meetings` only when the user wants a meeting list, when you need IDs before another tool (such as saving to Notion), or when you must disambiguate multiple candidates. For any single-note request based on recency—including "list my most recent meeting", "summarize the transcript of my latest note", or "last meeting about the product launch"—call `ai-notes` directly (no `list-meetings` beforehand) with the appropriate `title`/`contentType` and set `includeTranscript` according to the user's request.
7+
- Use the `title` parameter for topical queries ("meeting about the product launch"). Use `contentFilter` for note categories or types ("meeting notes", "client calls"). If the user only specifies time ("latest meeting"), avoid `contentFilter`. When the user names a meeting type in plural ("project meetings"), normalise the filter to the singular form (use `"project meeting"`).
8+
- When the user wants meeting notes exported (e.g., "save my last 3 meeting notes"), first call `ai-notes` with `contentFilter: "meeting"` and `includeTranscript: false` to gather the note IDs, then call the export tool.
9+
- Respect content-type preferences: set `contentType: "original"` for requests like "my notes" or "original"; set `contentType: "enhanced"` for "AI/enhanced" requests; otherwise omit it.
10+
- Turn on `includeTranscript` when the user asks for the transcript, what was said, or to summarise a transcript; keep it false for summaries such as TL;DR requests unless the transcript is mentioned.
11+
- Use `ai-notes` to retrieve transcripts and transcript summaries. Only call `get-transcript` when the user supplies a specific note ID and wants the raw transcript alone.
12+
- For folder questions, call `ai-notes` with `listFolders: true`. When the user needs notes from a specific folder, supply that folder's ID via `folderId`.
13+
- Always call the `recipes` tool (action `"get"`) before any other tool when the user invokes `/slug` or explicitly requests a recipe; the recipes call must be the very first tool call for that query (e.g., `/tldr` → `recipes({ "action": "get", "slug": "tldr" })`). After fetching the recipe, continue with the necessary note tools.
14+
- After you have the right note IDs, call `save-to-notion` if the user wants to export notes to Notion.
7115
7216
evals:
7317
- input: "@granola Please summarize my last note"
@@ -84,6 +28,10 @@ evals:
8428

8529
- input: "@granola Show me the transcript of my last meeting about the product launch"
8630
mocks:
31+
list-meetings:
32+
- id: "sample-id-456"
33+
title: "Product Launch"
34+
date: "2025-03-06T16:15:20.057Z"
8735
ai-notes:
8836
- content: "Product launch planning discussion"
8937
date: "2025-03-06T16:15:20.057Z"
@@ -133,6 +81,16 @@ evals:
13381

13482
- input: "@granola save my last 3 meeting notes to Notion"
13583
mocks:
84+
list-meetings:
85+
- id: "note-1"
86+
title: "Team Sync"
87+
date: "2025-03-15T14:00:00.000Z"
88+
- id: "note-2"
89+
title: "Client Call"
90+
date: "2025-03-14T16:30:00.000Z"
91+
- id: "note-3"
92+
title: "Planning Session"
93+
date: "2025-03-13T11:00:00.000Z"
13694
ai-notes:
13795
- id: "note-1"
13896
title: "Team Sync"
@@ -205,4 +163,58 @@ evals:
205163
arguments:
206164
contentType: "enhanced"
207165
contentFilter: "project meeting"
208-
includeTranscript: false
166+
includeTranscript: false
167+
168+
- input: "@granola what are the tasks from my latest meeting?"
169+
mocks:
170+
list-meetings:
171+
- id: "latest-meeting-123"
172+
title: "Product Launch Planning"
173+
date: "2025-03-16T14:00:00.000Z"
174+
folderIds: ["work-folder-456"]
175+
folderNames: ["Work Projects"]
176+
ai-notes:
177+
- content: "### Product Launch Tasks\n\n- Finalize marketing materials by Friday\n- Schedule demo with engineering team\n- Prepare presentation for stakeholders\n- Review budget allocation for Q2"
178+
date: "2025-03-16T14:00:00.000Z"
179+
title: "Product Launch Planning"
180+
id: "latest-meeting-123"
181+
expected:
182+
- callsTool:
183+
name: "list-meetings"
184+
arguments:
185+
date: "latest"
186+
limit: 1
187+
- callsTool:
188+
name: "ai-notes"
189+
arguments:
190+
noteId: "latest-meeting-123"
191+
includeTranscript: false
192+
193+
194+
195+
- input: "@granola /tldr my latest meeting"
196+
mocks:
197+
recipes:
198+
- slug: "tldr"
199+
id: "r-101"
200+
config:
201+
instructions: "Provide a concise TL;DR"
202+
list-meetings:
203+
- id: "latest-meeting-123"
204+
title: "Engineering Sync"
205+
date: "2025-03-16T10:00:00.000Z"
206+
ai-notes:
207+
- content: "Product roadmap discussion with engineering team"
208+
date: "2025-03-16T10:00:00.000Z"
209+
title: "Engineering Sync"
210+
id: "latest-meeting-123"
211+
expected:
212+
- callsTool:
213+
name: "recipes"
214+
arguments:
215+
action: "get"
216+
slug: "tldr"
217+
- callsTool:
218+
name: "ai-notes"
219+
arguments:
220+
includeTranscript: false

extensions/granola/package.json

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,6 @@
2727
"description": "Create a new note in Granola",
2828
"mode": "no-view"
2929
},
30-
{
31-
"name": "browse-folders",
32-
"title": "Browse Folders",
33-
"description": "Browse folders and notes",
34-
"mode": "view"
35-
},
3630
{
3731
"name": "export-transcripts",
3832
"title": "Export Transcripts",
@@ -50,6 +44,18 @@
5044
"title": "Create Note from Transcript",
5145
"description": "Create a new note in Granola from a transcript",
5246
"mode": "view"
47+
},
48+
{
49+
"name": "search-people",
50+
"title": "Search People",
51+
"description": "Search people from your Granola meetings",
52+
"mode": "view"
53+
},
54+
{
55+
"name": "search-companies",
56+
"title": "Search Companies",
57+
"description": "Search companies from your Granola meetings",
58+
"mode": "view"
5359
}
5460
],
5561
"tools": [
@@ -58,6 +64,11 @@
5864
"title": "AI Notes",
5965
"description": "Ask AI about your notes, meetings, and transcripts from Granola"
6066
},
67+
{
68+
"name": "list-meetings",
69+
"title": "List Meetings",
70+
"description": "List meetings with basic metadata (title, date, folders) without content"
71+
},
6172
{
6273
"name": "get-transcript",
6374
"title": "Get Transcript",
@@ -67,7 +78,12 @@
6778
"name": "save-to-notion",
6879
"title": "Save to Notion",
6980
"description": "Save one or more notes to Notion"
70-
}
81+
},
82+
{
83+
"name": "recipes",
84+
"title": "Recipes",
85+
"description": "List and search Granola recipes"
86+
}
7187
],
7288
"dependencies": {
7389
"@danielxceron/youtube-transcript": "^1.2.3",

0 commit comments

Comments
 (0)