Sechste Etappe, erster Bereich. views/IdeenView.tsx hatte 1031 Zeilen, 26 useState
und sechs Komponenten in derselben Datei (Befund B-06) — der Haupteingang des
Systems, und niemand konnte ihn ohne Vollbild-Scrollen ueberblicken.
## Der Schnitt
Er folgt den Grenzen, die im Monolithen ohnehin schon lagen: Jede Top-Level-Funktion
wird eine Datei. Der INHALT ist unveraendert — nur die Datei ist neu, damit der Diff
pruefbar bleibt.
features/ideen/zustaende.ts 55 Zustands-/Art-Tabellen + Sortier-Rang
features/ideen/quote.ts 22 Nutzungs-Quote der Eingabe
features/ideen/Wahl.tsx 27 eine Auswahlkachel
features/ideen/ErgebnisPanel.tsx 55
features/ideen/KonzeptPanel.tsx 73
features/ideen/ProjektGruppe.tsx 86
features/ideen/WeiterLeiste.tsx 113
features/ideen/IdeenAnsicht.tsx 676 Verfasser + Liste + Zeilen-Renderer
views/IdeenView.tsx bleibt als vierzeiliger Wegweiser eine Fassung lang stehen,
damit ein uebersehener Import nicht stillschweigend bricht; der Router zeigt bereits
direkt auf features/ideen/.
## Was BEWUSST noch nicht geschnitten ist
Der Zeilen-Renderer `zeile()` (188 Zeilen) bleibt in IdeenAnsicht.tsx. Er greift auf
16 Werte des umgebenden Zustands zu (busy, openLog, openKonzept, antworten, logData,
steuer, archive, answer, …). Ihn "herauszuloesen" hiesse, eine Props-Liste mit 16
Eintraegen zu schreiben — dieselbe Verflechtung in anderer Schreibweise. Das ist eine
Frage der Zustands-Zugehoerigkeit, keine Verschiebe-Uebung, und verdient eine eigene
Runde statt eine Beifaenger-Aenderung. Steht so auch im Kopfkommentar der Datei.
## Nebenbefund beim Pruefen: die eigene Anzeige log
Gegen die noch nicht aktualisierte Box zeigte die Statusleiste "Getrennt" — obwohl
die Poller sauber lieferten und alle Zahlen stimmten. Grund: Dort gibt es /api/stream
noch nicht, der SPA-Catch-all beantwortet den Pfad mit index.html, und EventSource
scheitert daran.
Die Anzeige verwechselte damit zwei Dinge. Jetzt trennt sie sie:
Getrennt = die Zentrale antwortet nicht, die Zahlen sind wirklich alt
Nachlauf = kein Strom, aber die Zentrale antwortet — die Zahlen stimmen,
sie kommen im Takt statt sofort
Live = Strom steht
Eine Anzeige, die vor korrekten Daten warnt, ist genauso falsch wie eine, die
veraltete verschweigt.
## Verifiziert
Gegen das lokale Backend: /ideen rendert, keine Fehlerflaeche
Gegen die ECHTE Box (altes Backend, kein /api/stream): Leiste sagt "Nachlauf",
zeigt die echten Werte (40,7/122,7 GB Unified Memory, GPU 0 %, 37 °C,
532 748 115 Token, 1023 € gespart) — und blendet die Betriebszeit AUS, weil das
alte Backend sie nicht liefert, statt eine Zahl zu erfinden.
Das neue Frontend degradiert also sauber gegen den alten Stand.
37/37 Tests gruen · ESLint 0 Fehler · Einstieg 118 606 B gzip / Budget 125 000.
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: 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,scoutunddense-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.
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 |