CLI for the Granola public API.
This CLI is optimized for both humans and coding agents:
- official Granola API only
- local synced cache for fast repeated queries
- human-readable default output
--json/--ndjson/--fullfor structured agent use- installable agent skills
Requires Node 20.18.1+.
npm install -g @doist/granola-cliInstall skills for your coding agent:
granola skill install claude-code
granola skill install codex
granola skill install cursor
granola skill install gemini
granola skill install pi
granola skill install universalSkills are installed to ~/<agent-dir>/skills/granola-cli/SKILL.md.
The universal agent is compatible with agents that read from ~/.agents/.
granola skill list
granola skill uninstall <agent>First remove any installed skills:
granola skill uninstall <agent>Then uninstall the CLI:
npm uninstall -g @doist/granola-cligit clone https://github.com/Doist/granola-cli.git
cd granola-cli
npm install
npm run build
npm linkCreate a personal API key in the Granola desktop app:
- Open
Settings → API - Create a key
- Run
granola auth login - Paste the key when prompted
API key resolution order:
GRANOLA_API_KEY- system credential manager / keychain
~/.config/granola-cli/config.json
By default, granola auth login stores the key in the system credential manager, with fallback to the config file when secure storage is unavailable.
Useful commands:
granola auth status
granola auth logoutThe CLI maintains a local cache under:
~/.cache/granola-cli/state.json~/.cache/granola-cli/notes/*.json
list, folders, search, and show will run an incremental sync first unless you pass --no-sync.
A full sync is also triggered automatically on first use and periodically after that.
Date-only filters such as --after 2026-04-01 use your local timezone's day boundaries.
You can sync explicitly:
granola sync
granola sync --full
granola sync --jsongranola list
granola list --limit 10
granola list --person "Alice"
granola list --folder "Leadership"
granola list --after 2026-04-01 --before 2026-04-30
granola list --json
granola list --ndjson --fullFolder information is derived from each note's folder_membership metadata in the cached note payloads.
granola folders
granola folders --person "Alice"
granola folders --after 2026-04-01
granola folders --json
granola folders --ndjsongranola search "roadmap"
granola search "roadmap hiring"
granola search "pricing" --person "Alice"
granola search "pricing" --folder "Leadership"
granola search "pricing" --after 2026-04-01
granola search "pricing" --json
granola search "pricing" --ndjson --fullSearch results explain why each note matched (title, people, folders, summary, transcript).
granola show <note-id>
granola show <note-id> --transcript
granola show <note-id> --json
granola show <note-id> --json --fullDefault output is human-readable.
Structured output options:
--json— pretty JSON--ndjson— newline-delimited JSON for list-like outputs--full— include richer fields in structured output
For coding agents, prefer --json or --ndjson.
granola update
granola update --check
granola update --channel
granola update switch --stable
granola update switch --pre-release
granola changelog
granola changelog -n 3The Granola public API is intentionally limited. This CLI works around some of those limitations locally, but not all of them.
- list notes
- get note details
- note summaries
- attendees
- transcripts
- folder membership on note detail payloads
- server-side full-text search
- documented server-side folder browsing endpoints
- server-side attendee filtering
- webhooks
- write/update/delete note APIs
Because of that:
- search is local-cache based
- folder browsing/filtering is local-cache based
- repeated queries are fast after sync
Personal API keys require a Granola Business or Enterprise workspace.
npm install
npm run dev
npm run type-check
npm run lint:check
npm run format:check
npm test
npm run build
npm run sync:skill