Agent skill

Granola Setup

by davekilleen in davekilleen/Dex

Connect Granola via its official API for automatic meeting sync and transcripts.

MITAuto-check: notesProductivity & Automation

Install Granola Setup

skills CLI
$ npx skills add davekilleen/Dex --skill granola-setup -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install davekilleen/Dex granola-setup --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/granola-setup .claude/skills/granola-setup && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
granola-setup
GitHub stars
494
Token cost
~3.2k tokens
SKILL.md length
1,243 words
Files
1
Skills in repo
61
Repo updated
First seen
Licence
MIT

At a glance

Connect Granola via its official API for automatic meeting sync and transcripts.

  • Works in 7 steps: Check if Already Connected → Explain the New API-Based Sync → Walk Them Through Creating an API Key → …
  • The user says connect Granola
  • SKILL.md covers What This Enables, Privacy, When to Run and Setup Flow, plus 3 more sections
  • Calls curl; reaches public-api.granola.ai; needs GRANOLA_API_KEY

What it does

Granola Setup is an agent skill from davekilleen/Dex. Connect Granola via its official API for automatic meeting sync and transcripts. Use when the user says 'connect Granola', 'my meetings aren't syncing', 'set up meeting notes'. Not for Zoom recordings; use zoom-setup. Not for processing meetings already synced; use process-meetings.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Productivity & Automation, covering Meeting notes and agendas. The repository describes itself as: Your AI Chief of Staff — a personal operating system starter kit that adapts to your role. No coding required. The licence is MIT.

When your agent uses it

  • The user says connect Granola
  • My meetings arent syncing
  • Set up meeting notes

Example prompts

  • “connect Granola”
  • “my meetings aren”
  • “set up meeting notes”
  • “/granola-setup”

Requirements

  • A credential in GRANOLA_API_KEY

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Check if Already Connected
  2. Explain the New API-Based Sync
  3. Walk Them Through Creating an API Key
  4. Ask Them to Paste the Key
  5. Store and Verify the Key
  6. Save Configuration
  7. Confirm with Capability Cascade

What it can do on your machine

Read from SKILL.md and the folder at commit d0ffc6b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • public-api.granola.ai

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • GRANOLA_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Granola Setup loads about 3.2k tokens when it runs. Until then it costs about 75 tokens; SKILL.md has 1,243 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~75
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:57
    ate. The API key is stored locally in a `.env` file at your vault root — it is **gitignored and never committed**. Only
  • NoteMentions a .env fileSKILL.md:71
    the user to open, create, or hand-edit `.env` or any other file. They only ever paste their key into the chat — Dex doe
  • NoteMentions a .env fileSKILL.md:78
    - If absent, load the vault root `.env` file (at `VAULT_ROOT`) and parse a `GRANOLA_API_KEY=...` line from it.
  • NoteMentions a .env fileSKILL.md:137
    1. Locate the vault root `.env` file (`VAULT_ROOT/.env`). Create it if it doesn't exist.
  • NoteMentions a .env fileSKILL.md:140
    file owner-only: `chmod 600 "$VAULT_ROOT/.env"`. Run this every time — it also tightens a pre-existing `.env` that was l
  • NoteMentions a .env fileSKILL.md:141
    4. Confirm `.env` is gitignored (it is by convention — never commit it).
  • NoteMentions a .env fileSKILL.md:188
    LA_API_KEY   # value lives in VAULT_ROOT/.env, never here
  • NoteMentions a .env fileSKILL.md:195
    The key lives solely in the gitignored `.env`.
  • NoteMentions a .env fileSKILL.md:222
    _KEY` first; if absent, load `VAULT_ROOT/.env` and parse `GRANOLA_API_KEY=...` from it.
  • NoteMentions a .env fileSKILL.md:278
    w `grn_...` key; Dex updates `VAULT_ROOT/.env`.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from davekilleen/Dex at commit d0ffc6b, republished under its MIT licence (© davekilleen). 1,243 words, ~3,187 tokens.

Download SKILL.mdSave it as .claude/skills/granola-setup/SKILL.md (or your agent's skills folder).
name
granola-setup
description
Connect Granola via its official API for automatic meeting sync and transcripts. Use when the user says 'connect Granola', 'my meetings aren't syncing', 'set up meeting notes'. Not for Zoom recordings; use `zoom-setup`. Not for processing meetings already synced; use `process-meetings`.
integration.id
granola
integration.name
Granola
integration.auth
api_key
integration.category
meetings
integration.sync_direction
read
<!-- Generated from `.claude/skills/granola-setup/SKILL.md` by `scripts/generate-agents-skills.py`. Do not edit. -->

Granola Setup

Connect your Granola account to Dex so your meetings sync automatically. Dex uses Granola's official API to read your notes, summaries, attendees, and transcripts — then files them into 00-Inbox/Meetings/ ready for /process-meetings.

This integration needs a Granola Business (or Enterprise) plan, because API keys can only be created on those plans. Granola Basic / free accounts can't create an API key, so this setup won't work on them.

What This Enables

Once connected, Dex can:

Read (via the official Granola API):

  • List your Granola notes (title, owner, created/updated dates)
  • Fetch each note's summary, attendees, folder membership, and web link
  • Fetch full speaker-labelled transcripts per note

Skill Enhancements:

  • Process Meetings (/process-meetings) uses Granola as the primary meeting source — notes sync into 00-Inbox/Meetings/, then get turned into structured meeting notes (decisions, actions, key points)
  • Meeting Prep (/meeting-prep) surfaces your last Granola note and summary with each attendee
  • Week Review (/week-review) includes meeting counts and topics from Granola

New Capabilities:

  • Automatic Meeting Sync: new Granola notes are pulled into 00-Inbox/Meetings/
  • Transcript Access: full transcripts are available when processing a meeting

Privacy

Dex reads your Granola data through Granola's official API using a key you create. The API key is stored locally in a .env file at your vault root — it is gitignored and never committed. Only YOUR Granola account is accessible (the key is scoped to your login). Nothing is sent anywhere except Granola's own API.

When to Run

  • User types /granola-setup
  • User asks about connecting Granola
  • User wants automatic meeting sync or transcripts
  • During /integrate-mcp if Granola is mentioned
  • During onboarding if the user mentions Granola

Setup Flow

Throughout this flow, Dex performs every file action for the user. Never ask the user to open, create, or hand-edit .env or any other file. They only ever paste their key into the chat — Dex does the rest.

Step 1: Check if Already Connected
  1. Read System/integrations/config.yaml for a granola section.
  2. Check whether GRANOLA_API_KEY is already configured:
    • First check process.env.GRANOLA_API_KEY.
    • If absent, load the vault root .env file (at VAULT_ROOT) and parse a GRANOLA_API_KEY=... line from it.
  3. If a key is found, run the verification request from Step 5 silently.
    • If it succeeds, tell the user they're already connected and skip to Step 7 (Reconfiguration / what's enabled).
    • If it returns 401, the key is stale — continue to Step 2 to replace it.
  4. If no key is found, continue to Step 2.
Step 2: Explain the New API-Based Sync

Set expectations conversationally:

Granola sync now uses Granola's official API.

That means Dex reads your meetings the supported way — your notes, summaries,
attendees, and transcripts — straight from Granola.

One thing to know up front: creating an API key requires a **Granola Business
(or Enterprise) plan**. The Basic / free plan can't create API keys, so if
you're on Basic this won't work yet.

Are you on a Granola Business or Enterprise plan? [Yes / Not sure / I'm on Basic]
  • If "I'm on Basic": let them know kindly that they'd need to upgrade to a Granola Business plan to create an API key, and that they can run /granola-setup again once they do. Stop here.
  • If "Not sure": reassure them — the next step will tell them quickly (if there's no API option in Settings, they're not on a plan that supports it). Continue.
  • If "Yes": continue.
Step 3: Walk Them Through Creating an API Key

Guide them, step by step, in plain language:

Let's create your Granola API key:

1. Open **Granola** and go to **Settings**.
2. Find the **API** section (the Granola API settings page).
3. Click **Create API key** (or "New API key").
4. Copy the key — it starts with `grn_`.

If there's no API section in Settings, your plan doesn't support API keys yet
(that's the Business-plan requirement). Otherwise, grab that `grn_...` key.
Step 4: Ask Them to Paste the Key
Paste your Granola API key here and I'll save it for you securely.
(It starts with grn_ — I'll store it locally and never commit it.)

Wait for the user to paste the key.

  • Do a light sanity check: it should look like grn_.... If it clearly doesn't (e.g. they pasted something else), ask them to re-copy it from Granola's API settings.
  • Never ask the user to put the key in a file themselves — they only paste it into the chat.
Step 5: Store and Verify the Key

Store it (Dex does this — not the user):

  1. Locate the vault root .env file (VAULT_ROOT/.env). Create it if it doesn't exist.
  2. Write or update the line GRANOLA_API_KEY=<pasted key> in that file.
    • If a GRANOLA_API_KEY= line already exists, replace it; otherwise append it.
  3. Make the file owner-only: chmod 600 "$VAULT_ROOT/.env". Run this every time — it also tightens a pre-existing .env that was left readable by other users of the machine.
  4. Confirm .env is gitignored (it is by convention — never commit it).

Verify it with a real request:

Make a single test call against the official API:

bash
curl -s -o /dev/null -w "%{http_code}" \
  -H "Authorization: Bearer $GRANOLA_API_KEY" \
  "https://public-api.granola.ai/v1/notes?page_size=1"

(Equivalently: GET https://public-api.granola.ai/v1/notes?page_size=1 with header Authorization: Bearer <key>.)

  • On success (HTTP 200):

    Connected — I can see your Granola notes.

    Continue to Step 6.

  • On 401 Unauthorized:

    That key was rejected by Granola.
    
    Two common reasons:
    - the key was copied incompletely or has been revoked/expired, or
    - the account isn't on a Granola Business plan (only Business/Enterprise
      can create working API keys).
    
    Want to paste it again, or create a fresh key in Granola → Settings → API?

    Offer to retry (back to Step 4). Retry up to 2 times, then offer to come back later.

  • On HTTP 429 (rate limited): wait a short moment and retry the verification request once. The API has no documented limits, so stay gentle (one request at a time, single retry).

  • On other errors (network/5xx): report briefly and offer to retry.

Show full SKILL.md (522 more words)Show less
Step 6: Save Configuration

Write to System/integrations/config.yaml — update (or add) the granola section. Preserve all other integration configs.

yaml
granola:
  enabled: true
  configured_at: YYYY-MM-DD
  auth_type: api_key
  api_base_url: https://public-api.granola.ai
  key_env_var: GRANOLA_API_KEY   # value lives in VAULT_ROOT/.env, never here
  account: user@example.com        # from the owner.email in the test response
  features:
    meeting_sync: true
    transcripts: true

Never write the API key value itself into config.yaml or any committed file — only the env var name. The key lives solely in the gitignored .env.

Step 7: Confirm with Capability Cascade
Granola is connected!

Here's what just got enabled:

- **Automatic meeting sync** — your Granola notes flow into 00-Inbox/Meetings/,
  ready to be turned into structured notes.
- **Transcripts** — full speaker-labelled transcripts are available per meeting.
- **Meeting Prep** (/meeting-prep) — surfaces your last Granola note and summary
  with each attendee.
- **Week Review** (/week-review) — includes meeting counts and topics from Granola.

Next step: run **/process-meetings** to pull in and organise your recent meetings.

You can re-run /granola-setup anytime to rotate your key or disconnect.

Shared Conventions (data source rules)

These rules apply wherever Dex reads Granola data. The skill agent must follow them exactly so every Granola-aware workflow behaves consistently.

  • API key env var: GRANOLA_API_KEY. Read process.env.GRANOLA_API_KEY first; if absent, load VAULT_ROOT/.env and parse GRANOLA_API_KEY=... from it.
  • No key configured → no error. Log this friendly one-liner and exit cleanly (exit 0 / return empty):
    Granola not connected — run /granola-setup to add your Granola API key (requires a Granola Business plan).
  • Official API is the only data source. Do not read local cache files or use spoofed client headers or unofficial crypto helpers. Use only the documented endpoints below with the Authorization: Bearer header.
API reference (for Granola-aware skills)
  • Base URL: https://public-api.granola.ai
  • Auth header: Authorization: Bearer <GRANOLA_API_KEY>
  • List: GET /v1/notes
    • Query params: created_after, created_before, updated_after (ISO date/datetime), folder_id, cursor (string), page_size (int 1..30, default 10).
    • Response: { "notes": [ { "id", "object", "title": string|null, "owner": {name,email}, "created_at", "updated_at" } ], "hasMore": boolean, "cursor": string|null }.
    • List items contain no summary, attendees, or transcript — fetch detail per note.
    • Paginate by passing the returned cursor until hasMore is false.
  • Detail: GET /v1/notes/{note_id}?include=transcript
    • Response includes web_url, calendar_event, attendees, folder_membership, summary_text, summary_markdown, and transcript (array of {speaker, text, start_time, end_time} or null).
  • Rate limits: not documented. Be gentle — sequential detail fetches, and retry once on HTTP 429 with a short backoff.

Troubleshooting

401 Unauthorized

The key was rejected. Either:

  • the key is wrong, incomplete, revoked, or expired — create a fresh one in Granola → Settings → API and paste it again, or
  • the account isn't on a Granola Business / Enterprise plan — only those plans can create working API keys. Basic / free can't.

Re-run /granola-setup to paste a new key.

No Notes Returned (empty list, 200 OK)

The key works but Dex sees no notes. Check:

  • you're querying the right Granola workspace/account (the key is scoped to the account that created it), and
  • that account actually has recorded notes, and
  • the plan still supports API access.
"Granola not connected" keeps appearing

That means no GRANOLA_API_KEY is configured. Run /granola-setup to add one. (Dex never errors out when the key is missing — it just nudges you to set it up.)

Rate Limiting (429)

Granola doesn't publish rate limits, so Dex fetches gently. If you hit a 429, Dex waits briefly and retries once. Persistent 429s are rare — wait a minute and try again.


Reconfiguration

If the user runs /granola-setup when already configured:

  1. Verify the current key with the Step 5 test request.
  2. Show the current config from System/integrations/config.yaml.
  3. Offer options:
    • Rotate the key — paste a new grn_... key; Dex updates VAULT_ROOT/.env.
    • Re-test the connection.
    • Disconnect Granola.
Disconnect Flow

If the user wants to disconnect:

  1. Update System/integrations/config.yaml:
    yaml
    granola:
      enabled: false
  2. Remove (or comment out) the GRANOLA_API_KEY=... line in VAULT_ROOT/.env for them.
  3. Confirm: "Granola is disconnected. Meeting sync and transcripts will pause. Run /granola-setup anytime to reconnect."

© davekilleen, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/granola-setup of davekilleen/Dex.

Open the folder on GitHubat commit d0ffc6b

Compare with similar skills

Granola Setup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Granola Setup compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Granola Setup this skilldavekilleen/Dex494—~3.2kAutomated safety check: NotesMIT
Meeting Notesoutline/outline41k—~551Automated safety check: PassCustom licence
Management Talkthananon/9arm-skills3.2k—~3.2kAutomated safety check: PassNone
Challenge Baseline ModelAgibotTech/genie_sim1.4k—~2.4kAutomated safety check: PassCustom licence
Handwriting Stand Uplimin112/min-skill454—~2.5kAutomated safety check: PassNone
Daily Journalravila4/claude-adhd-skills158—~2.5kAutomated safety check: PassMIT

Similar skills

  • Meeting Notes

    outline/outline

    Create meeting notes in Outline from a template; use when the user wants an agenda, notes, or a follow-up document for a meeting.

    41k GitHub stars~551 tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Management Talk

    thananon/9arm-skills

    Rewrite engineer-to-engineer content for engineering-org leadership (VPs, directors, PMs, release managers, execs in an engineering-savvy company) and shape it for the channel it is going to — JIRA…

    3.2k GitHub stars~3.2k tokensUpdated 3 mo ago
    Productivity & AutomationAuto-check passed
  • Challenge Baseline Model

    AgibotTech/genie_sim

    Provision and launch the Simulation Challenge baseline inference model end to end: clone the inference code from a given git repo/branch, download the checkpoints from ModelScope into the repo's…

    1.4k GitHub stars~2.4k tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check passed
  • Handwriting Stand Up

    limin112/min-skill

    Turn a screen recording of handwriting (or a photo of handwritten text) into a single-file HTML "continuation" — the recording plays, the ink lifts off the page as solid 3D letters, a short animated…

    454 GitHub stars~2.5k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Daily Journal

    ravila4/claude-adhd-skills

    Draft, organize, or update development journal entries. An agent skill from ravila4/claude-adhd-skills.

    158 GitHub stars~2.5k tokensUpdated 7 mo ago
    Productivity & AutomationAuto-check passed
  • Granola

    ArtemXTech/claude-code-obsidian-starter

    Query and sync Granola meetings to Obsidian vault. An agent skill from ArtemXTech/claude-code-obsidian-starter.

    225 GitHub stars~905 tokensUpdated 4 days ago
    Productivity & AutomationAuto-check passed

More from davekilleen/Dex

All 61 skills in this repo
  • Dspy Ruby

    davekilleen/Dex

    This skill should be used when working with DSPy.rb, a Ruby framework for building type-safe, composable LLM applications.

    494 GitHub starsUsed in 1 repo~3.9k tokens
    Auto-check passed
  • Diff Adopt Profile

    davekilleen/Dex

    Adopt a full published Heydex profile by handle ('set me up like @davekilleen').

    494 GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Diff Generate

    davekilleen/Dex

    Package one workflow — how you use Dex for a specific job — into a shareable DexDiff methodology doc.

    494 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Creating Agent Skills

    davekilleen/Dex

    Expert guidance for creating, writing, and refining Claude Code Skills.

    494 GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed
  • Feedback

    davekilleen/Dex

    Report a Dex bug to the Dex team with zero homework — Dex investigates locally, builds a privacy-safe report, shows it to you (or auto-sends if you've chosen that), and tracks the ticket until it's…

    494 GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Dhh Rails Style

    davekilleen/Dex

    This skill should be used when writing Ruby and Rails code in DHH's distinctive 37signals style.

    494 GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed

Questions about Granola Setup

What does Granola Setup do?

Connect Granola via its official API for automatic meeting sync and transcripts. Granola Setup is an agent skill from davekilleen/Dex. Connect Granola via its official API for automatic meeting sync and transcripts.

When should I use Granola Setup?

Granola Setup fits situations like: the user says connect Granola; my meetings arent syncing; set up meeting notes.

How do I install Granola Setup in Claude Code?

Run `npx skills add davekilleen/Dex --skill granola-setup -a claude-code`. Or copy the skill folder (.agents/skills/granola-setup in davekilleen/Dex) into .claude/skills/granola-setup in your project. Claude Code loads it when a task matches its description.

How do I install Granola Setup in Codex?

Run `npx skills add davekilleen/Dex --skill granola-setup -a codex`. Or copy the skill folder (.agents/skills/granola-setup in davekilleen/Dex) into .agents/skills/granola-setup in your project. Codex loads it when a task matches its description.

Can I use Granola Setup in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add davekilleen/Dex --skill granola-setup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/granola-setup, .gemini/skills/granola-setup, .github/skills/granola-setup and .opencode/skills/granola-setup in your project.

What does Granola Setup need to run?

Going by SKILL.md and its folder, Granola Setup needs the command-line tools its instructions call (curl) and credentials named GRANOLA_API_KEY. Our summary lists: A credential in GRANOLA_API_KEY.

Does Granola Setup access the network?

SKILL.md names 1 domain. In commands or code: public-api.granola.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Granola Setup safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Granola Setup use?

Granola Setup is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Granola Setup use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Granola Setup?

Skills that share tags, products or a category with Granola Setup: Meeting Notes (outline/outline, 41k stars), Management Talk (thananon/9arm-skills, 3.2k stars), Challenge Baseline Model (AgibotTech/genie_sim, 1.4k stars) and Handwriting Stand Up (limin112/min-skill, 454 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Granola Setup?

davekilleen (a GitHub user) maintains it in davekilleen/Dex, which has 494 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on October 9, 2026.

Source: davekilleen/Dex on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.