Beim Deploy am 27.08.2026 live erlebt: der `git pull` in Schritt 1 brachte eine neue Fassung von deploy.sh mit, ausgefuehrt wurde danach trotzdem die alte Logik (die Ausgabe zeigte den alten Text des Config-Sync-Schritts). Ursache: bash liest ein Skript haeppchenweise WAEHREND es laeuft. Wird die Datei mitten im Lauf ersetzt, liest bash am selben Byte-Offset im neuen Text weiter - im harmlosen Fall greift die alte Logik, im schlimmen Fall fuehrt es eine zerschnittene Zeile aus. Fix: der komplette Ablauf liegt jetzt in main(), aufgerufen als letzte Zeile. Eine Funktion wird vollstaendig geparst, bevor sie startet. Aenderungen an deploy.sh greifen damit sauber ab dem naechsten Aufruf statt mittendrin. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Mission Control 2.0
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.
100 % lokal. Kein Cloud-Modell, kein externer Dienst im Datenpfad.
Die drei Bahnen
| Bahn | Was sie tut | Wo |
|---|---|---|
| Steuerzentrale | Modelle, Routing, Wartung, Gedächtnis, Ideen-Queue, Auftragsbuch | MC2 :9001 |
| Coding | Agentic IDE (z.B. OpenCode Desktop) auf Dev-PC via lokaler API + MCP | 100% lokal |
| Lucy | Sprach-Companion mit 3D-Avatar, Augen und Ohren | eigenes Repo Hitonabi/lucy |
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/: mission-control-2 · mc2-gateway · mc2-steward ·
mem0-service · voice-service · box-console · hermes-builtin-ui + Timer für Backup,
Auto-Update, Self-Smoke und Bagatell-Annahme. 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 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. KeineVERIFY-Datei = Prüf-Tor aus.
Modelle & Rollen
Gemessen auf der Box (Stand: August 2026, Vulkan b10502):
| Rolle | Modell | Tempo | Aufgabe |
|---|---|---|---|
coder |
Qwen3-Coder-Next (80B-A3B) | 51,5 t/s · Prefill 754 t/s | Plant und baut — Kopf der Coding-Mannschaft (131k Kontext) |
hermes / fast |
Qwen3.6-35B-A3B | 69,6–90 t/s | Lucys Hirn und Sucher-Subagent. Immer warm |
debugger / doctor |
Muse-Glimmer-30B | 40–50 t/s (DFlash) | Runtime-Debugger & Fehler-Diagnostiker (Multimodal) |
kritiker |
Devstral-Small-2-24B | 15,0 t/s · Prefill 265–318 t/s | Liest gegen — bewusst fremde Modellfamilie (Mistral statt Qwen, 16k Deckel) |
vision |
Qwen3-VL-30B-A3B | auf Abruf | Lucys Augen (On-Demand) |
scout |
GLM-4.6V-Flash | auf Abruf | Schneller Vision- und Tool-Allrounder |
heavy |
gpt-oss-120b | nur nachts | Chef-Gutachter (4:30 Uhr). Nie tagsüber — verdrängt das warme Set |
dense-planer |
Qwen3.8-27B | 12,7 t/s (On-Demand) | Dichtes 27B-Modell für tiefes Reasoning & 262k Kontext |
embed · reranker |
Qwen3 0.6B | immer warm | Gedächtnis + Feinsortierung |
‼️ Der Kritiker ist bewusst auf 16k Kontext gedeckelt. Devstral ist ein dichtes Modell — auf dieser bandbreitenbegrenzten Box bricht sein Prefill mit wachsendem Kontext ein (bei 32k gemessene 63 t/s ≈ 9 Minuten nur zum Lesen). Mit dem 16k-Deckel bleibt der schlimmste Fall je Review unter einer Minute. Deshalb ist er der Gegenleser für Etappen, nicht der Coder — als Coder ist er auf dieser Box disqualifiziert (siehe VERDIKTE).
‼️ Speicher-Regel: Warm-Set + größtes On-Demand-Modell ≤ ~115 GB. Die ko-residente Gruppe
(groups.brains in der llama-swap-Config) muss persistent: false sein — sonst räumt
llama-swap vor einem großen Modell nicht ab und der Kernel schießt Prozesse ab. Details und
Messwerte: docs/wissen/VERDIKTE.md.
Qualitäts-Tore
- Prüf-Tor —
VERIFYnach jeder Etappe; rot → der Agent (OpenCode Desktop) repariert lokal nach. - 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. Absenderloop= 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/* · auftragsbuch/* · chronik · eigenleben · wissen · zeitmaschine/* · reminders/* · voice/* · events (SSE)
OpenAI-kompatibel: /v1/chat/completions, /v1/completions. MCP-Server: mcp/.
Entwickeln
# Backend
cd backend
python -m venv .venv && .venv/Scripts/python -m pip install -r requirements.txt # Windows
.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/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.
Env-Vars (Auswahl)
| Variable | Default | Zweck |
|---|---|---|
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 |
Wie man MC2 benutzt |
docs/RUNBOOK.md · docs/DISASTER_RECOVERY.md |
Betrieb, Störungen, Wiederherstellung |
docs/HERMES_SETUP.md |
Hermes-Agent, Profile, Crons |
docs/AUFTRAGSBUCH.md |
Vorschlags-Inbox und das Ein-Klick-Gate |
docs/wissen/VERDIKTE.md |
Finale Technik-Entscheide — nicht neu aufrollen |
docs/wissen/FALLEN.md · docs/wissen/OFFENE-FAEDEN.md |
Stolpersteine · offene Punkte |
| AGENTS.md | Arbeitsregeln für Agenten in diesem Repo |