MacWhisper spricht kein Claude, LLM Bridge schon
Ein kleiner lokaler Proxy übersetzt zwischen OpenAI- und Anthropic-Schnittstelle, damit auch Diktier- und Schreibtools Claude über LangDock oder Anthropic nutzen können.

MacWhisper kennt nur die OpenAI-Schnittstelle
In MacWhisper kannst du einen eigenen Anbieter eintragen, doch er muss die OpenAI-Chat-Completions-Schnittstelle sprechen. Claude spricht sie nicht. Anthropic und LangDock erwarten Anfragen im Messages-Format, mit anderem Aufbau etwa für System-Prompts und Bilder. Wer Claude-Modelle über den EU-Endpunkt von LangDock oder direkt bei Anthropic nutzt, kommt mit solchen Tools nicht weiter.
Dafür habe ich LLM Bridge gebaut: einen kleinen Proxy, der lokal auf deinem Rechner läuft, OpenAI-Anfragen entgegennimmt und als Anthropic-Anfragen weiterreicht. Die Antwort nimmt den umgekehrten Weg. Version 0.1.0 liegt ab sofort auf GitHub.
Was die Bridge übersetzt
Der Proxy bietet /v1/chat/completions und /v1/models an, mit und ohne Streaming. Beim Streaming wandelt er die Server-Sent Events von Anthropic in OpenAI-Chunks um, sodass der Text im Client so eintrifft, wie das Tool es erwartet. Übersetzt werden System-Prompts, Bilder als Base64, Tools samt Function Calling, stop, temperature, max_tokens und der JSON-Modus.
Als Upstream trägst du LangDock ein, zum Beispiel die EU-Region, oder Anthropic direkt. In den Clients verwendest du statt der langen Modell-ID einen Alias: haiku zeigt auf die ID, die du in der Bridge hinterlegt hast. Ändert sich die ID, korrigierst du sie an einer Stelle und nicht in jedem Tool. Wer lieber ohne Alias arbeitet, schreibt upstream-id/modell-id als Modellnamen, zum Beispiel langdock-eu/claude-sonnet-4-6-default.
Der Gedanke dahinter: Jedes Tool einzeln um Claude-Unterstützung zu bitten, dauert, und nicht jeder Hersteller wird es tun. Ein Übersetzer an einer zentralen Stelle löst das Problem für alle Programme auf einmal, die einen OpenAI-kompatiblen Anbieter akzeptieren.
Läuft etwas schief, etwa bei einer falschen Modell-ID, bekommt der Client einen Fehler im OpenAI-Format mit einer verständlichen Meldung.
So trägst du die Bridge in MacWhisper ein
Beim ersten Start legt die Bridge eine Konfiguration mit LangDock EU und dem Alias haiku an und erzeugt ein zufälliges lokales Zugriffstoken. Du speicherst den API-Schlüssel deines Upstreams und rufst die Modellliste ab, die die tatsächlichen IDs deines Workspaces zeigt. Ein Klick auf eine ID legt die Zuordnung zum Alias an. Die voreingestellte ID ist nur eine Annahme, prüfe sie also an dieser Stelle. Ein Test-Knopf schickt anschließend ein einzelnes Token los und zeigt, ob die Kette bis Claude hält. Der Schlüssel landet im System-Schlüsselbund (macOS Keychain, Windows Anmeldeinformationsverwaltung, Linux Secret Service), nie in der Konfigurationsdatei.
Dann legst du in MacWhisper einen OpenAI-kompatiblen Anbieter an:
| Feld | Wert |
|---|---|
| Basis-URL | http://127.0.0.1:4000/v1 |
| API-Schlüssel | das lokale Zugriffstoken aus den Einstellungen der Bridge |
| Modellname | der Alias, zum Beispiel haiku |
MacWhisper bekommt also nie deinen echten API-Schlüssel zu sehen, sondern nur das lokale Token.
Auch auf dem Server
Wer die Bridge ohne Oberfläche braucht, etwa auf einem Linux-Rechner, startet das Kommandozeilenprogramm. Es nutzt dieselbe Konfiguration und dieselbe Statistik wie die App:
llm-bridge set-key langdock-eu # Schlüssel verdeckt eingeben, landet im Schlüsselbund
llm-bridge test haiku # Verbindungstest
llm-bridge serve # Proxy im Vordergrund, Standardport 4000
llm-bridge stats --range 30d # Statistik der letzten 30 Tage
Auf einem Server ohne Schlüsselbund reicht eine Umgebungsvariable wie LLM_BRIDGE_KEY_LANGDOCK_EU in der systemd-Unit.
Mitzählen, ohne mitzulesen
Zu jeder Anfrage speichert die Bridge eine Zeile in einer lokalen SQLite-Datenbank: Zeitpunkt, Modell, Input-, Output- und Cache-Tokens, Antwortzeit und Status. Die Statistik-Oberfläche, wahlweise auf Deutsch oder Englisch, zeigt das je Modell und je Client; den Client erkennt die Bridge am User-Agent. Ein CSV-Export ist eingebaut.
Prompts und Antworten werden nicht gespeichert. Du siehst, welches Tool wie viele Tokens verbraucht, ohne dass irgendwo ein Protokoll deiner Texte entsteht. Bricht ein Client einen Stream ab, erfasst die Bridge die Anfrage mit den bis dahin gezählten Tokens und dem Status 499. Auch abgebrochene Antworten tauchen in der Rechnung also auf.
Die Input-Tokens in der Oberfläche enthalten die Cache-Lese- und Cache-Schreib-Tokens, so wie OpenAI prompt_tokens zählt. Wer die Zahlen mit der Abrechnung seines Anbieters vergleicht, sollte das im Kopf haben.
Jede Webseite kann an localhost klopfen
Beim Absichern ist mir etwas aufgefallen, das bei lokalen Diensten leicht untergeht. Ein Proxy auf 127.0.0.1 wirkt geschützt, weil von außen niemand an ihn herankommt. Dein Browser läuft aber auf demselben Rechner. Eine fremde Webseite kann per fetch() Anfragen an http://127.0.0.1:4000 schicken, und ein ungeschützter Proxy würde sie bedienen, bezahlt mit deinem API-Schlüssel. Über DNS-Rebinding, bei dem ein fremder Domainname plötzlich auf 127.0.0.1 zeigt, könnte die Seite sogar die Antworten mitlesen.
Die Bridge weist deshalb Anfragen ab, deren Origin-Header nicht auf localhost, 127.0.0.1 oder [::1] zeigt. Solange sie nur lokal lauscht, gilt das auch für den Host-Header, und der blockt das Rebinding. Chat-Anfragen nimmt sie nur mit Content-Type: application/json an, den eine fremde Seite nicht ohne CORS-Vorabprüfung senden kann. Programme ohne Browser, also auch MacWhisper, schicken keinen Origin-Header und kommen deshalb ungehindert durch. Dazu kommt das Zugriffstoken vom ersten Start. Leerst du es in den Einstellungen, steht der Proxy jedem Programm auf dem Rechner offen.
Die zweite Richtung betrifft den Upstream. Die Bridge folgt keinen Weiterleitungen, weil der API-Schlüssel sonst an ein fremdes Ziel gehen könnte. Sie meldet stattdessen die neue Adresse, und du trägst sie selbst ein. Upstreams müssen https:// verwenden, http:// ist nur für localhost erlaubt. Konfiguration und Statistik sind nur für deinen eigenen Benutzer lesbar.
Tray-App, Updates und Download
Die Tray-App ist mit Tauri 2 gebaut, läuft unter macOS, Windows und Linux und enthält die Statistik-Oberfläche. Sie startet auf Wunsch bei der Anmeldung, und über das Tray-Symbol startest und stoppst du den Proxy. Der Proxy-Kern ist in Rust mit axum geschrieben. Der Quellcode steht unter MIT-Lizenz auf GitHub.
Neue Versionen installiert die App selbst. Sie lädt ein Update im Hintergrund, prüft dessen Signatur und startet erst neu, wenn der Proxy fünf Minuten lang keine Anfrage bearbeitet hat. Ein laufendes Diktat bricht dadurch nicht ab. Wer das nicht möchte, schaltet es in den Einstellungen ab. Auf dem Server aktualisiert sich das Kommandozeilenprogramm mit llm-bridge update, danach startest du den Dienst neu.
Die Produktseite findest du unter it-guy.ai/projects/llm-bridge, die fertigen Pakete auf der Releases-Seite bei GitHub. Die macOS-Downloads sind mit einer Apple Developer ID signiert und notarisiert. Unter Windows und Linux sind die Pakete unsigniert: Prüfe vor der Installation die Prüfsumme gegen die Datei SHA256SUMS im Release.
Erstellt von Martin Schmid, mit Unterstützung von Claude Sonnet 5.5 (überarbeitet mit Claude Opus 5.5) und nach eigener inhaltlicher Prüfung freigegeben. Es gelten unsere Hinweise und Haftungsausschluss.