doku: Einstieg neu (README, docs/README, BEDIENUNG), Jobs-Uebersicht, AGENTS korrigiert

- README.md: eine Seite zum Homelab Orchestrator - Bereiche Box-Wart und Homelab, zwei
  Instanzen, Seiten der Oberflaeche, was von allein laeuft, Dienste und Ports, Entwickeln mit
  Prueftor, Links. Ersetzt die alte MC2-Seite (Mem0, Ideen-Queue, entfernte Routen, alte
  Modelltabelle, kaputte Tabellen).
- docs/README.md (loest docs/wissen/README.md ab): Index, Lesereihenfolge, Archiv-Uebersicht,
  Pflegeregeln.
- docs/BEDIENUNG.md: fuer den User neu geschrieben - Start, Updates, Modelle, Dienste,
  Einstellungen, jede Telegram-Nachricht mit Bedeutung und Handgriff, "wenn etwas hakt".
- deploy/jobs/README.md: alle Jobs und Timer (Modell-Radar, NerdQuiz-Nachtlauf 03:00,
  Updates wieder per Timer), Ausbringen macht deploy.sh, Daily-News-Kette auf dem Stand vom
  23./24.09.
- AGENTS.md: Coding-Oberflaeche heisst OpenChamber; der Verweis auf .agents/mcp_config.json
  (am 24.09. geloescht) ersetzt durch den tatsaechlichen Weg ueber :9001/v1; Titel mit dem
  neuen Produktnamen.
- Archivdatei der Referenzaufgabe umbenannt (…-gedaechtnis-ausbau.md), damit der Index keine
  Altnamen traegt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 17:41:25 +02:00
co-authored by Claude Opus 5.5
parent f4bbdad311
commit 424aaada27
7 changed files with 348 additions and 401 deletions
+3 -3
View File
@@ -1,4 +1,4 @@
# AGENTS.md — Mission Control 2.0 # AGENTS.md — Homelab Orchestrator (vormals Mission Control 2.0)
Projekt-Geschmack für Coding-Agenten (Kilo Code, Claude Code lesen diese Datei). Projekt-Geschmack für Coding-Agenten (Kilo Code, Claude Code lesen diese Datei).
Kurz gehalten, nur die Wahrheiten, die man sonst schmerzhaft lernt. Details: `README.md`, `docs/`. Kurz gehalten, nur die Wahrheiten, die man sonst schmerzhaft lernt. Details: `README.md`, `docs/`.
@@ -34,9 +34,9 @@ Engine (llama-swap) · Builtin-Routing-Gateway (`model: auto`) · MC2 (FastAPI +
- **Nie direkt auf `main` arbeiten.** Immer Branch (`wartung/...`), Gate grün, dann Merge/Deploy. - **Nie direkt auf `main` arbeiten.** Immer Branch (`wartung/...`), Gate grün, dann Merge/Deploy.
## Agentic IDE & Vibe Coding ## Agentic IDE & Vibe Coding
- **Zero Middle-Layers:** Coding passiert zu 100% lokal auf dem Dev-PC in der **OpenCode Desktop IDE**. - **Zero Middle-Layers:** Coding passiert zu 100% lokal auf dem Dev-PC in **OpenChamber** (mit eigener OpenCode-CLI).
- Es gibt keinen Zed-Workflow, keine OpenCode-CLI-Mittelschicht und keinen Governor mehr. - Es gibt keinen Zed-Workflow, keine OpenCode-CLI-Mittelschicht und keinen Governor mehr.
- Der Agent in OpenCode Desktop nutzt via MCP (`.agents/mcp_config.json`) die API der Box (`:9001/v1`), um autonom Projekte zu bauen. - Der Agent in OpenChamber nutzt die Modelle der Box über `http://192.168.178.151:9001/v1` (Provider `aibox`, nur Rollen-Aliase; Vorlage der PC-Config: `deploy/opencode-config/`).
- **Prüftor:** `bash deploy/pruefen.sh` (Shell-/Python-Syntax, ruff, Importe, pytest) muss vor jedem Push grün sein. - **Prüftor:** `bash deploy/pruefen.sh` (Shell-/Python-Syntax, ruff, Importe, pytest) muss vor jedem Push grün sein.
Der Deploy auf der Box führt es vor dem Umschalten noch einmal aus; rot = automatisch zurück auf den alten Stand. Der Deploy auf der Box führt es vor dem Umschalten noch einmal aus; rot = automatisch zurück auf den alten Stand.
+71 -130
View File
@@ -1,148 +1,89 @@
# Mission Control 2.0 # Homelab Orchestrator
Steuerzentrale des lokalen KI-Stacks auf dem **Bosgame M5** (AMD Ryzen AI MAX+ 395 „Strix Halo", Ein Steuerpult fürs Heimnetz, das sich selbst wartet. Zwei Bereiche, eine Oberfläche:
122 GB Unified Memory, **keine dedizierte GPU** — llama.cpp über **Vulkan/RADV**). Läuft live als
sudo-freier systemd-User-Dienst und ist auf **Autonomie** ausgelegt: Die Box wartet sich selbst,
prüft sich selbst und meldet sich, wenn etwas nicht stimmt.
> **100 % lokal.** Kein Cloud-Modell, kein externer Dienst im Datenpfad. - **Box-Wart** betreut die KI-Box (Bosgame M5, AMD Ryzen AI MAX+ 395, 128 GB gemeinsamer Speicher, llama.cpp über
Vulkan): hält sie aktuell, passt auf sie auf und sucht bessere Modelle. Live seit 23.09.2026.
- **Homelab** soll den Proxmox-PC mit seinen Containern und Arcane (Docker) betreuen: offene Updates zeigen, per
Knopf einspielen, danach die Erreichbarkeit prüfen. In Arbeit ([Fahrplan](docs/wissen/OFFENE-FAEDEN.md)).
## Die drei Bahnen Dieselbe Codebasis läuft als zwei Instanzen: auf der KI-Box (Rolle `box`) und später als Container auf dem
Proxmox-PC (Rolle `homelab`); beide prüfen sich gegenseitig. Repo, Dienste und Dateien tragen noch den alten Namen
„Mission Control 2" (`mission-control-v2`, `mission-control-2`, `mc2-*`). Alles läuft lokal, kein Cloud-Modell im
Datenpfad.
| Bahn | Was sie tut | Wo | ## Oberfläche
Im Heimnetz `http://192.168.178.151:9001`, am PC oder am Handy.
| Seite | Inhalt |
|---|---|
| **Start** | Warnlampen, Instrumente (Speicher, Temperatur, Platte, Laufzeit), Checkliste mit den Hinweisen des Wächters und ihren Knöpfen, Flugplan (was lief, was kommt), Radar-Kasten |
| **Updates** | Bausteine Betriebssystem, Motor (llama.cpp), llama-swap und Hermes; Verlauf der Update-Läufe; Sicherungen |
| **Modelle** | Speicher, Rollen Hirn und Coder, wer die Modelle nutzt, Modell-Radar, Aufräumen, Modelle selbst suchen |
| oben rechts bzw. „Mehr" | Hermes-Dashboard, Dienste und Protokolle, Einstellungen |
Anleitung für den Alltag: [docs/BEDIENUNG.md](docs/BEDIENUNG.md).
## Was von allein läuft
- **Wächter** (jede Minute): Dienste, Timer, Hermes-Jobs, Kern, Platte, festgehaltene Updates und die
Partner-Instanz. Abgestürzte Dienste startet er selbst neu (höchstens 2× je Stunde), Rotes meldet er per Telegram.
- **Updates** sonntags 04:30: llama-swap → Motor → Hermes, danach Prüfung; rot → zurück und festhalten. Die Box
startet nur sonntags zwischen 04:00 und 06:59 neu.
- **Modell-Radar** nachts 00:30–02:30: sucht Kandidaten für Hirn und Coder und testet höchstens einen pro Woche;
übernommen wird nur per Knopf.
- **Sicherung** täglich gegen 03:30, 14 Stück, Kopie auf dem Proxmox-Host.
- **Meldungen** gehen an Telegram und in Lucys Briefkasten; nachts gesammelt, um 07:00 als eine Morgenmeldung,
Dringendes sofort.
Alle Zeiten: [docs/wissen/STACK.md](docs/wissen/STACK.md), Abschnitt „Automatik".
## Dienste und Ports (KI-Box)
| Port | Unit | Aufgabe |
|---|---|---| |---|---|---|
| **Steuerzentrale** | Modelle, Routing, Wartung, Gedächtnis, Ideen-Queue | MC2 `:9001` | | `9001` | `mission-control-2` | Oberfläche, `/api`, `/v1` für Lucy und OpenChamber, Hermes-Dashboard unter `/hermes-ui/` |
| **Coding** | Agentic IDE (z.B. OpenCode Desktop) auf Dev-PC via lokaler API + MCP | 100% lokal | | `9010` (nur lokal) | `mc2-gateway` | `/v1`-Datenpfad: `model: auto`, Bild-Weiche |
| **Lucy** | Innere Stimme am PC (HUD, kein Avatar) und auf Telegram — eine Stimme, ein Hirn | eigenes Repo `Hitonabi/lucy` | | – | `mc2-steward` | Wächter und Re-Warm |
| `8080` | `llama-swap` (System-Dienst) | Modell-Router, startet je Modell einen `llama-server` |
| `8642` | `hermes-gateway` | Hermes Agent „Lucy", Telegram |
| `9119` | `hermes-builtin-ui` | Hermes-Dashboard |
| `8021` (nur lokal) | `lucy-stimme` | Lucys Stimme |
| `8650` (nur lokal) | `voice-service` | Spracherkennung (schläft seit 24.09.) |
| `7682` (nur lokal) | `box-console` | Web-Konsole (schläft seit 24.09.) |
Lucy holt ihr Hirn direkt über das MC2-Gateway (`:9010/v1`) mit nativer Bildweiche und Voice-Streaming. Dazu die Timer `mc2-radar`, `mc2-backup`, `mc2-morgenmeldung`, `mc2-autoupdate` und `projekte-sync`. Die Unit-Dateien
liegen in [`deploy/`](deploy/).
## Ports & Dienste
| Port | Dienst | Erreichbar |
|---|---|---|
| `9001` | **MC2** (FastAPI + React) — Cockpit, API, Konsole | LAN |
| `8080` | **llama-swap** — Modell-Router | LAN |
| `9010` | `mc2-gateway` — `/v1`-Datenpfad (`model: auto`, Bild-Weiche) | loopback |
| `8642` · `9119` | Hermes-Gateway · Hermes-Web-UI | loopback |
| `8765` · `8650` | Mem0-Sidecar · Voice-Sidecar (STT/TTS) | loopback |
| `7682` | ttyd — Box-Konsole, same-origin unter `/console/` | loopback |
Units in [`deploy/`](deploy/): `mission-control-2` · `mc2-gateway` · `mc2-steward` ·
`mem0-service` · `voice-service` · `box-console` · `hermes-builtin-ui` + Timer für Backup,
Auto-Update und Self-Smoke. `llama-swap` läuft als System-Unit.
## Die Bau-Pipeline
```
Idee in MC2 → Gitea-Repo (mit CI-Ampel + VERIFY) → in Agentic IDE bauen → Ampel → main
└── autonomes Vibe Coding via OpenCode Desktop + MCP
```
Jedes neue Repo wird von [`deploy/gitea-repo-create.sh`](deploy/gitea-repo-create.sh) **mit beiden
Wächtern geboren**:
- **`.gitea/workflows/ci.yml`** — die Außen-Prüfung nach dem Push (Gitea Actions)
- **`VERIFY`** — die Innen-Prüfung: eine Zeile, wie man das Projekt testet. Die Agentic IDE
führt sie im Mix-Ansatz vor jedem Push aus, um Code-Fehler ("Quality Gap") abzufangen.
Keine `VERIFY`-Datei = Prüf-Tor aus.
## Modelle & Rollen
Gemessen auf der Box (Stand: 27.08.2026, Vulkan b10653):
| Rolle | Modell | Tempo | Aufgabe |
|---|---|---|---|
| `coder` | Qwen3.8-27B (dicht, 27B) | **12,7 t/s** | Plant und baut — der Haupt-Coder. **131k Kontext** (ganzer Slot), multimodal |
| `hermes` / `fast` | Qwen3.6-35B-A3B | **69,6–90 t/s** | Lucys Hirn **und** Sucher-Subagent. Immer warm, 65k/Slot |
| `debugger` | Muse-Glimmer-30B | **40–50 t/s** (DFlash) | Runtime-Debugger & Fehler-Diagnostiker (multimodal) |
| `vision` | Qwen3-VL-30B-A3B | auf Abruf | Lucys Augen (On-Demand) |
| `heavy` | gpt-oss-120b | nur nachts | Chef-Gutachter (4:30 Uhr). **Nie tagsüber** — verdrängt das warme Set |
| `embed` · `reranker` | Qwen3 0.6B | immer warm | Vektorsuche + Feinsortierung |
> Sieben Rollen, mehr nicht. Frühere Fassungen listeten hier auch `kritiker`, `scout` und
> `dense-planer` — die Modell-Konsolidierung vom 19.08. hat sie entfernt (ein Coder, ein
> Agent-Hirn). Der dichte 27B ist seither nicht mehr „Planer" neben dem Coder, sondern **ist**
> der Coder. Details: `docs/wissen/STACK.md`.
‼️ **Dichte Modelle sind auf dieser Box bandbreitengebunden.** Der Prefill bricht mit wachsendem
Kontext ein — beim früheren Kritiker (Devstral, dicht) waren bei 32k gemessene 63 t/s ≈ **9 Minuten
nur zum Lesen**, weshalb er hart auf 16k gedeckelt war. Das gilt weiter für jedes dichte Modell:
`coder` (Qwen3.8-27B) liefert ~12,7 t/s gegen ~90 t/s des MoE-Hirns — **kein Konfigfehler, sondern
das 215-GB/s-Limit der Plattform.** Der Kritiker selbst ist seit dem 19.08. nicht mehr im Stack.
‼️ **Speicher-Regel:** `Warm-Set + größtes On-Demand-Modell ≤ ~115 GB`. Die ko-residente Gruppe
(`groups.brains`) steht auf **`persistent: true`** (Verdrängungsschutz; live gegengeprüft
27.08.2026). Wichtig ist nicht der Schalter, sondern: **alles, was gleichzeitig warm sein muss,
gehört in DIESELBE Gruppe** — zwei Gruppen verdrängen sich gegenseitig, und `persistent` schützt
nicht davor (gemessen 25.07.). Details und
Messwerte: [`docs/wissen/VERDIKTE.md`](docs/wissen/VERDIKTE.md).
## Qualitäts-Tore
1. **Prüf-Tor** — `VERIFY` nach jeder Etappe; rot → der Agent (OpenCode Desktop) repariert lokal nach.
2. **CI-Ampel** — Lint (ruff) · Import/Syntax (compileall) · Frontend-Build. Läuft in Gitea.
Gemeinsame Lehre dahinter: **Wissen lebt in Datei + git, nicht im schrumpfenden Chat-Kontext.**
Kontext-Komprimierung löscht still die Regeln mit.
## Selbsterhaltung
- **Health-Wächter** (`sentry`) + **Warm-Set-Wächter** (`warmer`, per Env abschaltbar)
- **Updates mit Fangnetz** — Backup → Update → Postcheck → bei Fehler **Auto-Rollback + Pin**
- **Melde-Briefkasten** (`/api/voice/announce`) — alles, was die Box von sich aus sagen will;
Lucy pollt ihn und spricht es. Absender `loop` = Coding-Ereignisse
- **Gedächtnis** — Mem0-Sidecar, auto-lernend, semantisch, mit Auto-Dedupe
- Tägliche Self-Smokes, Zeitmaschine (Snapshot + Ein-Klick-Restore), Chronik der autonomen Taten
## API (Auswahl)
`health · models/* · discover · fit · groups · routing/* · system/* · maintenance/* · connect ·
memory/* · agent/* · ideen/* · lucy/stimme/* · chronik · eigenleben · wissen ·
zeitmaschine/* · reminders/* · voice/* · events (SSE)`
OpenAI-kompatibel: `/v1/chat/completions`, `/v1/completions`. MCP-Server: [`mcp/`](mcp/).
## Entwickeln ## Entwickeln
```bash ```bash
# Backend # Backend lokal auf :9000 (Windows)
cd backend cd backend
python -m venv .venv && .venv/Scripts/python -m pip install -r requirements.txt # Windows python -m venv .venv
.venv/Scripts/python -m pip install -r requirements.txt -r requirements-dev.txt
.venv/Scripts/python -m uvicorn app:app --port 9000 .venv/Scripts/python -m uvicorn app:app --port 9000
# Frontend (Dev, proxyt /api → :9000) # Frontend (Vite leitet /api an :9000 weiter; MC_API_TARGET=http://192.168.178.151:9001 zeigt auf die Box)
cd frontend && npm install && npm run dev # http://localhost:5173 cd frontend && npm ci && npm run dev
# Frontend (Build → wird vom Backend ausgeliefert)
cd frontend && npm run build # → frontend/dist
``` ```
`frontend/dist` **wird mitcommittet** — die Box hat kein Node; Deploy ist ein `git pull` plus Vor jedem Push: `bash deploy/pruefen.sh` (Shell- und Python-Syntax, `ruff check .`, Importe, `pytest backend/tests`);
Dienst-Neustart. Vor jedem Commit lohnt der Ampel-Vorlauf: `ruff check .` und `npm run build`. bei Frontend-Änderungen zusätzlich `npm run lint`, `npm test` und `npm run build` in `frontend/`, und das neue
`frontend/dist` mitcommitten, denn die Box baut kein Frontend. Gearbeitet wird auf einem Branch; `main` liegt auf
Gitea (`ssh://gitea@192.168.178.153:2222/Hitonabi/mission-control-v2.git`), danach auf der Box
`bash ~/mission-control-v2/deploy/deploy.sh`. Regeln für Agenten: [AGENTS.md](AGENTS.md).
## Env-Vars (Auswahl) ## Doku
| Variable | Default | Zweck | | Dokument | Für | Inhalt |
|---|---|---| |---|---|---|
| `MC_PORT` | `9000` | MC-Backend-Port (**die Unit auf der Box setzt `9001`**) | | [docs/README.md](docs/README.md) | alle | Index, Lesereihenfolge, Pflegeregeln |
| `MC_LLAMA_SWAP_URL` | `http://127.0.0.1:8080` | Engine/Router | | [docs/BEDIENUNG.md](docs/BEDIENUNG.md) | User | Oberfläche und Telegram-Nachrichten |
| `MC_CONFIG_PATH` | `/etc/llama-swap/config.yaml` | llama-swap-Config | | [docs/ARCHITEKTUR.md](docs/ARCHITEKTUR.md) | Agenten, Technik | Prozesse, Rollen, Datenwege, wer was schreibt |
| `MC_V1_UPSTREAM` | – | gesetzt → `/v1` geht an `mc2-gateway` (`:9010`) statt in-process | | [docs/BETRIEB.md](docs/BETRIEB.md) | Agenten, Technik | Handgriffe, Meldungen, Wächter, Deploy, Sicherung, Notfall |
| [docs/UPDATES.md](docs/UPDATES.md) | Agenten, Technik | Sonntags-Update, Festhalten, Freigeben |
| `MC_ENGINE_PATH` | `/opt/llamacpp-vulkan` | aktive Engine (Vulkan-Build) | | [docs/RADAR.md](docs/RADAR.md) | Agenten, Technik | Modell-Radar, Stack-Radar, Prüfstand |
| `MC_REWARM_ENABLED` | `1` | Warm-Set-Wächter (auf der Box bewusst `0`) | | [docs/WIEDERAUFBAU.md](docs/WIEDERAUFBAU.md) | Technik | die KI-Box von null aufbauen |
| `MC_DRAFTS_DIR` · `MC_SPEC_TYPE` | `$MODELS/drafts` · `draft-simple` | Spekulatives Dekodieren | | [docs/wissen/](docs/wissen/) | Agenten | Stand, Verdikte, Fallen, Arbeitsweise, offene Fäden |
## Weiterlesen
| Dokument | Inhalt |
|---|---|
| [`docs/BEDIENUNG.md`](docs/BEDIENUNG.md) | Wie man MC2 benutzt |
| [`docs/RUNBOOK.md`](docs/RUNBOOK.md) · [`docs/DISASTER_RECOVERY.md`](docs/DISASTER_RECOVERY.md) | Betrieb, Störungen, Wiederherstellung |
| [`docs/HERMES_SETUP.md`](docs/HERMES_SETUP.md) | Hermes-Agent, Profile, Crons |
| [`docs/wissen/VERDIKTE.md`](docs/wissen/VERDIKTE.md) | **Finale Technik-Entscheide — nicht neu aufrollen** |
| [`docs/wissen/FALLEN.md`](docs/wissen/FALLEN.md) · [`docs/wissen/OFFENE-FAEDEN.md`](docs/wissen/OFFENE-FAEDEN.md) | Stolpersteine · offene Punkte |
| [`AGENTS.md`](AGENTS.md) | Arbeitsregeln für Agenten in diesem Repo |
+81 -177
View File
@@ -1,199 +1,103 @@
# Die drei Jobs (KISS-Umbau, 21.08.2026) # Automatik der Box: Hermes-Jobs und Timer
Vorher: **4 Hermes-Crons + 6 systemd-Timer**, verteilt auf zwei Mechanismen. _Stand 24.09.2026 (erster Stand: KISS-Umbau 21.08.2026)._
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. Bis zum 20.08. liefen 4 Hermes-Crons und 6 systemd-Timer nebeneinander; dass ein Wächter fehlte, fiel tagelang
niemandem auf, weil niemand an zwei Orten nachsah. Seitdem gibt es wenige, klar getrennte Jobs, und die Startseite
des Box-Warts zeigt Hermes-Jobs und Timer zusammen im **Flugplan**.
| Job | Wann | Art | Skript | ## Was läuft
|---|---|---|---|
| **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 | Job | Wann | Mechanismus | Skript | Meldet |
`projekte-sync` (stuendlich). Die melden sich nie, die sichern und synchronisieren nur. |---|---|---|---|---|
| **Daily News Report** | täglich 07:00 | Hermes-Cron, Agent mit Websuche | `news-melden.sh` | Text und Sprachnachricht |
| **KI und Stack Radar** | samstags 08:00 | Hermes-Cron, `--no-agent` | `stack-radar.sh` → `stack-ist.sh`, `stack-upstream.py` | immer, Betreff `[Stack-Radar]` |
| **Updates am Sonntag** | sonntags 04:30 (+≤10 min) | systemd-Timer `mc2-autoupdate.timer` | `sonntags-update.sh` → `deploy/autoupdate.sh` | `[Box-Update]` |
| Modell-Radar | täglich 00:30, Test bis 02:30 | systemd-Timer `mc2-radar.timer` | `backend/radar_lauf.py` | nur „bestanden" (`[Modell-Radar]`) |
| Sicherung | täglich 03:30 (+≤5 min) | systemd-Timer `mc2-backup.timer` | `deploy/backup.sh` | nein; einen Fehlschlag meldet der Wächter |
| Morgenmeldung | täglich 07:00 | systemd-Timer `mc2-morgenmeldung.timer` | `deploy/morgenmeldung.sh` | die Sammelmeldung der Nacht |
| projekte-sync | stündlich | systemd-Timer `projekte-sync.timer` | `deploy/projekte-sync.sh` | nein |
| NerdQuiz-Nachtlauf | ~03:00 | extern: NerdQuiz auf Arcane fragt das Hirn direkt über llama-swap (`:8080`) | – | – |
- **Updates laufen seit 24.09. wieder per Timer.** Der Hermes-Cron „Updates am Sonntag" ist pausiert: Als Kind des
Hermes-Gateways hing der Updater am eigenen Neustart, wenn er Hermes aktualisierte (20.09.: 180 s, Fehlschlag).
- **Das Modell-Radar endet um 02:30,** weil der NerdQuiz-Nachtlauf um 03:00 das Hirn braucht. Den Nachtlauf erkennt
der Flugplan an den nächtlichen Anfragen (Modell-Nutzung aus dem Journal von llama-swap).
- Übersicht auf der Box: `bash -lc 'hermes cron list'` (Hermes-Jobs), `systemctl --user list-timers` (Timer).
## Der Entwurfsgrundsatz ## Der Entwurfsgrundsatz
> **Fakten sammelt ein Skript, Prosa schreibt das Modell.** > **Fakten sammelt ein Skript, Prosa schreibt das Modell.**
Der alte Selbsttest war am 20.08. gruen, waehrend vier Dinge kaputt waren: das Der alte Selbsttest war am 20.08. grün, während vier Dinge kaputt waren: Das Kritiker-Gate zeigte seit einem Tag auf
Kritiker-Gate zeigte seit einem Tag auf ein umbenanntes Modell (404), Lucys ein umbenanntes Modell (404), Lucys `SOUL.md` war blockiert, das Dashboard stand ohne Passwort offen, die CI war rot.
`SOUL.md` war blockiert, das Dashboard stand ohne Passwort offen, die CI war rot. Er hatte geprüft, ob Dienste **antworten**, nicht, ob sie **stimmen**.
Er hatte geprueft, ob Dienste **antworten** — nicht, ob sie **stimmen**.
`stack-ist.sh` prueft deshalb Ergebnisse: loesen die Rollen-Aliase noch auf? Ist `stack-ist.sh` prüft deshalb Ergebnisse: Lösen die Rollen-Aliase noch auf? Ist der letzte Timer-Lauf gutgegangen?
der letzte Timer-Lauf gutgegangen? Ist eine Sicherung juenger als zwei Tage? Ist eine Sicherung jünger als zwei Tage? `stack-upstream.py` vergleicht Neuigkeiten draußen (Releases, gemergte PRs,
Liefert die oeffentliche Adresse Daten ohne Anmeldung? Beim ersten Lauf hat es neue Entwurfsmodelle) mit dem letzten Lauf.
sofort zwei echte Befunde gefunden.
## Kugelsicher heisst konkret ## Kugelsicher heißt konkret
- **Das Modell steht nicht im kritischen Pfad.** Antwortet es nicht, gehen die - **Das Modell steht nicht im kritischen Pfad.** Antwortet es nicht, gehen die Rohbefunde trotzdem raus; nur die
Rohbefunde trotzdem raus. Nur die Prosa faellt weg, nie die Meldung. Prosa fällt weg, nie die Meldung.
- **Es meldet immer.** „Alles gruen" ist ein Ergebnis, kein Grund zu schweigen. - **Es meldet immer.** „Alles grün" ist ein Ergebnis, kein Grund zu schweigen.
- **Kein `set -e`.** Ein einzelner fehlschlagender Test darf den Bericht nicht - **Kein `set -e`.** Ein einzelner fehlschlagender Test darf den Bericht nicht abschneiden.
abschneiden. - **Ein Meldeweg:** `deploy/notify.sh` erreicht Telegram **und** Lucys Briefkasten in einem Aufruf; scheitert
- **Ein Melderweg:** `deploy/notify.sh` erreicht Telegram **und** Lucys `hermes send`, geht es direkt an die Telegram-Bot-API. Nachts (00:00–06:59) sammelt es bis zur Morgenmeldung um
Briefkasten (aus dem sie spricht) in einem Aufruf. Die Jobs laufen mit 07:00, Dringendes geht sofort. Die Hermes-Jobs laufen mit `--deliver local`, damit Hermes nicht ein zweites Mal
`--deliver local`, damit Hermes nicht ein zweites Mal sendet. sendet.
- **Kein Fuellmaterial.** Die Prompts verbieten ausgedachte Vorschlaege - **Kein Füllmaterial.** Die Prompts verbieten ausgedachte Vorschläge: Ein Bericht mit Füllmaterial wird nicht
ausdruecklich — ein Bericht mit Fuellmaterial wird nicht gelesen, und dann gelesen, und dann auch der echte Befund nicht.
auch der echte Befund nicht. - **Werkzeuge der Cron-Jobs:** `platform_toolsets.cron` = `[web, terminal]`; mehr braucht der Nachrichtenbericht nicht.
## Ausbringen ## Ausbringen
Die Skripte muessen unter `~/.hermes/scripts/` liegen (Vorgabe von `hermes cron --script`). Die Skripte müssen unter `~/.hermes/scripts/` liegen (Vorgabe von `hermes cron --script`). Das macht seit 24.09.
Quelle ist dieses Verzeichnis: `deploy/deploy.sh` (Stufe 2): Es installiert `deploy/jobs/*.sh` und `deploy/jobs/*.py` aus dem Box-Checkout nach
`~/.hermes/scripts/`, ausführbar und mit LF-Zeilenenden. Kopieren per `scp` von Hand entfällt. Alte Skripte in
`~/.hermes/scripts/` räumt der Deploy nicht weg.
```bash ## Daily News: Text und Stimme
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 - **Persona statt Stilvorgaben:** Der Job-Prompt bleibt kurz. Emojis, Ton und die Anrede „Commander" kommen aus
scheitert daran mit unverstaendlichen Meldungen. `~/.hermes/SOUL.md`. Wer im Prompt Stil verbietet, überstimmt die Persona (21.08. so passiert).
- **Ablauf:** Der Agent schreibt zwei Dateien, `/tmp/news-text.md` (mit Emojis, Links, Formatierung) und
`/tmp/news-sprich.txt` (3–4 Sätze zum Vorlesen), und ruft einmal `news-melden.sh` auf. Das Skript schickt den Text
über `notify.sh`, räumt den Bericht weg und startet die Stimme abgekoppelt: `lucy-stimme` (`:8021`, pocket-tts
`german_24l`) → WAV → OGG/Opus mit ffmpeg → `hermes send --to telegram "MEDIA:…"` (eine echte Sprachnachricht).
- **Sofort zurück:** Hermes' `terminal`-Werkzeug bricht nach 30 s ab. Das Skript kehrt deshalb sofort zurück und
sperrt denselben Bericht 2 Stunden gegen Doppelversand (22.08.: der Text kam einmal doppelt).
- **Aufräumen:** Hermes' `write_file` überschreibt keine vorhandene Datei. Bliebe der Bericht vom Vortag liegen,
scheiterte der nächste Lauf (23.09.).
- **Nicht `voice-service` (`:8650`) nehmen:** Dort sind nur Cloud-Stimmen geladen, nicht Lucy.
- Fällt die Stimme aus, geht der Text trotzdem raus.
## Abgeschaltet am 21.08. ## Kugelsicher-Regeln für Hermes-Crons
- `hermes cron edit <id> "text"` speichert nichts; der Prompt muss über `--prompt` kommen. Nach jeder Änderung in
`~/.hermes/cron/jobs.json` nachsehen.
- Alte Job-Fassungen liegen in jeder Sicherung:
`tar -xzf /srv/models/mc2-backups/mc2-state-*.tar.gz ./hermes/cron/jobs.json`.
- Tagesaktualität muss man erzwingen: Datum per `date` feststellen lassen, mehrere Suchen verlangen, Meldungen ohne
belegbares Datum verwerfen.
- Wer einen Werkzeugsatz abschaltet, muss `SOUL.md` mitlesen: Dort standen am 21.08. noch Anweisungen auf
abgeschaltete Werkzeuge.
## Abgeschaltet am 21.08. (KISS-Umbau)
| Weg | Warum | | Weg | Warum |
|---|---| |---|---|
| Cron `morgen-digest` | geht im Daily News Report auf | | Cron `morgen-digest` | ging im Daily News Report auf |
| Cron `tech-radar` | geht im Stack Radar auf | | Cron `tech-radar` | ging im Stack-Radar auf |
| Cron `nacht-wartung` | pruefte Lebenszeichen, nicht Ergebnisse | | Cron `nacht-wartung` | prüfte Lebenszeichen, nicht Ergebnisse |
| Cron `wissens-sync` | **war nie gelaufen** — kein `last_run_at` | | Cron `wissens-sync` | war nie gelaufen (kein `last_run_at`) |
| Timer `mc2-bagatell` | **15 Naechte hintereinander „0 eingespielt"** | | Timer `mc2-bagatell` | 15 Nächte hintereinander „0 eingespielt" |
| Timer `mc2-selfsmoke` | geht in `stack-ist.sh` auf | | Timer `mc2-selfsmoke` | ging 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 `pbs-backup` | doppelt zu `mc2-backup` und seit 21.08. rot (sein Quellordner fiel mit dem alten Gedächtnis-Dienst weg) |
| Timer `mc2-autoupdate` | wird jetzt vom Cron „Updates am Sonntag" gestartet | | Timer `mc2-autoupdate` | vom 21.08. bis 24.09. startete der Cron „Updates am Sonntag" das Update; seit 24.09. wieder der Timer |
Die Unit-Dateien liegen noch da, nur `disable`d — Rueckbau ist ein Befehl. Die Unit-Dateien der abgeschalteten Timer liegen auf der Box noch (disabled), im Repo nicht mehr; `mc2-autoupdate`
läuft wieder und liegt im Repo. Die Morgenmeldung um
--- 07:00 (`mc2-morgenmeldung.timer`, seit 24.09.) ersetzt den alten Morgen-Digest nicht inhaltlich: Sie liefert nur die
nachts gesammelten Meldungen aus.
## 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
**`--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, `enable`d, 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):
```bash
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.
+104 -52
View File
@@ -1,64 +1,116 @@
# Mission Control 2.0 — Bedienung (kurz & klartext) # Bedienung — der Box-Wart im Alltag
**Öffnen:** `http://192.168.178.151:9001` (vom Windows-PC im LAN). Dark/Light-Umschalter oben rechts, _Stand 24.09.2026. Für dich als Nutzer. Technische Einzelheiten stehen in [BETRIEB.md](BETRIEB.md)._
**Cmd/Strg+K** springt zu jedem Bereich.
> Im Alltag fasst du MC kaum an: `model: auto` + Auto-Swap laden Modelle selbst. Du öffnest es, um ein **Kurz gesagt:** Die KI-Box kümmert sich selbst um sich. Du bekommst Nachrichten auf Telegram. Handeln musst du nur,
> Modell zu installieren/tauschen, die Auslastung zu prüfen, Gedächtnis zu pflegen oder ein Tool zu verbinden. wenn eine Nachricht es sagt oder auf der Startseite etwas gelb oder rot leuchtet.
## Die Bereiche (Sidebar, Stand 09.07.2026) Der Homelab Orchestrator bekommt später einen zweiten Bereich für den Proxmox-PC („Homelab"). Heute gibt es nur den
- **Cockpit** — deine Box auf einen Blick (Status, Leistung, Morgenlage, Erinnerungen). Bereich für die KI-Box, den Box-Wart.
- **Modelle** — Speicherleiste, installierte Modelle + neue finden/laden, Rollen (hermes/fast/heavy/…).
- **Gedächtnis** — geteilte Fakten/Regeln, die ALLE Tools (Hermes, Desktop, PC) via MCP lesen/schreiben.
- **Wissen** — Lucys Wissens-Vault (Traum-Notizen, `[[verlinkt]]` navigierbar).
- **Chronik** — was die Box von allein getan hat + Zeitmaschine (Ein-Klick-Restore).
- **Verbinden** — fertige Anbindungs-Snippets (Hermes Desktop · Kilo Code · Claude Code).
- **Hermes** — Agent-Status & Verdrahtung; „Hermes-GUI öffnen" zeigt die eingebaute Weboberfläche.
- **Konsole** — direkte Box-Shell (SSH-artig) im Browser.
- **Anleitung** — Schritt-für-Schritt-Einrichtung.
> **Zum Arbeiten mit dem Agenten** (Coding, Projekte, lange Threads) nutzt du die ## So kommst du hin
> **Hermes-Desktop-App am PC** — MC2 ist der Maschinenraum der Box. Wie die App andockt:
> `docs/HERMES_SETUP.md`, Abschnitt „Hermes Desktop (PC) anbinden".
## Modell installieren Im Heimnetz im Browser `http://192.168.178.151:9001` öffnen, am PC oder am Handy. Oben (am Handy unten) stehen die
**Tab „Modelle & Routing" → „Modelle finden":** drei Seiten **Start**, **Updates** und **Modelle**. Rechts oben (am Handy unter **Mehr**) findest du das
- **Kuratiert:** auf einer Empfehlungs-Karte „Installieren" klicken (⭐ = beste Wahl je Kategorie). Hermes-Dashboard, **Dienste und Protokolle** und die **Einstellungen**.
- **Eigenes (HuggingFace):** oben **HF-URL oder `org/repo`** einfügen → „Quants laden" → Quant wählen →
„Installieren". Oder die **Suchleiste** nutzen → Treffer anklicken → Quant → Installieren.
- Der Download läuft als Job mit **Fortschrittsbalken** oben; llama-swap pflegt das Modell automatisch ein.
## LLM tauschen (z.B. anderes „fast"-Hirn) Wichtige Knöpfe fragen vorher nach. Was du auslöst, bestätigt eine kurze Meldung unten rechts.
„Modelle & Routing" → **„Installiert"**: in der Zeile des Modells im **Rollen-Dropdown**
`fast` (bzw. `heavy`/`coder`/`vision`/`scout`) wählen → der Alias wandert auf dieses Modell.
- `model: auto` nutzt ab sofort dieses Modell als schnelles/schweres Hirn — für Hermes **und** Vibe Coding.
- **Kontext** ändern: auf die Kontext-Zahl (✎) klicken. **Entfernen:** 🗑 (GGUF-Datei bleibt erhalten).
- „Auto-Swap" = llama-swap lädt automatisch, was gerade angefragt wird; du musst nichts laden/entladen.
## Agent/IDE verbinden (Arbeiten am eigenen PC) ## Start
„Verbinden" → Eintrag wählen → Snippet/Anleitung kopieren. **Hermes Desktop** (Standard) dockt
remote an die Box an (Gateway-URL über den MC2-Proxy, Token liegt auf der Box —
siehe `docs/HERMES_SETUP.md`). **Kilo Code** und **Claude Code** zeigen auf
`http://192.168.178.151:9001/v1`. Memory-MCP-Snippet separat einfügen → geteiltes Gedächtnis.
(Zed ist abgeschafft — Hermes Desktop hat die IDE-Rolle übernommen, 09.07.2026.)
## Gedächtnis pflegen - **Große Leuchte oben links:**
„Gedächtnis": Fakt/Regel hinzufügen (Kategorie wählen), suchen/filtern, **🧹 Aufräumen** entfernt Dubletten. - grün „Alles in Ordnung": nichts zu tun;
Das ist die geteilte „Verfassung" für alle Tools. - gelb „Achtung" mit der Zahl der Hinweise: bei Gelegenheit ansehen;
- rot „Störung": jetzt ansehen;
- blau „Update läuft": die Box aktualisiert sich gerade, Hinweise ruhen bis zum Ende;
- grau „Wächter schweigt": der Aufpasser der Box hat sich seit über 5 Minuten nicht gemeldet.
Ein Klick auf die gelbe oder rote Leuchte springt zur Checkliste.
- **Warnlampen:** Motor (die Software, die die KI-Modelle rechnet), Hirn (Lucys Modell), Coder (das Modell zum
Programmieren; „auf Abruf" ist normal), Hermes (Lucys Agent), Jobs, Sicherung (gelb, wenn die letzte älter als
36 Stunden ist), Platte (gelb ab 80 %, rot ab 90 %), Updates.
- **Instrumente:** Speicher, Temperatur, Platte und die Zeit seit dem letzten Neustart.
- **Checkliste:** alles, was der Wächter gefunden hat. „Jetzt" heißt sofort ansehen, „Prüfen" heißt bei Gelegenheit.
Unter jedem Punkt stehen Knöpfe, zum Beispiel „Neu starten", „Protokoll" (was der Dienst zuletzt geschrieben hat),
„Erneut ausführen", „Freigeben" oder „Ausblenden bis zum nächsten Lauf". Einen abgestürzten Dienst startet die Box
meist schon selbst neu.
- **Flugplan:** was heute schon lief und was als Nächstes kommt, etwa Sicherung, Modell-Radar, Morgenmeldung und die
Updates am Sonntag.
- **Radar-Kasten:** ob das Modell-Radar gerade einen Kandidaten hat; „Ansehen" führt zur Seite Modelle.
## Wartung & Backup ## Updates
„System" → **Wartung & Updates**: Badge (offene OS-Pakete / Engine / Modell-Upgrades), Buttons
**OS aktualisieren · Engine aktualisieren · Engine neu starten · Reboot**, Modell-Upgrade-Vorschläge
(1-Klick), **Backup jetzt** (Gedächtnis-DB + Configs), Dienste-Health.
`Engine neu starten`, Logs & Modell-Upgrades laufen sofort (NOPASSWD vorhanden). **OS-Update + Reboot** - Jede Zeile ist ein Baustein: Betriebssystem, Motor (llama.cpp), llama-swap, Hermes. Du siehst, was läuft, was neu
brauchen einmalig erweiterte sudoers — `sudo visudo`, ergänze: wäre und was sich ändert.
``` - Jeden Sonntag um 04:30 aktualisiert sich die Box von selbst; vorher sichert sie, danach prüft sie. Du musst nichts
hitonabi ALL=(root) NOPASSWD: /usr/bin/apt-get, /usr/sbin/reboot tun.
``` - „Nach Neuem suchen" schaut sofort nach. „Aktualisieren" spielt einen Baustein sofort ein, „Alles jetzt
(Engine-Update: `MC_ENGINE_UPDATE_CMD` in der mc2-Unit setzen — Befehl, der /opt/llamacpp aktualisiert.) aktualisieren" alle nacheinander. Lucy ist dabei ein paar Minuten nicht erreichbar.
Danach ist die komplette Wartung klicki-bunti, ohne Passwort. - **Festgehalten:** Ging ein Update schief, hat die Box die alte Version zurückgeholt und hält den Baustein fest. Sie
läuft stabil weiter, bekommt für diesen Baustein aber keine Updates mehr. „Freigeben" heißt: am nächsten Sonntag
noch einmal versuchen.
- **Prüfung unklar:** Die Box konnte nicht nachsehen, zum Beispiel ohne Internet. Später „Nach Neuem suchen" drücken.
- **Verlauf:** was die letzten Update-Läufe gebracht haben, je Baustein.
- **Sicherungen:** täglich gegen 03:30, mit Kopie auf einem zweiten Gerät. „Jetzt sichern" macht sofort eine.
„Zurückspielen" setzt die Einstellungen von Hermes und llama-swap auf den Stand dieser Sicherung; vorher sichert die
Box den jetzigen Stand. Lucys Gedächtnis bleibt dabei erhalten.
## Modelle
- **Speicher:** wie voll der Arbeitsspeicher ist. Die gelbe Linie bei etwa 115 GB ist die Grenze; darüber wird es eng.
- **Hirn** (für Lucy, NerdQuiz und OpenChamber bei Kleinkram) und **Coder** (für OpenChamber zum Planen und Bauen):
welches Modell die Rolle hat, ob es gerade geladen ist und ob es Bilder versteht. „Jetzt laden" lädt es vorab. Die
„Dritte Rolle" bleibt frei, bis ein Modell dort nachweislich etwas bringt.
- **Wer nutzt die Modelle:** Anfragen der letzten 7 Tage je Absender und je Stunde.
- **Modell-Radar:** Die Box sucht selbst nach besseren Modellen und testet nachts zwischen 00:30 und 02:30 höchstens
eines pro Woche. „Bestanden" heißt: besser als das heutige Modell. Dann entscheidest du:
- „Übernehmen" tauscht das Modell. Beim Hirn ist Lucy etwa eine Minute weg; das alte Modell bleibt auf der Platte.
- „Verwerfen" löscht die Dateien, und das Radar testet dieses Modell nie wieder.
- „Jetzt suchen" sucht sofort (das kann ein paar Minuten dauern).
- **Weitere Einträge:** alle übrigen Modelle. „Modelle selbst suchen" findet Modelle auf Hugging Face und lädt sie.
- **Aufräumen:** Modelle und Ordner, die gerade niemand nutzt, mit Größe und Hinweis. Die Box löscht nie von selbst.
„Löschen" ist endgültig; zurück ginge es nur mit einem neuen Download.
## Dienste und Protokolle
Die Liste aller Dienste der Box: grün = läuft, rot = antwortet nicht, grau = schläft (bewusst abgeschaltet).
„Protokoll" zeigt, was der Dienst zuletzt geschrieben hat. „Neu starten" startet ihn neu; „Wecken" weckt einen
schlafenden Dienst bis zum nächsten Neustart der Box. Die Spracherkennung und die Konsole schlafen seit 24.09. mit
Absicht; die Android-App wird sie später wieder brauchen.
## Einstellungen
- **Hugging-Face-Zugang:** nötig für gesperrte Modelle und für schnellere Downloads. Eintragen, speichern, bei Bedarf
löschen.
- **Hermes-Dashboard:** öffnet die eigene Oberfläche von Hermes (Chat, Sitzungen, Cron-Jobs). Hermes fragt nach
seiner eigenen Anmeldung.
## Nachrichten auf Telegram
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.
| Nachricht | Bedeutung | Was du tust |
|---|---|---|
| „[Morgenmeldung] Guten Morgen, Commander …" | alles aus der Nacht in einer Nachricht | lesen |
| „[Box-Update] … aktualisiert … alles läuft" | Update eingespielt und geprüft | nichts |
| „[Box-Update] Commander, die Wochenpflege der Box ist durch" | Sonntagsbericht, eine Zeile je Baustein | lesen |
| „[Box-Update] … fehlgeschlagen … zurückgerollt … GEPINNT" | Update ging schief, die alte Version läuft wieder, der Baustein ist festgehalten | nichts nötig; bei Gelegenheit unter Updates „Freigeben" |
| „[Box-Update] KRITISCH: …" (sofort, auch nachts) | Update und Rückweg sind gescheitert | Box ansehen (unten), Hilfe holen |
| „[Box-Update] Neustart steht an … Wartungsfenster" | ein Neustart wartet auf Sonntag früh | nichts |
| „[Box-Update] Die Box startet jetzt neu …" | geplanter Neustart am Sonntag früh | nichts; sie ist ein paar Minuten weg |
| „[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 | Startseite öffnen, in der Checkliste den Knopf drücken |
| „[Box wieder ok] Erledigt: …" | das Problem ist weg | nichts |
| „[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 |
| Daily News (07:00, Text und Sprachnachricht) | die Nachrichten des Tages von Lucy | lesen oder hören |
| „[Alarm] Deploy …" (sofort) | eine neue Version des Box-Warts ließ sich nicht einspielen, die alte läuft wieder | nichts sofort; Bescheid geben |
## Wenn etwas hakt ## Wenn etwas hakt
- Modell antwortet nicht → „System" → Dienste-Health (Engine online?) + Engine-Logs-Link (llama-swap `/ui`).
- Hermes langsam/komisch → im Hermes-WebUI **neuen Chat** starten (frische Session); Details: `docs/CUTOVER.md`. - **Die Seite lädt nicht:** die Box einmal mit dem Knopf am Gerät neu starten, 2–3 Minuten warten, die Seite neu
laden. Hilft das nicht: Hilfe holen (für Techniker: [BETRIEB.md](BETRIEB.md), Abschnitt „Notfall").
- **Die Leuchte ist rot:** in der Checkliste den ersten Knopf drücken, meist „Neu starten". Nach einer Minute prüft
der Wächter erneut.
- **Lucy antwortet nicht:** die Lampen Hirn und Hermes ansehen; unter „Dienste und Protokolle" Hermes neu starten.
- **Ein Baustein bleibt festgehalten:** unter Updates „Freigeben".
+89
View File
@@ -0,0 +1,89 @@
# Doku — Index, Lesereihenfolge, Pflegeregeln
_Stand 24.09.2026. Das Projekt heißt „Homelab Orchestrator"; der Bereich für die KI-Box heißt „Box-Wart", der für
den Proxmox-PC „Homelab". Bei Widerspruch gilt: Code vor Doku, [wissen/STACK.md](wissen/STACK.md) vor anderen
Dokumenten, aktuelle Doku vor dem Archiv._
## Lesereihenfolge
**Frischer Agent:**
1. [../AGENTS.md](../AGENTS.md): verbindliche Bau-Regeln.
2. [wissen/ARBEITSWEISE.md](wissen/ARBEITSWEISE.md): wer der User ist, die Regeln, was wohin gehört.
3. [wissen/STACK.md](wissen/STACK.md): Maschinen, Dienste, Modelle, Automatik.
4. [ARCHITEKTUR.md](ARCHITEKTUR.md): wie die Teile zusammenhängen.
5. [wissen/VERDIKTE.md](wissen/VERDIKTE.md): was entschieden ist.
6. [wissen/FALLEN.md](wissen/FALLEN.md): vor jeder Änderung an der Box.
7. [wissen/OFFENE-FAEDEN.md](wissen/OFFENE-FAEDEN.md): was als Nächstes ansteht.
**Betrieb und Störungen:** [BETRIEB.md](BETRIEB.md), dann je nach Thema [UPDATES.md](UPDATES.md),
[RADAR.md](RADAR.md), [WIEDERAUFBAU.md](WIEDERAUFBAU.md) und [../deploy/jobs/README.md](../deploy/jobs/README.md).
**User:** [BEDIENUNG.md](BEDIENUNG.md).
## Die Dateien
| Datei | Für | Inhalt |
|---|---|---|
| [BEDIENUNG.md](BEDIENUNG.md) | User | Oberfläche, Telegram-Nachrichten, was tun, wenn etwas hakt |
| [ARCHITEKTUR.md](ARCHITEKTUR.md) | Agenten, Technik | Prozesse, Rollen und Partner-Instanz, Modell-Rollen, wer was schreibt, Meldeweg, Schnittstellen |
| [BETRIEB.md](BETRIEB.md) | Agenten, Technik | Handgriffe, Meldungen, Wächter-Regeln, Deploy und Prüftor, Sicherung, Notfall |
| [UPDATES.md](UPDATES.md) | Agenten, Technik | Sonntags-Kette, Prüfungen, Festhalten und Freigeben, Handbetrieb |
| [RADAR.md](RADAR.md) | Agenten, Technik | Modell-Radar, Prüfstand, Stack-Radar |
| [WIEDERAUFBAU.md](WIEDERAUFBAU.md) | Technik | die KI-Box von null; Anhang A: llama-swap-Unit |
| [wissen/STACK.md](wissen/STACK.md) | Agenten | Stand-Wahrheit: Maschinen, Dienste, Modelle, Automatik |
| [wissen/VERDIKTE.md](wissen/VERDIKTE.md) | Agenten | Entscheidungen mit Datum und Grund; Abschnitt „Überholt" |
| [wissen/FALLEN.md](wissen/FALLEN.md) | Agenten | Fallen mit Datum und Symptom |
| [wissen/ARBEITSWEISE.md](wissen/ARBEITSWEISE.md) | Agenten | User-Profil, Regeln, Flächen |
| [wissen/OFFENE-FAEDEN.md](wissen/OFFENE-FAEDEN.md) | alle | Fahrplan und die eine Liste offener Punkte |
| [../deploy/jobs/README.md](../deploy/jobs/README.md) | Agenten, Technik | Hermes-Jobs und Timer, Daily News |
## Archiv
`archiv/` hält historische Dokumente mit Datumspräfix. Sie werden nicht mehr gepflegt; Aussagen und Links darin
können veraltet sein.
| Datei | Inhalt |
|---|---|
| `2026-06-30-optimierungsplan.md` | Audit und Plan zu Rollen, Warm-Set und Durchsatz (Juni) |
| `2026-06-30-zeroclaw-poc-auftrag.md`, `…-ergebnis.md` | ZeroClaw-Test; Beleg für „Hermes bleibt" |
| `2026-06-30-lucy-tts-plan.md` | Stimmen-Strategie für Lucy (Juni) |
| `2026-07-02-autonomie-plan.md` | „Die Box wartet sich selbst", Etappen E1–E6 |
| `2026-07-02-komplett-review.md` | Review von MC2 und Lucy |
| `2026-07-06-antigravity-review-prompt.md` | Review-Auftrag für Gemini |
| `2026-07-10-gemini-briefing.md` | Notfall-Briefing für Gemini |
| `2026-07-10-zielbild-abloesung.md` | Richtungs-Entscheid vom 10.07. |
| `2026-07-15-umbauplan-abloesung.md` | Abschluss-Review vom 15.07. mit Gateway- und Steward-Auszug |
| `2026-07-19-uebergabe-drei-welten.md` | Übergabe des Umbaus vom 19.07. |
| `2026-07-21-skill-gitea-workflow.md` | Beschreibung des früheren Skills gitea-workflow |
| `2026-08-07-hermes-setup.md` | Hermes-Runbook aus der Anfangszeit |
| `2026-08-20-savepoint.md` | Stand-Seite vom 20.08. |
| `2026-08-20-referenzaufgabe-gedaechtnis-ausbau.md`, `2026-08-20-referenz-check.sh` | Messlatte des Referenzlaufs (Ausbau des alten Gedächtnis-Dienstes) |
| `2026-08-21-hermes-werkzeuge.md` | Werkzeugsätze nach Bedarf; Kern steht in `wissen/FALLEN.md` |
| `2026-08-21-umbau-openchamber.md` | Aufbau der Coding-Bahn mit OpenChamber, Gitea-SSH |
| `2026-09-04-raphael-lucy-innere-stimme.md` | Lucy als innere Stimme (Entscheid 04.09.) |
| `2026-09-04-offene-faeden-alt.md` | Liste offener Punkte bis 04.09., mit den Lucy-Fäden |
| `gitea-host/` | Notizen zum Gitea-Host |
| `hermes-api_server-vision-patch-verwaist.diff` | verwaister Patch am Hermes-`api_server` (Bilder), nur zur Erinnerung |
Ganz gelöschte Dokumente (STATUS, CUTOVER, UPGRADE, AUDIT_KICKOFF, die Kopien unter `docs/memory/` u. a.) stehen in
der Git-Historie.
## Pflegeregeln
1. **Eine Wahrheit je Thema:** Stand → `wissen/STACK.md`; Entscheidungen → `wissen/VERDIKTE.md`; Fallen →
`wissen/FALLEN.md`; offene Punkte → `wissen/OFFENE-FAEDEN.md` (die einzige Liste, keine zweite anlegen); Abläufe →
`ARCHITEKTUR.md`, `BETRIEB.md`, `UPDATES.md`, `RADAR.md`.
2. **Verifizieren vor Behaupten:** Jede Aussage gegen Code oder Messung prüfen. Stand-Angaben tragen ein Datum, am
besten mit Commit. Was nicht geprüft ist, heißt „offen" oder „nicht geprüft".
3. **Doku folgt dem Code im selben Branch:** Wer Units, Skripte, Routen, Meldungstexte oder Abläufe ändert, zieht die
betroffenen Dokumente mit.
4. **Verdikte** ändern sich nur mit neuem, belegtem Anlass (Messung, Release, User-Entscheid); das alte wandert mit
Datum nach „Überholt".
5. **Fallen** mit Datum und Symptom eintragen; Erledigtes streichen.
6. **Historisches** mit eigenem Wissen nach `archiv/` (Präfix `JJJJ-MM-TT-`), sonst löschen; die Git-Historie
behält alles.
7. **Sprache:** Deutsch, knapp, Fakten statt Adjektive. `BEDIENUNG.md` in Alltagssprache ohne Fachjargon.
8. **Keine Geheimnisse** (Tokens, Passwörter, Chat-IDs) in die Doku; Sicherheitshinweise in einem Satz.
9. **Weg der Änderung:** Branch → `bash deploy/pruefen.sh` → Merge. Auf der Box kommt die Doku mit dem nächsten
Deploy an.
-39
View File
@@ -1,39 +0,0 @@
# docs/wissen/ — Die Wissens-Heimat für ALLE Agenten
_Angelegt 10.07.2026 (Übergabe-Session S1). Dieses Verzeichnis ist die kuratierte Übergabe
des Claude-Projektwissens ins Repo — damit Box-Hermes, Hermes Desktop, Gemini/Antigravity
und jeder künftige Agent dieselbe Wahrheit lesen._
**Warum hier:** Die Box liest `~/mission-control-v2/docs/wissen/`, Antigravity liest den
`F:\`-Checkout — versioniert, deploybar, kein Agent-privates Gedächtnis. Der Wissens-Vault
(`~/wissens-vault/`) bleibt Lucys LERNSCHICHT (Träume, Radar-Funde, Eigenbau-Landkarte);
hier liegt das kuratierte PROJEKT-Wissen.
## Die Dateien (Lese-Reihenfolge für einen frischen Agenten)
| Datei | Inhalt | Wann lesen |
|---|---|---|
| [ZIELBILD.md](ZIELBILD.md) | Richtungs-Entscheid 10.07.: Box übernimmt alles, 4-Session-Paket | Immer zuerst — das ist der Kurs |
| [ARBEITSWEISE.md](ARBEITSWEISE.md) | Wer der User ist + die nicht verhandelbaren Arbeitsregeln | Vor JEDER Arbeit |
| [GRENZEN.md](GRENZEN.md) | Was gehört wohin (MC2=Steuerpult, Lucy=Chat, Hermes-Quelle tabu) | Bevor man ein Feature baut — wohin? |
| [STACK.md](STACK.md) | IPs, Ports, Dienste, Modelle, Backups, Security (live verifiziert) | Vor SSH/Deploy/Config |
| [VERDIKTE.md](VERDIKTE.md) | Finale Technik-Entscheide mit Warum — NICHT neu aufrollen | Bevor man etwas "Besseres" vorschlägt |
| [FALLEN.md](FALLEN.md) | Hart erarbeitete Betriebs-Fallen (Git, Deploy, llama-swap, Hermes, Mem0, PC) | Bevor man in eine davon läuft |
| [RAPHAEL.md](RAPHAEL.md) | Lucy als innere Stimme (04.09.2026): kein Avatar, eine Stimme für PC + Telegram, Annahme-Reihenfolge, SOUL-Vorschlag | Bevor man Lucy anfasst |
| [OFFENE-FAEDEN.md](OFFENE-FAEDEN.md) | Die EINE Liste offener Punkte + Termine | Bei "was ist noch zu tun?" |
Dazu im Repo-Wurzelverzeichnis bzw. docs/: `AGENTS.md` (verbindliche Projekt-Regeln),
`docs/GEMINI_BRIEFING.md` (Notfall-/Review-Briefing für Gemini), `docs/RUNBOOK.md`
(1-Seiten-Mensch-Anleitung), `docs/ANTIGRAVITY_REVIEW.md` (Review-Prompt).
## Pflege-Regeln
1. **Erledigtes raus, Neues rein** — OFFENE-FAEDEN.md ist die einzige offene Liste,
keine neuen "pending"-Dateien anlegen.
2. **Verdikte werden nur mit neuem, belegtem Anlass wieder geöffnet** (Messung, Release,
User-Entscheid) — dann in VERDIKTE.md den alten Eintrag ERSETZEN, nicht löschen.
3. **Verifizieren vor Behaupten:** Stand-Angaben tragen ein Datum; wer STACK.md ändert,
hat live auf der Box gemessen/gelesen, nicht vermutet.
4. Änderungen laufen wie alles über die Pipeline: Branch → Ampel grün → Merge durch den User → deploy.sh.
Reine Doku hier gehört zu den "Bagatellen ohne Klick"-Klassen (siehe ZIELBILD.md),
erscheint aber immer in Morgenlage/Chronik.