Hitonabi cd60974ff9
Ampel / ampel (push) Successful in 24s
Ideen: Entscheidungsbaum zugeklappt statt Assistent
Der vorgeschlagene Wizard hatte den richtigen BAUM — Wer baut das?, und nur im
Zed-Ast: wie startest du? — aber den falschen Mechanismus fuer eine taegliche
Zehn-Sekunden-Handlung. Ein Assistent haette gefragt, was der Einordner in
~500 ms schon weiss.

Jetzt: derselbe Baum, zugeklappt.
  Normalfall  Textfeld + EINE Zeile ("Du baust selbst — ich arbeite erst ein
              Konzept aus.") + Enter. Nichts steht zwischen dir und der Idee.
  "anders"    klappt genau die Wizard-Reihenfolge auf: erst Wer baut das?, und
              NUR im Zed-Ast eingerueckt darunter Wie startest du?
              Bei "die Box" folgt keine Rueckfrage — dann geht es direkt los.

Das Etikett heisst "gelesen" und erscheint nur, wenn die Box den Text wirklich
eingeordnet hat. Ohne Einordnung steht dort die Voreinstellung, und die darf sich
nicht als Verstaendnis ausgeben.

Der Entwurf steht und faellt damit, dass der Einordner meistens richtig liegt —
5 von 5 im Test ist ein huebsches, aber winziges Ergebnis. Deshalb zaehlt die
Seite jetzt mit, wie oft "anders" geklickt wird (localStorage, zwei Zahlen, kein
Endpunkt) und zeigt die Quote beim Aufklappen. Bleibt sie unter etwa jedem
fuenften Mal, war der Weg richtig; liegt sie darueber, bauen wir den Assistenten
mit Daten statt mit Meinung.

Nebenbei: das jetzt tote `vorgeschlagen`-Prop aus <Wahl> entfernt (4 Aufrufer).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 00:16:17 +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 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. Keine VERIFY-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 265318 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

  1. Werkzeug-Zaun (deploy/opencode/plugin/) — blockt git push, rm -rf, sudo, curl | sh und Fremd-Hosts im Agentenlauf.
  2. Prüf-TorVERIFY nach jeder Etappe; rot → der Agent repariert selbst weiter (max. 3 Runden).
  3. Governor (deploy/governor/) — zählt Tokens ehrlich (aus den echten usage.prompt_tokens jeder Antwort, selbstkalibrierend). Bei ~45.000: Savepoint schreiben und Sitzung sauber beenden. Bei ~50.000: harter Riegel. Sichtbar als Kachel im Cockpit.
  4. 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. 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/* · **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
S
Description
No description provided
Readme 60 MiB
Languages
Python 43.8%
TypeScript 36.2%
Shell 19.5%
CSS 0.4%