Welle 3 · Doku (Bedienung, Betrieb, offene Fäden) und Oberfläche: Rückfragen im Meldungstext, Sprung zu Lucy

- BEDIENUNG.md: Welle 1 bis 3 für den Alltag (Rückfragen, Antworttasten, Lucys Freiheiten, Wartungsfenster,
  Zertifikate, Neu entdeckt, Docker-Dienste, Was ist neu, Zeitleiste, Strg+K, Zeitpläne, neue Telegram-Nachrichten)
- BETRIEB.md: Lucy (Freiheiten, Rückfragen, Untersuchungen, Wochenbericht, Hermes-Neustart für neue Werkzeuge),
  Wartungsfenster im Homelab-Teil
- OFFENE-FAEDEN.md: Welle 2 und 3 erledigt, was am 27.09. zu beobachten ist
- Einstellungen: Meldungen-Karte nennt Rückfragen und Wochenbericht; #lucy fasst nach, wenn Karten nachladen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-26 09:32:46 +02:00
co-authored by Claude Opus 5.5
parent 6904bcbfb0
commit 67c82f5f73
21 changed files with 156 additions and 26 deletions
+1 -1
View File
@@ -21,5 +21,5 @@ Session-Token der früheren Desktop-Anbindung ist weg.
Die alte Unit `hermes-dashboard.service` (abgeschaltet, alte Umgebung) steht als Altrest im Aufräumen-Panel. Die alte Unit `hermes-dashboard.service` (abgeschaltet, alte Umgebung) steht als Altrest im Aufräumen-Panel.
`soul-orchestrator.md` (seit 25.09.2026 abends): der Abschnitt „Homelab Orchestrator“ in `~/.hermes/SOUL.md` — Lucys `soul-orchestrator.md` (seit 25.09.2026 abends): der Abschnitt „Homelab Orchestrator“ in `~/.hermes/SOUL.md` — Lucys
Freiheiten je Aktionsart und wie sie „ja 7“ weitergibt. Von Hand eingesetzt (Sicherung `SOUL.md.bak-20260925-freiheiten`); Freiheiten je Aktionsart und wie sie „ja 7“ weitergibt. Von Hand eingesetzt (Sicherung `SOUL.md.bak-20260926-freiheiten`);
SOUL.md selbst gehört Hermes und liegt nicht im Repo. SOUL.md selbst gehört Hermes und liegt nicht im Repo.
+65 -5
View File
@@ -1,10 +1,12 @@
# Bedienung — der Homelab Orchestrator im Alltag # Bedienung — der Homelab Orchestrator im Alltag
_Stand 24.09.2026. Für dich als Nutzer. Technische Einzelheiten stehen in [BETRIEB.md](BETRIEB.md)._ _Stand 26.09.2026. Für dich als Nutzer. Technische Einzelheiten stehen in [BETRIEB.md](BETRIEB.md)._
**Kurz gesagt:** Die KI-Box kümmert sich selbst um sich. Du bekommst Nachrichten auf Telegram. Handeln musst du nur, **Kurz gesagt:** Die KI-Box kümmert sich selbst um sich. Du bekommst Nachrichten auf Telegram. Handeln musst du nur,
wenn eine Nachricht es sagt oder in einem Cockpit etwas gelb oder rot leuchtet. Updates im Homelab spielst du selbst wenn eine Nachricht es sagt oder in einem Cockpit etwas gelb oder rot leuchtet. Im Homelab spielt der Orchestrator
per Knopf ein. sonntags früh (03:00–04:15) die Sicherheitsupdates selbst ein; alles andere per Knopf oder mit „ja“ in Telegram.
Lucy, deine Systemadministratorin, sieht bei roten Hinweisen selbst nach, erklärt dir Ursache und Weg und fragt, bevor
sie etwas Größeres tut. Sonntags um 07:30 kommt ihr Wochenbericht.
Der Orchestrator hat zwei getrennte Bereiche: **KI-Box** (der Box-Wart) und **Homelab** (der Proxmox-PC mit seinen Der Orchestrator hat zwei getrennte Bereiche: **KI-Box** (der Box-Wart) und **Homelab** (der Proxmox-PC mit seinen
Containern und Arcane). Containern und Arcane).
@@ -24,6 +26,9 @@ hinter dem Menü-Knopf oben links:
Jeder Bereich zeigt oben, ob er online ist, und neben „Updates“ die Zahl der Updates, die bereitstehen. Frühere Jeder Bereich zeigt oben, ob er online ist, und neben „Updates“ die Zahl der Updates, die bereitstehen. Frühere
Adressen wie `/updates` und `/modelle` leiten auf die neuen weiter. Adressen wie `/updates` und `/modelle` leiten auf die neuen weiter.
**Suchen mit Strg+K** (oder die Lupe oben): findet Seiten, Geräte und Aktionen — etwa „gitea zeit“ für die Zeitleiste
von Gitea oder „lucy“ für ihre Freiheiten. `typ:lxc`, `typ:vm` oder `update:ja` filtern die Geräte.
## Übersicht ## Übersicht
- **Gesamtlage** oben: ein Satz, wie es steht („Alles läuft“, „1 Hinweis“, „Störung“), dazu vier Zahlen — Updates - **Gesamtlage** oben: ein Satz, wie es steht („Alles läuft“, „1 Hinweis“, „Störung“), dazu vier Zahlen — Updates
@@ -33,6 +38,9 @@ Adressen wie `/updates` und `/modelle` leiten auf die neuen weiter.
App → 0.79.0 (ab 26.09. 08:06) · 48 Pakete“ — und die Hinweise. Ein Klick auf den Kopf führt ins Cockpit, ein App → 0.79.0 (ab 26.09. 08:06) · 48 Pakete“ — und die Hinweise. Ein Klick auf den Kopf führt ins Cockpit, ein
Klick auf eine Update-Zeile zur Updates-Seite des Bereichs. Klick auf eine Update-Zeile zur Updates-Seite des Bereichs.
- **Als Nächstes** (die geplanten Läufe) und **Zuletzt eingespielt** (die letzten Updates beider Bereiche). - **Als Nächstes** (die geplanten Läufe) und **Zuletzt eingespielt** (die letzten Updates beider Bereiche).
- **Rückfragen an dich** (seit 26.09.): erscheint ganz oben, wenn Lucy, der Wächter oder der Wochenbericht auf dein Ja
warten. „Ja, ausführen“ fragt noch einmal nach und löst dann genau diese Aktion aus, „Nein“ legt sie ab. In Telegram
geht dasselbe mit „ja 7“ (die Nummer steht in der Nachricht). Eine Rückfrage gilt 24 Stunden.
Wichtige Knöpfe fragen vorher nach. Was du auslöst, bestätigt eine kurze Meldung unten rechts. Wichtige Knöpfe fragen vorher nach. Was du auslöst, bestätigt eine kurze Meldung unten rechts.
@@ -119,6 +127,21 @@ Werte zu jedem Zeitpunkt; „Werte als Tabelle“ klappt die letzten Punkte als
oder der Kernel für den nächsten Start; die Gäste laufen weiter. Alle Snapshots stehen dort seit 25.09. als **ein** oder der Kernel für den nächsten Start; die Gäste laufen weiter. Alle Snapshots stehen dort seit 25.09. als **ein**
Vorschlag („5 Snapshots des Orchestrators — verwalten unter Homelab → Snapshots“) mit dem Verweis „Zu den Vorschlag („5 Snapshots des Orchestrators — verwalten unter Homelab → Snapshots“) mit dem Verweis „Zu den
Snapshots“. Snapshots“.
- **Voll in etwa N Tagen** (seit 25.09.): Pool, NAS, Systemplatte, Container und VMs sagen, wann sie beim Tempo der
letzten Woche voll wären — gelb unter 14 Tagen, rot unter 3. Sichtbar, sobald zwei Tage Verlauf da sind.
- **Sicherungen je Gerät:** ob ein Sicherungsauftrag das Gerät erfasst, die letzte Sicherung, ob der PBS sie geprüft
hat und die wöchentliche Probe-Wiederherstellung („Jetzt prüfen“ startet sie sofort).
- **Zertifikate:** alle HTTPS-Zertifikate (NPMplus, Proxmox, PBS) mit Ablauf. Gelb, wenn eine Erneuerung hängt, rot
kurz vor dem Ablauf. NPMplus erneuert seine alle knapp sieben Tage.
- **Neu entdeckt:** neue Container, VMs und Docker-Stacks, die der Orchestrator noch nicht kennt. „Für Updates
freigeben“ setzt in Proxmox das Etikett `watcher` (danach darf er dort Snapshots anlegen und Updates einspielen),
„Nur beobachten“ nimmt es nur in die Liste, „Nicht anfassen“ setzt `watcher-aus`.
- **Docker-Dienste:** die Container unter Arcane je Stack mit Zustand, Gesundheit und Update-Stand, dazu die Lücken aus
Arcanes Scan (sonntags 02:00).
- **Live-Zahlen auf den Kacheln**, etwa „letzte Sicherung vor 15 h“ oder „7 von 7 Containern an“; bei AdGuard der
Anteil geblockter Anfragen, sobald unter Einstellungen ein Zugang eingetragen ist.
- **Hinweise mit Ablauf:** „Gesehen“ nimmt einem Hinweis die Farbe, „24 h stumm“ schaltet Erinnerungen ab (wird er rot,
meldet er sich trotzdem), „Wieder melden“ hebt das auf. Kurze Wackler lösen keinen Alarm mehr aus.
## Homelab · Updates ## Homelab · Updates
@@ -137,6 +160,15 @@ Werte zu jedem Zeitpunkt; „Werte als Tabelle“ klappt die letzten Punkte als
Schluss der Proxmox-Host — neu gestartet wird er nicht. Ist eine Prüfung rot, geht dieser Schritt zurück und der Rest Schluss der Proxmox-Host — neu gestartet wird er nicht. Ist eine Prüfung rot, geht dieser Schritt zurück und der Rest
bleibt stehen. Während des Laufs zeigt ein Kasten jeden Schritt mit Zustand; am Ende kommt eine Nachricht. bleibt stehen. Während des Laufs zeigt ein Kasten jeden Schritt mit Zustand; am Ende kommt eine Nachricht.
- **Verlauf:** die letzten Updates im Homelab mit Ergebnis. - **Verlauf:** die letzten Updates im Homelab mit Ergebnis.
- **Was ist neu?** (seit 25.09.) vor jedem App- oder Host-Update: die Änderungen der neuen Version und Lucys
Kurzfassung, was davon dich betrifft (Handarbeit ganz oben).
- **Version überspringen:** Diese Version gilt als aktuell, bis eine neuere kommt; „wieder anbieten“ hebt es auf.
- **Sicherheitsupdates** sind in der Zeile markiert („davon 3 Sicherheitsupdates“).
- **Wartungsfenster** (seit 26.09.): sonntags 03:00–04:15 spielt der Orchestrator ein, was die Regel des Geräts
erlaubt — ab Werk bei allen Geräten nur die Sicherheitsupdates, immer mit Snapshot vorher und Rückweg bei Rot. Den
Proxmox-Host startet er nie von selbst neu. Fenster und Regel je Gerät stellst du unter Einstellungen → Homelab ein;
solange das Fenster läuft, zeigt das Cockpit „Wartung“ statt „Störung“. Erfolge kommen gesammelt als eine
Nachricht, Fehler sofort.
## Homelab · Snapshots ## Homelab · Snapshots
@@ -172,7 +204,8 @@ Was der Homelab-Teil getan hat, neueste zuerst und nach Tagen: Aufträge an den
Update-Läufe, was auf der Seite Snapshots geschah, Hinweise des Wächters, gesendete Meldungen und die nächtliche Update-Läufe, was auf der Seite Snapshots geschah, Hinweise des Wächters, gesendete Meldungen und die nächtliche
Paketsuche. Oben filterst du nach Art; Paketsuche. Oben filterst du nach Art;
„Berichte zeigen“ blendet auch die Berichte ein, die alle zehn Minuten kommen. „Ausgabe zeigen“ klappt die Ausgabe „Berichte zeigen“ blendet auch die Berichte ein, die alle zehn Minuten kommen. „Ausgabe zeigen“ klappt die Ausgabe
eines Auftrags auf. eines Auftrags auf. Seit 25.09. gibt es die **Zeitleiste je Gerät**: oben ein Gerät wählen (oder mit Strg+K
„Gitea · Zeitleiste“) — dann steht nur, was an diesem Gerät geschah, Updates mit „von → nach“.
## KI-Box · Dienste und Protokolle ## KI-Box · Dienste und Protokolle
@@ -193,9 +226,25 @@ startet ihn neu, „Starten" einen gestoppten oder gescheiterten Dienst; „Weck
nächsten Neustart der Box. Jeder dieser Knöpfe fragt vorher nach. Die Spracherkennung und die Konsole schlafen seit nächsten Neustart der Box. Jeder dieser Knöpfe fragt vorher nach. Die Spracherkennung und die Konsole schlafen seit
24.09. mit Absicht; die Android-App wird sie später wieder brauchen. 24.09. mit Absicht; die Android-App wird sie später wieder brauchen.
**Zeitpläne** (seit 25.09.): alle geplanten Abläufe — Sicherung, Sonntags-Updates, Morgenmeldung, Wochenbericht,
Modell-Radar, Hermes-Jobs, die Gitea-Ampel — mit letztem und nächstem Lauf. Läuft einer nicht, obwohl er müsste, wird
er „überfällig“ und ein Hinweis.
## Einstellungen ## Einstellungen
Eine eigene Seite mit vier Karten: KI-Box, Homelab, Meldungen, Software-Stand. Eine eigene Seite mit fünf Karten: KI-Box, Homelab, Lucy, Meldungen, Software-Stand.
- **Lucy (seit 26.09.):** wie selbstständig sie je Aktionsart handelt — „Nur lesen“ (sie erklärt, tut aber nichts),
„Erst fragen“ (eine Rückfrage an dich, dein „ja“ löst genau das aus) oder „Selbst handeln“ (danach bekommst du eine
Meldung). Ab Werk untersucht sie rote Hinweise, startet Dienste neu, spielt Sicherheitsupdates ein und geht bei Rot
auf den Snapshot zurück selbst; andere Updates, alte Kernel, Modell-Tests und den Neustart des Proxmox-Hosts nur
nach deinem Ja. Wer eine Art freier stellt als ab Werk, wird noch einmal gefragt. Bittest du Lucy ausdrücklich um
etwas, tut sie es unabhängig davon. Darunter die offenen und zuletzt beantworteten Rückfragen und der
Wochenbericht (nächster Termin, den letzten lesen, „Jetzt schicken“).
- **Wartungsfenster und Regel je Gerät (Homelab):** Tag und Uhrzeit des Fensters, die Regel für alle Geräte („Nur
melden“, „Sicherheitsupdates automatisch“, „Alles automatisch im Fenster“) und je Gerät eine eigene.
- **AdGuard Home (Homelab):** ein Zugang (am besten ein eigener Benutzer), mit dem die Kachel zeigt, wie viel AdGuard
blockt. „Prüfen und speichern“ fragt AdGuard erst damit; das Passwort wird nie wieder angezeigt.
- **Arcane-API-Schlüssel (Homelab):** in Arcane unter Einstellungen → API-Schlüssel anlegen und hier einfügen. „Prüfen - **Arcane-API-Schlüssel (Homelab):** in Arcane unter Einstellungen → API-Schlüssel anlegen und hier einfügen. „Prüfen
und speichern“ fragt Arcane zuerst, ob der Schlüssel gilt; erst dann wird er gespeichert — im Homelab-Teil, nicht und speichern“ fragt Arcane zuerst, ob der Schlüssel gilt; erst dann wird er gespeichert — im Homelab-Teil, nicht
@@ -229,6 +278,11 @@ Eine eigene Seite mit vier Karten: KI-Box, Homelab, Meldungen, Software-Stand.
Nachts zwischen 0 und 7 Uhr sammelt die Box alles und schickt es um 7 Uhr als eine Nachricht („Guten Morgen, Nachts zwischen 0 und 7 Uhr sammelt die Box alles und schickt es um 7 Uhr als eine Nachricht („Guten Morgen,
Commander. Heute Nacht gab es …"). Sofort kommen nachts nur dringende Nachrichten. Commander. Heute Nacht gab es …"). Sofort kommen nachts nur dringende Nachrichten.
**Antworten (seit 26.09.):** Endet eine Nachricht mit „Antworte „ja 7“ oder „nein 7““, schreibst du genau das —
oder tippst auf eine der Antworttasten, die dann unter dem Eingabefeld stehen. Lucy gibt es weiter, und der
Orchestrator führt genau die gefragte Aktion aus, nichts anderes. Ohne Nummer geht „ja“ nur, wenn gerade eine
einzige Rückfrage offen ist.
| Nachricht | Bedeutung | Was du tust | | Nachricht | Bedeutung | Was du tust |
|---|---|---| |---|---|---|
| „[Morgenmeldung] Guten Morgen, Commander …" | alles aus der Nacht in einer Nachricht | lesen | | „[Morgenmeldung] Guten Morgen, Commander …" | alles aus der Nacht in einer Nachricht | lesen |
@@ -241,6 +295,12 @@ Commander. Heute Nacht gab es …"). Sofort kommen nachts nur dringende Nachrich
| „[Box-Update] Sonntags-Update mit Fehler beendet" oder „Auto-Update abgebrochen" | der Update-Lauf selbst ist abgebrochen, nichts wurde eingespielt | Seite Updates ansehen, Hilfe holen | | „[Box-Update] Sonntags-Update mit Fehler beendet" oder „Auto-Update abgebrochen" | der Update-Lauf selbst ist abgebrochen, nichts wurde eingespielt | Seite Updates ansehen, Hilfe holen |
| „[Box-Problem] …" | der Wächter hat etwas Rotes gefunden | Cockpit der KI-Box öffnen, in der Checkliste den Knopf drücken | | „[Box-Problem] …" | der Wächter hat etwas Rotes gefunden | Cockpit der KI-Box öffnen, in der Checkliste den Knopf drücken |
| „[Box wieder ok] Erledigt: …" | das Problem ist weg | nichts | | „[Box wieder ok] Erledigt: …" | das Problem ist weg | nichts |
| „Commander, eine Rückfrage. … Antworte „ja 7“ oder „nein 7“" | Lucy, der Wächter oder der Wochenbericht warten auf dein Ja | „ja 7“ oder „nein 7“ schreiben oder die Taste antippen |
| „Commander, auf der Box stimmt etwas nicht. … Antworte „ja 3“, dann starte ich …" | roter Hinweis mit Knopf (etwa ein gestoppter Dienst) | „ja 3“, wenn du es so willst |
| „Commander, ich habe nachgesehen. …" | Lucy hat einen roten Hinweis untersucht: Ursache, Betroffenes, Weg | lesen; steht eine Rückfrage darunter, mit „ja“ und Nummer antworten |
| „Commander, das habe ich selbst erledigt. …" | Lucy hat im Rahmen ihrer Freiheiten gehandelt (was, warum, Ergebnis) | lesen |
| „Commander, dein Wochenbericht." (sonntags 07:30) | die Woche in einer Nachricht, offene App-Updates zum Beantworten | lesen, bei Bedarf „ja“ mit Nummer |
| „[Homelab-Wartung] Wartung So 03:00–04:15: …" | was das Wartungsfenster eingespielt oder zurückgerollt hat | nichts; bei „Gescheitert“ ins Cockpit schauen |
| „[Modell-Radar] … hat den Nachttest bestanden" | ein besseres Modell wartet | Seite Modelle: „Übernehmen" oder „Verwerfen" | | „[Modell-Radar] … hat den Nachttest bestanden" | ein besseres Modell wartet | Seite Modelle: „Übernehmen" oder „Verwerfen" |
| „[Stack-Radar] …" (samstags) | Wochenbericht über die Box und Neuigkeiten | lesen | | „[Stack-Radar] …" (samstags) | Wochenbericht über die Box und Neuigkeiten | lesen |
| Daily News (07:00, Text und Sprachnachricht) | die Nachrichten des Tages von Lucy | lesen oder hören | | Daily News (07:00, Text und Sprachnachricht) | die Nachrichten des Tages von Lucy | lesen oder hören |
+46
View File
@@ -294,12 +294,58 @@ laufen lassen. Achtung: `ausfuehrer-einrichten.sh` schreibt `/etc/mc2-ausfuehrer
Berichte des Ausführers. Die Quellen bleiben die Dateien in `/var/lib/mc2` (`ausfuehrer-auftraege.json` hebt jetzt Berichte des Ausführers. Die Quellen bleiben die Dateien in `/var/lib/mc2` (`ausfuehrer-auftraege.json` hebt jetzt
die letzten 500 erledigten Aufträge auf, `ausfuehrer-berichte.json` die Eingänge der letzten 150 Berichte) und das die letzten 500 erledigten Aufträge auf, `ausfuehrer-berichte.json` die Eingänge der letzten 150 Berichte) und das
Melde-Log `/var/lib/mc2/notify.log`. Melde-Log `/var/lib/mc2/notify.log`.
- **Wartungsfenster (seit 26.09.):** Der Steward (`services/homelab/wartung.py`) prüft jede Minute, ob das Fenster
offen ist (ab Werk So 03:00–04:15), und arbeitet dann einmal am Tag den Plan ab: je Gerät nach seiner Regel
(`melden`, `sicherheit`, `alles`; Standard `sicherheit`) über dieselben Update-Läufe wie die Knöpfe, mit Snapshot
vorher und Rückweg bei Rot; nach Fensterende beginnt kein Schritt mehr, der Host startet nie von selbst neu. Laufen
gerade „Alle aktualisieren“ oder ein Update, wartet es eine Minute. Einstellungen: `/var/lib/mc2/homelab-wartung.json`
(Oberfläche: Einstellungen → Homelab), Stand des letzten Fensters: `/var/lib/mc2/homelab-wartung-stand.json`. Die
Läufe schreiben Oberfläche und Steward in dieselbe Datei — seit 26.09. unter `flock`.
- **Wöchentliches Suchen:** Der Steward legt für jeden freigegebenen, laufenden Container, dessen Paketlisten älter als - **Wöchentliches Suchen:** Der Steward legt für jeden freigegebenen, laufenden Container, dessen Paketlisten älter als
7 Tage sind, den Auftrag `suchen` an (nur `apt-get update` bzw. `apk update` im Gast, es wird nichts installiert): 7 Tage sind, den Auftrag `suchen` an (nur `apt-get update` bzw. `apk update` im Gast, es wird nichts installiert):
nachts 02:00–05:00, höchstens einmal je Gast und Tag, nicht während eines Updates; war die Instanz nachts aus, gleich nachts 02:00–05:00, höchstens einmal je Gast und Tag, nicht während eines Updates; war die Instanz nachts aus, gleich
nach dem Start. Stand in `/var/lib/mc2/homelab-pflege.json` (Nacht, je Gast: letzter Tag, Fehlschläge, letzter nach dem Start. Stand in `/var/lib/mc2/homelab-pflege.json` (Nacht, je Gast: letzter Tag, Fehlschläge, letzter
Fehler). Schreibt nur der Steward; zum Zurücksetzen die Datei löschen und `systemctl restart mc2-homelab-steward`. Fehler). Schreibt nur der Steward; zum Zurücksetzen die Datei löschen und `systemctl restart mc2-homelab-steward`.
## Lucy: Freiheiten, Rückfragen, Untersuchungen, Wochenbericht (seit 26.09.)
Ausbauplan Welle 3 (User-Entscheid 25.09. „mehr Freiheit“). Alles liegt auf der KI-Box; der Homelab-Teil meldet seine
roten Hinweise per HTTP dorthin (`MC_PARTNER_URL` aus `/etc/mc2/homelab.env`).
- **Freiheiten je Aktionsart** (`backend/services/lucy_autonomie.py`, Datei `/srv/models/lucy-autonomie.json`, nur
was der Commander umgestellt hat): `lesen`, `fragen`, `selbst`. Lucys Werkzeuge (`mcp/orchestrator_werkzeuge.py`) fragen
`GET /api/lucy/autonomie`, bevor sie aus eigenem Antrieb handeln; mit `auf_bitte=true` (der Commander hat
ausdrücklich gebeten) gilt die Stufe nicht. Lässt sich die Stufe nicht lesen, gilt `fragen`. Jede Aktion steht
mit Grund und Stufe in `~/.hermes/logs/orchestrator-werkzeuge.log`; „selbst“ meldet über `POST /api/lucy/gehandelt`.
- **Rückfragen** (`backend/services/rueckfragen.py`, `/srv/models/lucy-rueckfragen.json`, die letzten 200):
nummeriert, 24 h gültig, nur Pfade aus `ERLAUBT` (die Knöpfe der Oberfläche; nie Löschen, Einstellungen, Zugänge).
Ein „ja“ führt die gespeicherte Aktion per HTTP an MC2 selbst aus (`MC_EIGENE_URL`, Standard
`http://127.0.0.1:9001`); danach steht sie auf erledigt/fehler, ein zweites „ja“ tut nichts. Gehört sie zu einem
Hinweis, der schon weg ist: „hinfällig“; nach dem Ausführen prüft sie sechs Minuten nach und meldet, wenn er bleibt.
Ansehen: `curl -s http://127.0.0.1:9001/api/rueckfragen | jq`.
- **Antworttasten:** `notify.sh -k "ja 7|nein 7"` schickt die Nachricht direkt an die Bot-API mit einer
Antworttastatur (`reply_markup`); ein Tipp sendet nur den Text „ja 7“, den Lucy mit `rueckfrage_beantworten`
weitergibt. Scheitert der Direktweg, geht die Nachricht ohne Tasten über `hermes send`. Nachts wie jede andere
nicht dringende Meldung in die Morgenmeldung.
- **Rote Hinweise an Lucy:** Der Wächter beider Teile ruft vor seiner Telegram-Nachricht `POST /api/lucy/befund`
(`backend/services/ermittlung.py`). Hat der Hinweis einen Knopf (Neustart, Job wiederholen, Freigeben), wird er zur
Rückfrage; steht „ermitteln“ auf `selbst`, fragt MC2 Lucy über den api_server von Hermes (`HERMES_API_URL`, Schlüssel
aus der Hermes-Config) — dieselbe Lucy mit allen Werkzeugen, auch `geraet_logs` (Aktion `journal` des Ausführers,
nur lesend) und `dienst_logs`. Ihre Antwort und was sie dabei auslöst, kommen als eine Nachricht. Bremsen: je
Hinweis einmal in 6 h, höchstens 8 am Tag, eine nach der anderen. In Tests abgeschaltet (`MC_LUCY_BEFUND=0`,
`MC_EIGENE_URL` ins Leere, `backend/tests/conftest.py`) — auf der Box liefe das Prüftor sonst gegen das echte MC2.
- **Wochenbericht** (`backend/services/wochenbericht.py`, Timer `mc2-wochenbericht.timer`, sonntags 07:30): feste
Sätze aus der REST-API beider Teile, ein Absatz vom Modell `fast`, offene App-Updates des Homelabs als Rückfragen
(dazu „Alle aktualisieren“, wenn mehr ansteht). Der letzte liegt in `/srv/models/wochenbericht.json`. Von Hand:
`curl -s -X POST http://127.0.0.1:9001/api/lucy/wochenbericht` (verschickt wirklich). Nur ansehen, ohne zu senden:
`cd ~/mission-control-v2/backend && MC_MODELS_DIR=/srv/models .venv/bin/python -c "from services import
wochenbericht; print(wochenbericht.bauen(mit_angeboten=False)['text'])"`.
- **Hermes:** Der Abschnitt „Homelab Orchestrator“ in `~/.hermes/SOUL.md` sagt Lucy, wie sie mit Freiheiten und
„ja 7“ umgeht (Kopie: `deploy/nur-box/soul-orchestrator.md`), der Skill `homelab_orchestrator` die Einzelheiten.
Neue oder geänderte Werkzeuge sieht Hermes erst nach `systemctl --user daemon-reload && systemctl --user restart
hermes-gateway` (der Deploy startet das Gateway bewusst nicht neu). Prüfen:
`grep "homelab-orchestrator" ~/.hermes/logs/agent.log | tail -1` nennt die Zahl der Werkzeuge.
## Messwerte (Monitoring, seit 24.09.) ## Messwerte (Monitoring, seit 24.09.)
Jede Minute ein Punkt je Gerät, gelesen als letzte Stunde, letzter Tag oder letzte Woche (Aufbau in Jede Minute ein Punkt je Gerät, gelesen als letzte Stunde, letzter Tag oder letzte Woche (Aufbau in
+17 -1
View File
@@ -1,6 +1,6 @@
# Offene Fäden — die eine Liste # Offene Fäden — die eine Liste
_Stand 25.09.2026 nachmittags. Neues hier rein, Erledigtes raus (die Git-Historie behält es). Entschiedenes steht in _Stand 26.09.2026 vormittags. Neues hier rein, Erledigtes raus (die Git-Historie behält es). Entschiedenes steht in
[VERDIKTE.md](VERDIKTE.md), nicht hier. Die Liste bis 04.09.2026, samt den Lucy-Fäden, liegt im Archiv: [VERDIKTE.md](VERDIKTE.md), nicht hier. Die Liste bis 04.09.2026, samt den Lucy-Fäden, liegt im Archiv:
[2026-09-04-offene-faeden-alt.md](../archiv/2026-09-04-offene-faeden-alt.md)._ [2026-09-04-offene-faeden-alt.md](../archiv/2026-09-04-offene-faeden-alt.md)._
@@ -42,6 +42,22 @@ Zertifikats-Wache (Grenzen nach Laufzeit, NPMplus kurzlebig 6,7 Tage) und Live-Z
Offen beim User: den **AdGuard-Zugang** unter Einstellungen → Homelab eintragen (am besten ein eigener Benutzer), dann Offen beim User: den **AdGuard-Zugang** unter Einstellungen → Homelab eintragen (am besten ein eigener Benutzer), dann
zeigt die Kachel „% geblockt“. zeigt die Kachel „% geblockt“.
**Welle 2 erledigt (25.09.2026 abends, `main` `363bc21`):** Neu entdeckt (neue Gäste und Docker-Stacks, „Für Updates
freigeben“ setzt das Etikett `watcher`, App-Katalog aus den Update-Skripten der Community-Scripts), Docker-Dienste je
Stack, „Was ist neu?“ mit Lucys Kurzfassung, Befundliste mit Ablauf (gesehen, 24 h stumm, drei Takte Puffer),
Sicherheits-Markierung (Debian, Alpine) und Arcanes Lücken-Scan (erster Lauf So 27.09. 02:00), Zeitleiste je Gerät,
Suche mit Strg+K.
**Welle 3 erledigt (26.09.2026 vormittags, `main` `6904bcb`):** Wartungsfenster So 03:00–04:15 mit Regel je Gerät
(ab Werk Sicherheitsupdates automatisch; erster Lauf **So 27.09.**), „Version überspringen“; Lucys Freiheiten je
Aktionsart (Start „mehr Freiheit“), Rückfragen mit Nummer und Antworttasten in Telegram („ja 7“), Lucy untersucht
rote Hinweise selbst (api_server, Protokolle über die neue Ausführer-Aktion `journal`), Wochenbericht sonntags
07:30 (erster **So 27.09.**). Hermes neu gestartet (25 Werkzeuge im Orchestrator), SOUL-Abschnitt ersetzt
(Sicherung `SOUL.md.bak-20260926-freiheiten`). Nebenbei: Die Box zählte beim Hermes-Update 42 044 statt 281 neuer
Commits (flacher Klon, `--ancestry-path`).
Beobachten am 27.09.: das erste Wartungsfenster (6 Sicherheitsupdates am Proxmox-Host, weitere in Gästen), der erste
Wochenbericht und der Sonntagslauf der Box mit dem Hermes-Update (281 Commits über den neuen Paketmanager).
## Offene Einzelpunkte (Homelab) ## Offene Einzelpunkte (Homelab)
- **Zugang von außen:** Der Eintrag `mc.tobisniceshomelab.ddnsfree.com` in NPMplus (Proxy-Host 14 → Box :9001) hatte - **Zugang von außen:** Der Eintrag `mc.tobisniceshomelab.ddnsfree.com` in NPMplus (Proxy-Host 14 → Box :9001) hatte
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{i as e,r as t}from"./dist-aE7UmubC.js";import{G as n,W as r}from"./index-Bumw6krN.js";import{a as i,i as a,n as o,r as s,t as c}from"./sheet-DG7u1mB-.js";var l=t(),u=e();function d(e){let t=(0,l.c)(8),{onSchliessen:d}=e,f;t[0]===d?f=t[1]:(f=e=>!e&&d(),t[0]=d,t[1]=f);let p;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,u.jsxs)(a,{className:`p-0`,children:[(0,u.jsx)(i,{asChild:!0,children:(0,u.jsx)(`div`,{children:(0,u.jsx)(r,{})})}),(0,u.jsx)(s,{className:`sr-only`,children:`Bereiche und Seiten`})]}),t[2]=p):p=t[2];let m;t[3]===d?m=t[4]:(m=(0,u.jsxs)(o,{side:`left`,className:`flex flex-col gap-7 border-white/[0.06] bg-[#0a0d14] px-4 pt-5 pb-[calc(1.25rem+env(safe-area-inset-bottom))] data-[side=left]:w-[300px]`,children:[p,(0,u.jsx)(n,{onGewaehlt:d})]}),t[3]=d,t[4]=m);let h;return t[5]!==f||t[6]!==m?(h=(0,u.jsx)(c,{open:!0,onOpenChange:f,children:m}),t[5]=f,t[6]=m,t[7]=h):h=t[7],h}export{d as MenueSchublade}; import{i as e,r as t}from"./dist-aE7UmubC.js";import{G as n,W as r}from"./index-DRAkqVZT.js";import{a as i,i as a,n as o,r as s,t as c}from"./sheet-DG7u1mB-.js";var l=t(),u=e();function d(e){let t=(0,l.c)(8),{onSchliessen:d}=e,f;t[0]===d?f=t[1]:(f=e=>!e&&d(),t[0]=d,t[1]=f);let p;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,u.jsxs)(a,{className:`p-0`,children:[(0,u.jsx)(i,{asChild:!0,children:(0,u.jsx)(`div`,{children:(0,u.jsx)(r,{})})}),(0,u.jsx)(s,{className:`sr-only`,children:`Bereiche und Seiten`})]}),t[2]=p):p=t[2];let m;t[3]===d?m=t[4]:(m=(0,u.jsxs)(o,{side:`left`,className:`flex flex-col gap-7 border-white/[0.06] bg-[#0a0d14] px-4 pt-5 pb-[calc(1.25rem+env(safe-area-inset-bottom))] data-[side=left]:w-[300px]`,children:[p,(0,u.jsx)(n,{onGewaehlt:d})]}),t[3]=d,t[4]=m);let h;return t[5]!==f||t[6]!==m?(h=(0,u.jsx)(c,{open:!0,onOpenChange:f,children:m}),t[5]=f,t[6]=m,t[7]=h):h=t[7],h}export{d as MenueSchublade};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,7 +9,7 @@
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" /> <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<title>Homelab Orchestrator</title> <title>Homelab Orchestrator</title>
<script type="module" crossorigin src="/assets/index-Bumw6krN.js"></script> <script type="module" crossorigin src="/assets/index-DRAkqVZT.js"></script>
<link rel="modulepreload" crossorigin href="/assets/dist-aE7UmubC.js"> <link rel="modulepreload" crossorigin href="/assets/dist-aE7UmubC.js">
<link rel="modulepreload" crossorigin href="/assets/button-BHVKhtQ6.js"> <link rel="modulepreload" crossorigin href="/assets/button-BHVKhtQ6.js">
<link rel="modulepreload" crossorigin href="/assets/dist-CakcBaML.js"> <link rel="modulepreload" crossorigin href="/assets/dist-CakcBaML.js">
+10 -2
View File
@@ -228,6 +228,10 @@ function Meldungen() {
07:00 als eine Morgenmeldung. Einfache Probleme wie einen abgestürzten Dienst behebt der Wächter selbst und 07:00 als eine Morgenmeldung. Einfache Probleme wie einen abgestürzten Dienst behebt der Wächter selbst und
schreibt es in den Verlauf. schreibt es in den Verlauf.
</p> </p>
<p className="text-sm text-text-2">
Fragt Lucy vorher, antwortest du in Telegram mit „ja“ und der Nummer oder tippst auf die Antworttaste unter dem
Eingabefeld — das löst genau die gefragte Aktion aus. Sonntags um 07:30 kommt ihr Wochenbericht.
</p>
<p className="text-sm text-text-2"> <p className="text-sm text-text-2">
Der Test schickt eine kurze Meldung über den echten Meldeweg, als dringend, damit sie auch nachts sofort kommt. Der Test schickt eine kurze Meldung über den echten Meldeweg, als dringend, damit sie auch nachts sofort kommt.
</p> </p>
@@ -647,9 +651,13 @@ export function EinstellungenSeite() {
const box = useEinstellungenStand(true) const box = useEinstellungenStand(true)
const boxProps = { e: box.data, laedt: box.isPending, fehler: box.error?.message } const boxProps = { e: box.data, laedt: box.isPending, fehler: box.error?.message }
// Strg+K „Lucys Freiheiten“ führt mit #lucy hierher (beim Öffnen der Seite; ohne Router-Hook, damit die Seite auch // Strg+K „Lucys Freiheiten“ führt mit #lucy hierher (beim Öffnen der Seite; ohne Router-Hook, damit die Seite auch
// allein testbar bleibt). // allein testbar bleibt). Die Karten darüber laden nach und schieben Lucy nach unten — deshalb zweimal nachfassen.
useEffect(() => { useEffect(() => {
if (window.location.hash === "#lucy") document.getElementById("lucy")?.scrollIntoView({ block: "start" }) if (window.location.hash !== "#lucy") return
const hin = () => document.getElementById("lucy")?.scrollIntoView({ block: "start" })
hin()
const zeiten = [700, 1800].map((ms) => window.setTimeout(hin, ms))
return () => zeiten.forEach((z) => window.clearTimeout(z))
}, []) }, [])
return ( return (
<div className="grid gap-5 md:gap-6 xl:grid-cols-2"> <div className="grid gap-5 md:gap-6 xl:grid-cols-2">