HitonabiandClaude Opus 5 24a0694b80 feat(palette): P6 — die Palette wird zum Bedienwerkzeug (§4.6)
Bisher listete Strg+K die elf Navigations-Eintraege: ein Sprungbrett. Jetzt tippt
man, WAS man will, nicht wo es liegt.

  Gehe zu   die 11 Ziele — direkt aus NAV, damit es nie zwei Listen gibt
  Tun       Wartung/Logs oeffnen, Updates suchen, Snapshot, Motor neu starten
  Finden    das Getippte in Chronik oder Wissens-Vault suchen
  An Lucy   das Getippte als Idee erfassen

## Die Sicherheitsregel ist verdrahtet, nicht nur beschrieben

Die Palette ist schnell genug, dass "Strg+K, mot, Enter" den Motor neu startet,
bevor man es zu Ende gedacht hat. Jeder eingreifende Befehl traegt darum
`rueckfrage`; die Oberflaeche haelt dann an und sagt erst, was passieren WIRD:

  "Alle geladenen Modelle fallen dabei aus dem Speicher und muessen neu aufwaermen —
   das dauert je nach Modell ueber 20 Sekunden. Laufende Antworten brechen ab."

Ein Test prueft die Regel generisch: Jeder Befehl, dessen Label auf "neu starten",
"loeschen", "deploy", "reboot" o. AE. passt, MUSS eine Rueckfrage haben. Wer kuenftig
einen eingreifenden Befehl ohne Rueckfrage ergaenzt, macht die Ampel rot.

"An Lucy" erfasst mit `art: "idee"` — durchdenken, nicht bauen. `"projekt"` wuerde
sofort ein Repo anlegen; das darf aus einem Tastendruck nie passieren. Auch das ist
getestet.

## Die "Finden"-Eintraege fuehren nicht ins Leere

Sie brauchten erst ein Ziel — sonst haette ich genau die leere Leitung gebaut, die ich
beim Werkzeug-Verlauf vermieden habe:

  ChronikView   neues Suchfeld, filtert ueber Betreff/Text/Quelle, Wort in der URL
                (/chronik?q=…), Trefferzahl in der Ueberschrift, "Filter aufheben"
                im Leer-Zustand
  WissenView    hatte das Suchfeld schon, aber nur lokal — jetzt aus /wissen?suche=
                gespeist und damit teilbar

## Verifiziert im Browser

  Strg+K oeffnet, "Gehe zu" (11) + "Tun" (5); leere Gruppen bleiben verborgen
  Text tippen -> "Finden" (2) und "An Lucy" (1) erscheinen
  "Motor neu starten" traegt den Chip "fragt nach"; Auswahl zeigt die Rueckfrage
    mit vollem Folgentext — es wird NICHTS gestartet
  "Abbrechen" fuehrt zurueck in die Liste, keine Meldung, kein Aufruf

54 Tests gruen (10 neue) · ESLint 0 Fehler · Einstieg 118 762 B gzip / Budget 125 000.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 09:56:26 +02:00

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. 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,690 t/s Lucys Hirn und Sucher-Subagent. Immer warm, 65k/Slot
debugger Muse-Glimmer-30B 4050 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.

Qualitäts-Tore

  1. Prüf-TorVERIFY 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/* · 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 |

S
Description
No description provided
Readme
104 MiB
Languages
TypeScript 45.1%
Python 40.7%
Shell 12.8%
CSS 0.7%
JavaScript 0.3%
Other 0.3%