Haarvisie verslagen
← Alle verslagen📄 Download als PDF
🎧 Luister dit verslag
1,0x
⬇️ Download naar telefoon

Stem-Conductor — back-end handleiding

Dit is de complete technische uitleg van de live-stem-Conductor.

Daarmee praat Jamal live met Claude (de Conductor) via zijn stem.

Net als de back-end-handleiding die we voor Jarvis hebben.

1. Wat is het + adres + login

De stem-Conductor is een webpagina.

Je opent de pagina, drukt op de microfoon, en praat.

Je ziet live je eigen tekst verschijnen.

Je ziet ook het antwoord van Conductor als tekst.

En Conductor praat terug met de Sulafat-stem.

Het brein is Claude/Conductor mét tools — dus mét geheugen én volle macht over Jamals computers.

Het is dus geen kale chatbot, maar de echte Conductor met handen.

Adres:

Login (Basic-auth):

Belangrijk over het adres:

2. Architectuur (hoe het in elkaar zit)

De stem-Conductor heeft vier onderdelen.

A. De server (het hart)

B. De LaunchAgent (houdt het aan)

C. De motor (Anthropic Messages-API)

D. De hand (run_bash-tool)

Hoe een beurt loopt:

  1. Pagina stuurt je tekst (en evt. cameraplaatje) naar /ask_stream.
  2. run_conductor() praat met de Messages-API.
  3. Wil Claude een commando draaien, dan loopt de tool-lus (max 24 rondes).
  4. Antwoord wordt in zinnen geknipt en per zin als Sulafat-audio teruggestuurd.
  5. Pagina speelt de audio gapless af in een wachtrij.

3. Waar staat wat (alle paden)

Onderdeel Pad
Server-script ~/.claude/scripts/praat-conductor-server.py
Webpagina ~/.claude/praat/index.html
Secrets (API-keys) ~/.claude/praat/.env (rechten 600)
LaunchAgent ~/Library/LaunchAgents/nl.haarvisie.praat-conductor.plist
Uitvoer-log ~/.claude/praat/server.log
Fout-log ~/.claude/praat/server.err
Werkmap / cameraplaatje ~/.claude/praat-workspace/ (camera = cam.jpg)
TTS-script (Sulafat) ~/.claude/scripts/tts-gemini.py
Telegram-verzender ~/.claude/scripts/telegram-send.sh
ffmpeg ~/.local/bin/ffmpeg
Geheugen-index ~/.claude/projects/-Users-macbookjamal/memory/MEMORY.md
Voorkeuren-register ~/.claude/projects/-Users-macbookjamal/memory/voorkeuren_jamal.md

In .env staan:

Reden voor een 600-bestand: onder de LaunchAgent kan de Keychain locked zijn.

4. Veilig herstarten

Als de server hapert of je hebt het script aangepast: herstart alleen de LaunchAgent.

launchctl kickstart -k gui/$(id -u)/nl.haarvisie.praat-conductor

Verifiëren dat hij leeft:

curl 127.0.0.1:8765

Krijg je 401 terug, dan leeft de server (dat is de login-vraag).

NOOIT doen:

Logs bekijken bij problemen:

tail -50 ~/.claude/praat/server.log
tail -50 ~/.claude/praat/server.err

5. Functies (wat hij allemaal kan)

Geheugen + context-injectie

Volle macht via de shell

Sulafat-stem met streaming

Camera (vision)

Transcript zichtbaar

/end → analyse-verslag naar Telegram

Zelflerend (voorkeuren)

6. Changelog v1 → v11

De 'te ingewikkeld'-fix (lus 8 → 24)

De geheugen-wis-bug (v11)

7. Bekende problemen + fixes

# Probleem Oorzaak Fix
1 Microfoon "not allowed" Mic mag alleen op een veilig adres (https of localhost); Tailscale-IP via http telt niet MacBook = http://localhost:8765; iPhone = de https-link
2 Sulafat valt weg (robotstem) Service vond ffmpeg niet (kale PATH onder launchd) PATH ~/.local/bin:... meegeven aan de TTS-subprocess + GEMINI_API_KEY uit .env
3 Loodzwaar traag (~10s/beurt) Elke beurt startte de hele claude-CLI op (9s vaste boot, los van het model) Motor vervangen door de directe Anthropic Messages-API
4 "Verbinding mislukt" blijft hangen (HTTP 400) Na een hapering raakte de MESSAGES-historie corrupt Zelfherstel: mislukte beurt eruit (del MESSAGES[start:]); bij 400 MESSAGES.clear() + 1x schoon opnieuw
5 Geen geheugen ("kale" Claude) Niets ingeladen _load_context(): CLAUDE.md + regels + MEMORY + Hermes ingeladen; leest zelf dieper via run_bash
6 Verslag komt niet binnen build.py op de VPS te traag (218 verslagen) → ssh-build timede out Build loslaten met subprocess.Popen → Telegram-link gaat meteen, html volgt later
7 "offline" bovenin de pagina De HEAD-ping werd niet afgehandeld do_HEAD toegevoegd (geeft nu 200)
8 Gemini-stem hikt (geen audio, finishReason OTHER) Transient Gemini-beperking In tts_sulafat() tot 3x opnieuw proberen; faalt zacht → browserstem
9 Link werkt niet op de MacBook (NXDOMAIN) MagicDNS staat op de MacBook UIT (Telegram-IPv6-fix) MacBook = localhost, iPhone = de .ts.net-link
10 iPhone kan niet praten iOS-Safari heeft geen (betrouwbare) Web Speech API Forceer opname-modus op iOS: record → /transcribe → faster-whisper

8. Storing-zoekgids (stap voor stap)

Pagina laadt niet / "kan geen verbinding maken"

  1. Leeft de server? curl 127.0.0.1:8765 → moet 401 geven.
  2. Niet? Herstart: launchctl kickstart -k gui/$(id -u)/nl.haarvisie.praat-conductor.
  3. Check de fout-log: tail -50 ~/.claude/praat/server.err.

"offline" staat bovenin

Microfoon werkt niet ("not allowed")

Conductor praat met robotstem (geen Sulafat)

  1. Check de log op tts-fout: grep tts-fout ~/.claude/praat/server.log.
  2. Staat de GEMINI_API_KEY in ~/.claude/praat/.env?
  3. Is ffmpeg er? ls ~/.local/bin/ffmpeg.
  4. Vaak is het tijdelijk (Gemini hikt) — even opnieuw proberen.

Alles is traag

"Het werd te ingewikkeld" bij een echte klus

"Verbinding mislukt" blijft komen

Geen verslag binnengekomen na een gesprek

iPhone: link doet het niet

Algemene check-volgorde bij elke storing

  1. curl 127.0.0.1:8765 → 401 = leeft.
  2. tail -50 ~/.claude/praat/server.log en server.err.
  3. launchctl kickstart -k gui/$(id -u)/nl.haarvisie.praat-conductor.
  4. NOOIT Claude/Conductor zelf herstarten.
🎙️ Bespreek met Jarvis