Mein erster Prompt verbot Emojis und Deko und ueberstimmte damit SOUL.md. Formatierung kommt aus der Persona, nicht aus dem Job. Dazu news-melden.sh: Text via notify.sh, Stimme via voice-service :8650 (Lucys echte deutsche Stimme, nicht Hermes' englisches edge-TTS) und hermes send MEDIA:. SOUL.md-Verweise auf die abgeschalteten Werkzeuge kanban/delegation behoben. 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.