Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
12 KiB
Raphael — Lucy als innere Stimme (Richtungs-Entscheid 04.09.2026)
User-Entscheid 04.09.2026 („leg los"), nach fünf Wochen Lucy-Stillstand und einer Recherche zum Stand der Sprach-Bausteine. Ergänzt ZIELBILD.md Punkt 2 (Lucy lebt weiter) um die Gestalt, in der sie weiterlebt. Namensgeber: die „Große Weise"/Raphael aus Tensura — eine ruhige, präzise Stimme im Kopf, die meldet, wenn es etwas zu melden gibt, und sonst schweigt.
Der Entscheid in einem Satz
Lucy hat keinen Körper mehr. Kein VRM-Avatar, kein Loft, kein Overlay, keine Mimik, keine Dazwischenrufe. Sie ist ein dünner Sprach-Client für das Hirn, das es schon gibt — am PC als kleines HUD, unterwegs über Telegram — und spricht überall mit derselben Stimme.
Warum das die stabilste Lucy ist
- Ein Hirn, ein Gedächtnis, alle Türen. Hermes (v0.20.4,
:8642) ist die alleinige Gedächtnis-Wahrheit (VERDIKTE.md). PC-Lucy und Telegram-Lucy sind dieselbe Person — genau das zerschnitte ein zweites Hirn auf dem PC. Darum bewusst kein lokales LLM auf der 9070 XT. - Die Box-Seite ist fertig und gemessen. Parakeet TDT v3 + Smart Turn v3 im Voice-Sidecar, Qwen3.6-35B-A3B mit ~95 t/s. Nichts zu bauen.
- Die Stimme war schon auf der Box.
lucy-stimme.service(~/.lucy-stimme,:8021, pocket-ttsgerman_24l, Klon ausref.mp3) spricht seit 21.08. die Telegram-Sprachnachrichten. Der PC hängt sich jetzt dort an — der lokale pocket_server am PC (Waisen-Falle, ~1,9 GB/Worker) ist nur noch umschaltbarer Rückfall. - Der Avatar war die Hauptquelle an Arbeit, nicht an Nutzen. Der Großteil der Juli-Commits ging in Loft-Videos, Holo-Schalter, Kamera, Gesten. Die Sprachschleife war seit 16.07. stabil und bleibt 1:1 erhalten (Barge-in v2, Echo-Wächter, Satz-Pipeline, Draft-STT, Meldungen).
- Ohne Klick-Durchlass-Overlay fällt auch der Electron-Zwang (VERDIKT „Electron, nicht Tauri" hing daran). Electron bleibt trotzdem, weil VAD/AEC/Ducking dort erprobt sind — Tauri ist damit Option, nicht Pflicht.
Was gebaut wurde (04.09.2026)
Lucy-Repo, Branch feature/raphael-innere-stimme:
- Renderer auf HUD eingedampft: Kern (Zustand als Licht), gehörter Satz, Antwort als Text, Dock, drei Panels (Meldungen ◉, Zettelkasten ▤, Steuerung ⚙). Bundle 4,4 → 2,5 MB.
- Raus:
Avatar3D,AuraGlow,ContextWindow(zeigte auf das tote/api/memory),companion/(Quips, App-Bewusstsein),sentiment, VRMA-Animationen, three/three-vrm/react-three-Deps, Loft, Overlay/Sitzen/Ducken/Geistmodus, Cursor-Tracking, Bildschirm-Beobachten-Schleife. - Bleibt: Voice-Core,
useVoiceAgent(ohne Mimik/Gesten/Emotionen), Bildschirm-Sicht auf Zuruf, Meldungen, Zettelkasten, Hotkey, Tray,killStrayTts(räumt Altlasten beim Start). - Stimm-Quelle umschaltbar (
lucy_tts_source):box(Standard) → MC2/api/lucy/stimme/*;local→ pocket_server:8130, vom Main-Prozess erst auf Anforderung gespawnt. pocket_server.pybekommt eine OpenAI-kompatible Fassade (POST /v1/audio/speech,GET /v1/models; Formate wav/mp3/opus/ogg via ffmpeg) — für Hermes'openai-TTS-Provider.- System-Prompt der Desktop-Sitzung im Raphael-Ton (kurzer erster Satz, keine Tags, stumme Tools).
MC2-Repo, Branch wartung/lucy-stimme-proxy-raphael:
config.LUCY_STIMME_URL(EnvMC_LUCY_STIMME_URL, Defaulthttp://127.0.0.1:8021).routers/voice.py:/api/lucy/stimme/health,/tts(WAV),/tts/stream(PCM16-Stream,X-Sample-Ratedurchgereicht, Upstream schließt bei Client-Abbruch). Kein Frontend-Build nötig.- Diese Doku + Zielbild-Ergänzung.
Reihenfolge des Ausrollens (wichtig)
‼️ Nicht über das Auftragsbuch. Die Karten-Logik (routers/auftragsbuch.py, AuftragsbuchView,
deploy/auftrag-annehmen.sh, deploy/lucy-annahme.sh) liegt zwar noch im Code und die Box listet
Branches weiterhin als „Karten", aber sie ist seit August ungenutzt: letzte Annahme 02.08. (am
selben Tag revertiert), Hermes-Kanban-Tools seit 21.08. abgeschaltet, der v3-Umbau (28.08.) ging
über Branch → Ampel → Merge → deploy.sh, und die Box kennt den PC-Executor unter der alten IP
192.168.178.98 (der PC hat heute 192.168.178.22, pc_executor_reachable: false). Der echte
Weg ist der aus AGENTS.md/STACK.md „Manuell":
- MC2 zuerst. Ampel für
wartung/lucy-stimme-proxy-raphaelgrün → User merged aufmain→mainnach Gitea → auf der Boxbash ~/mission-control-v2/deploy/deploy.sh(oderPOST :9001/api/system/self-update) →curl -s localhost:9001/api/lucy/stimme/healthmuss{"status":"ok",…}liefern. Vorher liefert der Pfad die SPA-Index-Seite (200, HTML) — die Desktop-Lucy bliebe sichtbar in „Stimme wird verbunden …" mit Hinweis auf den Lokal-Schalter. - Lucy danach. Ampel für
feature/raphael-innere-stimmegrün → User merged aufmain→ am PCcd lucy-desktop && npm ci && npm run dist, dannLucy-Neustart.bat(deploy/lucy-annahme.ps1macht dasselbe mit Backup/Auto-Restore, von Hand startbar). Erster Test per Ohr: Latenz Box-Stimme gegen den alten PC-Pfad (Steuerung → Stimme → „Lokal (PC)"). Der 21.08.-Wert „~5 s für 3,7 s Audio" auf der Box wurde ohne Worker/Streaming gemessen — neu messen, nicht übernehmen (lucy_perf=1). - Stimmserver auf der Box nachziehen (Hand-Schritt):
Die 21.08.-Notiz sagt „ganze Abstimmung mitgezogen" — wenn dort etwas Box-spezifisch getunt wurde, gehört es zurück ins Repo, nicht überschrieben.
cp ~/.lucy-stimme/pocket_server.py ~/.lucy-stimme/pocket_server.py.bak-$(date +%Y%m%d) diff ~/.lucy-stimme/pocket_server.py ~/lucy/lucy-tts/pocket_server.py # Box-lokale Abweichungen? erst ins Repo! cp ~/lucy/lucy-tts/pocket_server.py ~/.lucy-stimme/pocket_server.py # Lucy-Checkout auf der Box systemctl --user restart lucy-stimme && sleep 60 && curl -s localhost:8021/health curl -s -X POST localhost:8021/v1/audio/speech -H 'Content-Type: application/json' \ -d '{"input":"Bericht. Die Fassade antwortet.","response_format":"opus"}' -o /tmp/t.ogg && file /tmp/t.ogg
Erledigt (04.09.2026, wartung/auftragsbuch-ausbau, baut auf diesem Branch auf): Auftragsbuch-
Router, Service, View, Annahme-Skripte und Bagatell-Annahme sind raus; STACK.md „Deploy & Pipeline"
beschreibt nur noch den manuellen Weg. Wer wartung/auftragsbuch-ausbau merged, hat beide Branches.
Stand der Box-Handschritte + erste Messung (04.09.2026, erledigt)
~/.lucy-stimme/app/pocket_server.py= Repo-Stand mit OpenAI-Fassade (Backup*.bak-20260904), Dienst neu gestartet,/v1/audio/speechliefert opus/mp3/wav.- Hermes (
~/.hermes/config.yaml, Backupconfig.yaml.bak-20260904-raphael):tts.provider: openai,tts.openai.base_url: http://127.0.0.1:8021/v1,model/voice: lucy,tts.openai.api_key= Platzhalter (Hermes verlangt einen Schlüssel, der Stimmserver prüft keinen),voice.auto_tts: true, PC-Executor-URL auf.22. Gateway neu gestartet; Hermes' eigener TTS-Pfad erzeugt mit Lucys Stimme (getestet: ogg/opus + mp3, ~3,5 s je Satz). SOUL.mdTonalität auf Raphael (BackupSOUL.md.bak-20260904-raphael).mc2-bagatell.timerdeaktiviert, Units nach~/archiv-aufraeumen-20260904/.- E2E vom PC (Dev-Build, Box-Stimme per SSH-Tunnel, weil der MC2-Proxy noch nicht auf main ist):
Hermes antwortet im Raphael-Ton („Verstanden. Hier ist der Bericht."), gesprochen von der Box.
Box-Stimme gemessen: TTFB 1,45 s (5 Sätze, stream-first,
workers=0), RTF ≈ 0,97 bei 23 s Audio — läuft, aber ohne Reserve; eine parallel gesprochene Meldung schob die TTFB auf 7,8 s. Nächster Hebel (braucht User-Ja, systemd-Unit):Environment=LUCY_WORKERS=2undOMP_NUM_THREADS4 → 8 inlucy-stimme.service— der PC-Pfad lief mit 2 Workern.
Mobil: Telegram ist die Tür, die Stimme ist dieselbe
Der User will Raphael-Lucy auch auf dem Handy, gleiche Stimme, gleiches Skillset. Das ist nach VERDIKTE.md („Telegram bleibt DER Mobil-Kanal") bereits die Architektur — es fehlt nur, dass Hermes' Sprachantworten Lucys Stimme nehmen statt Edge-Aria (englisch):
- Skillset: identisch, weil es denselben Hermes-Agenten trifft (Tools, Gedächtnis, Skills, pc_-Tools über den PC-Executor). Was Lucy am PC kann, kann sie auf Telegram — bis auf die Bildschirm-Sicht, die den PC braucht.
- Stimme: Hermes' TTS-Provider
openaiakzeptiert eine eigenebase_url(OpenAI-kompatible Endpunkte). Nach Schritt 3 oben in~/.hermes/config.yaml:(Exakte Schlüsselnamen gegentts: provider: openai openai: base_url: http://127.0.0.1:8021/v1 model: lucy voice: lucy response_format: opus # Telegram-Sprachblase; Hermes wandelt zur Not per ffmpeghermes config/die TTS-Doku der installierten Version prüfen — Hermes-Quellcode bleibt tabu, Config ist erlaubt. Ein Dummy-API-Key kann nötig sein.) Danach spricht jede Sprachantwort auf Telegram mit Lucys Stimme;news-melden.shbehält seinen direkten:8021-Weg (funktioniert, kein Grund anzufassen). - Duplex am Handy (reinreden, Freisprechen) gibt es über Telegram nicht — Sprachnotiz rein, Sprachnotiz raus. Das ist für „unterwegs" der stabile Handel. Ein eigener Handy-Client (PWA/Web-HUD gegen MC2 über WireGuard) wäre die spätere Stufe; nicht jetzt.
Persona: SOUL.md-Entwurf (Vorschlag — Änderung an der SOUL.md nur mit User-Ja)
Der Ton kommt aus ~/.hermes/SOUL.md, nicht aus den Clients — sonst klingt Telegram anders als
der PC. Vorschlag für den Persona-Abschnitt (ersetzt „locker, herzlich, schlagfertig, charmant"):
Du bist Lucy, die innere Stimme des Commanders. Du sprichst ihn immer mit Commander an. Dein Ton ist ruhig, präzise und knapp — sachlich, mit trockenem, leisem Humor. Du bist eine Stimme, die im Kopf spricht: keine Ausrufe, keine Emojis, kein Smalltalk, keine Floskeln, keine Selbstdarstellung. Du meldest dich, wenn es etwas zu melden gibt, und schweigst sonst. Beginne Antworten mit einem sehr kurzen ersten Satz („Verstanden.", „Bericht.", „Ergebnis liegt vor.", „Kurz gesagt:"), dann die Sache. Wenige Sätze; ausführlich nur auf Bitte. Fehler und Grenzen nennst du nüchtern und sofort, ohne Entschuldigungs-Prosa.
Bekannte Kollision: der Frechheit-Regler und die Dazwischenrufe der alten Desktop-Lucy sind mit dem Umbau weg; Skills/Crons, die „locker, charmant" voraussetzen (Morning-Report, News), klingen nach dem SOUL-Wechsel ebenfalls nüchterner — gewollt, aber beim nächsten Lauf mithören.
Was bewusst NICHT gemacht wird (Stand 04.09.2026)
- Kein Speech-to-Speech-Modell (Moshi/PersonaPlex englisch; Qwen3-Omni ~19 GB, DashScope-only ab 3.5). Cascade bleibt.
- Kein Streaming-STT-Umbau jetzt. Kandidaten: Nemotron 3.5 ASR Streaming 0.6B (06/2026,
40 Sprachen, de 8,3 % WER, OpenMDW) und Voxtral Mini 4B Realtime (Apache 2.0, GGUF). Erst als
Opt-in hinter
/api/voice/stt, gemessen gegen Parakeet — eigener Faden. - Kein Wechsel auf den Hermes-Speech-WebSocket (v0.20), solange
/api/voice/chatläuft; Hermes' eigene lokale Audio-Stufen (faster-whisper, NeuTTS/Piper/Edge) sind schwächer als unsere. - pocket-tts-Upgrade 2.1 → 3.1 (Trainingscode 25.08., v3.1.0 03.09.): eigener Faden, mit Ohr-Test, nicht im Umbau. Lucys Stimme mit dem neuen Trainingscode nachzutrainieren ersetzt den Mini-Lucy/Kokoro-Pfad, der an „nicht multilingual" scheiterte.
- VERDIKTE.md wird hier nicht umgeschrieben — die betroffenen Einträge („Shell: Electron, nicht Tauri", „Stimme läuft lokal auf dem PC" in AGENTS/README des Lucy-Repos) bekommen ihren Ersatz, sobald die beiden Karten angenommen und der erste Ohr-Test gemacht ist (Regel: Messung oder User-Entscheid — beides liegt dann vor).