Live captions Β· translation Β· speaker recognition Β· a markdown second-brain β running entirely on your Mac.
Hark listens to your microphone and your meeting's system audio, transcribes it on-device with WhisperKit, labels who spoke with FluidAudio diarization, and writes clean markdown notes into a vault folder you own and control.
No cloud speech-to-text. No account. No telemetry. No background sync.
Important
Your meeting content never leaves your Mac unless you explicitly invoke an action that sends it somewhere. Transcription, speaker recognition, and storage are 100% on-device. The two sensitive features β keeping audio and remembering voices β are off until you turn them on. See Your data & privacy below.
- π§ Live captions while you record β your mic and the meeting's system audio, mixed and transcribed in near real-time. Tap your meeting audio even while listening on Bluetooth headphones, without forcing the room to hear it.
- π Translation β caption languages you don't speak (quality modes in progress).
- π£οΈ Speaker labels β after you stop recording, an accurate offline pass labels each line ("Speaker 1", "Speaker 2", β¦). Name them once; with Remember speakers on, Hark recognizes those voices automatically in future meetings.
- π A markdown vault β every meeting is a plain
.mdfile with front-matter, transcript, and bookmarks. Yours to grep, link, back up, and own forever. - π Bookmarks β mark a moment mid-meeting and jump back to it later.
Privacy and trust are the product. Hark is built so that lawful, private use is possible β everything stays on your machine, and the sensitive bits are opt-in.
Hark keeps three kinds of data, and you control each one:
| What | Why it exists | Stored? | Leaves your Mac? |
|---|---|---|---|
| π Transcript (markdown) | your meeting notes β the product | β always, in your vault | only if you sync your vault |
| π΅ Audio recording | re-listen / verify-by-ear review | β off by default β opt-in | β off by default |
𧬠Voiceprints (.speakers/) |
recognize known voices across meetings | β off by default β opt-in | β off by default |
| Location | Contents |
|---|---|
~/Documents/vault/hark (configurable) |
Your transcripts. Audio + voiceprints only if you enable them. Hark never auto-deletes or silently rewrites this folder, and every change goes through git so your history is recoverable. |
~/Library/Application Support/Hark/ |
Model cache + preferences. No transcripts, no audio, no personal content. |
~/Library/Logs/Hark/ |
Local-only logs. Never uploaded. |
The two sensitive features are off until you turn them on, and you're asked to choose during onboarding:
- π΅ Keep audio β save the meeting's audio so you can re-listen later. Off by default.
- 𧬠Remember speakers β when you name a speaker after a meeting, store a voiceprint (a mathematical fingerprint of their voice) so Hark can auto-recognize them next time. Off by default.
Change them any time in Settings β Privacy, which shows exactly what's stored and where.
Audio recordings and voiceprints are excluded from your vault's git history (.gitignored),
so they never travel through a git remote. If you keep your vault in a folder-syncing service
(iCloud Drive, Dropbox, β¦), remember those copy whole folders β so if you've enabled
audio/voiceprints and want them to stay on this Mac only, exclude them there. Settings β Privacy
spells this out.
Warning
A note on consent β this is not legal advice. Recording conversations and storing voiceprints may require the consent of the other participants under your local laws β you are responsible for obtaining it. Hark keeps everything on your Mac, and keeps these features off by default, to support that.
Full rationale: ADR-0027 β Privacy & data-control model.
- No cloud speech-to-text. Transcription is 100% on-device.
- No telemetry, analytics, or content-exfiltrating crash reporters.
- No auto-join of Zoom / Teams / Meet, and no calendar integration.
- macOS only β no Windows, Linux, iOS, or Android.
These are intentional, locked decisions β see the ADRs for the reasoning.
Diarizing a mixed, compressed meeting stream live (everyone blended into one system-audio track) isn't reliably solvable on-device today β even the accurate offline pass struggles on that audio. So speaker labels appear after you stop recording, where they're accurate, rather than showing confidently-wrong labels live. See ADR-0025.
βββββββββββββββββββββββββββ ws://127.0.0.1 (loopback only) ββββββββββββββββββββββββ
β harkd (Swift daemon) β βββββββββββββββββββββββββββββββββββββββββββββΊ β Electron + Angular β
β β β front-end β
β mic ββ β β β
β ββ mixer β VAD β WhisperKit β segments βββΊ (over the socket) βββΊ β live captions, tray, β
β sys ββ β β settings, vault view β
β β β β
β on stop: FluidAudio β β β
β diarization + enrollmentβ β β
ββββββββββββ¬ββββββββββββββββ ββββββββββββββββββββββββ
β writes
βΌ
~/Documents/vault/hark/*.md
A Swift sidecar daemon (harkd) does capture + ASR + diarization and exposes a
loopback-only WebSocket. The Electron + Angular front-end connects over ws://127.0.0.1.
The daemon binds only to localhost, writes its port to app-data, and never opens an outbound
socket. Full design rationale: meetingmind-handoff.md.
Pre-v1: there's no released binary yet. These are the development build steps. Apple Silicon
- macOS 14.4+ required.
Engine (harkd Swift daemon):
cd engine
swift build -c release # builds harkd + the hark-* CLIs
swift test # run the engine test suiteSystem-audio capture needs a signed bundle for TCC permission attribution β see
engine/scripts/sign-dev-bundle.sh and the dev loop in
STATUS.md.
Front-end (Electron + Angular):
cd ui
npm install
npm run dev # Angular dev server + Electron, against a running harkd
npm run pack # unpacked app bundle (electron-builder --dir)
npm run dist # signed/packaged .app (electron-builder --mac)hark/
βββ engine/ Swift daemon β WhisperKit ASR + FluidAudio diarization + WS server
β βββ scripts/ dev signing helper
βββ ui/ Electron + Angular 21 front-end
βββ docs/
β βββ decisions/ Architecture Decision Records (the "why")
β βββ BACKLOG.md deferred-work ledger
βββ CLAUDE.md operating manual / project conventions
βββ STATUS.md current-state snapshot (start here when resuming)
βββ meetingmind-handoff.md full design rationale
- STATUS.md β what's done, what's next, the dev loop. Start here.
- docs/decisions/ β every non-trivial decision, with reasoning.
- meetingmind-handoff.md β the original design rationale.
- docs/BACKLOG.md β deliberately deferred work.
MIT Β© 2026 Dang Anh Tuan