Das Repo curator-staleness-check war ein eigener Wachhund mit eigenem systemd-Timer und eigener CI-Ampel - und ueberwachte einen Cron-Job ueber eine fest verdrahtete ID (a47910e2ef05), den es laengst nicht mehr gibt. Er haette bei jedem Lauf Alarm geschlagen fuer etwas, das nicht existiert. Dieselbe Frage steht jetzt in vier Zeilen im Radar. Repo archiviert. Falle dabei: find -printf %T@ liefert einen Float, bash bricht damit ab - %Ts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.sh → stack-ist.sh |
| Updates am Sonntag | sonntags 04:30 | --no-agent |
sonntags-update.sh → autoupdate.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.sherreicht 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.
Nachtrag 21.08.: Persona, Quellen-Links und Stimme
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--promptkommen. Ohne Flag gibt der Befehl den Text nur aus und die alte Fassung bleibt stehen. Nach jeder Aenderung injobs.jsonnachsehen.- 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
datefeststellen 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 5–17× groesser: Qwen3-TTS 0,6–1,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.