Die Intelligenz sitzt nicht mehr NEBEN dem Coden, sondern DRIN. Alles auf der
Box gemessen, nicht angenommen.
Stufe 1 — Speicher-Haushalt (llama-swap-Config, nicht im Repo):
Coder dauerwarm statt ttl 600 (Kaltstart 23 s -> 491 ms), Devstral als
'kritiker' verdrahtet, Swap 11 GB -> 0. Zwei Befunde: Kontext 131k->65k spart
bei Qwen3-Next 0 GB (Hybrid-Attention), und llama-swap haelt nur EINE Gruppe
resident -> alles Ko-Residente in dieselbe Gruppe. `persistent: true` verhindert
dabei das Freiraeumen vor grossen Modellen -> ausgeloester Kernel-OOM, behoben
durch persistent:false + TTLs (Vision laedt jetzt in 10 s statt 117 s + Absturz).
Stufe 2 — Governor v2 (deploy/governor/):
Steht jetzt IM Pfad (:8100 -> MC2 :9001) statt daneben. Zaehlt den GANZEN
Anfragekoerper inkl. tools/tool_calls und kalibriert sich aus den echten
usage.prompt_tokens jeder Antwort nach: Schaetzfehler 200 % -> 0,3 %.
Soft-Einschub nur noch, wenn die Nachrichtenkette es erlaubt (kein Dazwischen-
funken in offene tool_calls). Neuer Status-Endpunkt + systemd-Unit.
Lucys Alltagsmodelle sind vom Schnitt ausgenommen.
Stufe 3 — OpenCode-Plugin (deploy/opencode/plugin/mc2-governor.ts):
Werkzeug-Zaun (git push, rm -rf, sudo, curl|sh — bewiesen), Pruef-Tor auf
session.idle mit Selbstreparatur, Savepoint statt Kompression, Meldungen an
Lucys Briefkasten mit eigenem Absender 'loop'.
Stufe 4 — Mannschaft (opencode.json):
plan+build -> coder (51,5 t/s) · explore -> hermes (69,6 t/s, warm, gratis) ·
review -> Devstral (15,0 t/s, FREMDE Modellfamilie gegen blinde Flecken).
Der 63-GB-Planer faellt aus der Tagesrolle raus.
Stufe 5 — ein Regelwerk, zwei Ausloeser:
deploy/opencode-lauf.sh faehrt dieselbe Bau-Pruef-Schleife unbeaufsichtigt
(die Schleife liegt hier UND im Plugin: bei `opencode run` endet der Prozess,
bevor session.idle fertig ist — gemessen). Bricht ab, wenn der Governor fehlt.
gitea-repo-create.sh saet jetzt VERIFY neben der CI-Ampel: jedes neue Repo
wird mit Innen- UND Aussen-Pruefung geboren.
Oberflaeche:
Token-Waechter-Kachel im Cockpit (Fuellstand, Marken, Ehrlichkeits-Nachweis),
/api/governor als gleichursprüngliches Fenster, Devstral im Modellkatalog,
Rollen-Texte auf die neue Mannschaft aktualisiert.
.gitattributes: deploy/**/*.py auf LF (deploy/*.py greift nur eine Ebene tief).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Zwei zusammenhaengende Bugs, beim echten Worker-Test entdeckt:
1) HOOKS FEUERTEN FUER WORKER NIE. Kanban-Worker laufen unter IHREM Profil
(HERMES_HOME=~/.hermes/profiles/<name>) und lesen dessen config.yaml, NICHT
die Top-Level ~/.hermes/config.yaml. Die neuen Hooks waren nur oben
registriert -> fuer Worker inaktiv. FIX: ensure-profile-hooks.py registriert
pre_llm_call + pre_tool_call in jeder Worker-Profil-config (idempotent,
validiert, Backup); deploy.sh ruft es je Profil auf -> reproduzierbar.
2) FALSCHER SCOPE. Beide Hooks scopeten auf task_id == t_<hex>. Aber Worker
tragen als effective_task_id den SESSION-Zeitstempel (z.B.
20260713_224206_267304), NICHT die Kanban-t_-ID -> der Check schlug immer
fehl -> box-steckbrief injizierte nie, tabu-guard liess alles durch.
FIX:
- tabu-pfade-guard.py: Schutz jetzt UNBEDINGT (kein Task-Scope) - kein
legitimer Hermes-Agent-Flow schreibt je in Live-Checkout/Hermes-Quelle
(Werkstatt arbeitet im Workspace-Klon, Wartung ist Shell nicht Agent-Tool).
- box-steckbrief-inject.sh: Scope jetzt cwd unter ~/.hermes/kanban/workspaces/
(zuverlaessiger Worker-Signal; Lucy/Voice/CLI laufen nie dort).
Verifiziert: echter betrieb-Worker versuchte in den Live-Checkout zu schreiben
-> GEBLOCKT, Datei nicht erstellt, TABU-Meldung im Log. 26 Guard-Unit-Faelle gruen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ohne Regel wuerde autocrlf tabu-pfade-guard.py bei Checkout zu CRLF machen ->
`#!/usr/bin/env python3\r` bricht auf der Box. Analog zur *.sh-LF-Regel.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- _installed_engine_build matchte nur 'build: <hash> (N)' / 'bNNNN', aber der
aktuelle llama-server meldet 'version: 9821 (hash)'. Dadurch war installed_build
immer None → Engine-Badge fiel auf ungenauen mtime-Vergleich zurueck. Jetzt
praeziser Build-Nummer-Vergleich (latest > installed).
- .gitattributes erzwingt LF fuer *.sh/*.service/*.timer: die Box hatte
core.autocrlf aktiv und checkte deploy.sh mit CRLF aus -> 'set -euo pipefail'
wurde zu 'pipefail\r' (invalid option name), Deploy brach ab.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>