granola-sync

granola-sync is a skill for Claude Code from tonydzi/second-brain-starter-kit. It costs 76 tokens per session (1,201 once invoked), scanned A, original, MIT.

An importer that pulls new or changed Granola meeting notes—summaries, transcripts, participants, and a calendar match—into an Obsidian vault. Granola is a meeting-recording and notes app, while Obsidian is a local system for organising notes.

In plain words
What is it for?
Use it to backfill or refresh meetings from Granola and store their notes and transcripts in the vault.
Why use it?
It keeps meeting records up to date and can be safely run again without creating duplicate notes.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin. Also seen: mentions Claude Code.

Part of the second-brain-skills plugin — 57 skills shipped together

Good fit Use it to backfill or refresh meetings from Granola and store their notes and transcripts in the vault.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/tonydzi/second-brain-starter-kit/granola-sync
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add tonydzi/second-brain-starter-kit --skill granola-sync
Clone the repo
git clone --depth 1 https://github.com/tonydzi/second-brain-starter-kit

Made for: Claude Code.

Or install second-brain-skills, the plugin that ships this one along with the rest of its 57 skills.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for granola-sync

README.md
[![agentmods](https://agentmods.dev/badge/skills/tonydzi/second-brain-starter-kit/granola-sync.svg)](https://agentmods.dev/skills/tonydzi/second-brain-starter-kit/granola-sync)
Your own site
<a href="https://agentmods.dev/skills/tonydzi/second-brain-starter-kit/granola-sync"><img src="https://agentmods.dev/badge/skills/tonydzi/second-brain-starter-kit/granola-sync.svg" alt="Measured on agentmods" height="20"></a>
Per session 76 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,201 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00076 $0.01201
Opus 5 $0.00038 $0.00600
Sonnet 5 $0.00015 $0.00240
Haiku 4.5 $0.00008 $0.00120

Measured 7d ago against content hash 4de8a56b324b, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-07, from the pricing page.

Security

Grade A, and why

granola-sync scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/granola-sync/SKILL.md · 52 lines

How it starts

The opening of the file, as written. The whole thing — 52 lines — stays where its author put it; the contents beside it link to each section on GitHub.

OBJECTIVE: Incrementally pull fresh meetings/calls from Granola into the vault (summary + full transcript + participants + a calendar match), on demand. Idempotent: the script downloads only what is new or changed (state.json: note id → updated_at).

CONTEXT:

  • Transport: the official Granola public API https://public-api.granola.ai/v1 (List Notes / Get Note ?include=transcript; page_size <= 30; 5 rps). Key: %WORKDIR%\secrets\granola.env (account [email protected], Workspace2, scopes personal+public, created 2026-07-02).
  • ⛔ The MCP transport is NO LONGER used for syncing (browser OAuth, it dies after ~10 days) — only for interactive questions, and only if re-authorized.
  • Engine (all the logic lives there, this skill is a thin wrapper): $IMPORTS_ROOT/granola/granola_pull.py. The same script does both backfill and increment.
  • Home for notes: $OBSIDIAN_VAULT/04-Projects/granola-meetings/ (auto_generated: true — never hand-edit, they get overwritten). Raw JSON: _imports\granola\raw\. Nightly task log: _imports\granola\pull.log.
  • ⚠️ Granola does NOT start recording by itself: it records only when a human opens the note or clicks the notification. "The app is running" is not "it is recording".

STEPS:

  1. BACKUP FIRST ([[vault-backup-rule]]): python $IMPORTS_ROOT/vault_backup.py BEFORE running anything.
  2. Run it: python $IMPORTS_ROOT/granola/granola_pull.py (options: --dry to count without writing, --limit N to cap).
  3. Read the stdout counters: DONE new=X updated=Y errors=Z state_total=N. errors>0 → look into it; usually network or 429 (the script retries by itself).
  4. If new>0 — report the list of fresh meetings (titles/dates from the state or the new files).
  5. Distill (if new>0): python $IMPORTS_ROOT/granola/call_distill.py — it breaks each new call into Commitments/Facts/Objections/Alpha with quotes → 04-Projects\granola-meetings\_distilled\ + commitments.jsonl. Counters: DONE distilled=M commitments=C errors=Z. (The nightly twin is the "Granola Call Distill" task at 03:50; it also eats the Fireflies raw files.)
  6. The RAG reindex picks it up overnight ([[reindex-routine]]); after the FIRST big backfill, run python $IMPORTS_ROOT/brain_embed_update.py manually. ⚠️ _distilled is not in the curated index yet (04-Projects is the evidence layer) — closed by task RUSL-1 (layer: essence).

CONSTRAINTS:

  • Windows cp1252: do not print non-ASCII to stdout (the script is already ASCII-only).
  • INCREMENTAL ONLY — never delete state.json (it would re-download everything).
  • Provenance: origin: mixed, authored_by: hybrid — NOT #anton-original (someone else's speech).
  • Tier-2: nothing goes outside; API reads and vault writes only.
  • A 401/403 from the API means the key was revoked: create a new one in the Granola desktop app (Settings → Connectors → Personal API keys, scopes Personal+Public) and update granola.env. I can do this myself through computer-use (verified 2026-07-02).

OUTPUT: the new/updated/errors counters + the period; if empty, "no new meetings". Finish with an "In plain words" recap.

RELATION (do not duplicate): the Fireflies rail (auto-recording, real speaker names) = skill [[fireflies-sync]]; access and history = memory [[granola-mcp-integration]]; the architecture decision = the vault note decision-granola-extraction-official-api; the post-call follow-up SOP = memory [[call-followup-group-sop]] (a separate pipeline); the FAAA sync goes the other way (finished follow-ups out of Telegram).


About & contact

Built and battle-tested at Palo Alto AI Research Lab — a fleet of Claude Code machines running 24/7 as a second brain and synthetic cofounder. Every skill here survived real production use before publication.

Read the full file on GitHub · 52 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 7d ago First seen · 52 lines · 76 tokens per session scan A 4de8a56b324b

Subscribe to this mod's changes

granola-sync is a skill published in the GitHub repository tonydzi/second-brain-starter-kit (5 stars, last pushed 8d ago), licensed MIT. It adds 76 tokens to every session and 1,201 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

setup-vault-types

Use when configuring which document types a vault tracks: after installing ai-brain-starter, when a new kind of note appears (journals, books, meetings, clients, podcasts, travel, WhatsApp/Slack/iMessage exports), when extraction skips files because no extractor matches their type, or to add, list, or remove a custom…

mycelium-hq/ai-brain-starter · 114 tokens

ingest-health

Use when the user says /ingest-health, asks to import, sync, ingest, or load Apple Health / Apple Watch / HealthKit data, has a fresh export.zip from the iPhone Health app, a Simple Health Export CSV folder, or a Health Auto Export TCP live feed, or when health-mcp queries return empty because no data was ever…

mycelium-hq/ai-brain-starter · 107 tokens

superbrain-distill

Internal SuperBrain skill — run by the detached capture child to distill a session-event delta into routed Obsidian notes. Not for direct user invocation.

m3talux/superbrain · 36 tokens

query

Interactive knowledge assistant via Telegram. Can read, create, and modify documents. Destructive actions require user approval.

Yrzhe/pagefly · 24 tokens

ingest

A tool for adding a URL, file, text, or Inbox item to the LLM Wiki. It checks the material's purpose, preserves the original source, compiles a wiki page, updates indexes and logs, and reviews the result.

johnfkoo951/cmds-llm-wiki · 56 tokens

inbox

An inbox-management skill for scanning an LLM Wiki inbox, previewing pending files, choosing how to process them, and sending selected material through an import step.

johnfkoo951/cmds-llm-wiki · 43 tokens