Die Queue war 703 der 1147 Zeilen in AuftragsbuchView — die MEHRHEIT einer Seite,
die nach etwas anderem benannt ist. Und sie laufen gegenlaeufig: Auftragsbuch =
die Box schlaegt DIR vor (Eingang), Ideen = DU beauftragst die Box (Ausgang).
Seit dem Umbau ist Idee -> Konzept -> Repo -> Zed der Haupteingang des Systems
und gehoert in die Seitenleiste, nicht in einen Unterabschnitt.
Umzug (reines Verschieben, kein Logik-Umbau):
AuftragsbuchView 1147 -> 406 Zeilen Bundle 51,0 -> 17,8 KB
IdeenView neu, 785 Zeilen Bundle 32,7 KB, laedt nur bei Bedarf
fmtWhen -> lib/format.ts (dessen Kopf genau davor warnt: "vorher in
einzelnen Views dupliziert")
SectionLabel -> components/ui/ (beide Seiten brauchen sie jetzt)
Zwei inhaltliche Aenderungen:
1. Die flache Einzelkarten-Liste wird gruppiert — mit der Ordnung, die
ProjektGruppe fuer Ketten LAENGST benutzt (AKTIV_RANG): aktiv zuerst,
Wartende und Fertige eingeklappt. Bei 19 Karten, davon 16 fertig, gingen die
drei relevanten in der Erstellzeit-Liste unter.
2. Die Kopfzeile sagt jetzt "1 braucht dich · 2 in Arbeit · 16 fertig" statt
einer nackten Gesamtzahl.
Das Auftragsbuch zaehlte im gruenen "Nichts zu entscheiden" bisher haengende
Ideen mit, damit es nicht luegt, waehrend direkt darunter eine Karte haengt.
Nach der Trennung wird daraus ein anklickbarer Querverweis auf die Ideen-Seite —
dieselbe Ehrlichkeit, jetzt mit Weg dorthin.
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 | Zed + OpenCode am Tag, opencode-lauf.sh in der Nacht — ein Regelwerk, zwei Auslöser |
Governor :8100 |
| Lucy | Sprach-Companion mit 3D-Avatar, Augen und Ohren | eigenes Repo Hitonabi/lucy |
Lucy holt ihr Hirn über MC2, spricht aber nie durch den Governor — ein Gespräch ist keine Bau-Sitzung und wird nie unterbrochen.
Ports & Dienste
| Port | Dienst | Erreichbar |
|---|---|---|
9001 |
MC2 (FastAPI + React) — Cockpit, API, Konsole | LAN |
8100 |
Governor — Token-Wächter vor dem Gateway | 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 · governor ·
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.
Der Weg einer Idee
Idee in MC2 → Gitea-Repo (mit CI-Ampel + VERIFY) → in Zed bauen → Ampel → main
└── oder nachts: Hermes-Cron → opencode-lauf.sh → dieselben Regeln
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. Das OpenCode-Plugin führt sie nach jeder Etappe aus und gibt rote Tests dem Agenten sofort zurück, statt sie erst der CI zu zeigen. KeineVERIFY-Datei = Prüf-Tor aus.
Modelle & Rollen
Gemessen auf der Box (25.07.2026, Vulkan, Q4):
| 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 |
hermes / fast |
Qwen3.6-35B-A3B | 69,6 t/s | Lucys Hirn und der Sucher-Subagent. Immer warm |
kritiker |
Devstral-Small-2-24B | 15,0 t/s · Prefill 265–318 t/s | Liest gegen — bewusst fremde Modellfamilie (Mistral statt Qwen) |
vision |
Qwen3-VL-30B-A3B | auf Abruf | Lucys Augen |
heavy |
gpt-oss-120b | nur nachts | Chef-Gutachter (4:30). Nie tagsüber — verdrängt das warme Set |
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
- Werkzeug-Zaun (
deploy/opencode/plugin/) — blocktgit push,rm -rf,sudo,curl | shund Fremd-Hosts im Agentenlauf. - Prüf-Tor —
VERIFYnach jeder Etappe; rot → der Agent repariert selbst weiter (max. 3 Runden). - Governor (
deploy/governor/) — zählt Tokens ehrlich (aus den echtenusage.prompt_tokensjeder Antwort, selbstkalibrierend). Bei ~45.000: Savepoint schreiben und Sitzung sauber beenden. Bei ~50.000: harter Riegel. Sichtbar als Kachel im Cockpit. - CI-Ampel — Lint (ruff) · Import/Syntax (compileall) · Frontend-Build. Läuft bei jedem Push.
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/* · **governor** · 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_GOVERNOR_URL |
http://127.0.0.1:8100 |
Token-Wächter für die Cockpit-Kachel |
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 |
Governor-eigene Schalter (GOV_THRESHOLD, GOV_HARD_CEILING, GOV_EXEMPT_MODELS, …):
deploy/governor/README.md.
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 |
deploy/opencode/README.md |
Coding-Bahn: Mannschaft, Verteilung, Fallen |
AGENTS.md |
Arbeitsregeln für Agenten in diesem Repo |