Murmel begann als mein selbst gebautes Wispr-Flow-Pendant für macOS: fn-Taste halten, sprechen, loslassen — der Text landet dort, wo der Cursor steht. Inzwischen ist mehr daraus geworden: „Hey Murmel" öffnet einen sprechenden Assistenten, der lokal denkt, meine eigenen Daten kennt und echte Werkzeuge bedient. Der Kern bleibt auf dem Mac, kein Abo — online geht es nur auf Ansage.
Swift 6.2 · 11.569 Zeilen · native macOSwhisper.cpp · large-v3-turboOllama · qwen3:8b106 Commits · seit 21.06.
// 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.“
Murmel ist nicht als großes Projekt geplant worden. Es ist gewachsen — jede Scheibe gebaut, installiert, benutzt, dann die nächste. Das ist der komplette Flow:
21.06. · Tag 1
v0.1 in fünf Stunden
Aus dem Ärger über 15 €/Monat Abo wird eine App: fn halten → whisper.cpp → Politur → ⌘V. Acht KI-Agents bauen parallel, zwei echte Bugs werden systematisch gejagt.
22.06. · Streaming
Live-Vorschau & Feinschliff
Ein residenter whisper-server macht die Vorschau ~3× schneller — der Text läuft schon beim Sprechen mit. Dazu: Stil-Automatik je App, eigenes Wörterbuch, In-App-Ersteinrichtung.
23.06. · Stimme
Murmel spricht
Gesprächs-Modus auf der rechten ⌥-Taste: Frage sprechen, Antwort hören — mit lokaler Stimme. Notion wird als erste Wissens-Quelle angebunden.
24.06. · Wissen
Murmel liest meine Daten
Der lokale Wissens-Index füllt sich: 1.975 Dateien, 58.009 Text-Stücke — komplett auf dem Mac eingebettet, kein Byte in der Cloud.
30.06.–01.07. · Der Sprung
Der Agent-Leap
„Hey Murmel" wird zum Agenten: Tool-Calling (Termine, Timer, OCR, Dateien …), RAG-Rebuild mit Hybrid-Suche und Quellen-Zitaten über ~83.000 Chunks, eigenes Antwort-Fenster.
02.07. · Brücken
Fenster & Brücken
Chat-Fenster mit Markdown und Wort-für-Wort-Streaming, Bild-Werkzeug, n8n-Gateway als einzige Tür nach draußen — und der Telegram-Bot @murmel2go_bot geht online.
03.07. · Tempo
Stimme & Tempo
Seraphina wird Murmels Stimme, das Gespräch wird freihändig. Warm-up beim Start: erste Antwort in 5 s statt 38. Cloud-Wissensindex in Supabase, nachts um 04:30 frisch synchronisiert.
05.07. · Der nächste Horizont
Vom Agenten zum Business-Cockpit
Aus dem Assistenten wird ein System: die Architektur für ein eigenes, autarkes CRM steht — Datenkern, Offline-Härtung, und Kommunikation, die von selbst ins CRM fließt. Gerade im Bau.
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>fngedrü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
Hey Murmel · Der Agent
Zwei Worte — und aus Diktat wird Handlung.
Sage ich mitten im Diktat „Hey Murmel", öffnet sich ein eigenes Chat-Fenster: Markdown-Antworten, Streaming Wort für Wort, Weiterfragen per Mikro-Button. Dahinter arbeitet qwen3:8b lokal — und ruft echte Werkzeuge auf, statt nur zu reden.
hey murmel · tool-calling, lokal
you>„Hey Murmel, erinnere mich morgen um 9 an den Anruf mit der Bank" → Absicht erkannt: erinnerung_anlegen(deutscher Datums-Parser: „morgen um 9") → Apple Erinnerungen: ✓ angelegt# via AppleScript, ohne Cloudmurmel>Erledigt — morgen, 09:00: „Anruf mit der Bank".
termine · erinnerungen
Kalender & Aufgaben
Termine lesen, Erinnerungen anlegen — „morgen", „Freitag", „in 20 Minuten" werden verstanden.
exakt
Rechnen · Timer · Wecker
Exakter Parser statt LLM-Raten. Timer laufen als echte macOS-Benachrichtigungen.
sehen
Screenshot → OCR
Apple Vision liest den Bildschirm in den Chat. Auch angehängte PDFs und Bilder werden gelesen.
system
Apps & Dateien öffnen
„Öffne Terminal" · „öffne die Rechnung von gestern" — 14+ Apps per Zuruf, Spotlight-Suche inklusive.
gedächtnis
Zwischenablage & Terminal
Durchsucht den Kopier-Verlauf — und beantwortet „was haben wir im Terminal besprochen?".
ausgabe-wege
Als E-Mail, WhatsApp, Datei
Antworten app-bewusst formatiert weitergeben: RTF für Mail, *fett* für Messenger, Markdown als Datei.
opt-in · online
Bilder auf Zuruf
„Erstelle ein Bild von …" → gpt-image-2, PNG nach ~/Documents/Murmel. Nur mit eigenem Key, nur wenn gewollt.
opt-in · gateway
n8n auslösen
EIN Webhook als Brücke für alles Externe — Notion-Notizen, Workflows. Offline? Murmel arbeitet lokal weiter.
geerdet
Erfindet nichts
Harte Regel gegen Halluzination: Relevanz-Schwelle im RAG, isoliertes Gedächtnis pro Sitzung, Persona kennt ihre echten Fähigkeiten.
Gespräch & Stimme
Einmal die Taste halten — dann freihändig reden.
Rechte ⌥-Taste einmal halten, Frage sprechen — und danach hört Murmel nach jeder Antwort automatisch weiter zu. Eine Sprechpause beendet die Frage, ein „danke, das war's" beendet das Gespräch.
Damit sich das nach Gespräch anfühlt statt nach Warteschleife: Der erste Satz erklingt, während der Rest noch entsteht, die nächste Sprachausgabe wird vorbereitet, während die aktuelle spricht — und kleine Füll-Laute („Mhm.") überbrücken die Denk-Sekunde.
Die Stimme: „Seraphina", eine neuronale Stimme via edge-tts — die bewusste Lokal-first-Ausnahme, online und jederzeit abschaltbar. Ohne Netz übernimmt automatisch die beste installierte System-Stimme: Das Gespräch funktioniert komplett offline.
„Füller sofort, erster Satz nach zwei, drei Sekunden — und die erste Frage nach dem Start antwortet in 5 Sekunden statt 38.“
// Latenz-Programm 03.07. · Warm-up beim Start · Satz-Stream · TTS-Prefetch — gemessen, nicht geraten
RAG · Das Gedächtnis
Frag deine eigenen Daten — mit Quellen-Zitat.
Murmel beantwortet nicht nur aus dem Allgemeinwissen des Modells, sondern aus meinen eigenen Dateien und Diktaten — ~83.000 Text-Stücke, lokal indexiert. Seit dem Agent-Leap sucht eine Hybrid-Suche (Volltext + Vektor), und jede Antwort nennt ihre Quelle: Datei · Abschnitt. Komplett auf dem Mac.
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.
hybrid-suche
Volltext + Vektor, fusioniert
SQLite FTS5 (BM25) findet exakte Begriffe, die Vektor-Suche findet Bedeutung — Reciprocal Rank Fusion kombiniert beides. Ein Eval-Harness misst die Treffer-Qualität.
100% lokal
Kein Byte in die Cloud
Embeddings via nomic-embed-text (lokal in Ollama), Index in SQLite, Antwort via Qwen. Privat, offline, 0 € — auch deine Daten bleiben bei dir.
so läuft eine wissens-anfrage
you>„Hey Murmel, was steht in meiner LinkedIn-Strategie zu Hooks?" 1. Volltext-Suche FTS5/BM25 + Vektor-Suche nomic-embed(parallel, lokal) 2. Reciprocal Rank Fusion → die besten Stellen aus ~83.000 Chunks
3. qwen3:8b antwortet MIT diesem Kontext — über Relevanz-Schwelle geerdet
✓Antwort mit Quellen-Zitat: „linkedin-campaign-playbook.md · Hooks"
Murmel to go · Telegram
Unterwegs? Murmel steckt in der Hosentasche.
Der Mac bleibt zu Hause — Murmel nicht. Der Telegram-Bot @murmel2go_bot ist Murmels Cloud-Ableger, gebaut aus n8n-Workflows: Er antwortet nur mir, versteht Sprachnachrichten, erstellt Bilder auf Zuruf und kennt meine Notizen — über einen eigenen Cloud-Index in Supabase, aus Notion gespiegelt, den ein Nacht-Workflow um 04:30 frisch hält. Die 83.000 lokalen Chunks bleiben auf dem Mac — nur Notion geht in die Cloud.
voice → text → antwort
Sprachnachricht genügt
Voice schicken → das Transkript kommt sofort als eigene Nachricht, die Antwort folgt. In der Cloud übernimmt whisper-1 das Hören und gpt-5-mini das Denken.
bild: …
Bilder im Chat
„Erstelle ein Bild von …" — der Bot beauftragt selbst gpt-image-2 und schickt das Foto zurück. Er verspricht nur, was er wirklich kann.
wissen · nachts synchron
Cloud-Wissensindex
Supabase-Tabelle murmel_wissen mit deutscher Volltextsuche. Jede Nacht um 04:30 wandern die 100 jüngsten Notion-Seiten hinein — Bericht per Telegram inklusive.
„Lokal-first, online-optional: Auf dem Mac denkt Qwen — kein Byte verlässt den Rechner. Unterwegs zählt Erreichbarkeit, also darf dort die Cloud ran. Beides ist eine bewusste Entscheidung, kein Zufall.“
// der Architektur-Leitsatz · jede Online-Verbindung ist opt-in und abschaltbar
Wohin es geht · Der nächste Sprung
Vom Assistenten zum eigenen Business-Cockpit.
Murmel hört, denkt und handelt schon. Der nächste Schritt — gerade im Bau — ist der größte: mein ganzes Business per Stimme steuern. Ein eigenes CRM, das ich weder von HubSpot noch von Salesforce mieten muss. Kontakte, Notizen, Angebote, Rechnungen — autark, lokal, meins.
Die Idee ist dieselbe wie am ersten Tag, nur eine Nummer größer: Was ich brauche, baue ich mir selbst — auch das CRM. Kein Abo, keine fremde Cloud, in der meine Kundendaten liegen.
Das Elegante daran: Es ist kein zweites Programm. Aus dem „Hey Murmel"-Fenster wird ein Zuhause — reden, ins CRM springen, einen Kontakt öffnen, eine Notiz anlegen. Dieselben Werkzeuge, die Murmel heute schon per Stimme bedient, bekommen eine Arbeitsfläche.
Wenige Grundbausteine, viele Kompositionen: Ein Datenkern trägt die Objekte — Kontakt, Nachricht, Aufgabe, Termin, Notiz, Beleg, Produkt. CRM, Posteingang und Meetings sind nur Brillen auf denselben Kern.
„Was ich brauche, muss ich auch selbst bauen können — auch mein CRM.“
// autark · lokal-first · kein HubSpot, kein Salesforce
das herz
Ein Datenkern
Erstklassige Objekte — Kontakt, Nachricht, Aufgabe, Termin, Beleg, Produkt — plus ein Ereignis-Log, das jede Berührung zur Timeline verbindet.
alles fliesst rein
Kommunikation im CRM
Jede Mail und WhatsApp landet automatisch beim richtigen Kontakt — der Verlauf schreibt sich von selbst, statt in fremden Postfächern zu versickern.
offline-perfekt
Lokal ist die Wahrheit
Die Arbeits-Datenbank liegt auf dem Mac — lesen geht immer, auch ohne Netz. Notion bleibt der Business-Ledger, im Hintergrund gespiegelt.
von überall
Fernzugriff vom Handy
Solange der Laptop offen ist: per Telegram Vollzugriff auf den lokalen Agenten — jede Schreib-Aktion mit Bestätigung.
katalog
Meine Produkte
Deine-Business-Page und die weiteren Angebote als Produkt-Katalog — daraus setzen sich Angebote, Rechnungen und der wiederkehrende Umsatz zusammen.
ein tor · geloggt
Kontrolliert schreiben
Jede Änderung läuft durch ein einziges Tor: Vorschau → Bestätigung → Audit-Log. Dadurch immer nachvollziehbar, was Murmel getan hat.
„Nicht ein CRM als Feature — ein System. Erfassen, verstehen, im Kern ablegen, handeln. CRM, Posteingang und Meetings sind nur Ansichten auf denselben Kern.“
// die Architektur · Rückgrat einmal bauen, Ansichten beliebig davorsetzen
Interaktive System-Karte
Worauf hat Murmel Zugriff?
Die ganze Architektur als begehbare 3D-Galaxie: links der Membran alles, was auf dem Mac bleibt — rechts alles, was nur auf Ansage online geht. 28 Bausteine, jede Verbindung eine Entscheidung. Mit Auto-Tour.
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
Der Kern denkt auf dem Mac.
Hören, Denken, Erinnern — alles lokal. 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.
drei modelle · arbeitsteilung
Die Qwen-Familie + Embeddings
qwen3:8b ist das Agent-Hirn: Gespräch, Tool-Calling, Wissens-Antworten — mit Warm-up beim Start (erste Frage in 5 s statt 38). qwen2.5:3b bleibt die schnelle Diktat-Politur. nomic-embed-text baut die Vektoren für die Wissens-Suche. Alle drei laufen in Ollama, alle drei lokal.
Unterm Strich: einmalig ein paar GB Modelle lokal laden — danach läuft der Kern offline und dauerhaft kostenlos, und kein Wort verlässt den Rechner. Online-Extras (Stimme, Bilder, Telegram) bleiben opt-in.
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, Agent-Werkzeuge, RAG, globaler Hotkey, Datenbank, Code-Signierung — und ein Cloud-Ableger aus n8n-Workflows. Geplant, orchestriert, debuggt und ausgeliefert. In 13 Tagen vom Diktat-Tool zum Agenten.
// Fertig — oben Murmel in der Menüleiste (Live-Vorschau, Modi, Verlauf), darunter das Terminal, in dem es Stück für Stück entstand
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.
Architektur-Haltung
Lokal-first, online-optional
Jede Cloud-Verbindung ist eine bewusste, abschaltbare Entscheidung — Setup-Scripts, Selbsttest, eigene Signatur. Die Sorte Tool, die ein Solutions Engineer auch beim Kunden baut.