Files
mission-control-v2/docs/wissen/STACK.md
T
HitonabiandClaude Opus 5.5 24e6dd81ba doku: Wissen auf den Box-Wart-Stand (STACK, VERDIKTE, FALLEN, ARBEITSWEISE, OFFENE-FAEDEN)
- STACK.md: Stand 24.09. - Dienste mit Zustand (Konsole und Spracherkennung schlafen), Units im
  Repo und nur auf der Box, Modelltabelle aus der Config vom 24.09. (Hirn, Coder, zwei
  Bild-Zwillinge, brains mit exclusive: false), Hermes v0.21.4 mit MCP-Stand nach der Diaet,
  vollstaendiger Automatik-Fahrplan (Timer, Hermes-Crons, NerdQuiz 03:00), Coding-Bahn
  OpenChamber, Sicherheit in einem Satz.
- VERDIKTE.md: Box-Wart-Verdikte vom 23./24.09. ergaenzt (Umbau statt Neubau, zwei Instanzen,
  Homelab-Rechte und -Updates, keine Anmeldung, Nachtruhe, Timer, Box-Diaet, Radar-Leitplanken,
  Bild-Zwillinge, exclusive: false); Ueberholtes in eine Tabelle "Ueberholt (mit Datum)";
  Formatfehler (Zeilen mit "|-") beseitigt.
- FALLEN.md: neue Fallen (Persistent=true, Abzug ueberschreibt lebende Config, Jobs sterben bei
  MC2-Neustart, exclusive, Draft+Bild=500, Hermes-Cron als Updater, write_file, web_extract,
  Gitea-SSH-Benutzer); Werkstatt-, Kritiker-, Delegations- und Desktop-Fallen gestrichen.
- ARBEITSWEISE.md mit GRENZEN.md zusammengelegt; Flaechen-Tabelle fuer Box-Wart, Homelab-Teil,
  Lucy, Hermes, Telegram, OpenChamber, Android-App.
- OFFENE-FAEDEN.md neu: Phasen 0-5 laut Plan (Phase 1 laeuft, Oberflaeche und Doku offen) und
  13 offene Einzelpunkte, alle am Code in main belegt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 15:38:10 +02:00

141 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Stack-Wahrheiten — Maschinen, Dienste, Modelle, Automatik
_Stand 24.09.2026. Quellen: Code in `main` (`4cd856b`: Units, `deploy/llama-swap.config.yaml`, Skripte)
und die Prüfberichte vom 24.09.2026 (live auf der Box gelesen). Bei Widerspruch zu anderen Dokumenten
gewinnt diese Datei. Wer sie ändert: erst messen, dann schreiben, Datum dazu._
## Maschinen und Zugänge
| Was | Wo | Stand |
|---|---|---|
| **KI-Box** — Bosgame M5, AMD Ryzen AI MAX+ 395 (gfx1151), 128 GB gemeinsamer Speicher (~122 GB nutzbar) | `hitonabi@192.168.178.151` (SSH) · Ubuntu 26.04.1 · Zeitzone Europe/Berlin | 24.09. |
| **Windows-PC** (Dev-PC, OpenChamber) | `192.168.178.22` | 23.09. |
| **Proxmox-Host** | `192.168.178.108` · Container 100 AdGuard, 101 NPMplus, 102 NetBird, 103 PVE Scripts Local, 104 Gitea, 105 PBS · VM 106 Arcane (Docker, u. a. NerdQuiz) | 24.09. |
| **Gitea** | `192.168.178.153` · HTTP `:3000` · SSH `:2222`, Benutzer `gitea` | 21.08. |
| **PBS** | `192.168.178.156:8007` | 07/2026, nicht neu geprüft |
| **QNAP** | `192.168.178.62` | 07/2026, nicht neu geprüft |
## Repos
- **Homelab Orchestrator / Box-Wart (dieses Repo):** PC `F:\Coding Stuff\mission-control-2` ↔ Gitea
`Hitonabi/mission-control-v2` ↔ Box `~/mission-control-v2`. Auf Gitea nur `main` plus zwei
Archiv-Tags (`git tag -l 'archiv/*'`). `frontend/dist` ist committet (die Box baut kein Frontend).
- **Lucy (Desktop-App):** `F:\Coding Stuff\lucy``Hitonabi/lucy` (Electron, eigenes Repo).
## Dienste auf der Box
| Unit | Art | Port | Aufgabe | 24.09. |
|---|---|---|---|---|
| `llama-swap` | System | `:8080` | Modell-Router, startet je Modell einen `llama-server` (Vulkan, `/opt/llamacpp-vulkan`), liest die Config mit `--watch-config` | läuft |
| `mission-control-2` | User | `:9001` | Box-Wart: Oberfläche, 60 `/api`-Routen, `/v1`-Weiterleitung, `/hermes-ui/`, Erinnerungen | läuft |
| `mc2-gateway` | User | `127.0.0.1:9010` | `/v1`-Datenpfad: `model: auto`, Bild-Weiche | läuft |
| `mc2-steward` | User | | Wächter und Re-Warm (hält das Hirn geladen) | läuft |
| `hermes-gateway` | User | `:8642` | Hermes Agent „Lucy", Telegram | läuft |
| `hermes-builtin-ui` | User | `:9119` | Hermes-Dashboard, in MC2 unter `/hermes-ui/` | läuft |
| `lucy-stimme` | User | `127.0.0.1:8021` | Lucys Stimme (pocket-tts `german_24l`) | läuft |
| `voice-service` | User | `127.0.0.1:8650` | Spracherkennung für Lucy-Desktop | schläft |
| `box-console` | User | `7682` (nur lo) | Web-Konsole (ttyd) | schläft |
„Schläft" = `systemctl --user disable --now` (User-Entscheid 24.09.): kein Fehler für den Wächter, in der
Oberfläche grau mit Knopf „Wecken". Die Android-App (Phase 5) braucht die Spracherkennung wieder.
Versionen (Prüfbericht 24.09.): llama.cpp b11147, llama-swap v257, Hermes Agent v0.21.4, Python 3.14 im
Box-Wart-venv, Kernel 7.0.0-34 (seit dem Neustart am 24.09. 14:51).
‼ User-Units per SSH nur mit `export XDG_RUNTIME_DIR=/run/user/$(id -u)` vor `systemctl --user`.
Units im Repo (`deploy/`, spielt `deploy.sh` aus): `mission-control-2` (+ Override), `mc2-gateway`,
`mc2-steward` (+ Warm-Set-Drop-in), `lucy-stimme`, `voice-service`, `box-console` und die Paare
`mc2-radar`, `mc2-backup`, `mc2-morgenmeldung`, `mc2-autoupdate`, `projekte-sync` (.service/.timer).
Nicht im Repo: `llama-swap.service` samt Drop-ins (Inhalt: [WIEDERAUFBAU.md](../WIEDERAUFBAU.md), Anhang A),
`hermes-gateway.service` (legt Hermes an) und `hermes-builtin-ui.service` samt Drop-ins. Seit 24.09. liegen
alle User-Units und die llama-swap-Drop-ins als Kopie in jeder Sicherung.
## Modelle (llama-swap, Config vom 24.09.2026)
Warm ist nur das Hirn (Gruppe `brains`: `swap: false`, `persistent: true`, `exclusive: false`).
Alles andere lädt bei Bedarf und geht nach Ablauf von `ttl` (Sekunden) wieder raus.
| Modell | Alias | Gruppe | ttl | Kontext | Tempo (13k Kontext) | Anmerkung |
|---|---|---|---|---|---|---|
| Qwen3.6-35B-A3B | `hermes`, `fast` | `brains` | 0 | 2 × 65 536 | 100,8 t/s (Prüfstand 17.09.) | **Hirn** (MoE, 3B aktiv), DFlash-Draft, KV q8_0, `--reasoning-budget 2048` |
| Qwen3.6-35B-A3B, Bild-Zwilling (Eintrag `…-Bild`) | `vision` | `bild` | 900 | 65 536 | 67,9 t/s (Probe 24.09.) | gleiche Gewichte plus Projektor, ohne Draft |
| Qwen3.8-27B | `coder`, `heavy` | | 5400 | 131 072 | 30,4 t/s (Prüfstand 17.09.) | **Coder** (dicht), DFlash2-Draft; ohne Draft ~12,6 t/s |
| Qwen3.8-27B, Bild-Zwilling (Eintrag `…-Bild`) | `coder-bild` | `bild` | 900 | 131 072 | 12,5 t/s (Probe 24.09.) | gleiche Gewichte plus Projektor, ohne Draft |
| Muse-Glimmer-30B | `debugger` | | 600 | 65 536 | | Rolle entfällt (Entscheid 23.09.), Löschkandidat |
| Qwen3-Embedding-0.6B | `embed` | | 300 | 8 192 | | schläft seit 24.09. (lädt bei Bedarf) |
| Qwen3-Reranker-0.6B | `reranker` | | 300 | 8 192 | | schläft seit 24.09. (lädt bei Bedarf) |
| gpt-oss-120b | | | 600 | 32 768 | | ohne Rolle seit 04.09., Löschkandidat (60 GB) |
| Qwen3-VL-30B-A3B | | | 900 | 32 768 | | ohne Rolle seit 24.09., Löschkandidat |
- Hirn und Coder laufen seit 17.09. als Varianten der Basismodelle (Prüfstand: Hirn 100,8 statt 92,8 t/s,
Coder 30,4 statt 26,2 t/s). Die Originale liegen als Rückweg auf der Platte
(`Qwen3.6-35B-A3B-MTP-GGUF`, `Qwen3.8-27B-GGUF`).
- Reserve-Hirn: Nemotron 3.5 Lightning 30B-A3B (Prüfstand 17.09.: 91,8 t/s, Werkzeuge 3/3), liegt unter
`/srv/models/Nemotron-3.5-Lightning-30B-A3B-GGUF/`, ohne Eintrag.
- Bilder: Das Gateway schickt eine Anfrage mit Bild im aktuellen Schritt an den Zwilling der Rolle;
ältere Bilder beschreibt `vision` einmal als Text. Grund: llama.cpp kann Draft und Bild nicht zusammen
(HTTP 500, b11057 und b11157 geprüft).
- Speicherregel: Warm-Set plus größtes Bedarfsmodell ≤ ~115 GB. Schlimmster Fall heute laut Config:
Warm-Set 27 + Coder 29 + ein Zwilling ~25 GB ≈ 81 GB.
- Dichte Modelle sind bandbreitengebunden (~215 GB/s): 17 GB Gewichte ÷ 215 GB/s ≈ 12,6 t/s ohne Draft.
- Clients sprechen Modelle nur über **Rollen-Aliase** an, nie über Eintragsnamen (die ändern sich beim Tausch).
Config: `/etc/llama-swap/config.yaml` ist die lebende Wahrheit (Oberfläche und Radar schreiben sie),
`deploy/llama-swap.config.yaml` nur der Abzug im Repo. Regeln dazu: [ARCHITEKTUR.md](../ARCHITEKTUR.md).
## Hermes (Agent „Lucy")
- **v0.21.4** (Prüfbericht 24.09.), Git-Install in `~/.hermes/hermes-agent`, Config `~/.hermes/config.yaml`,
Persona `~/.hermes/SOUL.md`, Gedächtnis `~/.hermes/memories/` (Hermes führt es selbst; alleinige
Gedächtnis-Wahrheit).
- Hirn über `mc2-gateway` (`:9010`); Bilder seit 24.09. über `model.supports_vision: true` und die Bild-Weiche.
- `approvals.mode: 'off'`, `approvals.cron_mode: auto` — User-Entscheid, bestätigt 17.09.2026.
- MCP-Server: aktiv `hermes-web-fetch` (`mcp/mcp_web.py`) und `mission-control-voice` (`mcp/mcp_voice.py`);
aus seit 24.09. `hermes-pc-control` (`mcp/mcp_pc.py`, dazu die PC-Aufgabe `HermesPCExecutor`) und
`mission-control-stack` (`mcp/mcp_mc.py`).
- Plugin `mc2-web-lesen` (`deploy/hermes-plugins/`): liest Webseiten für `web_extract` lokal
(`web.extract_backend: mc2-lesen`).
- Skills aus dem Repo: `betrieb-playbook`, `pc-pfad-cache` (`deploy.sh` kopiert sie nach `~/.hermes/skills/`);
abgelöste Skills liegen in `~/.hermes/skills-archiv/`.
- Hermes-Crons (`bash -lc 'hermes cron list'`): „Daily News Report" (täglich 07:00), „KI und Stack Radar"
(Sa 08:00). „Updates am Sonntag" ist seit 24.09. pausiert — das macht jetzt `mc2-autoupdate.timer`.
## Automatik (was von allein läuft)
| Wann | Was | Wie | Details |
|---|---|---|---|
| jede Minute | Wächter: Dienste, Timer, Hermes-Jobs, Kern, Platte, festgehaltene Updates | `mc2-steward` | [BETRIEB.md](../BETRIEB.md) |
| alle 90 s | Re-Warm: lädt das Hirn nach, wenn nichts geladen ist | `mc2-steward` | [ARCHITEKTUR.md](../ARCHITEKTUR.md) |
| stündlich (+≤5 min) | `projekte-sync`: `~/projekte` mit Gitea abgleichen (nur fast-forward) | Timer | [BETRIEB.md](../BETRIEB.md) |
| 00:30 | Modell-Radar: Suche (≤1× am Tag), Test im Fenster 00:3002:30 | `mc2-radar.timer` | [RADAR.md](../RADAR.md) |
| ~03:00 | NerdQuiz-Nachtlauf (Arcane) fragt das Hirn direkt über `:8080` | extern | [RADAR.md](../RADAR.md) |
| 03:30 (+≤5 min) | Sicherung, danach Kopie auf den Proxmox-Host | `mc2-backup.timer` | [BETRIEB.md](../BETRIEB.md) |
| So 04:30 (+≤10 min) | Updates: llama-swap → Motor → Hermes, Neustart nur So 04:0006:59 | `mc2-autoupdate.timer` | [UPDATES.md](../UPDATES.md) |
| 07:00 | Morgenmeldung: nachts Gesammeltes als eine Telegram-Nachricht | `mc2-morgenmeldung.timer` | [BETRIEB.md](../BETRIEB.md) |
| 07:00 | Daily News Report (Text und Sprachnachricht) | Hermes-Cron | [deploy/jobs/README.md](../../deploy/jobs/README.md) |
| Sa 08:00 | KI und Stack Radar | Hermes-Cron | [RADAR.md](../RADAR.md) |
| laufend | OS-Sicherheitsupdates | unattended-upgrades | [UPDATES.md](../UPDATES.md) |
## Coding-Bahn (OpenChamber)
- OpenChamber läuft am PC mit seiner eigenen OpenCode-CLI; die Dateien liegen lokal unter `F:\Coding Stuff\…`.
- Von der Box kommt nur das Modell: Provider `aibox``http://192.168.178.151:9001/v1`, Rollen-Aliase
(`build` = `coder`, `plan`/`review` = `heavy`, `explore` und `small_model` = `hermes`). Vorlage der PC-Config:
`deploy/opencode-config/`.
- Push nach Gitea über SSH (`:2222`, Benutzer `gitea`). `deploy/push-und-sync.ps1` stößt danach
`projekte-sync` auf der Box sofort an.
- `projekte-sync` zieht `mission-control-v2` absichtlich nicht: Der Box-Checkout wird nur über
`deploy/deploy.sh` aktualisiert.
## Sicherheit (ein Satz)
Der Box-Wart hat keine Anmeldung (User-Entscheid 24.09.), schreibende `/api`-Aufrufe fremder Webseiten lehnt
die Herkunftsprüfung ab (`backend/services/herkunft.py`), und Security-Config (approvals, Tokens, ufw,
command_allowlist, sudoers) ändert niemand ohne ausdrückliches User-Ja.
## Deploy und Sicherung (Kurzform)
- Deploy: `main` auf Gitea, dann auf der Box `bash ~/mission-control-v2/deploy/deploy.sh` — zweistufig,
mit Prüftor, Rückweg und Log `/srv/models/mc2-deploy.log`. Details: [BETRIEB.md](../BETRIEB.md).
- Sicherung: täglich, 14 Stück unter `/srv/models/mc2-backups/`, Kopie auf dem Proxmox-Host, Zurückspielen
per Oberfläche oder `deploy/restore.sh`. Details: [BETRIEB.md](../BETRIEB.md).