Record any online meeting and get a private, AI-generated transcript and summary — entirely on your own Mac. No cloud, no accounts, no API keys, no per-minute fees.
Cognito Call is a privacy-first meeting assistant for macOS. A Chrome extension records your meeting (screen + both sides of the audio), and a native macOS app turns that recording into a speaker-labeled transcript and AI meeting notes — running Whisper, speaker diarization, and a local LLM 100% offline on Apple Silicon. Nothing ever leaves your machine.
- The Problem
- The Solution
- Installation
- How the Extension Works
- How the App Works
- Configuration & Management
Every meeting holds useful information — decisions, action items, who-said-what — but capturing it is a hassle, and every existing option asks you to give something up:
- Cloud note-takers (Otter, Fireflies, bots that join your call) stream your private conversations to someone else's servers, often behind a subscription or per-minute pricing, and require accounts and consent gymnastics.
- Manual note-taking pulls your attention out of the conversation, and you still miss things.
- DIY transcription means juggling ffmpeg, Whisper, diarization models, and glue code yourself.
For anything confidential — client calls, interviews, internal strategy — sending your audio to a third party is a non-starter.
Cognito Call does all of it locally:
- 🎙️ Captures both sides of the call — your microphone and the remote participants — as separate, clean audio streams, plus the full screen video.
- 🔒 100% offline & private — transcription, speaker separation, and summarization all run on your Mac via Apple's MLX. No internet round-trip, no accounts, no tokens, no recurring cost.
- 🧠 Turns recordings into intelligence — a speaker-labeled, sentence-level transcript, an executive summary, and action items, generated by a local LLM.
- ⚡ Works with your meetings — Google Meet, Zoom, Teams, Webex, or any tab with audio. On Google Meet it can even reuse the live captions for instant results.
- 🎬 Karaoke playback — replay the recording with each word highlighted in sync, and click any word to jump to that moment.
You own the recordings, the transcripts, and the models — everything sits in plain folders on your disk.
Cognito Call is two pieces that work together:
- A Chrome Extension — records the meeting into a folder in
~/Downloads/CognitoCall/. - A macOS Desktop App — reads that folder and produces the transcript + AI notes.
Install both. Requirements: macOS on Apple Silicon (M-series) and Google Chrome. The app installer handles everything else (Python environment, models, and ffmpeg).
- Download the latest cognito-call-extension.zip. (macOS Safari auto-expands
.zipfiles into a folder on download.) - If it's still a
.zip, double-click to extract it. - Open Chrome and go to
chrome://extensions. - Turn on Developer mode (top-right toggle).
- Click Load unpacked (top-left) and select the extracted
cognito-call-extensionfolder (the one that containsmanifest.jsonat its root). - Click the Cognito Call icon in the toolbar and grant microphone permission when prompted.
📖 Want to know exactly what it captures and how? See How the Extension Works.
Run one of the commands below in Terminal to install the app to /Applications/Cognito Call.app. Pick the model tier that matches your Mac:
⚡ Lite — for MacBook Air / 8–16 GB RAM (default, fast)
Lightweight models (whisper-base + gemma-2b). Fast and comfortable on an Air; good-enough quality for most calls.
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/install.sh | bash💎 Pro — for 24 GB+ Macs / MacBook Pro (best quality)
The best models that run comfortably on 24 GB (whisper-large-v3-turbo + Qwen2.5-14B-Instruct-4bit). Much more accurate transcripts and reliable AI notes — at the cost of more RAM, a slower run, and a ~10 GB model download on first use.
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/install.sh | bash -s -- --proPrefer to build from source?
git clone https://github.com/HelloPrincePal/cognito-call.git cd cognito-call ./build-local.sh # add --pro for the larger models
macOS Gatekeeper: on first launch, if macOS shows a security warning, right-click
Cognito Call.appin Finder and choose Open.
📖 Curious about the offline AI pipeline? See How the App Works. You can switch tiers or uninstall anytime — see Configuration & Management.
The extension is the recorder. It's a Manifest V3 Chrome extension that leans on an Offscreen Document to keep recording reliably even when Chrome throttles background pages.
What it captures. When you hit record on a meeting tab, it grabs two independent audio sources and the video, and saves three separate files so the app can process each cleanly:
| File | Contents |
|---|---|
video.webm |
Full screen/tab video with mixed audio |
tab.opus |
Remote participants' audio only (via tabCapture) |
mic.opus |
Your microphone only (via getUserMedia) |
Keeping your mic and the remote audio separate is what lets the app label "you" vs. the other speakers accurately.
How it saves. Each session becomes a timestamped folder in ~/Downloads/CognitoCall/ (e.g. 2026-08-01_14-30-00/). To move gigabytes of video without hitting Chrome's ~64 MB messaging limit, the offscreen document hands the service worker a lightweight blob: URL and lets chrome.downloads pull the data straight from memory.
Seekable files. Chrome's MediaRecorder writes live streams with no duration header or keyframe index, so players can't scrub them. A built-in pure-JS remuxer (webm-fixer.js) rewrites each file on stop to inject a proper Duration and a Cues seek index — so your recordings scrub correctly in QuickTime, VLC, and Chrome.
Google Meet fast-path. On meet.google.com, a content script watches the live-caption panel and saves the caption text + speaker names to captions.json. When present, the app uses these directly and skips the heavy Whisper pass on the remote audio — near-instant transcripts.
Safe by default. You keep hearing the meeting normally (the captured tab audio is piped to your speakers), a red REC badge sits on the toolbar the whole time, and recordings auto-stop and save if you close the meeting tab or hit a 3-hour cap — so a forgotten recording can't run forever.
The desktop app is the brain. It's a native Tauri (Rust) + React app that plays your recordings and runs the offline AI pipeline. When you open it, it shows a gallery of your sessions and automatically starts transcribing the newest one that doesn't have notes yet (press Esc anytime to cancel).
Under the hood it launches a Python sidecar (shown as cognito-assistant in Activity Monitor) that runs, in order:
- Transcription —
mlx-whispertranscribesmic.opusandtab.opusseparately with millisecond word timestamps. Calls longer than 30 minutes are sliced into 15-minute windows so memory stays flat (~constant RAM) even on 3-hour recordings. - Speaker diarization —
simple-diarizerruns spectral clustering on the remote audio to split it intoSpeaker 1,Speaker 2, … (skipped entirely when Google Meet captions are available). - Stitching — your mic track (labeled with your name) is merged with the diarized remote speakers and sorted chronologically into a single timeline. Silence-hallucination artifacts are filtered out here.
- AI notes — a local LLM runs a map-reduce pass over the transcript to clean fragments into full sentences, attribute speakers from context, and produce an executive summary and action items.
The results are written back into the same session folder:
~/Downloads/CognitoCall/2026-08-01_14-30-00/
├── video.webm # screen/tab video
├── mic.opus # your microphone audio
├── tab.opus # remote participants audio
├── transcript.json # speaker-labeled, sentence-level transcript
├── metadata.json # inferred meeting title
└── summary.json # executive summary + action items
Back in the app, the Karaoke player highlights each word as the video plays and lets you click any word to jump to that timestamp; the transcript and notes are exportable as JSON or plain text.
⚠️ Don't rename or move the session folders inside~/Downloads/CognitoCall/. The app relies on this exact layout for playback sync and word-level alignment.
Everything is driven by a few one-line commands. Your recordings in ~/Downloads/CognitoCall/ are never touched by any of them.
Re-run the installer with or without --pro at any time — it rewrites ~/.cognitocall/models.json and, to save space, removes the other tier's model weights so you never store both at once.
# Lite (whisper-base + gemma-2b) — fast, Air-friendly
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/install.sh | bash
# Pro (whisper-large-v3-turbo + Qwen2.5-14B) — best quality, 24 GB+
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/install.sh | bash -s -- --pro# Desktop app (keeps all recordings & models):
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/install.sh | bash
# If you built from source:
git pull && ./build-local.shExtension: re-download the latest zip, extract it over your existing folder, then click 🔄 Reload on the card at chrome://extensions.
# Remove everything (app + models + Python env + settings):
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/uninstall.sh | bash -s -- --all
# Remove only the app, keep the models:
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/uninstall.sh | bash -s -- --app-only
# Remove only the downloaded AI models (keep the app):
curl -fsSL https://raw.githubusercontent.com/HelloPrincePal/cognito-call/main/uninstall.sh | bash -s -- --models-only| What | Location | Size |
|---|---|---|
| Your recordings & transcripts | ~/Downloads/CognitoCall/ |
grows with use |
| App environment (Python venv, ffmpeg, config) | ~/.cognitocall/ |
~small |
| AI model weights | ~/.cache/huggingface/hub/ |
Lite ≈ 1.5 GB · Pro ≈ 10 GB (active tier only) |
Models download on first use, not during install, and only your active tier is kept on disk.
On first open, the app asks for your name (e.g. Ram). It's used to label your microphone track and is passed to the local LLM as context so it can accurately attribute questions, answers, and turns during summarization.
- Desktop UI: Tauri v2 (Rust) + React 18 + TypeScript
- Recorder: Chrome MV3 extension — MediaRecorder API + Offscreen Document
- Speech-to-Text:
mlx-whisper— 4-bit Whisper on Apple Silicon (base→large-v3-turboby tier) - Diarization:
simple-diarizer— spectral clustering over PyTorch speaker embeddings - Local LLM:
mlx-lm— map-reduce pipeline (gemma-2-2b→Qwen2.5-14Bby tier) - Fast-path captions: Google Meet live-caption extraction via
MutationObserver
Built to prove that high-quality meeting intelligence doesn't require the cloud. Designed, implemented, and verified with Claude Code.