Graincrawl
Search and inspect local Granola meeting notes, transcripts, and panels. This skill is language-agnostic — use whichever language the user prefers.
When to Use
Use when:
- Searching local Granola notes or transcripts
- Checking archive freshness or sync status
- Retrieving specific notes, transcripts, or panels by ID
- Running read-only SQL counts on the local archive
Don't use when:
- User needs live meeting recording (not archive data)
- User wants to edit or modify Granola data
- No local Granola archive exists
Step 0: Check Local Archive
Always start with local data. Check freshness before answering:
graincrawl doctor --json
graincrawl status --json
Report archive status: total notes, date range, source coverage.
Step 1: Search and Query
Use bounded read-only queries:
graincrawl search "query"
graincrawl notes --json
graincrawl note get <id>
graincrawl transcripts get <id>
graincrawl panels get <id>
graincrawl --json sql "select count(*) as notes from notes;"
Report absolute date spans, note titles, source gaps, and transcript/panel availability.
SQL queries are read-only. Never run INSERT, UPDATE, DELETE, or DDL commands.
Step 2: Sync (Explicit User Consent Required)
Sync operations contact external sources. Always ask the user before syncing:
"The archive appears stale. Would you like me to sync from a source?"
Only sync after explicit user confirmation:
graincrawl sync --source private-api
graincrawl sync --source desktop-cache
Never auto-sync. Sync only when:
- Data is stale AND
- User explicitly approves
Step 3: Encrypted Sources
Before debugging encrypted source issues, run explicit unlock/secrets checks:
graincrawl secrets check --json
Do not surprise-prompt Keychain. If secrets are needed, inform the user first and ask for approval before any credential access.
Safety Rules
- Read-only first: Prefer local read-only queries over sync
- Explicit consent for sync: Never sync without user approval
- No destructive SQL: SELECT only — no INSERT/UPDATE/DELETE/DDL
- No surprise credential access: Warn user before any Keychain/secrets interaction
- Bounded reads: Use limits on search results to avoid excessive output
- Report gaps: Always note source coverage gaps and missing data
Quick Reference
| Situation | Action |
|---|---|
| Check archive status | graincrawl doctor --json + status --json |
| Search notes | graincrawl search "query" |
| Get specific note | graincrawl note get <id> |
| Get transcript | graincrawl transcripts get <id> |
| Get panel | graincrawl panels get <id> |
| Count notes | graincrawl --json sql "select count(*) as notes from notes;" |
| Archive stale | Ask user → sync only if approved |
| Encrypted source | Check secrets explicitly, warn user before Keychain |
Changelog
- 2.0.0 — Fixed: proper description, narrow triggers, language-agnostic, explicit consent for sync, read-only SQL enforcement, no surprise credential access.
- 1.0.0 — Initial version. Granola archive: search, sync freshness, notes, transcripts, panels, SQL counts.
