A private desktop call recorder and notetaker for Windows. It captures microphone and system audio into separate channels, transcribes both in real time using local faster-whisper, and generates grounded meeting notes with verified decisions and action items through local Ollama. No audio or transcript data leaves the machine.
The Problem
Most call notetakers require cloud bots joining meetings or stream raw microphone audio to third-party endpoints. In enterprise consulting and private strategy sessions, sending internal audio through external transcription pipelines violates client confidentiality agreements. Furthermore, cloud summaries often invent action items or attribute statements to the wrong speaker.
Build Approach
Clembot Notes runs entirely on local hardware with four strict isolation layers:
- Dual-Channel In-Memory Capture: Microphone input and WASAPI loopback system audio run as independent streams through a producer-consumer thread queue. Capturing the remote participants directly from the Windows audio subsystem separates “Me” from “Them” deterministically without requiring neural diarization.
- Deterministic Acoustic De-Duplication: To handle speakerphones and open desk monitors where room microphones pick up speaker bleed, an audio energy gate and token-overlap filter drop echo segments falsely attributed to the microphone.
- Evidence Grounding Engine: Extracted decisions and tasks must cite specific segment identifiers in the transcript. Any claim without supporting evidence is quarantined into an unverified section rather than included in the final notes.
- Domain Lenses: A top-bar selector shapes summaries for specific call types, including Architecture reviews, 1-on-1 coaching, Client discovery, and General syncs.
Technical Decisions and Constraints
- Sub-1500 Line Budget: The entire Python source across capture, segmentation, transcription, grounding, and UI is capped strictly below 1,500 lines to enforce simplicity and maintainability.
- In-Process Network Guard: A custom audit hook intercepts socket connections and DNS resolution at the interpreter level, throwing permission errors on non-loopback calls.
- Whisper Decoder Conditioning: Domain keywords from project catalogs are fed into Whisper’s initial decoder prompt, improving recognition of technical terms like SQLite, WAL, and CertScroll with zero extra token cost.
- VRAM Lifecycle: Ollama model payloads include a two-minute keep-alive parameter, automatically unloading Gemma weights from GPU memory after summarization.
- Vault Auto-Sync: Saved calls are formatted as Obsidian markdown notes with wikilinks and task tags, and linked into today’s daily note.