From 424aaada27c2dae301911abeab562fe7a1db9dcd Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Thu, 24 Sep 2026 17:41:25 +0200 Subject: [PATCH] doku: Einstieg neu (README, docs/README, BEDIENUNG), Jobs-Uebersicht, AGENTS korrigiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- AGENTS.md | 6 +- README.md | 201 +++++--------- deploy/jobs/README.md | 258 ++++++------------ docs/BEDIENUNG.md | 156 +++++++---- docs/README.md | 89 ++++++ ...-20-referenzaufgabe-gedaechtnis-ausbau.md} | 0 docs/wissen/README.md | 39 --- 7 files changed, 348 insertions(+), 401 deletions(-) create mode 100644 docs/README.md rename docs/archiv/{2026-08-20-referenzaufgabe-mem0-ausbau.md => 2026-08-20-referenzaufgabe-gedaechtnis-ausbau.md} (100%) delete mode 100644 docs/wissen/README.md diff --git a/AGENTS.md b/AGENTS.md index 54c8916..8395c12 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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). 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. ## 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. -- 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. Der Deploy auf der Box führt es vor dem Umschalten noch einmal aus; rot = automatisch zurück auf den alten Stand. diff --git a/README.md b/README.md index cae2c50..8f4767c 100644 --- a/README.md +++ b/README.md @@ -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", -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. +Ein Steuerpult fürs Heimnetz, das sich selbst wartet. Zwei Bereiche, eine Oberfläche: -> **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` | -| **Coding** | Agentic IDE (z.B. OpenCode Desktop) auf Dev-PC via lokaler API + MCP | 100% lokal | -| **Lucy** | Innere Stimme am PC (HUD, kein Avatar) und auf Telegram — eine Stimme, ein Hirn | eigenes Repo `Hitonabi/lucy` | +| `9001` | `mission-control-2` | Oberfläche, `/api`, `/v1` für Lucy und OpenChamber, Hermes-Dashboard unter `/hermes-ui/` | +| `9010` (nur lokal) | `mc2-gateway` | `/v1`-Datenpfad: `model: auto`, Bild-Weiche | +| – | `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. - -## 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/). +Dazu die Timer `mc2-radar`, `mc2-backup`, `mc2-morgenmeldung`, `mc2-autoupdate` und `projekte-sync`. Die Unit-Dateien +liegen in [`deploy/`](deploy/). ## Entwickeln ```bash -# Backend +# Backend lokal auf :9000 (Windows) 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 -# Frontend (Dev, proxyt /api → :9000) -cd frontend && npm install && npm run dev # http://localhost:5173 - -# Frontend (Build → wird vom Backend ausgeliefert) -cd frontend && npm run build # → frontend/dist +# Frontend (Vite leitet /api an :9000 weiter; MC_API_TARGET=http://192.168.178.151:9001 zeigt auf die Box) +cd frontend && npm ci && npm run dev ``` -`frontend/dist` **wird mitcommittet** — die Box hat kein Node; Deploy ist ein `git pull` plus -Dienst-Neustart. Vor jedem Commit lohnt der Ampel-Vorlauf: `ruff check .` und `npm run build`. +Vor jedem Push: `bash deploy/pruefen.sh` (Shell- und Python-Syntax, `ruff check .`, Importe, `pytest backend/tests`); +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`**) | -| `MC_LLAMA_SWAP_URL` | `http://127.0.0.1:8080` | Engine/Router | -| `MC_CONFIG_PATH` | `/etc/llama-swap/config.yaml` | llama-swap-Config | -| `MC_V1_UPSTREAM` | – | gesetzt → `/v1` geht an `mc2-gateway` (`:9010`) statt in-process | - -| `MC_ENGINE_PATH` | `/opt/llamacpp-vulkan` | aktive Engine (Vulkan-Build) | -| `MC_REWARM_ENABLED` | `1` | Warm-Set-Wächter (auf der Box bewusst `0`) | -| `MC_DRAFTS_DIR` · `MC_SPEC_TYPE` | `$MODELS/drafts` · `draft-simple` | Spekulatives Dekodieren | - - - -## 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 | +| [docs/README.md](docs/README.md) | alle | Index, Lesereihenfolge, Pflegeregeln | +| [docs/BEDIENUNG.md](docs/BEDIENUNG.md) | User | Oberfläche und Telegram-Nachrichten | +| [docs/ARCHITEKTUR.md](docs/ARCHITEKTUR.md) | Agenten, Technik | Prozesse, Rollen, Datenwege, wer was schreibt | +| [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 | +| [docs/RADAR.md](docs/RADAR.md) | Agenten, Technik | Modell-Radar, Stack-Radar, Prüfstand | +| [docs/WIEDERAUFBAU.md](docs/WIEDERAUFBAU.md) | Technik | die KI-Box von null aufbauen | +| [docs/wissen/](docs/wissen/) | Agenten | Stand, Verdikte, Fallen, Arbeitsweise, offene Fäden | diff --git a/deploy/jobs/README.md b/deploy/jobs/README.md index faa637f..24ea2c5 100644 --- a/deploy/jobs/README.md +++ b/deploy/jobs/README.md @@ -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. -Deshalb fiel am 20.08. tagelang niemandem auf, dass ein Waechter fehlte — -niemand schaut an zwei Orten nach. +_Stand 24.09.2026 (erster Stand: KISS-Umbau 21.08.2026)._ -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 | -|---|---|---|---| -| **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` | +## Was läuft -Daneben laufen als stille Rohrleitung weiter: `mc2-backup` (03:33) und -`projekte-sync` (stuendlich). Die melden sich nie, die sichern und synchronisieren nur. +| Job | Wann | Mechanismus | Skript | Meldet | +|---|---|---|---|---| +| **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 > **Fakten sammelt ein Skript, Prosa schreibt das Modell.** -Der alte Selbsttest war am 20.08. gruen, waehrend vier Dinge kaputt waren: das -Kritiker-Gate zeigte seit einem Tag auf ein umbenanntes Modell (404), Lucys -`SOUL.md` war blockiert, das Dashboard stand ohne Passwort offen, die CI war rot. -Er hatte geprueft, ob Dienste **antworten** — nicht, ob sie **stimmen**. +Der alte Selbsttest war am 20.08. grün, während vier Dinge kaputt waren: Das Kritiker-Gate zeigte seit einem Tag auf +ein umbenanntes Modell (404), Lucys `SOUL.md` war blockiert, das Dashboard stand ohne Passwort offen, die CI war rot. +Er hatte geprüft, ob Dienste **antworten**, nicht, ob sie **stimmen**. -`stack-ist.sh` prueft deshalb Ergebnisse: loesen die Rollen-Aliase noch auf? Ist -der letzte Timer-Lauf gutgegangen? Ist eine Sicherung juenger als zwei Tage? -Liefert die oeffentliche Adresse Daten ohne Anmeldung? Beim ersten Lauf hat es -sofort zwei echte Befunde gefunden. +`stack-ist.sh` prüft deshalb Ergebnisse: Lösen die Rollen-Aliase noch auf? Ist der letzte Timer-Lauf gutgegangen? +Ist eine Sicherung jünger als zwei Tage? `stack-upstream.py` vergleicht Neuigkeiten draußen (Releases, gemergte PRs, +neue Entwurfsmodelle) mit dem letzten Lauf. -## Kugelsicher heisst konkret +## Kugelsicher heißt konkret -- **Das Modell steht nicht im kritischen Pfad.** Antwortet es nicht, gehen die - Rohbefunde trotzdem raus. Nur die Prosa faellt weg, nie die Meldung. -- **Es meldet immer.** „Alles gruen" ist ein Ergebnis, kein Grund zu schweigen. -- **Kein `set -e`.** Ein einzelner fehlschlagender Test darf den Bericht nicht - abschneiden. -- **Ein Melderweg:** `deploy/notify.sh` erreicht Telegram **und** Lucys - Briefkasten (aus dem sie spricht) in einem Aufruf. Die Jobs laufen mit - `--deliver local`, damit Hermes nicht ein zweites Mal sendet. -- **Kein Fuellmaterial.** Die Prompts verbieten ausgedachte Vorschlaege - ausdruecklich — ein Bericht mit Fuellmaterial wird nicht gelesen, und dann - auch der echte Befund nicht. +- **Das Modell steht nicht im kritischen Pfad.** Antwortet es nicht, gehen die Rohbefunde trotzdem raus; nur die + Prosa fällt weg, nie die Meldung. +- **Es meldet immer.** „Alles grün" ist ein Ergebnis, kein Grund zu schweigen. +- **Kein `set -e`.** Ein einzelner fehlschlagender Test darf den Bericht nicht abschneiden. +- **Ein Meldeweg:** `deploy/notify.sh` erreicht Telegram **und** Lucys Briefkasten in einem Aufruf; scheitert + `hermes send`, geht es direkt an die Telegram-Bot-API. Nachts (00:00–06:59) sammelt es bis zur Morgenmeldung um + 07:00, Dringendes geht sofort. Die Hermes-Jobs laufen mit `--deliver local`, damit Hermes nicht ein zweites Mal + sendet. +- **Kein Füllmaterial.** Die Prompts verbieten ausgedachte Vorschläge: Ein Bericht mit Füllmaterial wird nicht + gelesen, und dann auch der echte Befund nicht. +- **Werkzeuge der Cron-Jobs:** `platform_toolsets.cron` = `[web, terminal]`; mehr braucht der Nachrichtenbericht nicht. ## Ausbringen -Die Skripte muessen unter `~/.hermes/scripts/` liegen (Vorgabe von `hermes cron --script`). -Quelle ist dieses Verzeichnis: +Die Skripte müssen unter `~/.hermes/scripts/` liegen (Vorgabe von `hermes cron --script`). Das macht seit 24.09. +`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 -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' -``` +## Daily News: Text und Stimme -‼️ Das `sed` ist Pflicht: vom Windows-PC kopierte Dateien haben CRLF, und bash -scheitert daran mit unverstaendlichen Meldungen. +- **Persona statt Stilvorgaben:** Der Job-Prompt bleibt kurz. Emojis, Ton und die Anrede „Commander" kommen aus + `~/.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 "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 | |---|---| -| Cron `morgen-digest` | geht im Daily News Report auf | -| Cron `tech-radar` | geht im Stack Radar auf | -| Cron `nacht-wartung` | pruefte Lebenszeichen, nicht Ergebnisse | -| Cron `wissens-sync` | **war nie gelaufen** — kein `last_run_at` | -| Timer `mc2-bagatell` | **15 Naechte hintereinander „0 eingespielt"** | -| Timer `mc2-selfsmoke` | geht in `stack-ist.sh` auf | -| Timer `pbs-backup` | doppelt zu `mc2-backup` und seit 21.08. rot (`/srv/models/mem0` gibt es nicht mehr) | -| Timer `mc2-autoupdate` | wird jetzt vom Cron „Updates am Sonntag" gestartet | +| Cron `morgen-digest` | ging im Daily News Report auf | +| Cron `tech-radar` | ging im Stack-Radar auf | +| Cron `nacht-wartung` | prüfte Lebenszeichen, nicht Ergebnisse | +| Cron `wissens-sync` | war nie gelaufen (kein `last_run_at`) | +| Timer `mc2-bagatell` | 15 Nächte hintereinander „0 eingespielt" | +| Timer `mc2-selfsmoke` | ging in `stack-ist.sh` auf | +| 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` | 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. - ---- - -## 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:`**. 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 "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. +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. diff --git a/docs/BEDIENUNG.md b/docs/BEDIENUNG.md index 5226f06..172f4dd 100644 --- a/docs/BEDIENUNG.md +++ b/docs/BEDIENUNG.md @@ -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, -**Cmd/Strg+K** springt zu jedem Bereich. +_Stand 24.09.2026. Für dich als Nutzer. Technische Einzelheiten stehen in [BETRIEB.md](BETRIEB.md)._ -> Im Alltag fasst du MC kaum an: `model: auto` + Auto-Swap laden Modelle selbst. Du öffnest es, um ein -> Modell zu installieren/tauschen, die Auslastung zu prüfen, Gedächtnis zu pflegen oder ein Tool zu verbinden. +**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 auf der Startseite etwas gelb oder rot leuchtet. -## Die Bereiche (Sidebar, Stand 09.07.2026) -- **Cockpit** — deine Box auf einen Blick (Status, Leistung, Morgenlage, Erinnerungen). -- **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. +Der Homelab Orchestrator bekommt später einen zweiten Bereich für den Proxmox-PC („Homelab"). Heute gibt es nur den +Bereich für die KI-Box, den Box-Wart. -> **Zum Arbeiten mit dem Agenten** (Coding, Projekte, lange Threads) nutzt du die -> **Hermes-Desktop-App am PC** — MC2 ist der Maschinenraum der Box. Wie die App andockt: -> `docs/HERMES_SETUP.md`, Abschnitt „Hermes Desktop (PC) anbinden". +## So kommst du hin -## Modell installieren -**Tab „Modelle & Routing" → „Modelle finden":** -- **Kuratiert:** auf einer Empfehlungs-Karte „Installieren" klicken (⭐ = beste Wahl je Kategorie). -- **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. +Im Heimnetz im Browser `http://192.168.178.151:9001` öffnen, am PC oder am Handy. Oben (am Handy unten) stehen die +drei Seiten **Start**, **Updates** und **Modelle**. Rechts oben (am Handy unter **Mehr**) findest du das +Hermes-Dashboard, **Dienste und Protokolle** und die **Einstellungen**. -## LLM tauschen (z.B. anderes „fast"-Hirn) -„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. +Wichtige Knöpfe fragen vorher nach. Was du auslöst, bestätigt eine kurze Meldung unten rechts. -## Agent/IDE verbinden (Arbeiten am eigenen PC) -„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.) +## Start -## Gedächtnis pflegen -„Gedächtnis": Fakt/Regel hinzufügen (Kategorie wählen), suchen/filtern, **🧹 Aufräumen** entfernt Dubletten. -Das ist die geteilte „Verfassung" für alle Tools. +- **Große Leuchte oben links:** + - grün „Alles in Ordnung": nichts zu tun; + - 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 -„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. +## Updates -`Engine neu starten`, Logs & Modell-Upgrades laufen sofort (NOPASSWD vorhanden). **OS-Update + Reboot** -brauchen einmalig erweiterte sudoers — `sudo visudo`, ergänze: -``` -hitonabi ALL=(root) NOPASSWD: /usr/bin/apt-get, /usr/sbin/reboot -``` -(Engine-Update: `MC_ENGINE_UPDATE_CMD` in der mc2-Unit setzen — Befehl, der /opt/llamacpp aktualisiert.) -Danach ist die komplette Wartung klicki-bunti, ohne Passwort. +- Jede Zeile ist ein Baustein: Betriebssystem, Motor (llama.cpp), llama-swap, Hermes. Du siehst, was läuft, was neu + 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 + tun. +- „Nach Neuem suchen" schaut sofort nach. „Aktualisieren" spielt einen Baustein sofort ein, „Alles jetzt + aktualisieren" alle nacheinander. Lucy ist dabei ein paar Minuten nicht erreichbar. +- **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 -- 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". diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..7038cf1 --- /dev/null +++ b/docs/README.md @@ -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. diff --git a/docs/archiv/2026-08-20-referenzaufgabe-mem0-ausbau.md b/docs/archiv/2026-08-20-referenzaufgabe-gedaechtnis-ausbau.md similarity index 100% rename from docs/archiv/2026-08-20-referenzaufgabe-mem0-ausbau.md rename to docs/archiv/2026-08-20-referenzaufgabe-gedaechtnis-ausbau.md diff --git a/docs/wissen/README.md b/docs/wissen/README.md deleted file mode 100644 index 0e0204a..0000000 --- a/docs/wissen/README.md +++ /dev/null @@ -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.