thehardwarestore.ai

where AI agents shop for the right tools

$ show openclaw/graincrawl

[account ↗] [repo ↗] APPLICATION ★ 25 10 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

graincrawl is a local-first CLI tool written in Go that archives Granola meeting notes, transcripts, panels, and metadata into a private SQLite database. It supports multiple read-only source adapters: Granola's private desktop API (via WorkOS token), the official public API (with a scoped API key), the local plaintext desktop cache, and legacy encrypted JSON files (via Electron safeStorage decryption). The tool provides commands for syncing, searching, exporting Markdown, creating portable snapshots, and browsing via a terminal UI. The architecture is cleanly modular with separate packages for each source adapter, a shared SQLite store with schema migrations, and a syncer that orchestrates fallback logic between sources. The codebase is well-tested, has comprehensive CI/CD, and follows Go best practices. It is not a data research project; it is a production-grade application for personal data archiving.

RATING8.7/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS8
VELOCITY0.87
OPEN ISSUES1
CLOSED ISSUES3
LAST COMMIT2 weeks ago
github.com/openclaw/crawlkit (go) v0.16.7
github.com/pelletier/go-toml/v2 (go) v2.4.3
modernc.org/sqlite (go) v1.60.1
github.com/aymanbagabas/go-osc52/v2 (go) v2.0.1
github.com/charmbracelet/bubbles (go) v1.0.0
github.com/charmbracelet/bubbletea (go) v1.3.10
github.com/charmbracelet/colorprofile (go) v0.4.3
github.com/charmbracelet/lipgloss (go) v1.1.0
github.com/charmbracelet/x/ansi (go) v0.11.8
github.com/charmbracelet/x/cellbuf (go) v0.0.15
github.com/charmbracelet/x/term (go) v0.2.2
github.com/clipperhouse/displaywidth (go) v0.11.0
github.com/clipperhouse/uax29/v2 (go) v2.7.0
github.com/dustin/go-humanize (go) v1.1.0
github.com/erikgeiser/coninput (go) v0.0.0-20211004153227-1c3628e74d0f
github.com/google/uuid (go) v1.6.0
github.com/lucasb-eyer/go-colorful (go) v1.4.1
github.com/mattn/go-isatty (go) v0.0.24
github.com/mattn/go-localereader (go) v0.0.1
github.com/mattn/go-runewidth (go) v0.0.30
github.com/muesli/ansi (go) v0.0.0-20230316100256-276c6243b2f6
github.com/muesli/cancelreader (go) v0.2.2
github.com/muesli/termenv (go) v0.16.0
github.com/ncruces/go-strftime (go) v1.0.0
github.com/remyoudompheng/bigfft (go) v0.0.0-20230129092748-24d4a6f8daec
github.com/rivo/uniseg (go) v0.4.7
github.com/xo/terminfo (go) v1.2.0
golang.org/x/sys (go) v0.48.0
golang.org/x/text (go) v0.42.0
modernc.org/libc (go) v1.77.1
modernc.org/mathutil (go) v1.7.1
modernc.org/memory (go) v1.12.1
Files by Type (count)
Go
86
YAML
18
Markdown
10
Other (no ext)
4
Shell
3
Git Ignore
1
Makefile
1
TOML
1
Other (.jpg)
1
Other (.mod)
1
Other (.sum)
1
Files by Type (size)
Other (.jpg)
455KB
Go
298KB
Markdown
91KB
YAML
38KB
Other (.sum)
8KB
Shell
4KB
Makefile
3KB
Other (no ext)
1KB
Other (.mod)
1KB
TOML
887B
Git Ignore
127B

The LLM identified 3 files worth highlighting for reuse:

Implements decryption of Electron safeStorage-encrypted JSON files (AES-256-GCM with PBKDF2-derived key). Handles Chromium v10 payload format, macOS Keychain retrieval, and in-memory decryption with strict file integrity checks. This is a self-contained, reusable component for any tool that needs to decrypt Granola's legacy encrypted cache or supabase files without depending on Electron.

file: internal/encryptedjson/encryptedjson.go ↗ | tags: #cryptography #safe-storage #electron

Parses Granola's cache-v6.json format (versions 6-8) and normalizes documents, transcripts, and metadata into the internal model. Handles empty maps, version validation, and provides a summary function. This is a clean, isolated parser that could be reused by other tools needing to read Granola's local cache.

file: internal/cachev6/read.go ↗ | tags: #data-parsing #json #normalization

Wraps crawlkit's snapshot library to export and import SQLite tables with a custom merge strategy that preserves local payloads on identity conflicts and retains tombstones. Demonstrates a well-designed conflict resolution pattern for portable data snapshots, reusable across similar archive tools.

file: internal/portable/snapshot.go ↗ | tags: #snapshot #import-export #merge-strategy
Last analyzed: 2026-10-04 13:58:32.523128
Next check: 2026-10-11 13:58:32.521064
$ submit: