21/Documentation
Spracheingabe und Web-Push
Das Mikrofon im Eingabefeld und Benachrichtigungen, wenn ein Agent auf Sie wartet
Beide Funktionen sind standardmäßig deaktiviert. Sie können eine Mikrofon-Schaltfläche im Eingabefeld und Browser-Benachrichtigungen aktivieren, die ausgelöst werden, wenn ein Agent auf Eingabe wartet.
Spracheingabe (optional)
Ein Mikrofonschaltfläche im Eingabefeld und ein Freisprechschalter in Einstellungen → Sprache. Tippen Sie auf die Schaltfläche, sprechen Sie, und das Transkript landet im Nachrichtenfeld, damit Sie es lesen und senden können. Bei aktiviertem Freisprechen wird es für Sie gesendet: über denselben geschützten Antwortpfad wie eine getippte Nachricht, niemals daran vorbei. Das Mikrofon ersetzt die runde Schaltfläche am Ende der Zeile, solange das Feld leer ist; das erste getippte Zeichen macht daraus wieder Senden. Sie diktieren eine Nachricht oder tippen sie, sodass es eine primäre Aktion gibt statt zwei, die um die Breite des Felds konkurrieren.
Während Sie sprechen, verdeckt ein Rekorder das gesamte Eingabefeld samt Leiste, fügt keine Höhe hinzu und der Bildschirm darüber verschiebt sich nie. OK steht an der Stelle des Mikrofons und beendet die Aufnahme. Das bin am anderen Ende verwirft sie und bricht auch während der Transkription noch ab. Sobald Sie gesprochen haben, beenden zwei Sekunden Stille die Aufnahme automatisch; ein Kreis schließt sich um OK, um dies anzuzeigen, und erneutes Sprechen startet die Zählung von vorn. Vor dem ersten Wort wird nichts von selbst beendet.
Es existiert erst, wenn Sie einen Anbieter einrichten. Führen Sie collie stt setup aus oder richten Sie Whistle ein (siehe unten). Keine Schaltfläche wird gerendert, kein Ton verlässt das Telefon, keine Zugangsdaten werden gespeichert, kein Kindprozess läuft. Nicht vorhanden, nicht deaktiviert. Vier Anbieter:
| Anbieter | Beschreibung |
|---|---|
openai-compatible | Jeder Endpunkt, der POST /audio/transcriptions spricht: die öffentliche OpenAI-API, ein Whisper-Klon in der Cloud oder eine lokale Engine auf derselben Maschine, was die Option ohne Datenabfluss ist (unten). |
codex | Nutzt die codex-Binärdatei, der Sie bereits vertrauen, für ein kurzlebiges Token. Kein neues Konto und kein neuer Schlüssel, aber ein privater, nicht unterstützter-Endpunkt mit Zustimmungsschritt: Sie tippen yes im Terminal ein oder tippen in den Einstellungen auf Ich akzeptiere (unten). |
local-cli | Führt einen Transkriptionsbefehl aus, der sich bereits auf dem Host befindet, wie etwa whisper-cli oder muesli-cli, einmal pro Aufnahme, und liest das Transkript aus dessen stdout. Kein HTTP-Server erforderlich (unten). |
whistle | Collies eigene Engine, Whistle. Kein Schlüssel und kein Befehl zu konfigurieren. Eine Aufnahme von bis zu 4 Minuten wird als WAV-Datei an sie gesendet, und das Audiosignal bleibt auf dem Host. Ein Telefon kann Whistle auch lokal ohne Upload ausführen. |
Die Einrichtung erfolgt über die CLI aus demselben Grund wie Koppeln: Diese Oberfläche nimmt Zugangsdaten entgegen, gehört also auf die Tastatur des Hosts. Es gibt kein Webformular für Schlüssel, Endpunkte oder Befehle. Zwei Ausnahmen erfordern nichts davon. Whistle speichert keine Zugangsdaten, führt keine von Ihnen gewählten Befehle aus und sendet kein Audio vom Host weg; daher kann ein Gerät mit Schreibzugriff es über die Einstellungen einrichten (warum). Und unter Einstellungen → Sprache → Host-Sprache kann ein Gerät mit Schreibzugriff den Host zwischen Whistle, dem ChatGPT-Abonnement (dem Anbieter codex) und Aus umschalten. ChatGPT steht erst nach derselben Zustimmung zur Verfügung, die das Terminal ausgibt, und einem Tippen auf Ich akzeptiere (unten). Ein im Terminal über Schlüssel oder Befehle eingerichteter Anbieter oder einer aus Ihrer Umgebung wird dort angezeigt und niemals über die App geändert. Für diese beiden zeigt die Seite die auf dem Host auszuführenden Befehle mit Kopieren und Erneut prüfen an, ohne Formular.
$ bin/collie stt setup
Which speech-to-text provider?
openai-compatible any endpoint that speaks POST /audio/transcriptions —
the public OpenAI API, or a local whisper.cpp / parakeet.cpp
server, which is the zero-egress choice and the one to prefer.
codex borrow your own `codex` sign-in. No new key, no new account —
and a private endpoint that may break without notice.
local-cli run a transcription command already on this machine, such as
whisper-cli or muesli-cli. Its stdout is the transcript.
provider [openai-compatible]:
The API base, INCLUDING its version prefix — the provider appends /audio/transcriptions.
local http://127.0.0.1:8080/v1 (whisper.cpp / parakeet.cpp — nothing leaves the host)
cloud https://api.openai.com/v1 (room audio leaves this machine)
base URL: http://127.0.0.1:8080/v1
The model the endpoint understands. Empty takes Collie's default, gpt-transcribe.
model [gpt-transcribe]: whisper-1
API key [none]:
The language you speak, as a two-letter ISO-639-1 code — en, de, tr, ja.
LEAVE IT EMPTY to let the model detect it, which is what you want if you mix languages in one
sentence. Name one only if short clips keep coming back in a language you did not speak: a few
seconds of accented audio is too little for the model to detect from, and it guesses.
spoken language [auto-detect]: en
✓ speech-to-text configured — /home/you/.local/state/collie/stt.json (owner-only)
Live immediately — no restart needed. The bridge re-reads this file per request.
Check it end to end with `collie stt test`.Jede obige Frage hat ein Flag (--provider · --url · --model · --key · --lang), sodass eine Bereitstellung kein Terminal benötigt. Den Schlüssel leer zu lassen, ist ein unterstützter Modus: Ein schlüsselloser Endpunkt wird ganz ohne Authorization-Header aufgerufen statt mit einem leeren.
Die gesprochene Sprache muss nur bei einem bestimmten Fehlerfall gesetzt werden. Bleibt das Feld leer (Standard), erkennt das Modell die Sprache selbst, was für gemischtsprachige Sätze erforderlich ist. Setzen Sie den Wert, wenn kurze Clips wiederholt in einer nicht gesprochenen Sprache zurückkommen: Wenige Sekunden Audio mit Akzent reichen für die Erkennung nicht aus, und das Modell rät. Ein zweistelliger Code oder ein regionaler Tag, den Collie für Sie einschränkt (en-GB → en). Dies gilt nur für den openai-compatible-Anbieter; der codex-Endpunkt akzeptiert keine Sprache, und collie stt status weist darauf hin, anstatt falsche Annahmen zuzulassen.
Eine lange Aufnahme erhält eine lange Frist. Das Browser-Zeitlimit für einen Clip hängt von dessen Größe ab, nicht von einem festen Wert: Es wird von einer kontinuierlichen Uplink-Rate von 256 kb/s ausgegangen und die provider-eigene Frist der Bridge addiert, sodass für das Maximum von 8 MiB knapp sechs Minuten eingeräumt werden. Einen Clip, den Collie aufzeichnet, wartet es auch ab. Während des Uploads stoppt Collie das Polling und unterdrückt Verbindungswarnungen: Wenn Ihr Audio den Uplink eines Telefons auslastet, ist das kein Ausfall und darf nicht als solcher gemeldet werden.
Eine Aufnahme stoppt nach fünf Minuten. Ein Host mit Whistle nimmt vier Minuten an, da das Telefon ihm eine WAV-Datei sendet, die etwa viermal so groß ist wie der komprimierte Clip. Der Rekorder zeigt die jeweils geltende Begrenzung an.
Hat es funktioniert? stt test sendet eine Fünftelsekunde generierter Stille durch den echten Anbieter, einmal pro Container, den ein Smartphone aufzeichnen kann:
$ bin/collie stt test
provider: openai-compatible (http://127.0.0.1:8080/v1, model whisper-1, language en)
sending: 0.2 s of generated silence as audio/wav (the setup probe) … ✓ 214 ms
transcript: (empty) — expected from silence, and the empty answer still proves the pipeline.
sending: 0.2 s of generated silence as audio/webm;codecs=opus (Chrome, Android, Firefox) … ✓ 198 ms
sending: 0.2 s of generated silence as audio/mp4 (Safari, iOS) … ✓ 190 msMit Whistle auf dem Host sendet stt test einen Clip, eine 16-kHz-WAV-Datei, und meldet das Überspringen von webm und mp4, da das Telefon seine Aufnahme vor dem Senden an diesen Anbieter in 16-kHz-WAV konvertiert.
Ein leeres Transkript gilt als bestanden: Stille wird zu nichts transkribiert, und der vollständige Durchlauf war der eigentliche Test. Schlägt er fehl, benennt der Fehler die Ursache (Authentifizierung, Endpunkt, Antwortstruktur). Laden Sie Collie danach auf dem Telefon neu: Neben dem Nachrichtenfeld erscheint ein Mikrofon. collie stt status zeigt an, was konfiguriert ist und woher jede Einstellung stammt (die Datei oder eine Umgebungsvariable mit höherer Priorität); collie stt off entfernt stt.json und die Schaltfläche verschwindet wieder, in beiden Fällen ohne Neustart.
Whistle: Sprache-zu-Text auf Ihrem Telefon oder Host
Whistle ist ein kompaktes Sprachmodell von Cactus Compute. Die Datei ist 16,9 MB groß und unter Apache-2.0 lizenziert. Es unterstützt Englisch, Deutsch, Französisch, Spanisch, Italienisch, Niederländisch sowie Polnisch und erkennt die Sprache automatisch. Es benötigt kein Konto, keinen Schlüssel und kein zusätzliches Programm. Collie liefert die ausführende Engine mit, daher läuft es auf Linux, macOS, Windows und NixOS.
Whistle kann an zwei Orten laufen. Sie wählen dies pro Telefon.
| Engine | Wo die Wörter erzeugt werden | Wählen Sie dies, wenn |
|---|---|---|
| Host | Auf dem Computer, auf dem Collie läuft, in einem kurzlebigen Kindprozess von Collies eigener Binärdatei. | Das Smartphone ist leistungsschwach oder alt. Eine Aufnahme wird als WAV-Datei hochgeladen, und ein Clip dauert ein oder zwei Sekunden. |
| Dieses Telefon | Im Browser des Smartphones, in einem Worker. | Das Smartphone ist neu. Es gibt keinen Upload, das Audio verlässt das Smartphone also nie, und es funktioniert offline, sobald sich das Modell auf dem Smartphone befindet. |
Beide Engines lesen dasselbe Modell. Der Host behält eine Kopie. Ein Smartphone, das Whistle selbst ausführen möchte, kopiert es vom Host, niemals aus dem Internet. Ein Clip dauert auf einem neueren Smartphone etwa eine Sekunde.
Richten Sie es über die Einstellungen ein. Sie benötigen ein Gerät mit Schreibzugriff (ein Gerät mit gekoppelt). Ein schreibgeschütztes Gerät sieht „Ein Gerät mit Schreibzugriff kann dies einrichten.“ und kann den Download nicht starten.
Einstellungen → Sprache ist eine Seite mit zwei untergeordneten Seiten:
- Sprache stellt das aktuell Verwendete an die erste Stelle. Die oberste Karte trägt als Titel die Konfiguration: der Befehl, den Ihr Host ausführt, wie etwa
whisper-climit Modell ggml-base.bin und Ihr eigener Befehl auf Ihrem Host darunter; das Modell eines Sprachtext-Dienstes, wie etwawhisper-large-v3mit Ein Sprachtext-Dienst unter api.groq.com; Whistle von Cactus Compute mit Modell ca52876 und Auf diesem Smartphone oder Auf Ihrem Host; oder ChatGPT-Abonnement (OpenAI) mit Über Codex auf Ihrem Host. Wenn der Befehl der altewhistle-stt-Wrapper ist, weist die Karte darauf hin und bietet Zu integriertem Whistle wechseln an, wodurch die Host-Spracheingabe geöffnet wird. Danach folgt der Status, der beschreibt, worauf sie aufbaut, beispielsweise „Bereit. Whistle ca52876 befindet sich auf diesem Smartphone.“ oder „Nicht bereit. Codex ist auf Ihrem Host abgemeldet.“, wohin das Audio geht und wie es Einrichten wurde (über die Einstellungen durch welches Gerät und wann, oder in einem Terminal auf dem Host). Unter der Karte befindet sich der Freisprech-Schalter. Alles andere liegt hinter einer einzigen Zeile, Spracheingabe anpassen. Solange die Spracheingabe funktioniert, bleibt diese Zeile bei jedem Besuch geschlossen. Funktioniert sie nicht (nichts eingerichtet, ein pausiertes Smartphone, eine Host-Option, die nicht antwortet), ist sie geöffnet, und die oberste Karte enthält die einzige Aktion: Spracheingabe auf diesem Smartphone einrichten, Wiederherstellen oder Beheben. Geöffnet zeigt sie die eigene Auswahl dieses Smartphones an, Auf diesem Smartphone (gekennzeichnet mit Empfohlen) oder Auf Ihrem Host (der Computer, auf dem Ihre Agenten laufen), was pro Gerät gespeichert wird. Die aktive Auswahl hat einen fetten Rand, eine Tönung und ein In Verwendung-Badge; das Umschalten zwischen beiden verschiebt nichts auf der Seite. Danach folgt eine Zeile für die Auswahl des Hosts, eine Zeile, die alle fünf Optionen öffnet, und eine Zeile für das Modell. Jede Auswahl hat eine Info-Schaltfläche, die fünf Fakten dazu auflistet: wohin das Audio übertragen wird, ob es offline funktioniert, was es kostet, welche Einrichtung erforderlich ist und wie schnell es ist. Ein Tippen auf die Info-Schaltfläche wählt nichts aus. - Host-Spracheingabe listet die fünf Optionen des Hosts auf. Whistle und Ihr eigener Befehl behalten das Audio auf Ihren Rechnern. Ein Sprachtext-Dienst und das ChatGPT-Abonnement senden es von Ihrem Host weg. Deaktiviert steht separat darunter. Eine Änderung hier gilt für jedes mit dem Host gekoppelte Gerät. Eine Auswahl, die Audio weiter sendet als die zuvor aktive, fragt vorher nach; ein Schritt zurück wird direkt beim Antippen ausgeführt. Jede Option bietet Einrichtungsanleitung: nummerierte Schritte, die zu kopierenden Befehle und die schaltflächeneigenen Aktionen der App, sofern die App handeln kann. Der nächste auszuführende Schritt ist mit Weiter markiert. Er ist nur dann automatisch geöffnet, wenn die aktive Option nicht funktioniert. Die aktive Option zeigt zudem an, was konfiguriert ist, beispielsweise „Konfiguriert: whisper-cli, Modell ggml-base.bin“.
- Whistle-Modell nennt den Entwickler Cactus Compute, die Lizenz und verlinkt auf die Modellseite auf Hugging Face. Es zeigt die Kopie auf dem Host und die Kopie auf diesem Smartphone, jeweils mit eigenem Status.
So richten Sie Whistle ein:
- Tippen Sie auf einem Smartphone, auf dem Sprache noch nicht funktioniert, auf der obersten Karte unter Sprache auf Spracheingabe auf diesem Smartphone einrichten. Ein Antippen erledigt den gesamten Ablauf: Der Host lädt das Modell herunter, falls es fehlt, dieses Smartphone kopiert es vom Host, und Auf diesem Smartphone wird ausgewählt. Ein Balken zeigt den Fortschritt und nennt den aktuellen Schritt: „Wird auf Ihren Host heruntergeladen…“ oder „Wird auf dieses Smartphone kopiert…“. Schlägt ein Schritt fehl, bricht der Vorgang dort ab, nennt den Grund und bietet Erneut versuchen an. Ein schreibgeschütztes Gerät darf kopieren, da Kopieren ein Lesevorgang ist, kann den Host jedoch nicht zum Herunterladen auffordern. Dieselben zwei Schritte finden sich auch unter Spracheingabe anpassen: Einrichten (16,9 MB) auf einem Smartphone ohne Kopie oder Auf dieses Smartphone kopieren, wenn der Host das Modell bereits besitzt.
- Oder öffnen Sie Whistle-Modell und tippen Sie auf Auf Host herunterladen (16,9 MB). Ein Balken zeigt den Fortschritt. Schlägt der Vorgang fehl, nennt die Seite den Grund. Tippen Sie auf Erneut versuchen. Sobald das Modell vorhanden ist, listet die Seite dessen Version (die ersten sieben Zeichen der Hugging-Face-Revision, ein Link zu dieser Revision) sowie dessen Größe auf. Details zeigt eine kurze Prüfsumme und den Zeitpunkt des Downloads durch den Host.
- Für Diktat über den Host öffnen Sie Host-Spracheingabe und wählen Whistle auf Ihrem Host, dann Für jedes Gerät ändern. Oder öffnen Sie Einrichtungsanleitung darunter und tippen auf Auf Host verwenden. Wenn Sie im Terminal einen anderen Anbieter mit einem Schlüssel oder Befehl eingerichtet haben, zeigt die Seite diesen an und bietet keine Auswahl. Die Schritte für Whistle beginnen dann mit
collie stt offauf dem Host, danachcollie stt whistle --host. - Bei der Kopie auf diesem Smartphone nennt Whistle-Modell die Version und bietet Von diesem Smartphone entfernen an. Es zeigt zudem an, ob der Browser zugestimmt hat, die Kopie zu behalten („Behalten“), oder ob er sie bei knappem Speicher löschen darf. Erhält der Host später ein neueres Modell, weist die Kopie darauf hin und bietet Aktualisieren an.
- Öffnen Sie auf Sprache das Menü Spracheingabe anpassen und wählen Sie Auf diesem Smartphone oder Auf Ihrem Host. Auf diesem Smartphone ist deaktiviert, bis das Smartphone eine Kopie besitzt. Auf Ihrem Host ist deaktiviert, solange der Host keine Sprachoption hat. Die Zeile unter der Auswahl nennt die vom Host genutzte Option.
- Um das Modell vom Host zu entfernen, tippen Sie auf Vom Host entfernen unter Whistle-Modell und bestätigen Sie. War Whistle die Engine des Hosts, stoppt Sprache auf dem Host, bis Sie das Modell erneut herunterladen.
Wer es geändert hat. Wenn ein gekoppeltes Gerät die Option des Hosts über die Einstellungen ändert, schreibt der Host den Gerätenamen und die Uhrzeit auf. Sprache und Host-Spracheingabe zeigen dann „Zuletzt geändert von Pixel 8“ mit der Uhrzeit an. Eine Änderung im Terminal setzt diesen Eintrag zurück.
Oder im Terminal einrichten.
$ bin/collie stt whistle # fetch the model once
$ bin/collie stt whistle --host # also make Whistle this host's engine
$ bin/collie stt whistle --from <path> # use a copy you already have, same hash check
$ bin/collie stt whistle --remove # remove the model, and the host engine if it is Whistle
$ bin/collie stt status # shows the model line--host fragt nach, bevor ein absichtlich eingerichteter Anbieter ersetzt wird. --yes beantwortet diese Frage für Durchläufe ohne Terminal. Die Frage erscheint vor dem Download; ein abgelehnter Durchlauf lädt daher nichts herunter. --remove lässt Anbieter anderer Art unberührt. collie stt off entfernt den Anbieter und vermerkt, dass das Modell verbleibt. collie doctor warnt, wenn das Modell auf dem Host nicht dem von diesem Release akzeptierten entspricht. Die Engine ist ohne Neustart sofort einsatzbereit. Prüfen Sie dies mit collie stt test.
Was heruntergeladen wird und woher. Der Host ruft whistle.cact von einer festgelegten Hugging-Face-Adresse ab, folgt den Weiterleitungen zum CDN (maximal fünf, ausschließlich HTTPS und niemals zu einer lokalen oder privaten Adresse) und behält die Datei nur, wenn ihr sha256 mit einem in diesem Release hinterlegten Hash übereinstimmt. Bei Abweichungen wird die Datei gelöscht und beide Hashes werden ausgegeben. Der Download ist auf 32 MiB begrenzt und hat ein Zeitlimit von 10 Minuten. Die Datei liegt im Ordner whistle des Statusverzeichnisses. Der Engine-Code (etwa 1 MB) ist Teil jedes Collie-Releases und stammt aus den eigenen Dateien von Collie.
Nichts lädt sich von selbst herunter. Weder bei der Installation noch bei Aktualisierungen oder der Auswahl einer Engine. Das Modell trifft erst ein, wenn jemand auf Auf den Host herunterladen oder Einrichten tippt oder collie stt whistle ausführt. Ein Smartphone kopiert es vom Host, wenn dessen Nutzer auf Einrichten, Auf dieses Smartphone kopieren oder Wiederherstellen tippt, und von keinem anderen Ort. Der Host sendet das Modell an maximal zwei Smartphones gleichzeitig. Ein drittes erhält den Hinweis „In Kürze erneut versuchen“.
Grenzwerte. Die Host-Engine akzeptiert Aufnahmen von bis zu 4 Minuten, da eine WAV-Datei etwa viermal so groß wie der komprimierte Clip ist und das Upload-Limit bei 8 MiB bleibt. Der Rekorder zeigt diese Grenze an. Die Smartphone-Engine verarbeitet bis zu 5 Minuten. Der Host-Kindprozess hat ein Zeitlimit von der halben Cliplänge, mindestens 60 Sekunden und höchstens 3 Minuten; zudem laufen höchstens zwei Clips gleichzeitig auf dem Host. Ein Smartphone benötigt freien Speicherplatz für das Modell (es verlangt die doppelte Dateigröße) und eine sichere Verbindung (HTTPS, wie von tailscale serve bereitgestellt).
Wenn das Smartphone die Verarbeitung nicht ausführen kann. Schlägt Auf diesem Smartphone bei einem Clip fehl, nennt der Sprachbildschirm die Ursache und bietet An Host senden an, sofern der Host über einen funktionierenden Sprachanbieter verfügt. Der Clip bleibt im Fehlerzustand im Arbeitsspeicher, bis Sie auf „An Host senden“ tippen oder ihn verwerfen. Collie sendet ihn niemals selbstständig, da Sie eine Engine gewählt haben, deren Zweck darin besteht, dass Audiodaten lokal bleiben. Zwei Engine-Abstürze in einer Sitzung schalten Auf diesem Smartphone ab, bis Sie die Anwendung neu laden.
Wenn die Kopie auf dem Telefon gelöscht ist. Ein Browser kann die Kopie löschen, um Speicherplatz freizugeben. Die Auswahl bleibt auf diesem Telefon erhalten und das Diktieren wird pausiert: Sprache meldet „Diktieren ist pausiert“ und bietet Wiederherstellen an, wodurch das Modell erneut vom Host kopiert wird. Das Mikrofon nimmt weiterhin auf und der Clip verbleibt wie oben beschrieben mit An Host senden auf dem Telefon. Collie wechselt nicht von selbst zum Host. Um den Host zu verwenden, wählen Sie Auf Ihrem Host.
Browser. Dieses Telefon erfordert einen Browser, der dem Speech-Worker eine eigene Sicherheitsrichtlinie zuweist. Chrome unter Android ist getestet. WebKit ist in einem WebKit-Build getestet. Safari auf einem iPhone ist noch nicht auf einem physischen Gerät verifiziert. Ein Browser, der dies nicht ausführen kann, zeigt Auf diesem Smartphone mit der entsprechenden Begründung als deaktiviert an, und Auf Ihrem Host bleibt verfügbar.
Wenn Sie den alten Wrapper verwendet haben. Frühere Versionen dieser Seite zeigten einen local-cli-Wrapper um einen nativen Runner, ffmpeg und jq. Diese Konfiguration ist veraltet, aber bestehende Installationen bleiben unberührt und funktionieren weiterhin. Um zur integrierten Engine zu wechseln, führen Sie bin/collie stt whistle --host --yes aus oder führen Sie zuerst collie stt off und dann bin/collie stt whistle --host aus. Sie können den Wrapper auch beibehalten. Seine Modelldatei wird nicht automatisch wiederverwendet. Übergeben Sie sie mit --from <path>, um den Download zu überspringen.
Die Sicherheitsaspekte dieser Engine und die Gründe, warum die Einrichtung über die Einstellungen zulässig ist, finden Sie in Sicherheit und ADR 0096.
Container-Unterstützung ist anbieterspezifisch
Das Smartphone nimmt niemals WAV auf. Es zeichnet Opus in einem WebM-Container unter Chrome, Android und Firefox auf, oder AAC in einem MP4-Container unter Safari und iOS, und sendet diese Bytes unverändert. Ein Anbieter, der WAV transkribiert, kann bei beiden dennoch mit 400 antworten. Jedes Diktat schlägt dann mit „refused“ fehl, während stt test fehlerfrei aussieht. Aus diesem Grund sendet stt test alle drei Clips: Die Verweigerung wird bei der Einrichtung erkannt, nicht erst auf dem Smartphone.
Ein Fall, verifiziert am 01.09.2026 gegen OpenRouters POST /v1/audio/transcriptions:
| Format | mistralai/voxtral-small-24b-2507-stt | openai/whisper-large-v3-turbo |
|---|---|---|
| wav | ja | ja |
| ogg/opus | ja | ja |
| webm/opus | nein, 400 | ja |
| mp4/m4a AAC | nein, 400 | ja |
Die Umgehung liegt im Modell, nicht im Schlüssel: Richten Sie denselben OpenRouter-Schlüssel auf openai/whisper-large-v3-turbo aus, das alle vier akzeptiert.
bin/collie stt setup --provider openai-compatible \
--url https://openrouter.ai/api/v1 --model openai/whisper-large-v3-turbo --key <key>Eine verweigerte Transkription nennt nun den Upstream-Status und den Container, als der sie gesendet wurde. Der Fehler auf dem Smartphone gibt somit an, welches Format der Anbieter abgelehnt hat. (#148, danke @drewbitt)
Ohne Datenabfluss: auf die eigene Engine verweisen
Warum openai-compatible die bevorzugte Wahl ist: Geben Sie eine lokale Basis-URL an und kein Raumton verlässt jemals den Host. Zwei Engines stellen einen OpenAI-kompatiblen Transkriptionsendpunkt bereit: das in whisper.cpp enthaltene server sowie mudler/parakeet.cpp (MIT). Bauen oder installieren Sie eine der beiden nach deren Anleitung, führen Sie sie auf Loopback aus und verweisen Sie mit --url darauf:
bin/collie stt setup --provider openai-compatible --url http://127.0.0.1:8080/v1Das ist die gesamte Integration: Collie gibt nicht vor, welche Engine antwortet.
Mistrals Voxtral erfordert keine eigene Unterstützung, und das gilt auch für alles andere, was diesen Vertrag erfüllt; das ist der Sinn der Schnittstelle. vLLM stellt die Open-Weights-Voxtral-Modelle auf /v1/audio/transcriptions bereit, daher ist eine lokale Instanz dasselbe --url wie jede andere Engine. Die gehosteten Modelle verwenden dieselbe Anfrage an der Basisadresse von Mistral:
bin/collie stt setup --provider openai-compatible \
--url https://api.mistral.ai/v1 --model voxtral-mini-latest --key <key> --lang enVoxtral Mini Transcribe deckt 13 Sprachen ab und akzeptiert dasselbe ISO-639-1-language-Feld, das Collie bereits sendet. Überprüfen Sie es mit collie stt test, bevor Sie sich darauf verlassen: „OpenAI-kompatibel“ ist eine Behauptung, die jeder Endpunkt selbst aufstellt, und dieses Verb dient dazu, sie zu überprüfen.
Der Codex-Provider: Was Sie akzeptieren
collie stt setup --provider codex gibt einen Einwilligungstext aus und stoppt, bis Sie yes eingeben, denn die ehrliche Formulierung lautet: Aufnahmen werden an einen Undokumentierter, nicht unterstützter ChatGPT-Endpunkt gesendet, der durch die Anmeldung via Ihren autorisiert ist. Ihr ChatGPT-Konto trägt also das Risiko von Ratenbegrenzungen und Sperren, und der Dienst kann ohne Vorankündigung ausfallen.
Collie fragt diesen Endpunkt zuerst unter eigenem Namen an. Nur wenn die eigene Identität abgelehnt wird, greift es auf die Header der Codex-CLI zurück; dieses Fallback wird in die Konfiguration geschrieben, in einem Begriff, den collie stt status Ihnen zurückmeldet. Collie liest oder speichert ~/.codex/auth.json zu keinem Zeitpunkt; die Binärdatei, der Sie bereits vertrauen, bleibt die einzige Komponente, die darauf zugreift.
Sie können es auch in den Einstellungen auswählen. Öffnen Sie Einstellungen → Sprache → Host-Sprache auf einem Gerät mit Schreibzugriff. Die Seite zeigt an, was der Host derzeit verwendet. Für das ChatGPT-Abonnement wird auch die erfasste Identität angezeigt: honest oder codex-cli, falls die Ausweichlösung erforderlich war. Die Zeile ChatGPT-Abonnement ist nur verfügbar, wenn codex auf dem Host installiert und bei ChatGPT angemeldet ist. Collie fragt codex login status ab, um dies zu ermitteln. Andernfalls nennt die Zeile den Grund in einem Satz und ihr Einrichtungsanleitung kennzeichnet den nächsten Schritt: Codex auf dem Host installieren, mit codex login anmelden und dann auf ChatGPT-Abonnement verwenden tippen. Wenn Sie auf die Zeile tippen, zeigt ein Dialogfenster dieselbe Einverständniserklärung wortwörtlich unter dem Hinweis an, dass die Änderung für jedes mit dem Host gekoppelte Gerät gilt. Es werden keine Daten an den Host gesendet, bis Sie auf Ich akzeptiere tippen. Anschließend führt der Host dieselbe Prüfung wie collie stt setup aus, prüft zuerst die tatsächliche Identität und schreibt dieselbe Konfiguration. Schlägt die Prüfung fehl, wird nichts geschrieben und das Dialogfenster nennt den Grund. Aus auf derselben Seite entfernt den Anbieter. Das Terminal funktioniert weiterhin wie gewohnt.
Führen Sie Ihren eigenen Befehl aus: der local-cli-Anbieter
local-cli führt einen bereits vorhandenen Transkriptionsbefehl einmal pro Aufnahme aus, ohne zwischengeschalteten HTTP-Server:
bin/collie stt setup --provider local-cli \
--command /Applications/Muesli.app/Contents/MacOS/muesli-cli --args transcribe
bin/collie stt testCollie schreibt die Aufnahme in eine private temporäre Datei und führt <command> [args…] <file> aus. Der Dateipfad ist immer das letzte Argument. Die Standardausgabe des Befehls, gekürzt, ist das Transkript.
| Einstellung | Flag | Umgebungsvariable | Beschreibung |
|---|---|---|---|
command | --command | COLLIE_STT_COMMAND | Ein absoluter Pfad oder ein Name in PATH. |
args | --args | keiner | Die Argumente vor dem Dateipfad. |
Ein einfacher Name wird beim Ausführen von setup aufgelöst und der vollständige Pfad wird gespeichert. Der Dienst läuft mit einem kurzen PATH, sodass ein Name, den Ihre Shell findet, dort möglicherweise nicht aufgelöst werden kann. Ein relativer Pfad wie ./whisper-cli wird abgelehnt.
--args akzeptiert durch Leerzeichen getrennte Wörter. Keine Shell liest sie, daher bleiben Anführungszeichen wie eingegeben erhalten. Ein Argument, das ein Leerzeichen enthält, erfordert stattdessen das JSON-Format:
bin/collie stt setup --provider local-cli --command whisper-cli \
--args '["-m", "/srv/my models/ggml-base.bin", "-nt"]'Was der Befehl tun muss:
- Eine reguläre Datei sein, die Ihr Benutzer ausführen kann. Ein Symlink auf eine solche Datei ist zulässig, da Collie ihm folgt.
collie stt setupweist alles andere ab, undcollie stt statusgibt den Fehler an. - Mit Status 0 beenden und das Transkript nach stdout schreiben. Alles andere lässt das Diktat fehlschlagen.
- Innerhalb von 60 Sekunden fertig sein. Collie bricht ihn und jeden von ihm gestarteten Prozess danach mit SIGKILL ab.
- Höchstens 256 KiB nach stdout ausgeben. Collie bricht ihn ab, sobald er mehr ausgibt.
- Nichts weiter laufen lassen. Wenn der Befehl endet, bricht Collie jeden noch vorhandenen Prozess ab, den er gestartet hat. Ein Hilfsprozess, der aktiv bleiben muss, muss eine eigene Sitzung starten, beispielsweise mit
setsid.
Unter Windows beendet Collie den gesamten Prozessbaum des Befehls zu denselben Zeitpunkten, und nach einem sauberen Beenden beendet es jeden vom Befehl gestarteten Prozess, der noch läuft. Ein Fall verbleibt: Ein Prozess, der von einem bereits beendeten Hilfsprozess gestartet wurde, kann den Befehl überdauern.
Höchstens zwei Diktate führen den Befehl gleichzeitig aus. Ein drittes erhält dieselbe Antwort "beschäftigt", die das Telefon bereits kennt, und Collie startet dafür nichts.
Eine leere Standardausgabe ist ein Fehler auf dem Telefon, da nichts zum Einfügen vorhanden ist. collie stt test wertet dies als Erfolg, da die zugehörigen Aufnahmen Stille enthalten.
Hinweis. Der Befehl läuft als der Benutzer der Bridge mit dessen Rechten, einmal pro Diktat. Er erhält keine Shell, kein stdin und keine COLLIE_*-Umgebungsvariable. Seine Standardfehlerausgabe wird nie gelesen, und das Telefon sieht nie die Befehlszeile oder einen Pfad, sondern nur, dass der Befehl fehlgeschlagen ist, sowie seinen Exit-Status.Die temporäre Datei befindet sich in einem Ordner, den nur Ihr Benutzer öffnen kann, und Collie löscht sie nach jedem Durchlauf. Wurde die Bridge selbst während des Durchlaufs abgebrochen, entfernt der nächste Bridge-Start solche Ordner, sobald sie eine Stunde alt sind. Wohin die Audiodaten danach gelangen, hängt vom Befehl ab: Eine lokale Engine behält sie auf dem Host.
Die Begründung für all das oben Genannte – warum dies zweimal abgelehnt wurde, was sich geändert hat und warum die Schnittstelle so aufgebaut ist – finden Sie in ADR 0029.
Web-Push (optional)
Standardmäßig deaktiviert. Die Einrichtung erfordert drei Schritte. Die Sender-Bibliothek (web-push) ist während des Builds als optionale Abhängigkeit enthalten:
collie push-keys # 1. generate + write the VAPID keys
collie restart # 2. Collie reads them at start
# 3. on your phone: Settings → AlertsDer Befehl push-keys generiert das Schlüsselpaar und schreibt COLLIE_VAPID_PUBLIC sowie COLLIE_VAPID_PRIVATE mit Dateimodus 600 in das aktive .env, welches bei einer Binärinstallation ~/.config/collie/.env ist oder das Plugin-Konfigurationsverzeichnis von Herdr bei einer Herdr-Installation.
Übergeben Sie eine Kontakt-URI als Argument, um den Subject-Claim nach RFC 8292 zu setzen:
collie push-keys mailto:you@example.comBei von Herdr verwalteten Installationen sind beide Schritte als Aktionen verfügbar (herdr plugin action invoke push-keys --plugin herdr.collie und restart). Herdr-Aktionen akzeptieren keine Positionsargumente, daher erfordert das Setzen eines Subjects die direkte Ausführung des Befehls in der Shell.
Details zur Schlüsselverwaltung:
Der Befehl verweigert das Überschreiben vorhandener Schlüssel, es sei denn, Sie übergeben --force. Das Ersetzen von Schlüsseln macht alle aktuellen Abonnements ungültig, sodass sich jedes Gerät erneut anmelden muss, bevor es wieder Benachrichtigungen empfangen kann. Wenn Sie bei einer bestehenden Konfiguration ein Subject-Argument angeben, wird nur die Kontaktadresse aktualisiert und die aktuellen Schlüssel bleiben erhalten.
Hinweis. Bei Herdr-Versionen vor 0.8.0 bleiben Aktionen auf den Satz festgelegt, der während der ersten Plugin-Installation zwischengespeichert wurde (ADR 0006). Die Aktionenpush-keysundpush-testwerden erst angezeigt, wenn Sieherdr plugin installausführen. Führen Sie stattdessen direktbash scripts/collie-ctl.sh push-keysaus. Das Wrapper-Skript übergibt den Befehl direkt an die Binärdatei.
Testen Sie den Zustellpfad über alle abonnierten Geräte hinweg:
collie push-test # or: push-test "Title" "Body"Die Zustellung dauert ein bis zwei Sekunden. Wenn der Befehl meldet, dass Push deaktiviert ist, starten Sie den Dienst neu, damit er die generierten Schlüssel lädt. Wenn er meldet, dass keine Geräte abonniert sind, schließen Sie Schritt 3 im Browser des Telefons ab.
Web-Push erfordert einen sicheren Kontext (HTTPS). Dieser wird durch tailscale serve (MagicDNS-Zertifikate) oder einen externen Reverse-Proxy bereitgestellt, der TLS terminiert (Variante C). Reine HTTP-Setups (COLLIE_SERVE_MODE=http) bieten keinen sicheren Kontext, und der Browser deaktiviert die Abonnement-Steuerelemente in den Einstellungen.
Collie sendet Benachrichtigungen, wenn ein Agent in den Zustand blockiert oder fertig wechselt, und fügt die Nachricht des Agenten in den Textkörper ein. Durch Auswählen der Benachrichtigung navigieren Sie in der Web-Oberfläche direkt zu diesem Agenten.
Welche Benachrichtigungen Collie sendet
Fünf Arten mit jeweils eigenem Schalter unter Einstellungen → Benachrichtigungen → Benachrichtigen wenn.
| Benachrichtigung | Wird ausgelöst, wenn | Standard |
|---|---|---|
| Eingabe erforderlich | ein Agent auf Sie wartet | an |
| Abgeschlossen | ein Agent seine Aufgabe beendet | aus |
| App-Aktualisierungen | Ein neueres Collie-Release ist verfügbar | an |
| Maschinenlast bleibt hoch | CPU, Arbeitsspeicher oder die vollste Festplatte einer Maschine bleiben über einer Regel, die Sie für sie festgelegt haben | an |
| Cache wird bald kalt | Der Prompt-Cache eines Bereichs läuft in etwa fünf Minuten ab | aus |
Finished wird ausgelöst, wenn ein Agent vom Zustand arbeitend in den Leerlauf wechselt; ein von Ihnen unterbrochener Agent gilt daher ebenfalls als abgeschlossen.
Die Maschinenlast sendet nichts, bis Sie auf der Seite einer Maschine eine Regel festlegen. Der Schalter deaktiviert alle Regeln auf einmal. Jedes Mal, wenn ein Wert ansteigt und hoch bleibt, wird eine Benachrichtigung gesendet; ein Antippen öffnet die Statusansicht dieser Maschine. Siehe Maschinen.
Jedes Gerät zeigt den Titel einer Benachrichtigung in seiner eigenen Sprache an, auf einem Gerät, auf dem Collie seit der Aktualisierung nicht geöffnet wurde, auf Englisch. Der Textkörper bleibt so, wie die Bridge ihn geschrieben hat.
Jeder Schalter gilt für die gesamte Bridge. Ein Push geht an jedes abonnierte Gerät; pro Gerät muss daher nichts eingestellt werden.
Die Cache-Warnung lässt sich in den Einstellungen des jeweiligen Bereichs auch für jeweils einen einzelnen Bereich aktivieren: Öffnen Sie den Bereich, tippen Sie auf ⋮ und anschließend auf Bereichseinstellungen. Diese Bereiche sind unter dem globalen Schalter in den Einstellungen aufgelistet, jeweils mit einer Entfernen-Schaltfläche.
Die beiden Zustände ergänzen sich, anstatt sich zu überschreiben. Ein Bereich wird gewarnt, wenn der globale Schalter aktiv ist oder der Bereich auf dieser Liste steht. Das Deaktivieren des globalen Schalters schaltet einen manuell beobachteten Bereich also nicht stumm.
Ein beobachteter Bereich wird einmal pro Warm-Zyklus gewarnt. Die nächste Anfrage des Agenten verschiebt die Frist, und erst dann kann derselbe Bereich erneut warnen. Die Ruhezeiten gelten: Eine stummgeschaltete Bridge sendet nichts, und eine Stummschaltung, die innerhalb des Zeitfensters endet, warnt dennoch. Ein Bereich, der bereits inaktiv ist, wird niemals gewarnt; dies schließt auch Bereiche ein, die durch einen /model-Wechsel vor Ablauf der Zeit inaktiv wurden.
COLLIE_CACHE_WARN_SECONDS verschiebt das Zeitfenster, Standardwert sind 300 Sekunden (configure.md).
Hinweis. Diese Warnung benötigt den Stand des Prompt-Cache. Sie deckt daher ausschließlich Bereiche ab, die einen Cache-Countdown anzeigen: Das Harness muss ein Protokoll führen, das Collie lesen kann, und der Agent muss mindestens einen Schritt ausgeführt haben. Das Zeitfenster, in dem ein Bereich tatsächlich warnt, entspricht der konfigurierten Sekundenzahl oder der halben Cache-Lebensdauer dieses Bereichs, je nachdem, welcher Wert kürzer ist. Ein einstündiger Claude-Cache behält das volle 300-Sekunden-Fenster. Ein Fünf-Minuten-Cache (Codex, OpenCode, pi und omp) warnt stattdessen etwa zweieinhalb Minuten vor dem Erkalten.
Veraltete Abonnements können sich mit der Zeit ansammeln, da Neuinstallationen auf dem Startbildschirm und Service-Worker-Resets neue Endpunkte erstellen, ohne immer ein HTTP 410 zurückzugeben. Collie aktualisiert den Datensatz, wenn sich ein Gerät erneut registriert. Sie können gespeicherte Endpunkte direkt anzeigen und löschen:
# one line per device: service, since, user agent, endpoint tail
bin/collie push list
bin/collie push forget <substring> # or: push forget --allPush-Nachrichten von einem Durable Agent
Die Fragekarte eines durable agents kann eine Push-Benachrichtigung an Ihr Telefon senden, und Collie begrenzt, wie viele Benachrichtigungen ein durable agent auslöst.
Die Benachrichtigung lautet „Berechtigung erforderlich in“ gefolgt von dem Namen, den Sie dem Bereich gegeben haben. Sie enthält niemals den eigenen Fragetitel des durable agents. Ein durable agent kann seinen Text anpassen: Sein Titel (maximal 60 Zeichen) folgt nach einem Doppelpunkt auf Ihren Bereichsnamen, und seine Zeile (maximal 120 Zeichen) bildet den Textkörper. Der Text ändert den Inhalt der Benachrichtigung, niemals jedoch deren Häufigkeit.
| Obergrenze | Limit | Überschritten |
|---|---|---|
| Ein Bereich | 3 Push-Nachrichten pro Minute | Die Frage erscheint auf dem Smartphone und sendet keine Push-Nachricht |
| Ein Durable Agent auf einer Maschine | 10 Push-Nachrichten pro Minute | Ebenso |
| Ein Durable Agent auf einer Maschine | 30 Push-Nachrichten pro Stunde | Eine Zusammenfassungs-Benachrichtigung, danach eine Stunde lang keine Benachrichtigung von diesem durable agent |
Die Zusammenfassung lautet „Ein durable agent auf {host} stellt viele Anfragen“, mit dem Namen der Maschine für {host}. In einer Crew nennt sie das Mitglied. Der Schalter „Eingabe erforderlich“ und die Schlummerfunktion halten die Zusammenfassung ebenfalls zurück. Eine Obergrenze blendet niemals eine Frage aus: Jede offene Frage verbleibt auf dem Telefon.
Collie sendet eine Benachrichtigung für eine Frage einmal. Es merkt sich jede Benachrichtigung anhand von Maschine, durable agent und Werkzeugaufruf. Startet ein durable agent neu und stellt dieselbe Frage erneut, erscheint sie auf dem Telefon, löst aber keine zweite Benachrichtigung aus. Eine Frage wird eine Stunde nach dem Schließen vergessen. Dieser Zwischenspeicher liegt unter durable-asks.json im Statusordner. In einer Crew führt der Lead diese Regeln aus und behält diese Datei; das Mitglied sendet keine Benachrichtigungen für eigene Fragen (ADR 0100).
Diese Seite auf GitHub bearbeiten