# OpenCode-Plugin: MC2-Governor **Hier liegt die Quelle. Der Einsatzort ist eine Kopie.** ``` deploy/opencode-plugin/mc2-governor.ts <- versioniert, hier aendern | kopieren v %USERPROFILE%\.config\opencode\plugin\ <- wird von OpenCode automatisch geladen ``` Bis zum 21.08.2026 existierte diese Datei **nur** im Konfigordner des PCs — 11 KB verhaltensbestimmender Code ohne Sicherung und ohne Historie. Deshalb liegt sie jetzt hier. ## Ausbringen ```powershell Copy-Item "deploy\opencode-plugin\mc2-governor.ts" "$env:USERPROFILE\.config\opencode\plugin\" -Force ``` Wirkt sofort in der naechsten OpenCode-Sitzung; OpenChamber muss dafuer nicht neu starten, eine neue Sitzung reicht. ## Was es tut 1. **Werkzeug-Zaun** (`tool.execute.before`) — blockt Handgriffe, die ein Agent nie unbeaufsichtigt tun darf. Leitplanke gegen Entgleisen, **keine** Sandbox. 2. **Pruef-Tor + Reparaturschleife** (`session.idle`) — sagt der Agent „fertig", laeuft der Verify-Befehl aus der Datei `VERIFY` im Repo-Wurzelverzeichnis. ROT geht als naechster Auftrag zurueck an den Agenten, bis zu `MC2_LOOP_MAX_ROUNDS` mal. ‼️ **Schlaeft derzeit:** es gibt in keinem Projekt eine `VERIFY`-Datei. Ohne sie tut diese Funktion nichts — schadet aber auch nicht. 3. **Savepoint statt Zusammenfassen** (`session.compacted`) — beim Komprimieren fallen still die Regeln aus dem Kontext; stattdessen wird `SAVEPOINT.md` geschrieben. 4. **Stimme** — Ereignisse gehen an MC2 `/api/voice/announce`, Lucy spricht sie. Der zugehoerige **Governor-Proxy auf `:8100`** (Token-Zaehler mit Hart-Deckel, Juli 2026) **existiert nicht mehr** — kein Port, kein Ordner, keine Unit. Nachgemessen am 21.08.2026. Dieses Plugin haengt nicht an ihm. ## Schalter (Umgebungsvariablen) | Variable | Default | Wirkung | |---|---|---| | `MC2_BOX_URL` | `http://192.168.178.151:9001` | MC2-Basis fuer Meldungen | | `MC2_FENCE_OFF` | — | `1` schaltet den **ganzen** Zaun ab (alles oder nichts) | | `MC2_LOOP_AUTOFIX` | an | `0` schaltet die Reparaturschleife ab | | `MC2_LOOP_MAX_ROUNDS` | `3` | Runden der Reparaturschleife | | `MC2_LOOP_ANNOUNCE` | an | `0` macht Lucy stumm | | `MC2_LOOP_SILENT` | — | `1` = Meldungen ohne Ton | ## Aenderung 21.08.2026: `git push` ist frei Der Zaun blockte urspruenglich **jedes** `git push` („Veroeffentlichen ist Sache des Menschen"). Das passt nicht mehr: die Bahn ist jetzt PC → Gitea → Box, und jede Aenderung soll auch im git landen. Ein Agent, der committen, aber nicht pushen darf, laesst Arbeit auf einem einzelnen Rechner liegen. **Erzwungenes Pushen bleibt verboten** — `--force`, `--mirror`, `--delete`. Das ueberschreibt fremde Arbeit auf dem Server und ist genau die Klasse Unfall, gegen die der Zaun existiert. `--force-with-lease` ist bewusst ausgenommen. Beides gemessen: `git push --dry-run origin main` laeuft durch, `git push --force --dry-run origin main` wird mit `[MC2-ZAUN]` abgewiesen. ## ‼️ Falle: das `bash`-Werkzeug ist auf Windows kein bash Es laeuft in **PowerShell**. `tail`, `head`, `grep` und Freunde gibt es dort nicht, und Pipes verhalten sich anders. Wer dem Agenten Befehle vorgibt, muss das beruecksichtigen. ## ‼️ Falle: Gitea-Anmeldung ist flatterhaft Der Git Credential Manager haelt fuer die DDNS-Domain ein **OAuth-Token mit einer Stunde Laufzeit**. Laeuft es ab, scheitert der Push des Agenten mit `remote: Failed to authenticate user` — ein Push aus PowerShell erneuert es, danach geht es wieder. Dauerhafte Loesung waere ein langlebiges Gitea-Token auf die **interne** Adresse `http://192.168.178.153:3000` (die DDNS-Domain ist nachts durch die Zwangstrennung ohnehin zeitweise tot).