---
title: Granola (meeting notes)
---

# Granola (meeting notes)

## What it is

Experimental, in-development integration that brings your **Granola meeting
notes** into Omniscio: a browseable list of recent meetings, a
read-only transcript viewer, an inbox row when a new meeting is generated, and a
one-click "Use as context" action that hands a meeting's summary + transcript to
a new Claude session.

Granola is a meeting-notes app. Omniscio reads (read-only) the user's meetings through
Granola's official public REST API — it never edits Granola.

## Where to find it

### How to turn it on

1. Settings → Lab → enable **Granola meetings** (the master toggle; hidden until
   you flip it because the feature is still in development).
2. A **Granola** tab appears in the sidebar. Open it and click **Set up Granola**
   (or the header **gear**, which carries a status dot), then paste a Granola API
   key (create one in the Granola desktop app → Settings) and click **Save**.
3. Optionally enable **Granola meetings in Inbox** (Lab) to get an inbox row when
   a new meeting is generated.

## How it behaves

### What you can do

- **Browse meetings** — the panel lists recent meetings (title, date, a short
  summary), newest first, with cursor-based "Load more" pagination. Only meetings
  that already have a generated AI summary appear (still-processing meetings are
  absent — that is Granola's behaviour, not a bug).
- **Read a transcript** — selecting a meeting opens a drawer showing the summary
  plus the full transcript as speaker-labelled segments, read-only. No external
  images are loaded.
- **Use as context** — from a meeting, "Use as context" copies a well-formed
  context block (title + date + summary + transcript) to the clipboard with a
  toast, so you can paste it into a new Claude session. **It never spawns or runs
  a session itself** — the cost-safety guarantee is absolute.
- **Inbox rows** — when "Granola meetings in Inbox" is on, each newly-created
  meeting surfaces as one self-clearing amber inbox row titled
  `Granola · <title> (<date>)`. Dismissing one snoozes it; it returns only if the
  meeting changes.

## For agents

### How it works (for maintainers)

- **Gate**: `src/shared/unreleased-features.ts` (id `granola`, `settingKey`
  `granolaEnabled`, env `AMC_SHOW_GRANOLA`). Default hidden; flip `status` to
  `'shipped'` to release. Never read the flag raw — route through
  `isUnreleasedFeatureVisible[InRenderer]`.
- **Auth**: one flat `AppSettings` field `granolaApiKey`, in BOTH
  `ENCRYPTED_APP_SETTINGS_KEYS` (encrypted at rest) and
  `CLI_SETTINGS_SENSITIVE_KEYS` (stripped from CLI/IPC reads). The key never
  crosses IPC back to the renderer.
- **Client**: `src/main/services/granola/granola-client.ts` — a single
  `granolaFetch` chokepoint with an SSRF guard (`assertSafeGranolaOrigin`: https
  only, host must equal `public-api.granola.ai`), Bearer auth, and
  `humanizeGranolaError` (401/403 → invalid key, 429 → rate limit). Read-only:
  `listMeetings`, `getMeetingDetail`, `testConnection`.
- **IPC**: `granola:auth-status`, `granola:test-connection`,
  `granola:list-meetings`, `granola:meeting-detail` (+ the `inbox-granola:*`
  source). Handlers in `src/main/ipc/granola-handlers.ts`; channels in
  `src/shared/ipc-channels/granola.ts`.
- **UI**: `src/renderer/src/features/granola-meetings/` — `GranolaMeetingsView`
  (list), `GranolaTranscriptDrawer` (transcript viewer + Use-as-context), and the
  `granola-meetings-store` (stale-guarded list + detail).
- **Inbox**: `granola-inbox` source — the `granola-inbox-poller` wholesale-
  replaces the `granola_inbox_snapshots` cache each tick and pushes
  `INBOX_GRANOLA_UPDATED` when the row set or any meeting's `created_at` changed.

See the contract `.claude/memory/contracts/granola-contract.md` for the
load-bearing invariants and the tests that lock them.

## Related

[Fathom](fathom-mcp.md) does the same job for Fathom.ai recordings, and [Google Meet](google-meet.md) covers Meet conference records and transcripts.
