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.
Connect Granola via its official API for automatic meeting sync and transcripts.
$ npx skills add davekilleen/Dex --skill granola-setup -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install davekilleen/Dex granola-setup --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "granola-setup" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/granola-setup into .claude/skills/granola-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "granola-setup", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/davekilleen/Dex/tree/main/.agents/skills/granola-setupType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add davekilleen/Dex --skill granola-setup -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install davekilleen/Dex granola-setup --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/granola-setup .agents/skills/granola-setup && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "granola-setup" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/granola-setup into .agents/skills/granola-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "granola-setup", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davekilleen/Dex --skill granola-setup -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install davekilleen/Dex granola-setup --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/granola-setup .cursor/skills/granola-setup && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "granola-setup" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/granola-setup into .cursor/skills/granola-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "granola-setup", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/davekilleen/Dex.git --path .agents/skills/granola-setup--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add davekilleen/Dex --skill granola-setup -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install davekilleen/Dex granola-setup --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/granola-setup .gemini/skills/granola-setup && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "granola-setup" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/granola-setup into .gemini/skills/granola-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "granola-setup", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install davekilleen/Dex granola-setupInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add davekilleen/Dex --skill granola-setup -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/granola-setup .github/skills/granola-setup && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "granola-setup" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/granola-setup into .github/skills/granola-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "granola-setup", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davekilleen/Dex --skill granola-setup -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install davekilleen/Dex granola-setup --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/granola-setup .opencode/skills/granola-setup && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "granola-setup" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/granola-setup into .opencode/skills/granola-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "granola-setup", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
granola-setupConnect 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. 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.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d0ffc6b. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
public-api.granola.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GRANOLA_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
ate. The API key is stored locally in a `.env` file at your vault root — it is **gitignored and never committed**. Onlythe user to open, create, or hand-edit `.env` or any other file. They only ever paste their key into the chat — Dex doe- If absent, load the vault root `.env` file (at `VAULT_ROOT`) and parse a `GRANOLA_API_KEY=...` line from it.1. Locate the vault root `.env` file (`VAULT_ROOT/.env`). Create it if it doesn't exist.file owner-only: `chmod 600 "$VAULT_ROOT/.env"`. Run this every time — it also tightens a pre-existing `.env` that was l4. Confirm `.env` is gitignored (it is by convention — never commit it).LA_API_KEY # value lives in VAULT_ROOT/.env, never hereThe key lives solely in the gitignored `.env`._KEY` first; if absent, load `VAULT_ROOT/.env` and parse `GRANOLA_API_KEY=...` from it.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.
The full file from davekilleen/Dex at commit d0ffc6b, republished under its MIT licence (© davekilleen). 1,243 words, ~3,187 tokens.
.claude/skills/granola-setup/SKILL.md (or your agent's skills folder).<!-- Generated from `.claude/skills/granola-setup/SKILL.md` by `scripts/generate-agents-skills.py`. Do not edit. -->
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.
Once connected, Dex can:
Read (via the official Granola API):
Skill Enhancements:
/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) surfaces your last Granola note and summary with each attendee/week-review) includes meeting counts and topics from GranolaNew Capabilities:
00-Inbox/Meetings/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.
/granola-setup/integrate-mcp if Granola is mentionedThroughout this flow, Dex performs every file action for the user. Never ask the user to open, create, or hand-edit
.envor any other file. They only ever paste their key into the chat — Dex does the rest.
System/integrations/config.yaml for a granola section.GRANOLA_API_KEY is already configured:process.env.GRANOLA_API_KEY..env file (at VAULT_ROOT) and parse a GRANOLA_API_KEY=... line from it.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]/granola-setup again once they do. Stop here.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.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.
grn_.... If it clearly doesn't (e.g. they pasted something else), ask them to re-copy it from Granola's API settings.Store it (Dex does this — not the user):
.env file (VAULT_ROOT/.env). Create it if it doesn't exist.GRANOLA_API_KEY=<pasted key> in that file.GRANOLA_API_KEY= line already exists, replace it; otherwise append it.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..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:
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.
Write to System/integrations/config.yaml — update (or add) the granola section. Preserve all other integration configs.
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: trueNever 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.
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.These rules apply wherever Dex reads Granola data. The skill agent must follow them exactly so every Granola-aware workflow behaves consistently.
GRANOLA_API_KEY. Read process.env.GRANOLA_API_KEY first; if absent, load VAULT_ROOT/.env and parse GRANOLA_API_KEY=... from it.Granola not connected — run /granola-setup to add your Granola API key (requires a Granola Business plan).Authorization: Bearer header.https://public-api.granola.aiAuthorization: Bearer <GRANOLA_API_KEY>GET /v1/notescreated_after, created_before, updated_after (ISO date/datetime), folder_id, cursor (string), page_size (int 1..30, default 10).{ "notes": [ { "id", "object", "title": string|null, "owner": {name,email}, "created_at", "updated_at" } ], "hasMore": boolean, "cursor": string|null }.cursor until hasMore is false.GET /v1/notes/{note_id}?include=transcriptweb_url, calendar_event, attendees, folder_membership, summary_text, summary_markdown, and transcript (array of {speaker, text, start_time, end_time} or null).The key was rejected. Either:
Re-run /granola-setup to paste a new key.
The key works but Dex sees no notes. Check:
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.)
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.
If the user runs /granola-setup when already configured:
System/integrations/config.yaml.grn_... key; Dex updates VAULT_ROOT/.env.If the user wants to disconnect:
System/integrations/config.yaml:granola:
enabled: falseGRANOLA_API_KEY=... line in VAULT_ROOT/.env for them./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
Just SKILL.md in .agents/skills/granola-setup of davekilleen/Dex.
Open the folder on GitHubat commit d0ffc6b
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Granola Setup this skilldavekilleen/Dex | 494 | — | ~3.2k | Automated safety check: Notes | MIT | |
| Meeting Notesoutline/outline | 41k | — | ~551 | Automated safety check: Pass | Custom licence | |
| Management Talkthananon/9arm-skills | 3.2k | — | ~3.2k | Automated safety check: Pass | None | |
| Challenge Baseline ModelAgibotTech/genie_sim | 1.4k | — | ~2.4k | Automated safety check: Pass | Custom licence | |
| Handwriting Stand Uplimin112/min-skill | 454 | — | ~2.5k | Automated safety check: Pass | None | |
| Daily Journalravila4/claude-adhd-skills | 158 | — | ~2.5k | Automated safety check: Pass | MIT |
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.
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…
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…
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…
ravila4/claude-adhd-skills
Draft, organize, or update development journal entries. An agent skill from ravila4/claude-adhd-skills.
ArtemXTech/claude-code-obsidian-starter
Query and sync Granola meetings to Obsidian vault. An agent skill from ArtemXTech/claude-code-obsidian-starter.
davekilleen/Dex
This skill should be used when working with DSPy.rb, a Ruby framework for building type-safe, composable LLM applications.
davekilleen/Dex
Adopt a full published Heydex profile by handle ('set me up like @davekilleen').
davekilleen/Dex
Package one workflow — how you use Dex for a specific job — into a shareable DexDiff methodology doc.
davekilleen/Dex
Expert guidance for creating, writing, and refining Claude Code Skills.
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…
davekilleen/Dex
This skill should be used when writing Ruby and Rails code in DHH's distinctive 37signals style.
Categories
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.
Granola Setup fits situations like: the user says connect Granola; my meetings arent syncing; set up meeting notes.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.