com um clique
granola
// Query and sync Granola meetings to Obsidian vault. Use when user mentions Granola, meeting transcripts, or wants to sync meeting notes. Reads from local cache - no API needed.
// Query and sync Granola meetings to Obsidian vault. Use when user mentions Granola, meeting transcripts, or wants to sync meeting notes. Reads from local cache - no API needed.
Manage client relationships. USE WHEN user asks about clients, follow-ups, client emails, or who needs attention.
Query data from this vault. USE WHEN user asks about projects, clients, tasks, daily notes. Use grep to extract frontmatter - do NOT read full files.
Daily and weekly review workflows. USE WHEN user says "morning routine", "evening routine", "weekly review", "start my day", "end of day".
Create, update, delete, and list tasks via HTTP API. USE WHEN user wants to create tasks, mark done, update status, or manage tasks.
| name | granola |
| description | Query and sync Granola meetings to Obsidian vault. Use when user mentions Granola, meeting transcripts, or wants to sync meeting notes. Reads from local cache - no API needed. |
Query and sync Granola AI meeting notes to Obsidian vault.
Granola stores everything locally at ~/Library/Application Support/Granola/cache-v3.json:
No API calls needed - reads directly from local cache.
# List all meetings
python3 .claude/skills/granola/scripts/granola.py list
# Get specific meeting with transcript
python3 .claude/skills/granola/scripts/granola.py get <id>
# Sync new meetings to vault
python3 .claude/skills/granola/scripts/granola.py sync
# Sync specific meeting
python3 .claude/skills/granola/scripts/granola.py sync --id <id>
List all Granola meetings with sync status.
python3 .claude/skills/granola/scripts/granola.py list
python3 .claude/skills/granola/scripts/granola.py list --limit 5
Output:
[✓] 2026-01-09 Team Sync - Weekly
ID: abc123...
Transcript: 450 segments, ~86 min
[ ] 2026-01-10 Team Standup
ID: def456...
Transcript: 120 segments, ~15 min
[✓] = already synced to vault[ ] = not synced yetView full meeting details and transcript.
python3 .claude/skills/granola/scripts/granola.py get <id>
python3 .claude/skills/granola/scripts/granola.py get <id> --no-transcript
Sync meetings to Meetings/ as structured Markdown.
# Sync new meetings only
python3 .claude/skills/granola/scripts/granola.py sync
# Sync specific meeting
python3 .claude/skills/granola/scripts/granola.py sync --id <id>
# Re-sync all (overwrites existing)
python3 .claude/skills/granola/scripts/granola.py sync --all
Synced meetings are saved to Meetings/ with this structure:
---
type: granola-meeting
date: 2026-01-09
time: "19:30"
duration_min: 86
granola_id: abc123...
people:
- "[[Sarah Chen]]"
topics: []
status: raw
---
# Meeting Title
## Notes
(Your notes from Granola)
## Transcript
[19:30:45] 🎤 Hey, how's it going?
[19:30:48] 🎤 Great to meet you...
Transcript icons:
python3 .claude/skills/granola/scripts/granola.py syncstatus: raw to status: processedUse Granola.base to query synced meetings:
| View | Filter |
|---|---|
| Recent | Last 7 days |
| Needs Processing | status = raw |
| By Person | Grouped by people field |
Local cache: ~/Library/Application Support/Granola/cache-v3.json
cache (JSON string) → state →
├── documents: {id: {title, notes_plain, notes_markdown, people, created_at}}
└── transcripts: {id: [{text, source, start_timestamp, end_timestamp}]}
Transcript segment:
{
"text": "Hey, how's it going?",
"source": "microphone",
"start_timestamp": "2026-01-09T19:30:45.123Z",
"end_timestamp": "2026-01-09T19:30:48.456Z"
}