# talk > **Status: WIP** — aktive Entwicklung (talk 2.0). Binde Spezifikation: > [`.scratch/talk-2-0/spec.md`](.scratch/talk-2-0/spec.md) · > Implementierungsplan: [`.scratch/talk-2-0/plan.md`](.scratch/talk-2-0/plan.md) **talk** macht Skripte und KI-Agenten hörbar: Ein Aufruf — `talk "Build fertig"` — spricht eine kurze Nachricht über eine TTS-Provider-Kette (ElevenLabs → OpenAI → Edge-TTS → OS-Stimme), serialisiert durch den Daemon `talkd`. Cross-platform (Windows/macOS/Linux, amd64/arm64), statische Binaries, keine Runtime-Abhängigkeiten. ## Befehle | Befehl | Zweck | | --- | --- | | `talk "Text"` | Ansage — Abkürzung für `talk say`, non-blocking | | `talk say "Text"` | Ansage (Text als Argument oder von stdin) | | `talk wrap -- ` | Befehl ausführen, Erfolg/Misserfolg + Dauer ansagen | | `talk mute` / `talk unmute` | Ansagen dauerhaft stummschalten / Stummschaltung aufheben | | `talk status` | Daemon-Status (Queue, Mute, Provider, Version) | | `talk cancel` | laufende und geplante Ansagen abbrechen | | `talk voices` | verfügbare Stimmen anzeigen | | `talk test` | Test-Ansage ausgeben | | `talk doctor` | Selbstdiagnose des Setups | | `talk setup` | geführte Ersteinrichtung (Wizard) | Say-Flags (gelten auch für `talk "Text"`): `--wait`, `--now`, `--priority`, `--voice`, `--lang`, `--provider`. **Hinweis:** In diesem Stand ist `say` (und der Default-Aufruf `talk "Text"`) implementiert — die erste Ansage über OS-TTS (blockierend; Daemon-Anbindung folgt). Alle anderen Befehle sind Stubs und melden `not implemented yet` (Exit-Code ≠ 0). ### OS-TTS auf Linux (Dev-Abhängigkeit espeak) Der OS-Provider `osbuiltin` nutzt auf Linux zwei Wege: - **Audio-Bytes** (Wiedergabe über den eingebauten oto-Sink): benötigt `espeak` (oder `espeak-ng`). Auf NixOS als Dev-Abhängigkeit: `nix shell nixpkgs#espeak-ng`. - **Direktansage** ohne espeak: `spd-say` (speech-dispatcher) — spielt selbst über den Daemon ab, kann aber nach `spd-say --help` keine Bytes in Dateien/Pipes liefern. `talk` nutzt diesen Weg automatisch, wenn kein espeak vorhanden ist. `TALK_AUDIO_SINK=null` (oder `audio.sink = "null"` in der config.toml) schaltet jede Tongabe ab — für CI und Server. ## Entwicklung ```console go build ./... # bauen go test ./... # Tests go vet ./... # statische Analyse gofmt -l . # Formatierung prüfen (leerer Output = ok) ``` CI: `.gitea/workflows/test.yml` (Gitea Actions) läuft vet, gofmt-Check, Tests und Build bei jedem Push und Pull Request. ## Lizenz MIT — siehe [LICENSE](LICENSE).