Eigenes Werkzeug · Voice-to-Text · 100% lokal

Eine Taste.
Und ich spreche.

Murmel ist mein selbst gebautes Wispr-Flow-Pendant für macOS: fn-Taste halten, sprechen, loslassen — der Text landet dort, wo der Cursor steht. Spracherkennung und KI-Politur laufen komplett lokal auf dem Mac. Kein Abo, keine Cloud, 0 €/Monat.

GitHub ansehen → Der Fluss ↓
Swift 6.2 · native macOS whisper.cpp · large-v3-turbo Ollama-Politur gebaut mit 8 Agents parallel
Murmel läuft: das Menüleisten-Panel über dem Terminal, in dem es gebaut wurde
// Murmel live auf dem Mac — Panel in der Menüleiste, darunter das Terminal, in dem es entstand
Die Geschichte

Aus Ärger wurde eine App.

Heute hat es mich wirklich geärgert, dass ich für ein Diktier-Tool nochmal 15 € im Monat zahlen soll. Und dann kam der Gedanke: Ich habe ein Mikrofon. Ich habe Claude Code. Ich habe im Prinzip alles, was ich brauche.

Was ich brauche, muss ich auch selbst bauen können. Also habe ich angefangen — und fünf Stunden später lief eine fertige, funktionierende App. Komplett nativ auf macOS, kein Abo, kein fremder Server, mein Audio bleibt auf meinem Rechner.

Das ist für mich der Kern von Vibe Coding: nicht warten, bis es jemand baut. Klar werden, was man will — und es bauen.

„Was ich brauche, muss ich auch selbst bauen können.“
// 15 €/Monat gespart · 5 Stunden investiert · 1 eigene App
01 Was es ist

Sprechen statt tippen — überall auf dem Mac.

Ich wollte im Terminal per Stimme schreiben, ohne ein Abo-Tool, dem mein Audio in die Cloud wandert. Also habe ich es selbst gebaut: eine kleine Menüleisten-App, die zuhört, solange ich eine Taste halte.

Das Gesprochene wird lokal von whisper.cpp transkribiert, optional von einem lokalen LLM (Ollama) aufgeräumt und per ⌘V ins aktive Fenster eingefügt — Terminal, Browser, Mail, egal.

Kein Byte Audio verlässt den Rechner. Standard ist „Roh": genau das gesprochene Wort, kein Modell, das dazwischenfunkt.

murmel · gesprochen → eingefügt
# ein Take, Deutsch + Englisch gemischt
you> „…sowohl prompten als auch colloquial, English as well, you should get everything.“
exakt so eingefügt — Code-Switching, Zeichensetzung, alles korrekt
02 Der Fluss

Vier Stationen, ein Knopfdruck — klick dich durch.

Von der gehaltenen Taste bis zum Text im Fenster. Tippe oder hover über eine Station.

murmel · station-detail
# Station 01 — Aufnahme, solange die Taste hält
hotkey> fn gedrückt → AVAudioEngine nimmt auf (16 kHz Mono)
globaler Push-to-talk via CGEventTap
# Station 02 — lokale Spracherkennung
whisper> large-v3-turbo --lang de
offline auf Apple Silicon, Deutsch + Englisch gemischt
# Station 03 — optionale KI-Politur
ollama> qwen2.5:3b # strikt: nur korrigieren, nie antworten
Stil-Modi (E-Mail / Code / Prompt) · Fallback auf Rohtext
# Station 04 — ins aktive Fenster
insert> ⌘V → Terminal · Browser · Mail · überall
Zwischenablage + synthetischer Tastendruck
03 Was es kann

Nicht nur Diktat — ein Werkzeug.

Über das reine Sprechen hinaus: alles, was ein Wispr-Flow-Workflow braucht — selbst gebaut, lokal.

push-to-talk

Taste halten

fn (oder rechte ⌥) halten = Aufnahme, loslassen = einfügen. Wie ein Walkie-Talkie.

privacy

100% lokal

Whisper läuft auf dem Mac. Kein Byte Audio geht ins Netz, keine laufenden Kosten.

stil-modi

Stil-Modi

Roh · E-Mail · Code-Kommentar · Claude-Prompt — die lokale Politur passt Ton & Form an.

wörterbuch

Eigenes Wörterbuch

Fachbegriffe und Namen korrekt geschrieben — pflegbar über eine eigene UI im Fenster.

„n acht n“ → n8n
verlauf

Diktat-Verlauf

Alle Diktate durchsuchbar (SQLite), per Klick erneut einfügen.

sprachbefehle

Sprachbefehle

„neue Zeile“, „Punkt“, „abbrechen“ werden als Aktion erkannt — nicht wörtlich getippt.

live · streaming

Live-Vorschau

Beim Sprechen läuft der Text fortlaufend in einem schwebenden Overlay mit — schnelles base-Modell, finale Einfügung akkurat mit large-v3-turbo.

übersetzer

Diktat-Übersetzer

Modi „→ Englisch“ / „→ Deutsch“: Deutsch sprechen, übersetzt eingefügt — lokal via Ollama/Qwen.

DE → EN, lokal
befehl

Befehl (Zwischenablage)

Text kopieren, Anweisung sprechen („mach förmlich“, „als Bullet-Liste“) — der kopierte Text wird umgewandelt.

assistent

Assistent & Zusammenfassen

Frage sprechen → Antwort eingefügt; oder langes Diktat → knappe Zusammenfassung. Mini-LLM direkt am Cursor.

auto-wörterbuch

KI-Wörterbuch-Vorschläge

Ollama findet aus dem Verlauf falsch gehörte Fachbegriffe und schlägt Korrektur-Paare vor — ein Klick übernimmt.

aus Verlauf gelernt
„Okay, das wird jetzt ein längerer Test für meine neue Murmel-App … sowohl prompten als auch colloquial, English as well, you should get everything.“
// ein Take · Deutsch + Englisch gemischt · 1:1 eingefügt
Neu · RAG

Frag deine eigenen Daten — per Stimme.

Der größte Schritt: Murmel beantwortet nicht nur aus dem Allgemeinwissen des Modells, sondern aus meinen eigenen Dateien und Diktaten. Mitten im Schreiben sage ich z. B. „recherchiere meine LinkedIn-Strategie und füg sie ein" — und das Ergebnis landet am Cursor. Komplett lokal.

was ist das

RAG, einfach erklärt

Retrieval-Augmented Generation = „erst nachschlagen, dann antworten". Statt nur aus dem Training zu raten, holt Murmel die passenden Stellen aus deinen Daten und gibt sie dem Modell als Kontext mit.

deine quellen

Ordner + Diktat-Verlauf

Du wählst Ordner (Notizen, Code, Docs). Murmel indexiert sie lokal — inkrementell, nur Geändertes neu. Der Diktat-Verlauf ist auch dabei.

100% lokal

Kein Byte in die Cloud

Embeddings via nomic-embed-text (lokal in Ollama), Vektoren in SQLite, Antwort via Qwen. Privat, offline, 0 € — auch deine Daten bleiben bei dir.

so läuft eine RAG-Anfrage
# im Text, fn halten und sprechen:
you> „recherchiere meine LinkedIn-Strategie und füg sie ein"
  1. Frage → Embedding (nomic-embed-text, lokal)
  2. ähnlichste Stellen aus deinen Daten finden  (Cosine-Similarity)
  3. Qwen formuliert MIT diesem Kontext
 Ergebnis am Cursor eingefügt · Quellen im Overlay sichtbar
Auf Apple gebaut

Kein Electron. Echtes macOS.

Keine Cross-Platform-Abkürzung, keine Web-View in einem App-Mantel. Murmel ist eine native Swift-App und spricht direkt mit den Frameworks von macOS — jede Schicht selbst gesetzt. Genau das macht sie schnell, leichtgewichtig und systemtief.

ui

SwiftUI · MenuBarExtra

Lebt als Icon in der Menüleiste — kein Dock, kein Fenster im Weg. Reines SwiftUI.

audio

AVFoundation

AVAudioEngine nimmt das Mikrofon in Echtzeit ab und wandelt auf 16 kHz Mono — genau, was Whisper braucht.

hotkey

CoreGraphics · CGEventTap

Ein systemweiter Event-Tap erkennt das Halten der fn-Taste — überall, nicht nur in einem Fenster.

rechte

Accessibility API

AXIsProcessTrusted prüft das Bedienungshilfen-Recht, das Hotkey & Einfügen erst ermöglicht.

einfügen

AppKit · NSPasteboard

Ergebnis in die Zwischenablage, dann ein synthetisches ⌘V via CGEvent ins aktive Fenster.

daten

SQLite3

Der Diktat-Verlauf liegt lokal in einer SQLite-Datenbank — durchsuchbar, persistent.

autostart

ServiceManagement

SMAppService registriert Murmel sauber als Login-Item — startet still beim Anmelden mit.

build

SPM · codesign

Gebaut mit dem Swift Package Manager, signiert mit eigener stabiler Identität — kein Xcode-Projekt nötig.

Der KI-Stack — lokal

Zwei lokale Engines. Null Cloud.

Alles läuft auf dem Mac. Hier ist genau, was unter der Haube arbeitet — und warum ich es so gewählt habe.

spracherkennung · ~1,5 GB

whisper.cpp · large-v3-turbo

Was: OpenAIs Whisper-Spracherkennung, als hochoptimiertes C++ (whisper.cpp) lokal auf Apple Silicon. Modell large-v3-turbo (~1,5 GB) in ~/.murmel/models.
Warum: exzellentes Deutsch, schnell, offline — erkennt sogar Deutsch + Englisch im selben Satz.

llm-runtime

Ollama

Was: ein schlanker lokaler Server, der Open-Source-Sprachmodelle auf dem eigenen Rechner ausführt — quasi „Docker für LLMs". Per Homebrew installiert, lauscht lokal auf 127.0.0.1:11434.
Warum: macht ein lokales LLM über eine einfache HTTP-API nutzbar — kein API-Key, keine Cloud, keine Kosten.

politur-modell · ~1,9 GB

Qwen2.5 : 3B

Was: ein kompaktes 3-Milliarden-Parameter-Modell (Alibaba, Apache-2.0), ~1,9 GB, läuft in Ollama.
Warum: klein genug für sofortige lokale Politur, stark genug für „ähm raus, Satzzeichen rein" — gezähmt mit striktem System-Prompt und Halluzinations-Schutz.

Unterm Strich: einmalig ~3,4 GB Modelle lokal laden — danach läuft alles offline, dauerhaft kostenlos, und kein Wort verlässt den Rechner.

04 Wie es gebaut wurde

8 Agents parallel — und zwei Bugs systematisch gejagt.

Erst Gerüst und feste Protokoll-Verträge, dann acht KI-Agents gleichzeitig (je eine Komponente). Bauen ist das eine — zum Laufen bringen das andere. Zwei echte Bugs, per Logging an jeder Pipeline-Stufe gefunden:

bug 01 · signatur ↔ rechte

Recht verschwand bei jedem Build

macOS bindet das Bedienungshilfen-Recht an die Code-Signatur. Ad-hoc-Signaturen ändern bei jedem Build den Hash → Recht „stirbt“. Fix: stabile selbst-signierte Identität.

bug 02 · halluzination

Die KI antwortete statt zu tippen

Das kleine Politur-Modell kippte die Wörterbuch-Liste in den Text und antwortete wie ein Chatbot. Fix: strikter System-Prompt + Halluzinations-Schutz + Standard „Roh“.

methode

Messen, nicht raten

Ein Datei-Log an jeder Stufe (Hotkey → Aufnahme → Whisper → Politur → Einfügen) zeigte präzise, wo es bricht. Root Cause vor Fix.

05 Was es beweist

Ich nutze KI nicht nur — ich baue mir eigene Software.

Eine native macOS-App ohne Code-Hintergrund, end-to-end: Audio, Spracherkennung, lokales LLM, globaler Hotkey, Datenbank, Code-Signierung. Geplant, orchestriert, debuggt und ausgeliefert — als Open-Source, das andere klonen und selbst bauen können.

Native Engineering

macOS in der Tiefe

Swift, CGEventTap-Hotkey, AVAudioEngine, SQLite, Subprozess-Orchestrierung, eigene Code-Signatur.

Systematisches Debugging

Root Cause vor Fix

Signatur↔TCC und LLM-Halluzination sauber isoliert — per Evidenz an jeder Stufe, nicht durch Raten.

Eigenes Werkzeug

Teilbar gebaut

MIT-Lizenz, clone & build, Setup-Scripts — die Sorte Tool, die ein Solutions Engineer auch beim Kunden baut.

~1.400
Zeilen Swift
8
Agents · parallel gebaut
0 €
laufende Kosten · 100% lokal
Murmel fertig: Panel in der Menüleiste über der Session, in der es gebaut wurde
// Fertig — oben Murmel in der Menüleiste (Live-Vorschau, Modi, Verlauf), darunter das Terminal, in dem es Stück für Stück entstand