Skip to content

sonomirco/obsedian-plugin-and-skills-for-granola

Repository files navigation

Granola Automation Suite

This repository contains an Obsidian plugin and two Claude Code skills that work together to bridge Granola meeting data with your personal knowledge management system.


⚠️ Granola v4 Update (February 2026)

Granola updated its local cache format from cache-v3.json to cache-v4.json with significant structural changes. This broke both the plugin and the extractor script. The following fixes have been applied:

Component What broke Fix applied
Obsidian plugin getGranolaCachePath() hardcoded to cache-v3.json Now auto-detects cache-v4.jsoncache-v3.json
Obsidian plugin loadGranolaCache() only handled v3's string-encoded cache Added v4 branch: data.cache is now a plain object with a state key
Obsidian plugin extractAISummary() read from documentPanels (removed in v4) Falls back to notes_markdownnotes_plainnotes → placeholder
Obsidian plugin Meetings with no AI summary were silently skipped Removed the skip gate — all meetings sync, with a placeholder if no notes exist
Extractor script CACHE_PATH hardcoded to cache-v3.json Auto-detects the latest cache-v*.json file
Extractor script Only handled v3 structure Added v4 dict structure handling

Important cache behaviour: Granola writes cache-v4.json only on app startup — the file is not updated while the app is running. Live meeting data is stored in an encrypted OPFS database. To refresh the cache after a meeting, fully quit Granola (Cmd+Q on macOS, not just closing the window) and reopen it.

AI summary fetch: In v4, Granola stores AI-generated summaries in the cloud rather than the local cache. The plugin now calls https://api.granola.ai/v1/get-document-panels to fetch the real AI summary whenever the local cache contains no notes. It reads the WorkOS auth token automatically from ~/Library/Application Support/Granola/supabase.json — no configuration needed. If the token is expired or the API is unreachable, the placeholder text is shown as a fallback.


How It Works

The Obsidian plugin syncs Granola's AI summaries into your vault as markdown files with rich YAML frontmatter (granola_id, folders, participants, etc.). These synced files become the foundation for both skills:

  • Granola Search queries the synced markdown files by folder tags, title, and content.
  • Granola Transcript extracts the full verbatim transcript from Granola's local cache — content the plugin doesn't sync — and prints it in the conversation.

Contents

  1. Obsidian Granola Sync Plugin — syncs AI summaries from Granola into your Obsidian vault.
  2. Granola Search Skill (/granola-search) — searches the synced meeting files by folder tags, title, and body content. Requires VAULT_GRANOLA_PATH to be configured.
  3. Granola Transcript Skill (/granola-transcript) — extracts the full transcript from Granola's cache (which the plugin doesn't sync) and prints it in the conversation. Requires VAULT_GRANOLA_PATH to be configured.

1. Obsidian Granola Sync Plugin

This plugin runs within Obsidian to pull your latest meeting summaries.

Features

  • Auto-sync on startup: Automatically checks for new meetings when you open Obsidian.
  • AI Summary Extraction: Pulls the clean AI summary (not just the raw text).
  • Rich Metadata: Populates YAML frontmatter with granola_id, deep links (granola_url), and participant lists.
  • Incremental Sync: Only adds new meetings; avoids duplicates.

Installation

Prerequisites

Steps

  1. Clone this repository:
    git clone https://github.com/sonomirco/obsedian-plugin-and-skills-for-granola.git
    cd obsedian-plugin-and-skills-for-granola
  2. Install dependencies and build:
    npm install && npm run build
  3. Create a folder named granola-sync inside your Obsidian vault's .obsidian/plugins/ directory.
  4. Copy main.js and manifest.json into that folder.
  5. Open Obsidian, go to Settings > Community Plugins, and enable Granola Sync.

Configuration

In Obsidian Settings > Granola Sync:

  • Output folder: Destination for meeting notes (Default: Granola).
  • Days to sync: How far back to look for meetings (Default: 365).

Platform note: the plugin auto-detects the Granola cache at ~/Library/Application Support/Granola/cache-v4.json (falling back to cache-v3.json for older installs). On Windows, update getGranolaCachePath() in main.ts to match your Granola install location, then rebuild.


Installing the Claude Code Skills

The two skills (/granola-search and /granola-transcript) are Claude Code custom skills. To install them:

  1. Copy the skills/ folder from this repo into your project or working directory.
  2. Open each skill's SKILL.md and set VAULT_GRANOLA_PATH to the absolute path where the Obsidian plugin writes meeting files (e.g., /Users/you/your-vault/Granola).
  3. The skills will be available as /granola-search and /granola-transcript in Claude Code.

The Granola Transcript skill also requires Python 3.6+ for the extractor script.


2. Granola Search Skill

Located in skills/granola-search. A Claude Code skill invocable with /granola-search.

Configuration: Set VAULT_GRANOLA_PATH in the skill's SKILL.md to the absolute path where the Obsidian plugin writes meeting files.

This skill searches through the markdown files created by the Obsidian plugin. It uses a 3-step progressive filtering approach against the synced files' YAML frontmatter and body content:

  1. Folder tags — filter by person names, projects, or categories (e.g., "Chat with Alex", "Project Alpha").
  2. Title — narrow by meeting title keywords.
  3. Body content — search for topics and keywords in the summary text.

Each step narrows the result set. Steps are skipped when no matching filter is given, and natural language queries like "meetings with Alex about automation" are parsed across all three dimensions.


3. Granola Transcript Skill

Located in skills/granola-extractor. A Claude Code skill invocable with /granola-transcript.

Configuration: Set VAULT_GRANOLA_PATH in the skill's SKILL.md to the absolute path where the Obsidian plugin writes meeting files.

The Obsidian plugin only syncs AI summaries — it does not include the full verbatim transcript. This skill extracts that missing content directly from Granola's local cache (auto-detected, supports cache-v3.json and cache-v4.json) and displays it in the conversation.

Workflow

  1. Search — finds a meeting by partial title match in the synced markdown files at VAULT_GRANOLA_PATH.
  2. Extract — reads the granola_id from the matched file's frontmatter, then uses the GranolaExtractor Python script to pull the full transcript from Granola's cache.
  3. Display — prints the complete transcript with speaker labels in the conversation.

Standalone Python Usage

The GranolaExtractor class can also be used directly:

from scripts.granola_extractor import GranolaExtractor

extractor = GranolaExtractor()
transcript = extractor.get_transcript('your-granola-id')

About

This repository contains a collection of automation tools designed to integrate Granola with Obsidian.

Resources

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors