Duenner, zustandsloser Proxy (nur stdlib) zwischen Aider und llama-swap :8080.
Schiebt an einer Token-Schwelle "SAVEPOINT.md finalisieren + stoppen" ein (weich)
bzw. antwortet oberhalb eines optionalen Hart-Deckels selbst. Beweist Session-
Hygiene per hartem Schnitt statt Auto-Compaction -- ohne eine Zeile Lucy-Code.
Alle 4 Akzeptanzkriterien gruen: feuert im Log; SAVEPOINT.md gepflegt; ehrlicher
Grenz-Savepoint am ersten Feuern; frische Sitzung liest Savepoint -> baut Tests,
9 unittest gruen, keine Fassade. CPT 3.5 kalibriert (est ~= echte prompt_tokens).
Hart-Deckel nachgeruestet (weicher Schnitt allein erzeugt Fassade bei Weiterarbeit
ueber die Grenze). Streaming-read1-Fix + 4 kleinere aus adversarialer Review.
Laeuft deployt auf der Box unter ~/governor-p0/ (gov-ctl.sh start <soft> <hart>).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- werkstatt-SOUL Regel 3: Klonen IMMER ueber http://192.168.178.153:3000
(DDNS-Domain nachts wegen Zwangstrennung tot -> Worker hielt Gitea am
24.07. faelschlich fuer kaputt und blockte). Nie SSH-Remotes, nie nach
Passwoertern fragen.
- deploy/gitea-pr (neu): PR per Gitea-REST-API mit Token aus
~/.git-credentials (Vorfall 23.07.: Worker bat um Web-Passwort).
- ampel-waechter: /repos/search statt /user/repos - Token hat nur
write:repository, /user/repos gab 403 und der stille exit 0 versteckte
das seit Inbetriebnahme (Merkliste blieb leer, kein Alarm ging je raus).
API jetzt intern, Telegram-Links bleiben auf der Domain.
- tabu-pfade-guard: Klon-Empfehlung in der Blockmeldung auf interne URL.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Alter Runner (0.2.13) meldete Abschluesse nicht -> Gitea zombie-markierte
gruene Jobs als failure. Waechter prueft jetzt vor Alarm das Job-Log auf
"Job succeeded". Runner auf 0.6.1 gehoben (eigentlicher Fix).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Preview seit 16.07., Win+Mac, gratis, closed source. Keine Custom-
Endpoints (Box :9001 nicht anbindbar), keine CLI/API. Radar meldet,
wenn Issue #2185 (Linux-Port) zugeht; Changelog gegenlesen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Meldet nur NEUE Fehlschlaege (Merkliste), running zaehlt nicht als
gesehen. Teil 3 der Wasserdicht-Runde.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Erster rippy-Lauf bewies: fehlendes package-lock.json = EUSAGE-Wand.
Jetzt: verstaendliche rote Meldung mit Fix-Anleitung.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- deploy/ampel-ci.yml: sprachneutrale Actions-Ampel (erkennt Python/Node
selbst; Doku-Repo=gruen, Code ohne Tests=ROT)
- gitea-repo-create.sh: pflanzt die Ampel bei JEDER Repo-Anlage ein
(Contents-API, Push-Token, defensiv)
- projektstart-SOUL: drei harte AGENTS-Regeln (Ampel-Pflicht,
Spec-Abweichung=STOPP, Deploy nur via deploy.sh) — rippy-Lehren
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der '33'-Stand in der warum-Prosa war veraltet (real: 43.2.0 stable)
und liess den Rundumschlag ein 11-Major-Loch alarmieren. Notiz sagt
jetzt: Versionsstand immer live pruefen, nie der Notiz glauben.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Probelauf empfahl GLM-5.2 per Cloud-API — widerspricht dem
Abloesungs-Zielbild. Regel 6: keine API-Empfehlungen, >122 GB
Unified = kein Kandidat.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ergaenzt die mechanischen Waechter um tagesaktuelle Web-Recherche —
Lehrbeispiel Gemma-4-Stealth-Update 15./16.07. ohne Versionssprung,
das kein Radar fing. Feed sammelt IST-Stand (Rollen, Engine, Puls,
Watch, Pruefstand, Ressourcen, Fehlerbild), Agent recherchiert und
empfiehlt max. 3 Schritte; umgesetzt wird per Karten-Klick.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Weg von der Box in die IDE endete bisher am Repo: der Commander klont es,
oeffnet Zed/OpenCode — und der Agent weiss nicht, dass hier bereits ein
gehaertetes Konzept liegt. Ohne Anleitung plant er entweder neu (projekt-start
springt an) oder fragt ins Blaue.
- client/ide-skills/projekt-uebernehmen/SKILL.md (Quelle im Repo, installiert
nach ~/.agents/skills/ — dort liegen die uebrigen PC-Skills, OpenCode 1.18
laedt von dort). Ablauf: einlesen (Konzept/Roadmap/Savepoint + git-Stand) ->
3-6 blockierende Fragen MIT Empfehlung -> Etappe-1-Plan -> "los" -> bauen,
Savepoints, live testen. Zwei Abbruch-Faelle: schon Code da (dann Fortsetzung
nach SAVEPOINT) und nur KONZEPT.md ohne ROADMAP (das ist ein geprueftes
Ideen-Repo -> Hinweis auf "Gefaellt mir - Projekt daraus machen").
Modus-Wechsel ist Teil des Skills: lesen/fragen im Planer, bauen im Coder.
- deploy/projektstart-SOUL.md: die von der Box erzeugte AGENTS.md nennt den
Skill jetzt woertlich. AGENTS.md wird automatisch als Kontext geladen — das
ist der zuverlaessige Kanal; auf spontane Skill-Wahl ist bei den lokalen
Modellen kein Verlass (nachgemessen: heavy und coder greifen bei einem vagen
"ich moechte hier loslegen" NICHT von selbst zum Skill).
- ~/.agents/skills/projekt-start/SKILL.md (ausserhalb des Repos) bekam eine
Abgrenzungszeile: nicht nutzen, wenn KONZEPT.md + ROADMAP.md schon liegen.
Sonst plant er ein vorbereitetes Projekt neu.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
‼️ Die Bremse hat den Schaden angerichtet, den sie verhindern soll. Sie signiert
den ERGEBNISTEXT von terminal-Aufrufen; die Bestandsaufnahme in Schritt 0 besteht
aber aus vielen kurzen Schau-Befehlen (ls, cat, git log), deren Ausgaben sich stark
aehneln. Nach dreien blockte sie den naechsten Blick — ausgerechnet `ls /tmp/konzept-*`.
Der Worker las die Block-Meldung als "Verzeichnis existiert nicht", schloss daraus,
das fertige Konzept sei nicht verifizierbar, und warf eine halbe Stunde Arbeit weg
(Karte t_d26c3203, Log: "kein /tmp/konzept-* Verzeichnis gefunden (wegen
No-Progress-Bremse)"). Die Bremse verlangt in ihrem eigenen Text "Diagnose statt
Variation" — und verhinderte genau die.
- _nur_lesend(): rein lesende Befehle (ls/cat/head/find/grep/git status|log|diff|
ls-remote …, keine Umleitung) werden weder gezaehlt noch geblockt. Strukturell
nach Befehls-ART, nicht per Fehlertext-Liste — die Bremse bleibt generisch.
- Block-Meldung sagt jetzt ausdruecklich: "Dein Befehl wurde NICHT ausgefuehrt, das
ist eine Bremse, KEIN Ergebnis — schliesse daraus nichts ueber Existenz oder
Zustand." Ohne diesen Satz liest ein Agent den Block als Befund.
- Schritt 0 (Wiederaufnahme) + FORTSCHRITT.md jetzt auch in werkstatt-SOUL
(Klon/Branch pruefen: liegt der Branch schon auf Gitea -> verifizieren und
abschliessen statt neu bauen) und betrieb-SOUL (vorhandene Messwerte NICHT neu
messen — ein wiederholter Bench laedt 70-GB-Modelle und gefaehrdet Lucys Warm-Set).
- projektstart: FORTSCHRITT.md gehoert ins Workspace-Wurzelverzeichnis, nicht in den
Repo-Klon.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Live-Fall 21.07. (Karte t_d26c3203 "Rippy"): Lauf 1 war praktisch fertig —
Fliessband komplett (Recherche, 3 Rollen x 2 Runden, Haertetest, konzept.md
14,7 KB), Repo Hitonabi/rippy angelegt und gepusht, KONZEPT.md im Klon
geschrieben. Dann Kontext voll, Exit ohne kanban_complete -> "protocol
violation". Es fehlten git add/commit/push und die Uebergabe: zwei Minuten.
Lauf 2 fing komplett von vorne an — neuer Rollen-Cast, neue Kaskade, neuer
/tmp/konzept-*-Ordner —, obwohl Hermes den Abschnitt "Prior attempts on this
task" in den Auftrag schreibt UND der Workspace derselbe ist. Die SOUL hatte
dafuer keinen Platz: sie begann mit "Der Ablauf (genau diese vier Schritte)".
- Neuer Schritt 0 WIEDERAUFNAHME: bei "Prior attempts" erst inventarisieren
(FORTSCHRITT.md, Workspace-Repo inkl. `git status` — uncommittete Dateien
sind fertige Arbeit —, /tmp/konzept-*, `git ls-remote`), dann an der ERSTEN
LUECKE ansetzen. Ein zweiter kompletter Denk-Durchlauf gilt als Fehlschlag.
- Neuer Abschnitt "Fortschritt hinterlassen": eine Zeile je Stufe in
FORTSCHRITT.md im Workspace, SOFORT geschrieben, dazu als Heartbeat-Notiz.
Das unterscheidet einen Kontext-Tod von einem Totalverlust.
- Schritt 2: den vom Vorgaenger vergebenen Repo-Namen weiterbenutzen, sonst
entsteht fuer dieselbe Idee ein zweites Repo.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Die Begruendung zur ls-remote-Regel war eine Fehlannahme von mir: das Repo
`Hitonabi/arm-ui` fehlte nicht wegen eines verpufften Pushes, sondern weil der
Commander es selbst geloescht hat (Konzept ging in die falsche Richtung). Der
Push war echt.
Die Regel selbst bleibt — der Worker hatte seine eigene Pruefung tatsaechlich
uebersprungen und dabei gegen die No-Progress-Bremse argumentiert. Statt der
erfundenen Folge steht jetzt der eigentliche Grund da: nicht wegargumentieren,
der Commander soll "Repo liegt bereit" ohne Nachpruefen glauben koennen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Nach dem Lesen eines Konzepts gab es bisher nur zwei Wege: "Gefaellt mir" oder
archivieren. Der haeufige Fall fehlte komplett — EIN Punkt passt nicht und der
Commander hat einen besseren Vorschlag.
- POST /api/ideen/nachschaerfen -> konzept_ueberarbeiten(): legt eine neue
Idee-Karte an (kein Bau), verkettet an die Quell-Karte, mit dem Wortlaut der
Rueckmeldung. Auftrag: bestehendes Konzept lesen, genannte Punkte UND deren
Folgewirkungen aendern, Rest stehen lassen, kurzer Haertetest nur auf die
geaenderten Teile. Schafft der Vorschlag ein Problem: einbauen UND die Folge
sichtbar in die Risiken schreiben — nicht uebergehen, nicht schoenreden.
Die neue Fassung geht an DIESELBE Stelle (Repo-Commit bzw. Datei + .bak), so
zeigt "Konzept" ueberall den frischen Stand. Beliebig oft wiederholbar, weil
die Ueberarbeitung selbst wieder eine Idee-Karte ist.
- UI: Rueckmeldefeld direkt unter dem gelesenen Konzept, ueber dem
Gefaellt-mir-Weg (der haeufigere Fall gehoert nach oben und offen sichtbar).
- SOUL: neuer Sonderfall UEBERARBEITUNG (Schritt 2 entfaellt, kein zweites Repo).
Zwei Fehler nebenbei gefunden und behoben:
- _wo_liegt(): der Auftrag verwechselte "Repo bekannt" mit "Konzept kommt aus
dem Repo". Faellt MC2 auf die lokale Datei zurueck, stand vorher "liegt im
Repo als <lokaler Dateiname>" im Auftrag — eine Datei, die es dort nie gab.
- SOUL-Regel 4: der Push gilt erst als erledigt, wenn `git ls-remote` ihn
BEWEIST. Ein Worker hat am 21.07. genau hier abgekuerzt, Erfolg gemeldet, und
das Repo war nachher nicht auffindbar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drei Luecken, die die neue Idee-Bahn unbrauchbar machten (User-Fund 21.07.):
1. Konzept unsichtbar. Der projektstart-Worker folgte dem Ende des
konzept-fliessband-Skills (Kopie nach ~/konzepte + Telegram) statt seiner
SOUL (Repo + KONZEPT.md) und schloss die Karte ab. Die Konzept-Ansicht sucht
nur in Gitea -> "noch kein Repo hinterlegt", obwohl das Konzept fertig war
(zweimal passiert: arm-ui, pomodoro-timer). konzept_of() faellt jetzt auf
~/konzepte/*.md zurueck (Pfad aus der Abschlussmeldung, sonst ueber den Titel
geraten; streng auf dieses Verzeichnis begrenzt) und nennt die Quelle.
Zusaetzlich sagen SOUL und Skill jetzt ausdruecklich, dass die Skill-Ablage
fuer Kanban-Worker NICHT das Ende ist.
2. Modus nicht erkennbar. Idee und IDE-Projekt trugen dasselbe "IDE"-Abzeichen,
Box-Karten gar keins. list_queue() liefert jetzt `art` (aus dem Body-Marker
AUFTRAGS-ART: IDEE PRUEFEN), die UI zeigt BOX / IDEE / IDE mit Erklaerung —
plus eine immer sichtbare Zeile, wann man welchen Modus nimmt.
3. Idee war eine Sackgasse. Neu: POST /api/ideen/weiterfuehren legt aus einer
fertig durchdachten Idee eine IDE-Projekt-Karte an — verkettet an die Idee,
mit dem fertigen Konzept als Vorlage ("denk es NICHT neu"), Titel aus der
Konzept-Ueberschrift statt aus dem Rohtext. Liegt das Konzept schon in einem
Repo, wird genau dieses weitergenutzt statt ein zweites anzulegen.
In der UI sitzt der Knopf unter dem gelesenen Konzept (Ziel + Aufwand).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fuer echte Software-Ideen (z.B. Game-Server-Management), die weder MC2/Lucy-
Umbau noch schon ein Zed-Projekt sind. Volle Denk-Kaskade mit PRODUKT-Blick
(was, fuer wen, was gibt es schon, kleinster Wurf, was spricht dagegen) statt
Umsetzungs-Blick. Ergebnis: NUR KONZEPT.md — keine Roadmap, kein Geruest, keine
Bau-Aufforderung; der Commander entscheidet danach. Kein Ziel-Schalter (eine
Idee braucht noch keine Plattform). Eigene Farbe (sky), Button 'Durchdenken'.
Nebenbei: projektstart-SOUL.md ist jetzt versioniert + deploy-fest (lag bisher
nur auf der Box).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die fest eingetragene Container-Liste veraltet (106 homepage war schon weg) und
kostet im Steckbrief bei JEDEM Worker-Turn Kontext. Jetzt nur noch das Prinzip:
AI-Box = Werkbank, pve = separates Ziel-System — Bestand bei Bedarf per
'ssh pve pct list' nachsehen statt annehmen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die IDE-Planer kannten den Proxmox-Host gar nicht — der Worker laeuft AUF der
AI-Box und nahm an, 'hier' sei auch das Ziel (User musste das muehsam erklaeren).
Steckbrief + IDE-Auftrag nennen jetzt beide Maschinen explizit: AI-Box
192.168.178.151 = Werkbank (nie Deployment-Ziel), Proxmox 'pve' 192.168.178.108
= separates Ziel-System mit den LXCs (100 adguard, 101 npmplus, 102 netbird,
103 pve-scripts-local, 104 gitea/.153, 105 PBS), per 'ssh pve' erreichbar, pct.
Live verifiziert (pct list, gitea-IP).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Korrektur: Docker-Wahl bedeutet normales, portables Docker nach Standard-Praxis
(Dockerfile, compose, ueber Gitea-/GitLab-Pipelines baubar) — nicht 'compose im
LXC mit Nesting'. Genau dann geht der Commander bewusst aus der LXC-Welt raus.
Infrastruktur-Steckbrief bleibt Kontext (lokal, kein Cloud/Bezahldienst), zwingt
aber nicht mehr LXC-Denke auf den Docker-Pfad.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Zweiter, dezenter Schalter (nur bei IDE): Ziel = LXC (Standard) oder Docker.
Die Wahl fliesst als 'ZIEL-PLATTFORM'-Zeile in den Auftrag, dazu immer ein
Infrastruktur-Steckbrief (Proxmox/LXC, PBS-Backups, systemd, self-hosted Gitea,
alles lokal) — sonst plant jedes Modell nach Industrie-Default Docker/Cloud.
Skill: Ziel + Infrastruktur sind bindend; traegt die Wahl nicht, muss das
Konzept es ausdruecklich sagen statt sie still zu ignorieren.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drei Modus-Knoepfe: Box · IDE: simpel · IDE: gruendlich. Die Wahl fliesst als
'AUFWAND (vom Commander gewaehlt): SIMPEL/GRUENDLICH'-Zeile in den Auftrag und
UEBERSTIMMT die Groessen-Selbsteinschaetzung von konzept-fliessband (simpel=2
Rollen/1 Runde, gruendlich=volle Kaskade). Skill: bei echter Ambition zur vollen
Tiefe (nicht 'im Zweifel kleiner'), explizite Commander-Wahl schlaegt Schaetzung.
Auto-Skalierung bleibt Fallback fuer Telegram/Lucy (ohne Knopf).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Worker-Subprozesse laufen mit abweichendem $HOME → das Skript fand das
write:user-Anlage-Token nicht und fiel aufs Push-Token (write:repository)
zurueck → 'Token hat fehlenden Scope', IDE-Vorbereiter blockte am Repo-Anlegen
(Pomodoro-Testlauf). Fix: echten Home aus /etc/passwd aufloesen (getent),
unabhaengig von $HOME.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Mini-Projekte bekamen die volle Kaskade (3-5 Rollen x bis 3 Runden = ~15-20
heavy-Aufrufe a ~90s → 35 min fuer einen Pomodoro-Timer). Neu: Rollen+Runden
skalieren mit Groesse (klein=2 Rollen/1 Runde, gross=volle Kaskade), frueher
raus bei WASSERDICHT. Deploy spiegelt den Skill jetzt auch in Profile, die ihn
haben (projektstart). Ergaenzend (Box-Config): projektstart-Manager coder->hermes,
damit heavy warm bleibt (coder 46G verdraengte heavy 60G bei jedem Aufruf;
hermes 22G persistent koexistiert mit heavy).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
konzept-fliessband/orchestrator rufen worker.sh pro Runde/Rolle wiederholt auf
(verschiedene Prompts, aehnliche Prosa) — die Bremse hielt das faelschlich fuer
eine Schleife und blockte (Pomodoro-IDE-Test lief 19 min dagegen an). Diese
Delegations-Helfer haben ihr eigenes Runden-Limit → von der Bremse ausnehmen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Legt semantisch gleiche Fakten zusammen und loest Widersprueche (neuester gewinnt)
ueber /graph-Cluster + fast-Hirn (NoThink). Harte Leitplanken: pro Gruppe ueberlebt
immer ein Fakt, max 1 Update, LLM-Fehler = Gruppe unangetastet, Kappung pro Lauf.
Erster Live-Lauf 19.07.: 459 -> 420 Fakten (15 zusammengefasst, 39 geloescht).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- no-progress-bremse.py: generische, turn-uebergreifende Schleifenbremse (pre/post_tool_call);
Muster-Hash statt hartkodierter Fehler-Strings, Selbst-Lernen via neue-signaturen.jsonl.
Schliesst die Luecke der nativen guardrails (pro Turn, nur klassifizierte Fehler).
- ensure-profile-hooks.py: kann Eintraege in BESTEHENDE Event-Bloecke einfuegen
(zweiter pre_tool_call-Key haette den Tabu-Guard lautlos verschluckt) + registriert Bremse.
- betrieb-playbook-Skill: SSH-/Deploy-Diagnose-Checklisten (Passphrase-Falle zuerst),
Triage-Regel im Steckbrief-Hook; Skill wird in alle Profile gesynct.
- mc2-memory: Lern-Extraktion gebuendelt (4 Turns oder 180 s idle = EIN Lauf) statt pro Turn -
Extraktion konkurrierte mit Lucys Hirn um die Slots.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sicherer als .git-credentials zu ueberschreiben: Anlage-Token (write:user) aus
$GITEA_CREATE_TOKEN oder ~/.config/gitea/create-token; Push/PR-Token in
~/.git-credentials bleibt unangetastet (kein Bruch, falls das neue Token kein
write:repository hat). User/Host nicht-geheim mit Defaults.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Lucke im "Projekte selbst starten"-Weg: Werkstatt konnte nur Branches in
bestehende Repos proposen, kein neues Projekt-Repo anlegen. Neues Skript:
POST /api/v1/user/repos, IMMER privat (Gitea ist oeffentlich erreichbar!),
auto_init + default main, Token aus ~/.git-credentials (nie ausgegeben),
Audit-Log + stiller Chronik-Spiegel je Anlage.
Braucht Token-Scope write:user (aktuelles Box-Token hat nur write:repository);
ohne das meldet das Skript GENAU, welches Token in Gitea zu generieren ist,
statt kryptisch zu scheitern. Token-Upgrade = Commander-Handgriff (Credential).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Erstlauf-Befund: "grep -c ... || echo 0" haengte bei 0 Treffern eine zweite
Zeile an (grep -c druckt selbst schon "0") -> "integer expected" + kaputte
Summe. || echo 0 raus, Ergebnis auf Ziffern reduziert. Fund selbst war echt:
1 CVE in mem0, 27 Pakete veraltet.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Erstlauf-Befund: mem0-/voice-venvs sind uv-erstellt (kein bin/pip, kein
pip-Modul). Das Audit-venv prueft deren site-packages jetzt von aussen
(pip list --outdated/--format=freeze --path) - Dienst-venvs bleiben unberuehrt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Erstlauf fand echten Stolperstein: pxar-Restore extrahiert als User korrekt,
scheitert aber am chown root-eigener Dateien (llamaswap) -> Fehl-Exit trotz
intakter Daten. Restore-Aufrufe jetzt mit --ignore-ownership/--ignore-acls
(uns interessiert der INHALT); llamaswap-Fallback prueft den Inhalt statt des
Exit-Codes. Kern-Datei-Grep matcht nur noch Dateien, keine Verzeichnisse.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Scope-Entscheid 17.07.: MC2 bleibt Box-Zentrale (KEINE Homelab-Zentrale) -
Infra-Radar (Proxmox/PBS/QNAP/Gitea) geht als eigenes Projekt an Lucys Queue.
- restore-probe.sh (Cron 1. d. M. 06:40, no-agent): stellt WIRKLICH wieder her -
PBS-Canary aus hermes.pxar (selektiv via --pattern, sudo-frei ueber die
User-Unit-Zugaenge) + Tarball-Probe + Frische-Check <36h; Erstlauf-Fallbacks
(llamaswap.pxar / Kern-Datei) bis der Canary in den Sicherungen ankommt.
- venv-audit.sh (Cron 2. d. M. 06:40, no-agent): pip outdated + pip-audit-CVEs
fuer mem0-/voice-venv ueber eigenes Audit-venv; Funde -> Kanban-Karte je Monat,
Update bleibt Commander-Entscheid.
- self-smoke: Disk-Waechter (Check 7, Schwelle 85%, nennt die groessten Brocken).
- Trend-Radar-Watchlist: neue Typen github_release_major + pypi; Eintraege
electron-major (PC-Shell auf 33!) und pocket-tts (PyPI-Versionswatch).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drei Luecken aus der Selbst-Review 17.07.:
1. MTP-Fairness: Kandidaten mit MTP-Kopf (Dateiname oder nextn-Tensoren im
GGUF-Kopf) bekommen eine Zusatz-Tempomessung mit draft-mtp; Steckbrief
rechnet best-of speed/speed_mtp - das Live-Hirn laeuft schliesslich MIT MTP.
2. Baseline-Refresh: baseline.json traegt jetzt den Engine-Build; weicht die
installierte Engine ab (So-Auto-Update), misst der Pruefstand-Cron nur den
Tempo-Teil aller Rollen neu (Geister-Zahlen-Schutz, Qualitaet bleibt gueltig).
3. Langzeit-Historie: Puls wird als JSONL angehaengt statt ueberschrieben;
Radar vergleicht zusaetzlich gegen ~8 Wochen zurueck und meldet
SCHLEICHENDE REGRESSION, die woechentlich unter der 10-%-Schwelle bleibt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Der erste echte Radar-Lauf schlug prompt das eigene Hirn-Repo
(unsloth/Qwen3.6-35B-A3B-MTP-GGUF) als hermes-Kandidat vor - Zitat-Gate korrekt
passiert, aber Repackaging des Amtsinhabers ist nie ein Kandidat. Jetzt doppelt:
Raster-Regel + mechanischer Block ueber Modellnamen-Token im Gate.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Beide Augen-Modelle beschrieben das Testbild korrekt ("in der oberen linken
Ecke"), scheiterten aber an undeklinierten Pflicht-Stichworten ("obere linke").
Gruppen um Beugungs-Stämme ergänzt (oberen link / unteren recht).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hermes' browser_navigate starb still als "Failed to open <url>": das
Hermes-Update 15.07. 23:53 (npm ci --workspace) bog ~/.local/bin/agent-browser
per postinstall auf node_modules/ um und loeschte das Paket im selben Lauf
wieder -> toter Symlink. Kein fehlender MCP/Skill.
Neu, damit die Box das OHNE Zuruf erkennt und heilt:
- self-smoke.sh Check 6: agent-browser --version; bei totem Link auf das
npm-global-Binary (~/.local/lib/node_modules/...) zurueckbiegen und
hermes-gateway/hermes-builtin-ui try-restarten (browser_tool cached
"nicht installiert" pro Prozess). Selbstheilung wird als Info gemeldet
(neuer HEALED-Kanal), nicht als Alarm; unfixbar -> Rot wie gehabt.
- hermes-postcheck.sh: gleicher Check direkt nach jedem Hermes-Update,
denn genau dort entsteht der Bruch.
Heil-Logik isoliert auf der Box getestet (Fake-HOME + systemctl-Stub):
toter Link -> geheilt+Restart; danach PASS ohne Restart; Binary weg -> FAIL.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Steckbrief-Zeilen sind Bullets ("- ..."), im Diff also "+- "/"-- " — der alte
Filter ^[+-][^+-] (gedacht gegen +++/----Kopfzeilen) verschluckte damit jede
echte Aenderung. Jetzt werden nur die Datei-Kopfzeilen ausgefiltert.
Beweis 16.07.: realer Nacht-Diff hatte 7 Aenderungen, Meldung sagte 0.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Nacht-Worker t_7a05992a ersetzte 03:59 den Live-Checkout mit cwd=$HOME und
RELATIVEN Pfaden (rm -rf mission-control-v2 && git clone ...) — der Guard
prueft beim terminal-Tool nur den Kommandotext auf home-verankerte Formen
und liess das durch (.venv weg -> Gateway 203/EXEC-Crash-Loop).
Drei Stopfen:
(1) cwd IN einem Tabu-Pfad -> jede Schreib-Operation geblockt (Lesen frei).
(2) git clone/init mit Ziel direkt in $HOME geblockt (Worker klonen im
Task-Workspace); explizites Ziel ausserhalb $HOME bleibt erlaubt.
(3) cwd == Vorfahr eines Tabu-Pfads -> relative Nennung des Tabu-Ziels
zaehlt als Treffer; Lookarounds lassen den Workspace-Klon-Pfad
(.hermes/kanban/workspaces/<id>/mission-control-v2) weiter durch.
Nebenbefund zu: clone fehlte in der git-Schreibliste (a) — auch
git clone URL ~/mission-control-v2 war vorher ungeblockt.
Lokal bewiesen: 35/35 Payload-Faelle (Vorfalls-Kommando geblockt,
Workspace-Arbeit/Lesen frei, Alt-Verhalten regressionsfrei).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Der Pfad (Bild an coder -> Vision beschreibt -> Coder antwortet) brach am
15.07. zweimal still: erst als nie verdrahteter Patch in der Hermes-Quelle,
dann am gepoolten Keep-Alive-Socket nach Modell-Swap (:9010). 256x256-Rot
als Testbild - Winzbilder liefern VL-Halluzinationen (Kapuzinerkresse).
Nebeneffekt: waermt coder+vision morgens vor. Vorschlag der P2-Session.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Entscheid 15.07.: 'Node sollte auf jeden Fall auf die Box - generell
alles, um sich selbst zu warten.' Node v24.18.0 (LTS) liegt unter
~/.local/node (offizielles Tarball, KEIN sudo), Symlinks in ~/.local/bin,
das im PATH des hermes-gateway (= aller Worker) bereits enthalten ist.
Bau-Beweis auf der Box: frischer Klon, npm ci + npm run build -> dist in
~4 s. Der Steckbrief-Hook weist Worker jetzt an, dist selbst zu bauen und
mitzucommitten (vorher: 'Box kann nicht bauen'-Vermerk).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1) deploy.sh fuehrt sich nach dem git reset einmal frisch neu aus (exec-Guard,
Env-Marke MC2_DEPLOY_REEXEC): der Reset ersetzt die laufende Datei, bash las
einen alt/neu-Zeilen-Mix — beim P1-Deploy fielen so daemon-reload und der
mc2-gateway-Start aus (Lucy 502, Heilung von Hand).
2) mc2-gateway.service TimeoutStopSec=5: uvicorn wartete beim Stop auf offene
LLM-Streams (default 90 s SIGKILL-Fenster ohne Listener = 502-Fenster bei
jedem Deploy-Restart, live gemessen 14:29->14:31). Stateless Proxy, Clients
retrien — hart nach 5 s ist verlustarm.
UMBAUPLAN: Annahme-Hinweis fuer P2 (einmal deploy.sh von Hand nachlaufen lassen,
weil der Guard erst MIT diesem Deploy an Bord kommt).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Wunsch 15.07. ('es sollte eine Warnung geben - Kontext ist nicht
unendlich'): 4 P3-Worker starben still an finish_reason=length.
- Gateway erkennt abgerissene Antworten (Stream-Chunk + Non-Stream) und
meldet je Modell max. alle 10 min in den Briefkasten (silent -> Chronik),
Zustellung per MC_ANNOUNCE_HTTP ans Steuerpult (Store bleibt Ein-Schreiber).
- Steckbrief-Hook: KONTEXT-BUDGET & ETAPPEN-REGEL - gezielt lesen, grosse
Aufgaben in Etappen schneiden (kanban_create/complete mit Plan) statt
am Limit zu sterben.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>