# Stack-Wahrheiten — Infrastruktur, Dienste, Modelle _Live gegen die Box verifiziert am **19.08.2026** (Dienste-Liste, llama-swap-Config, hermes --version v0.20.4, llama.cpp b10502, /api/health). Bei Widerspruch zu älteren Docs gewinnt diese Datei. Wer sie ändert: erst messen, dann schreiben._ ## Maschinen & Zugänge | Was | Wo | |---|---| | **AI Box** (Bosgame M5, Ryzen AI MAX+ 395, 128 GB unified) | `hitonabi@192.168.178.151` (SSH); Zeitzone **Europe/Berlin** | | **Windows-PC** („Tobis PC", 9070 XT) | `192.168.178.98` — PC-Executor `:7777` (Task `HermesPCExecutor`, Bearer-Token) | | **Proxmox** | `root@192.168.178.108:8006` (PW in Keepass) — LXCs: adguard(100), npmplus(101), netbird(102), gitea(104), PBS(105) | | **PBS** (Proxmox Backup Server) | `192.168.178.156:8007`, Datastore `qnap` | | **QNAP TS-228A** „TobiNAS" | `192.168.178.62` — Freigabe `/Backup` per NFSv3 exklusiv an pve | | **Gitea** | `git.tobisniceshomelab.ddnsfree.com` (lokal `192.168.178.153:3000`); Push-to-Create AUS | ## Repos - **MC2:** `F:\Coding Stuff\mission-control-2` ↔ Gitea `Hitonabi/mission-control-v2` ↔ Box `~/mission-control-v2` (nur Branch `main`). Enthält backend, frontend (dist committet!), Sidecars, deploy, hermes-Plugin, `client/hermes-pc`. - **Lucy:** `F:\Coding Stuff\lucy` ↔ `Hitonabi/lucy` (privat; lucy-desktop/ + lucy-tts/). - **Wissens-Vault:** `~/wissens-vault/` auf der Box (eigenes git; Lucys Lernschicht: Träume, Radar-Funde, **Eigenbau-Landkarte**, Skill-Kandidaten). Im MC2-UI als Wissens-Tab. ## Dienste auf der Box (live 19.08.2026) | Dienst | Port | Zweck | |---|---|---| | `llama-swap` (System-Dienst) | `:8080` | Modell-Router; Engine = llama.cpp **Vulkan/RADV** (`/opt/llamacpp-vulkan`, b10502) | | `mission-control-2` (User) | `:9001` | MC2 Cockpit (FastAPI + React Frontend) & Steuerpult | | `mc2-gateway` (User) | `:9010` | `/v1`-Datenpfad (model:auto Routing + native Bildweiche) | | `mc2-steward` (User) | — | Hintergrundwächter (Re-Warm, Health-Sentry, Mem0-Dedupe) | | `hermes-gateway` (User) | `:8642` | Hermes Agent Core API (v0.20.4, Bot Mode) | | `hermes-builtin-ui` (User) | `:9119` (loopback) | Eingebaute Hermes-GUI; LAN-Zugang via MC2-Proxy `/hermes-ui/` | | `mem0-service` (User) | `:8765` | Semantischer Chroma-Gedächtnis-Sidecar | | `voice-service` (User) | `:8650` | STT (faster-whisper) + TTS (Piper/Chatterbox) | | `box-console` (User) | `:7682` | ttyd-Login-Shell hinter MC2-Proxy | **Stillgelegt:** `hermes-terminal` (:7681), `hermes-webui` (:8787) und alter `governor` (:8100). ⚠️ User-Units per SSH nur sichtbar mit `export XDG_RUNTIME_DIR=/run/user/$(id -u)` vor `systemctl --user`. ## Modell-Stack (llama-swap, live 19.08.2026) **Warm-Set (Gruppe `brains`, swap:false, persistent:false, alle ttl 0):** Qwen3.6-35B-A3B + Qwen3-Embedding-0.6B + Qwen3-Reranker-0.6B. Sonst NICHTS dauerhaft warm. | Alias/Rolle | Modell | ttl | Notizen | |---|---|---|---| | `hermes` + `fast` | Qwen3.6-35B-A3B (UD-Q4_K_M, DFlash) | 0 | Agent-Hirn. `-c 131072 --parallel 2` → **65536/Slot**, KV **q8_0**, ~70–90 t/s | | `coder` | Qwen3-Coder-Next (Q4_K_M) | 5400 | 131k ctx; Autonomer Coder & Builder (80B MoE, 51,5 t/s) | | `debugger` / `doctor` | Muse-Glimmer-30B (Q4_K_XL, DFlash) | 600 | 65k ctx; Runtime-Diagnostik & Fehler-Debugger (Multimodal) | | `kritiker` | Devstral-Small-2-24B (Q4_K_M) | 1800 | 16k ctx Deckel; Fremdblick-Code-Reviewer gegen Halluzinationen | | `vision` | Qwen3-VL-30B-A3B (Q4_K_M) | 900 | Multimodal-Augen (On-Demand) | | `scout` | GLM-4.6V-Flash (Q4_K_M) | 300 | Schneller Tool- und Vision-Allrounder | | `heavy` | gpt-oss-120b (mxfp4) | 600 | 32k ctx; Chef-Gutachter (nur nachts / gezielter On-Demand Call) | | `dense-planer` | Qwen3.8-27B (Q4_K_M, BF16 mmproj) | 300 | 65k ctx; Dichtes 27B-Modell für tiefes Planen & Multimodalität | | `reranker` | Qwen3-Reranker-0.6B (q8_0, Mungert) | 0 | Gedächtnis-Sortierer (`/v1/rerank`) | | `embed` | Qwen3-Embedding-0.6B (f16) | 0 | Vektorisierung für Chroma / Mem0 | Config: `/etc/llama-swap/config.yaml` (sudo zum Schreiben). ## Hermes (Agent) - **v0.20.4** (git-Install `~/.hermes/hermes-agent`), Config `~/.hermes/config.yaml`, Persona `~/.hermes/SOUL.md` = **Lucy**. - **Bot Mode:** Unterstützt Multi-Bot-Roster (`Lucy` als Haupt-Agentin, `Coder` mit `Qwen3-Coder-Next`, `Debugger` mit `Muse-Glimmer-30B`). - `approvals.mode: smart`, `approvals.cron_mode: deny`. - MCP-Server (aus `~/mission-control-v2/mcp/`): mission-control-memory, mission-control-stack, hermes-pc-control, hermes-web-fetch, mcp_voice. ## Automatik-Fahrplan (was nachts von allein läuft) | Zeit | Was | |---|---| | 02:30 | PBS sichert alle Proxmox-LXCs | | 03:15 | **Traum-Cron** (dreaming-feed.sh → Wissens-Vault, fremdblick-Gate, propose-only) | | 03:30 | Tarball-Backup (Configs+Secrets+`~/.hermes/cron`+state → `/srv/models/mc2-backups`, 14 Tage; rsync-Spiegel → Proxmox) | | 03:50 | PBS-Host-Backup der Box (`host/aibox`: hermes+vault+llamaswap.pxar) | | 04:30 | **Chef-Gutachter** (gpt-oss richtet über die autonome Arbeit → Morgenlage) | | 05:15 Mo | **Release-Radar** (hermes-Releases gegen die Eigenbau-Landkarte; erster Lauf 13.07.) | | 05:15 Sa | **Trend-Radar** (Live-Puls ALLER Modell-Rollen + Engine-A/B gegen neuen llama.cpp-Build + Watch-Liste [ROCm/MMQ/Community-Grid] + HF-Kandidaten-Suche → max. 1 Prüfstand-Kandidat/Woche; Frühwarnung vor dem So-Auto-Update) | | 01:00 So | **Prüfstand** (volles Programm für Modell-Kandidaten: echte Coding-/Agenten-/Recherche-/Deutsch-/Vision-Prüfungen + Tempo auf :5899 gegen die Amtsinhaber-Baseline; Download-Deckel 35 GB, Cache räumt sich selbst, Ergebnis = Karte — Rollen-Wechsel bleibt Commander-Klick. Erkennt Engine-Drift → Tempo-Baseline-Refresh) | | 06:40, 1. d. M. | **Restore-Probe** (stellt WIRKLICH wieder her: PBS-Canary aus hermes.pxar via --pattern + Tarball-Probe + Frische-Check < 36 h; ⚠️-Alarm, wenn ein Backup nicht zurückkommt) | | 06:40, 2. d. M. | **Venv-Audit** (pip outdated + pip-audit-CVEs für voice-venv; Funde = Karte, Update bleibt Commander-Entscheid) | | 07:00 | QNAP-Volume-Snapshot (7 behalten) | | 07:15 | self-smoke (Gateway/Tools/Voice/:9119; Alarm nur bei Rot) | | 08:00 | Daily-Briefing | | 09:00, 1. d. M. | Monats-Review (radar-selbstkritik-wrapper.sh = Evolution-Radar + Selbstkritik) | | 10 9, 16.08. | **Gedaechtnis-Check** (einmalig: Gedächtnis-Schutt räumen, alte Einträge bereinigen) | | So 04:30 | **Auto-Update** Router→Engine→Hermes (Fangnetz: Backup→Postcheck→Auto-Rollback+Pin) | **`mc2-autoupdate.timer` ist AN (User-Entscheid 10.07.,** ersetzt „nur bestätigt" vom 04.07.): Fremd-Software-Updates (Router/Engine/Hermes) dürfen automatisch laufen; der User klickt sie zusätzlich oft manuell im Wartungs-Drawer. deploy.sh enablet den Timer bewusst NICHT selbst — der Schaltzustand wird nur von Hand geändert. Manueller Lauf: `bash deploy/autoupdate.sh`. OS-Sicherheitsupdates laufen separat via unattended-upgrades. ## Security (Stufe 0, live) PC-Executor nur mit Bearer `HERMES_PC_TOKEN` (fail-closed) · ufw default deny, nur LAN→22/9001/8080 (+Alt-Port 7681) · Prompt-Injection-Guard `mcp/guard.py` (wrappt Web-/Bildschirm-Text) · mc2-memory lernt nicht aus untrusted Turns · command_allowlist = 5 exakt gepinnte curls (fnmatch; Shell-Operatoren hart geblockt — NIE offenes `curl *`) · Box-sudo braucht Passwort; NOPASSWD nur für update-engine/swap (`/etc/sudoers.d/mc2-autonomie`). **Security-Config (approvals/Tokens/ufw) NIE ohne explizites User-Ja ändern.** ## Deploy & Pipeline - **Standard-Weg für Box-Arbeit = Auftragsbuch:** Vorschlags-Branch auf Gitea (`wartung/*`, `orchestrator/*`, `doku/*`, `feature/*`) → Karte in der UI → User-Klick = Merge + Deploy + Health + Auto-Revert (detached Runner). - Manuell: main auf Gitea pushen → `ssh … 'bash ~/mission-control-v2/deploy/deploy.sh'` ODER `POST :9001/api/system/self-update` (restart meldet ok:false — harmlos, /api/health prüfen). - deploy.sh macht `git reset --hard origin/main` (main MUSS vorher auf Gitea liegen) und baut KEIN Frontend → dist lokal bauen + committen. Fallen: [FALLEN.md](FALLEN.md). ## Backup/Restore (3 Schichten, alle live) 1. **Tarball** täglich 03:30 → `/srv/models/mc2-backups/` + rsync-Spiegel auf Proxmox; Restore: `bash deploy/restore.sh --list | latest` (macht vorher Sicherheits-Backup). In der UI: Zeitmaschine (Ein-Klick-Restore). 2. **PBS** (LXCs 02:30, Box-Host 03:50), Prune 7d/4w/3m, Verify So 06:00. 3. **QNAP-Snapshots** täglich 07:00 als Ransomware-Netz. Bare-Metal: `docs/DISASTER_RECOVERY.md`. Mensch-Anleitung: `docs/RUNBOOK.md`.