https://github.com/iannellomarco/hindsight
Hindsight — private, local-first journal + meeting recording for macOS (Apple Silicon). GPL-3.0. Derived from MacParakeet.
https://github.com/iannellomarco/hindsight
journal local-first macos meeting-recording menubar privacy speech-to-text swift
Last synced: 25 days ago
JSON representation
Hindsight — private, local-first journal + meeting recording for macOS (Apple Silicon). GPL-3.0. Derived from MacParakeet.
- Host: GitHub
- URL: https://github.com/iannellomarco/hindsight
- Owner: iannellomarco
- License: other
- Created: 2026-05-30T15:13:53.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-05-31T09:06:00.000Z (about 1 month ago)
- Last Synced: 2026-05-31T09:10:29.803Z (about 1 month ago)
- Topics: journal, local-first, macos, meeting-recording, menubar, privacy, speech-to-text, swift
- Language: Swift
- Homepage: https://github.com/iannellomarco/hindsight
- Size: 43.3 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
Hindsight
A private, local-first second brain for your Mac.
It quietly captures your screen through the day, understands what you're working on,
and lets you recall anything you saw — all on your Mac.
---
## Your screen, turned into a searchable memory
Hindsight takes periodic screenshots of your displays, reads them on-device, and builds a private, searchable record of everything you work on — code, documents, research, designs, conversations. No cloud required.
- **Ask your journal in plain language** — *"What was that phone number I saw earlier?"* *"Which files was I editing this morning?"* *"What site had the pricing table?"* — answered with the exact **source frames** you can jump to.
- **Recall anything you saw** through three retrieval modes, all on-device:
- **By meaning** — semantic search matches ideas even when the words differ.
- **By exact text** — full-text keyword search with highlighted snippets.
- **By typed value** — phones, emails, URLs, files, issue refs extracted automatically.
- **Recurring threads** — spot the things you keep coming back to across days and weeks.
- **Activity timeline** — your day segmented into coherent activities with AI titles, plus **focus metrics**: deep-focus blocks, context switches, time per app.
- **Per-window understanding** — knows you were *"editing JournalService.swift · Swift"*, *"reading developer.apple.com"*, or the terminal commands you ran.
Everything — capture, OCR, entity extraction, embeddings, full-text index, activity segmentation, and metrics — runs **fully on-device** out of the box. Connect an AI provider (local or cloud) to unlock the conversational "ask your journal" experience.
## How a day flows
```
Screenshots (every ~2 min, all displays)
│
▼
On-device OCR (Apple Vision) ── nothing leaves your Mac
│
▼
Redaction gate ── secrets scrubbed before disk + before any model
│
├─▶ Entities (phones · emails · links · files · issue refs)
├─▶ Full-text index (FTS5) + semantic embeddings
├─▶ Window understanding (app, title, document, URL)
├─▶ Change detection (idle / minor / context switch)
│
▼
AI batch analysis (opt-in provider) ── running day narrative + activity timeline
│
▼
End-of-day review chat + a permanent, searchable journal
```
## Privacy by pipeline, not by prompt
Hindsight doesn't ask an AI to "be careful." It enforces privacy through deterministic, on-device gates:
- **Secrets never reach disk or any provider.** Before a screenshot row is written, credit cards, API keys, tokens, JWTs, private keys, SSNs, and OTPs are scrubbed by the on-device redaction gate. URLs have credential query params stripped. No raw OCR text is ever stored.
- **What's kept is kept deliberately.** Phones, emails, file names, document paths, and URLs (minus credentials) are preserved because they're exactly what you want to recall. The distinction between "secret" and "recall-worthy" is explicit.
- **Cloud is opt-in, per provider.** AI analysis is **off by default**. A local provider (Ollama, LM Studio) keeps everything on your machine. A BYOK cloud provider requires explicit, per-provider consent before any already-redacted text is sent.
- **Vision is a separate opt-in tier** — sending pixels to a model is never the default. An on-device VLM keeps images local.
- **No accounts, no tracking.** Telemetry never includes journal content and is inert by default.
See [ADR-024](spec/adr/024-journal-deep-understanding.md) for the full privacy model.
## Browse, search, and chat with your days
### Recall (⌕)
Open **Journal → Recall** to search across **all** your days.
- **Ask** (with a provider): type a question — *"what was that phone number?"* — and get an answer with tappable **[#1] [#2] …** source citations that jump to the exact screenshot frame.
- **Browse** (no provider needed): tap a chip — Phones · Emails · Links · Files · Issue Refs — or type a detail. Results are cards with **time · app · window** and a jump-to-frame.
Pick a provider in **Settings → AI Provider**: cloud (Anthropic, OpenAI, Gemini, OpenRouter) or local (Ollama, LM Studio). Local keeps everything on your Mac.
### Day Library
Browse past days as a date-grouped list. Each day opens into a detailed view with:
- The AI-generated day narrative and activity breakdown.
- Per-activity titles, time spans, and dominant app.
- **Focus metrics**: where your time went, how many context switches, longest deep-focus block.
- **Chat with this day** — ask follow-up questions scoped to a specific day's activity.
### End-of-day review
When you stop recording, Hindsight opens a chat panel where the AI presents observations about your day and asks clarifying questions. Your answers steer the final saved snapshot. It's a lightweight, private debrief.
## What Hindsight understands about each moment
For every captured frame, Hindsight builds structured context — all on-device:
| Signal | Source | Example |
|--------|--------|---------|
| Focused window title | Accessibility API | `"JournalService.swift — macparakeet-fork"` |
| Active document path | AX Document | `~/dev/hindsight/Sources/.../JournalService.swift` |
| Active URL | AX URL + browser BFS | `github.com/iannellomarco/hindsight` |
| App activity | Specialist extractors | `"editing Swift file"` / `"reading domain"` / `"ran: git push"` |
| Other visible windows | ScreenCaptureKit window roster | Up to 16 window titles |
| Scene classification | Vision framework | `"computer_screen"`, `"code"`, `"web_browser"` |
| Saliency region | Vision attention model | Where on screen you were looking |
## Second Brain graph
The **Second Brain** view renders your journal as an interactive graph: activities as nodes, connected by topic similarity, app transitions, and time proximity. Communities are detected automatically. Export to **Obsidian** or **GraphML** for external analysis.
## Settings
| Setting | Options | Default |
|---------|---------|---------|
| Screenshot interval | 30s / 1m / 2m / 5m / 10m | 2 min |
| Analysis interval | 15m / 30m / 60m | 30 min |
| Pause when idle | On/Off + threshold | Off |
| Keep screenshots | 7d / 30d / 90d / Forever | 30 days |
| Allow cloud AI to analyze your journal | On/Off | **Off** |
| AI vision descriptions | On/Off | **Off** |
| AI provider | Anthropic / OpenAI / Gemini / OpenRouter / Ollama / LM Studio | None |
---
## Also: Meeting Recording
Hindsight includes **local meeting recording** carried over from its MacParakeet roots: capture system audio + mic via ScreenCaptureKit, transcribe on-device with Parakeet (155× realtime, ~2.5% WER) or optional WhisperKit for multilingual STT, with live notes, transcript, and an Ask tab. Meetings recorded the same day are cross-referenced into that day's journal.
---
## Get it
**[Download the latest DMG](https://github.com/iannellomarco/hindsight/releases/latest)** → drag to `/Applications`.
First launch downloads the speech model (~6 GB, for meeting transcription). The Day Journal needs **Screen Recording** permission (requested in Settings or on first start). **Recall and the timeline work on-device with no provider.** For conversational "ask your journal," configure a provider in **Settings → AI Provider** and, for a cloud provider, flip on **Settings → Journal → Allow cloud AI to analyze your journal**.
Auto-updates via Sparkle from our [GitHub Pages appcast](https://iannellomarco.github.io/hindsight/appcast.xml) — EdDSA signed.
### Build from source
```bash
git clone https://github.com/iannellomarco/hindsight.git
cd hindsight
swift test
scripts/dev/run_app.sh
```
---
## Architecture
Curious how it works under the hood? Start with the **[Architecture Overview](docs/architecture/overview.md)**.
- **[Day Journal — Capture Pipeline](docs/architecture/day-journal-capture.md)** · screenshots, OCR, redaction, change detection
- **[Day Journal — Understanding Layer](docs/architecture/journal-understanding.md)** · window signal, app extractors, sessionizer, metrics
- **[Recall — Search & Ask](docs/architecture/recall.md)** · entities, FTS5, embeddings, retrieval-augmented generation
- **[Privacy Model](docs/architecture/privacy.md)** · redaction gate, cloud consent, vision tier
- **[Data Model](docs/architecture/data-model.md)** · schema, migrations, persistence
- **[Meeting Recording](docs/architecture/meeting-recording.md)** · system audio + mic capture, STT pipeline
Design decisions live in [`spec/adr/`](spec/adr/) — notably [ADR-023](spec/adr/023-day-journal-screenshot-second-brain.md) (Day Journal) and [ADR-024](spec/adr/024-journal-deep-understanding.md) (deep understanding + privacy).
## Built on MacParakeet
Hindsight is a GPL-3.0 derivative of [moona3k/macparakeet](https://github.com/moona3k/macparakeet) by Daniel Moon — the fast, private, local-first voice app for Mac. The meeting recording stack (audio capture, on-device STT, library) is carried over; **Day Journal, Recall, and the Second Brain are original to Hindsight**.
Several upstream features were removed and are **not** part of Hindsight: system-wide dictation, file transcription, YouTube transcription, and Transforms.
## License
GPL-3.0. Forked from [moona3k/macparakeet](https://github.com/moona3k/macparakeet).