Omniscio documentation
Browse all documentation
  1. Getting Started13
  2. Sessions & Agents115
  3. Inbox & Notifications59
  4. Projects & Tasks95
  5. Automation & Scheduling75
  6. Knowledge & Memory26
  7. AI Features60
  8. Integrations100
  9. Plugins & Marketplace33
  10. Cloud & Teams56
  11. Settings & Customization58
  12. Account & Billing28
  13. Troubleshooting84
  14. CLI & API Reference22
  15. Legal & Policies4
  16. Uncategorised22

Granola (meeting notes)

An in-development integration that brings Granola meeting notes into Omniscio: a browsable list of recent meetings, a read-only transcript viewer, an inbox row when a new meeting appears, and one click to hand a meeting to a new session as context.

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 does the same job for Fathom.ai recordings, and Google Meet covers Meet conference records and transcripts.

Last verified 2026-09-23