Files
mission-control-v2/deploy/jobs
HitonabiandClaude Opus 5 dc78114102
Ampel / ampel (push) Successful in 23s
fix(jobs): Doppelversand behoben - Werkzeug-Timeout loeste einen zweiten Aufruf aus
Erster echter Lauf am 22.08. schickte den Bericht zweimal (07:01:42 und
07:02:14). Ursache: Hermes' terminal-Werkzeug bricht nach 30 s ab, die
Sprachsynthese dauert laenger, der Agent hielt den Aufruf fuer gescheitert und
wiederholte ihn - der Text war da laengst raus.

Jetzt: Text senden, Stimme per setsid abgekoppelt, Rueckkehr nach 1,1 s.
Dazu eine Doppelversand-Sperre ueber den Text-Hash, die jede Wiederholung
innerhalb von zwei Stunden abweist - egal aus welchem Grund.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 12:59:45 +02:00
..

Die drei Jobs (KISS-Umbau, 21.08.2026)

Vorher: 4 Hermes-Crons + 6 systemd-Timer, verteilt auf zwei Mechanismen. Deshalb fiel am 20.08. tagelang niemandem auf, dass ein Waechter fehlte — niemand schaut an zwei Orten nach.

Jetzt: drei Jobs, ein Ort. hermes cron list zeigt die gesamte Automatik.

Job Wann Art Skript
Daily News Report taeglich 07:00 Agent + Websuche
KI und Stack Radar samstags 08:00 --no-agent stack-radar.shstack-ist.sh
Updates am Sonntag sonntags 04:30 --no-agent sonntags-update.shautoupdate.sh

Daneben laufen als stille Rohrleitung weiter: mc2-backup (03:33) und projekte-sync (stuendlich). Die melden sich nie, die sichern und synchronisieren nur.

Der Entwurfsgrundsatz

Fakten sammelt ein Skript, Prosa schreibt das Modell.

Der alte Selbsttest war am 20.08. gruen, waehrend vier Dinge kaputt waren: das Kritiker-Gate zeigte seit einem Tag auf ein umbenanntes Modell (404), Lucys SOUL.md war blockiert, das Dashboard stand ohne Passwort offen, die CI war rot. Er hatte geprueft, ob Dienste antworten — nicht, ob sie stimmen.

stack-ist.sh prueft deshalb Ergebnisse: loesen die Rollen-Aliase noch auf? Ist der letzte Timer-Lauf gutgegangen? Ist eine Sicherung juenger als zwei Tage? Liefert die oeffentliche Adresse Daten ohne Anmeldung? Beim ersten Lauf hat es sofort zwei echte Befunde gefunden.

Kugelsicher heisst konkret

  • Das Modell steht nicht im kritischen Pfad. Antwortet es nicht, gehen die Rohbefunde trotzdem raus. Nur die Prosa faellt weg, nie die Meldung.
  • Es meldet immer. „Alles gruen" ist ein Ergebnis, kein Grund zu schweigen.
  • Kein set -e. Ein einzelner fehlschlagender Test darf den Bericht nicht abschneiden.
  • Ein Melderweg: deploy/notify.sh erreicht Telegram und Lucys Briefkasten (aus dem sie spricht) in einem Aufruf. Die Jobs laufen mit --deliver local, damit Hermes nicht ein zweites Mal sendet.
  • Kein Fuellmaterial. Die Prompts verbieten ausgedachte Vorschlaege ausdruecklich — ein Bericht mit Fuellmaterial wird nicht gelesen, und dann auch der echte Befund nicht.

Ausbringen

Die Skripte muessen unter ~/.hermes/scripts/ liegen (Vorgabe von hermes cron --script). Quelle ist dieses Verzeichnis:

scp deploy/jobs/*.sh hitonabi@192.168.178.151:/home/hitonabi/.hermes/scripts/
ssh hitonabi@192.168.178.151 'cd ~/.hermes/scripts && sed -i "s/\r$//" *.sh && chmod +x *.sh'

‼️ Das sed ist Pflicht: vom Windows-PC kopierte Dateien haben CRLF, und bash scheitert daran mit unverstaendlichen Meldungen.

Abgeschaltet am 21.08.

Weg Warum
Cron morgen-digest geht im Daily News Report auf
Cron tech-radar geht im Stack Radar auf
Cron nacht-wartung pruefte Lebenszeichen, nicht Ergebnisse
Cron wissens-sync war nie gelaufen — kein last_run_at
Timer mc2-bagatell 15 Naechte hintereinander „0 eingespielt"
Timer mc2-selfsmoke geht in stack-ist.sh auf
Timer pbs-backup doppelt zu mc2-backup und seit 21.08. rot (/srv/models/mem0 gibt es nicht mehr)
Timer mc2-autoupdate wird jetzt vom Cron „Updates am Sonntag" gestartet

Die Unit-Dateien liegen noch da, nur disabled — Rueckbau ist ein Befehl.


Fehler, den ich gemacht hatte: Mein erster Prompt fuer den Daily News Report schrieb woertlich „keine Emojis, keine Aufzaehlungspunkte, keine Ueberschriften-Deko" — und hat damit genau das wegoptimiert, was den Bericht vorher gut machte.

★★ Die Formatierung kam nie aus dem Job-Prompt. Die alten Prompts waren kurz („eine praegnante 3-Punkte-Zusammenfassung an den Commander"). Emojis, Ton und die Anrede stehen in ~/.hermes/SOUL.md — Lucys Persona:

Du sprichst den Nutzer IMMER mit Commander an. Locker, herzlich, schlagfertig, charmant, selbstbewusst.

Lehre: den Job-Prompt kurz halten und die Persona arbeiten lassen. Wer im Prompt Stil verbietet, ueberstimmt die Persona — und merkt es erst, wenn die Nachricht seelenlos ankommt.

Stimme in Telegram

hermes send kann MEDIA:<pfad>. Damit geht eine fertige Audiodatei als Anhang nach Telegram. deploy/jobs/news-melden.sh macht daraus einen Aufruf:

Agent schreibt zwei Dateien
  /tmp/news-text.md    (Emojis, Links, Formatierung)  -> notify.sh -> Telegram + Briefkasten
  /tmp/news-sprich.txt (3-4 Saetze, nichts Vorlesbares fehlt) -> :8650/tts -> WAV -> hermes send MEDIA:

‼️ Nicht Hermes' eingebautes TTS nehmen. Das steht auf tts.provider: edge mit en-US-AriaNeural — englisch. Lucys echte Stimme ist MC2s voice-service auf :8650 (Piper de_DE-thorsten-medium). Deshalb ruft das Skript den Sidecar direkt per curl.

‼️ Kein ffmpeg noetig. Telegram nimmt die WAV direkt an. Fuer eine echte Sprachnachricht mit Wellenform braeuchte es OGG/Opus und damit ffmpeg — bewusst nicht installiert, eine Abhaengigkeit weniger.

Der Agent ruft einen Befehl auf, alles danach ist deterministisch. Faellt die Stimme aus, geht der Text trotzdem raus.

‼️ Folgefehler der Werkzeug-Abschaltung — gefunden und behoben

Nach dem Abschalten von kanban und delegation standen in SOUL.md noch zwei Anweisungen, die ins Leere zeigten: „rufst du sofort dein Werkzeug delegate_task auf" und „Ideen traegst du sofort im Kanban-Auftragsbuch ein". Genau die Klasse stiller Defekt, die am 19.08. das Kritiker-Gate zerlegt hat. Beide Abschnitte ersetzt (Sicherung: ~/.hermes/SOUL.md.bak-20260821).

Merke: wer einen Werkzeugsatz abschaltet, muss SOUL.md mitlesen.

Kugelsicher-Regeln, die dazugekommen sind

  • hermes cron edit <id> "text" speichert nichts — der Prompt muss ueber --prompt kommen. Ohne Flag gibt der Befehl den Text nur aus und die alte Fassung bleibt stehen. Nach jeder Aenderung in jobs.json nachsehen.
  • Alte Job-Fassungen liegen im Zustands-Backup: tar -xzf /srv/models/mc2-backups/mc2-state-*.tar.gz ./hermes/cron/jobs.json
  • Tagesaktualitaet muss man erzwingen: Datum per date feststellen lassen, mehrere Suchen verlangen, und Meldungen ohne belegbares Datum verwerfen.

Nachtrag 3 (21.08.): Lucys ECHTE Stimme, echte Sprachnachricht

Der Fehler: :8650 ist nicht Lucy

Ich hatte /tts auf MC2s voice-service (:8650) ohne Angabe von Engine und Stimme aufgerufen. Dessen /health sagt:

"engines":["elevenlabs","edge"]

Piper und Chatterbox sind dort gar nicht geladen — die Vorgabe fiel auf die erste verfuegbare: ElevenLabs „Artoria DE · Saber · Hermes-Stimme". Das ist Hermes' Stimme, nicht Lucys. Deutsch und weiblich, deshalb faellt es nicht sofort auf. Beide verfuegbaren Engines sind ausserdem Cloud — gegen die 100-%-lokal-Praemisse.

Lucys Stimme: lucy-stimme.service auf :8021

Engine Kyutai pocket-tts 2.1.0 (neueste, seit 04.05. unveraendert)
Modell german_24l — die volle Fassung, nicht die destillierte
Stimme geklont aus ref.mp3, gecacht in lucy_voice.safetensors (44 MB)
Laeuft ~/.lucy-stimme/, systemd-user-Dienst, enabled, CPU
Start ~48 s Ladezeit, danach ~5 s fuer 3,7 s Audio

Mitgezogen wurde die ganze Abstimmung, nicht nur das Modell: text_norm.py (Symbole/Pfade/URLs → Zahlen → Akronyme), Emotions-Voreinstellungen mit Anlaufwoertern, Umlaut-Wortliste, Hochpass auf der Referenz, kalibrierter Pegel. Ohne die klingt pocket nicht wie Lucy.

‼️ Der Sweep im TTS-Plan („seriell schlaegt parallel") wurde auf einem 9700X gemessen. Die Box ist ein Ryzen AI MAX+ 395 — das Ergebnis ist nicht uebertragen, nur uebernommen. Wer Tempo braucht, misst neu.

Recherche 21.08.: pocket bleibt

Nichts seit Mai schlaegt es auf dieser Achse. Die Alternativen sind 517× groesser: Qwen3-TTS 0,61,7 Mrd. (Apache 2.0, Deutsch, 3-Sekunden-Klon), NeuTTS Air 0,5 Mrd. (GGUF), CosyVoice2 0,5 Mrd. — gegen pockets 100 Mio. Fuer einen taeglichen Sprachnachrichten-Job auf CPU ist das der falsche Handel. Ihr wart bereits auf dem neuesten Stand — nichts zu aktualisieren.

Echte Sprachnachricht braucht OGG/Opus

Eine WAV kommt in Telegram als Dateianhang an. Fuer das runde Sprachmemo mit Wellenform braucht es OGG/Opus — dafuer wurde ffmpeg installiert (8.0.1):

ffmpeg -y -i ton.wav -c:a libopus -b:a 32k -ar 48000 -ac 1 ton.ogg
hermes send --to telegram "MEDIA:ton.ogg"

Ganze Kette (Text + Stimme + Versand) gemessen: 10 Sekunden.

Altlast am Rande

F:\Coding Stuff\lucy\lucy-tts\Lucy-Startklar.bat zeigt auf mission-control-2\client\lucy-tts — den Ordner gibt es seit der Repo-Trennung nicht mehr.