Die angenommene Karte feature/sse-backend-v1 ersetzte die bereits E2E-
getestete Hand-Implementierung mit drei harten Fehlern: 'type:' statt
'event:' (ungueltiges SSE-Framing - EventSource-Listener feuern NIE),
globaler Snapshot ueber alle Clients (verschluckt Events), Ideen-Zaehler
gegen nicht existierenden Endpunkt :9010/v1/ideen. Dazu doppelter
Router-Mount in app.py (Merge-Folge).
Zurueck auf den bewiesenen Kern (3s-Fingerprints, Basislinie je
Verbindung, is_disconnected, korrektes Framing) + die GUTE Idee der
Karte uebernommen: Running-Set der Modelle als Quelle (Laden/Entladen
invalidiert die Modelle-Ansicht). System-/Token-Metriken bleiben bewusst
beim Polling (aendern sich jede Sekunde = invalidate-Laerm).
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>
Befund :9010 (Journal): httpx.ReadTimeout nach Sekunden trotz timeout=240 -
der gepoolte Keep-Alive-Client reicht Sockets wieder aus, die llama-swap
beim Modell-Swap gekappt hat. Der Beschreibungs-Unteraufruf nutzt jetzt
einen eigenen Kurzzeit-Client und versucht es einmal erneut.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Kategorie-Skills (z. B. autonomous-ai-agents/hermes-agent) haben einen
Schraegstrich in der ID. Die Route /api/eigenleben/skill/{skill_id} nahm nur
EIN Pfadsegment -> Request fiel in den SPA-Fallback (index.html, Status 200),
die UI zeigte "(Konnte den Skill-Text nicht laden.)". Live bewiesen:
skill/wartung = JSON, skill/autonomous-ai-agents%2Fhermes-agent = HTML.
Fix: :path-Konverter in der Route; dazu im Service "."/".."-Segmente
explizit abweisen (das Zeichen-Set der bestehenden Validierung liesse
".." als Segment durch, bisher irrelevant, mit :path sauber dicht).
Backend-only, kein dist-Rebuild noetig.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Entscheid 15.07. abends: P3-Worker-Jobs abgebrochen (22 Anlaeufe,
0 Ergebnisse) - 'du bearbeitest sie ein letztes Mal manuell'.
P3a KOMPLETT: backend/routers/events.py streamt SSE; ein Sammler prueft
alle 3 s billige Fingerabdruecke (Briefkasten-Cursor, Queue-Status,
Auftragsbuch-/Reminder-mtimes) und schickt bei Aenderung 'invalidate'
mit den React-Query-Keys. frontend/src/lib/events.ts haelt EIN
EventSource, invalidiert gezielt und entspannt die vier gedeckten
Poller x5 (relax() in queries.ts); reisst der Strom, reconnectet
EventSource selbst und die UI pollt wie bisher. Live-Graphen bleiben
bewusst beim Polling (aendern sich jede Sekunde).
P3b (TanStack Router) BEWUSST NICHT umgesetzt: Hash-Navigation liefert
Deep-Links + Zuruecktaste bereits; Router-Migration = hohes Regressions-
risiko ueber alle Views bei minimalem Gewinn fuer 1-Nutzer-LAN (gleiche
Logik wie das React-bleibt-Verdikt in UMBAUPLAN 3b).
P3c (OpenAPI-Typen) VERTAGT: ohne Pydantic-response_models liefert der
Generator leere Typen - Voraussetzung ist erst das Backend-Typing
(eigene, klein geschnittene Karten-Serie).
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>
User-Beobachtung 15.07.: jeder Worker kartiert das Repo neu (ls-Ketten,
geratene Pfade wie 'read queries.ts -> not found'). Der Hook sagt jetzt
jedem Worker-Turn, WO was liegt (Router/Services/Views/queries.ts/nav) und
die dist-Wahrheit: Box hat KEIN node/npm -> frontend/dist ist auf der Box
nicht baubar, Vorschlaege muessen das ehrlich vermerken.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Feedback 15.07.:
1) 'Von allein' heisst jetzt 'Skills' (id #eigenleben bleibt, Links halten).
2) Jeder Skill traegt aktiv/inaktiv - Quelle ist Hermes' EIGENE Wahrheit
(hermes_cli.banner.get_available_skills via Hermes-venv, dieselbe Logik
wie das eingebaute WebUI: Plattform/Voraussetzungen/Config). Bewusst NUR
die Datenquelle wiederverwendet, nicht deren UI - Skill-VERWALTUNG bleibt
im Hermes-GUI-Tab, alles andere waere Bloat/Doppelbau.
3) Auftragsbuch: fertige Queue-Karten sind aufklappbar und zeigen das
ERGEBNIS des Workers (kanban_complete-Summary, lazy via
GET /api/ideen/{id}/ergebnis) - 'Dinge werden getestet, ich sehe aber
das Ergebnis nicht' ist damit zu.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Re-Warm, Health-Sentry und Mem0-Dedupe laufen als eigener Dienst
(backend/steward.py, Restart=always) statt im Steuerpult-Lifespan:
MC2-Neustarts nehmen den Waechtern nicht mehr Timing/Flanken-Gedaechtnis,
und der Sentry ueberwacht erstmals MC2 SELBST + mc2-gateway (Telegram
funktioniert auch bei totem Steuerpult; Briefkasten-Abgabe per HTTP via
MC_ANNOUNCE_HTTP, Store bleibt exklusiv beim MC2-Prozess). Warm-Nudge
nach Config-Aenderung via mtime-Watch (5 s) statt In-Process-Signal.
Reiner Konfig-Split: MC2-Unit setzt die drei ENABLED-Schalter auf 0,
Zeilen entfernen = Rollback. reminders_loop bleibt bewusst in MC2
(teilt Datei+CRUD mit /api/reminders, Zwei-Schreiber-Risiko).
Stellt ausserdem den beim Karten-Neuaufbau (ccc9a25) verlorenen
stack-postcheck-Block fuer mc2-gateway wieder her (+ Steward-Check 4c).
Baut auf feature/von-allein-und-gateway-p1 auf; Annahme schliesst P1 ein.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ACHTUNG: Annahme AKTIVIERT die Stufe 1 (deploy.sh installiert
mc2-gateway.service + setzt MC_V1_UPSTREAM in der MC2-Unit; Health mit
Kaltstart-Retry bis 12s, dann hart rot -> Runner-Rollback greift).
MC2 :9001/v1 wird duenner Roh-Weiterleiter, LAN-Clients merken nichts;
Rollback = MC_V1_UPSTREAM-Zeile aus der Unit entfernen. token_stats
laedt bei Fremd-Aenderung per mtime nach (Gateway schreibt, Steuerpult
liest). UMBAUPLAN Abschnitt 3b dokumentiert P1-P4. Stufe 2 (Lucy direkt
an :9010, ueberlebt MC2-Neustarts) = deploy/gateway-cutover.sh, separat.
Neu aufgesetzt 15.07. auf aktuellem main (a3d9c74): die urspruengliche
Karte trug die inzwischen veraltete Von-allein-View doppelt - die ist
laengst auf main live. Inhalt = P1 der Parallel-Session, unveraendert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die mitgelieferten Hermes-Skills sind Kategorie-Ordner (DESCRIPTION.md +
Unter-Skills mit eigener SKILL.md) - der Walker lief nur ueber Ebene 1
und zeigte 12 statt ~40 Skills. Jetzt beide Ebenen, Unter-Skills mit
Kategorie-Badge; Detail-Endpunkt erlaubt Kategorie/Name-Pfad.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Wunsch 15.07.: EIN Viewpoint, was die Box selbst geleistet hat -
Chronik ist zu kompliziert. Neue Operativ-Ansicht #eigenleben:
- Skills aus ~/.hermes/skills (= Lucys Satz) mit Klartext-Beschreibung,
Nutzungszaehler (.usage.json) und Herkunft (selbst erstellt / von uns
gebaut / mitgeliefert), aufklappbar mit vollem SKILL.md.
- Vorschlags-Bilanz: angenommen (Auftragsbuch-Chronik) + abgelehnt mit
Grund (Lern-Journal) als eine Timeline + Zaehler.
Backend: services/eigenleben.py + routers/eigenleben.py (read-only).
Mit an Bord (User-Ja, SCHLAFEND): config.V1_UPSTREAM + app.py-Weiche +
gateway_forward aus dem P1-Gateway-Auszug - ohne MC_V1_UPSTREAM in der
Unit exakt altes Verhalten. Der aktive Rest von P1 kommt separat ueber
Branch umbau/p1-gateway-auszug (dort liegt auch diese View schon).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drei Naechte in Folge bauten Worker git-init-Branches ohne gemeinsamen
Ursprung mit main (cleanse-skill-index 12.07., skill-kanten-generator
13.07., blogwatcher-logging ~14.07.) - bei der Annahme technisch tot,
Nacht-Arbeit verloren. SOUL-Prosa allein driftet (Meta-Lehre Fallstrick-
Audit) -> jetzt mechanisch: tabu-pfade-guard blockt 'git init' im
Kanban-Workspace hart; pre-verify-gates prueft VOR dem Fertigmelden
merge-base gegen origin/main (Orphan-Gate ROT).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
R1: Steckbrief-Hook erinnert Worker an kanban_complete/kanban_block-Pflicht
(Nacht-Karte 14.07. blockierte trotz fertiger Arbeit am fehlenden Aufruf).
R2: tabu-pfade-guard sperrt ~/.config/systemd/user fuer Worker — Unit-/
Override-Dateien nur noch ueber angenommene Karte.
R4: Orchestrator-/Wartungs-Worktrees von /tmp nach ~/.hermes/worktrees
(ueberleben Reboot, keine kaputten Registrierungen).
Neu: self-smoke Check 4 'Repo-Waechter' — Box-main mit Commits, die origin
fehlen, loest Alarm aus (so ging die angenommene Karte
wartung/lucy-annahme-fixes am 12.07. still verloren; am 15.07. als
rescue/-Branch gerettet und wieder gemergt).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Komplettes Projekt-Review (Repo+Box live+Recherche). Enthaelt Sofort-Paket
(Klicks+sudo-Runde), Robustheit/Aufraeumen/Features/Tempo-Karten und die
Uebergabe-Logik fuer die Zeit nach Claude.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Idee aus verwaistem (nie verdrahtetem) Patch in der Hermes-Quelle
api_server.py - regelkonform in den MC2-Gateway umgezogen, Original
als docs/archiv/hermes-api_server-vision-patch-verwaist.diff archiviert.
Request mit Bild an coder: Bilder werden vorab von VL-30B beschrieben
und als Text injiziert, die Code-Frage bleibt beim Spezialisten.
Fallback bei Analyse-Fehler: bisherige Vision-Umleitung.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
GLM-4.7-Flash (Prosa-Kritiker) ist ein Reasoning-Modell und verbrennt real ~2000
Tokens im reasoning_content, bevor das Urteil in content landet (verifiziert 14.07.).
Bei 2200 schnitt es Gefahr mitten im Denken ab -> leeres content -> FEHLGESCHLAGEN;
das traf die naechtlichen Kritiker mit Default-Budget (Traum-Gate etc.). Der
Release-Radar ueberschreibt ohnehin auf 4500; der Code-Modus (Qwen-Coder, 1600) ist
kein Reasoning-Modell und bleibt unberuehrt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neuer Skill konzept-fliessband: rohe Idee -> mehrere Fach-Rollen (heavy/gpt-oss-120b
waehlt den Cast) schaerfen ein Konzept in Runden, ein Advocatus Diaboli (fremdblick/GLM)
haertet bis wasserdicht (max 3 Runden) -> Konzept-Dokument als Vorlage fuer projekt-start
in Hermes Desktop. Propose-only, KEIN Code.
Behebt das delegate_task=coder-Loch: Konzept-/Recherche-Arbeit lief bisher stumm auf dem
Code-Modell, weil natives delegate_task hart auf delegation.model=coder verdrahtet ist und
pro Aufruf kein Modell waehlen kann.
Gehaertet gegen die Reasoning-Modell-Token-Falle (heavy & GLM antworten erst in
reasoning_content): WORKER_MAXTOK=6000 / FREMDBLICK_MAXTOK=4000 + Kaltstart-Retry.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bild-Request loeste HTTP 500: HTTP-Header muessen latin-1 sein, das '→'
(U+2192) im x-mc-route-reason war nicht kodierbar. Die Weiche selbst
routete korrekt (VL-30B lud). Pfeil auf '->' geaendert.
Co-Authored-By: Claude Opus 4.8 <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>
Entscheid Weg A (vision-harness-verdikt): das MTP-Hirn (fast/hermes) bleibt
schnell und bildunfaehig; Bild-Requests routet das MC2-Gateway automatisch ans
Vision-Modell - kein manueller Modellwechsel, Lucys Flow bleibt.
router_logic.py: has_image(body) erkennt OpenAI-multimodalen content
(image_url/input_image/image); _text_of zieht jetzt nur Text-Parts fuer das
Komplexitaets-Routing (str() einer content-Liste haette die Zeichen-Schwelle
verfaelscht). VISION_CAPABLE = {vision, scout}.
routing_policy.py: neues UI-editierbares vision-Alias (Default env MC_ROUTE_VISION
= "vision"; leer = Weiche aus), darf wie coder_lite leer sein.
gateway_proxy.py _proxy: nach der Alias-Wahl - wenn ein Bild dabei ist und das
Ziel nicht bildfaehig - Override auf das vision-Alias (auch bei explizitem
model=hermes; genau Lucys Fall). Header x-mc-route-reason.
Verifiziert (Unit): Bild+hermes->vision, Bild+auto->vision, Text->fast,
Bild+scout->scout (schon bildfaehig), has_image korrekt.
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>
Fallstrick #2: Worker koennen in die falsche Ebene wandern - Patches im
Live-Checkout ~/mission-control-v2 ablegen oder die Hermes-Quelle
~/.hermes/hermes-agent anfassen. Hermes' native is_write_denied deckt diese
Pfade NICHT ab (nur Credentials/System, live geprueft).
deploy/agent-hooks/tabu-pfade-guard.py (neu): pre_tool_call-Hook, blockt
Schreib-Operationen (write_file/patch + terminal git-write/sed-i/redirect/rm)
auf den home-verankerten Live-Checkout und die Hermes-Quelle - NUR fuer echte
Kanban-Worker (task_id t_<hex>); Lucy/CLI (UUID) = No-op (~15 ms). Der
Workspace-KLON (<workspace>/mission-control-v2) bleibt beschreibbar (nur der
home-verankerte Pfad ist tabu) -> legitime Worker-Arbeit ungestoert. Lesen
erlaubt. 25 Faelle gruen (Block + Allow, inkl. git log 2>/dev/null, Redirect
nach /tmp, Workspace-Commit). deploy.sh synct den Hook (cmp-Guard).
Registrierung in ~/.hermes/config.yaml (pre_tool_call) einmalig von Hand.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fallstrick #1: Mess-/Bench-/Verify-Aufgaben landeten auf default (Lucys
nicht-technische Persona) und flailten. Neues Worker-Profil betrieb (analog
werkstatt): misst/bencht/diagnostiziert/verifiziert auf der LEBENDEN Box,
aendert aber nichts (kein Restart/Config/Deploy).
deploy/betrieb-SOUL.md: Ops-Leitplanken - nur lesen am Live-System, kennt die
Werkzeuge (Health-curl, systemctl --user status MIT XDG_RUNTIME_DIR, bench-
Skripte), Bench-Vorsicht (kein OOM, Lucys Warm-Set schuetzen), Verifizieren-
vor-Behaupten, falsche Ebene -> werkstatt/default. deploy.sh synct sie (guarded
auf existierendes Profil).
Profil selbst + Modell (hermes) + Routing-Descriptions werden einmalig auf der
Box angelegt (hermes profile create betrieb --clone-from werkstatt).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Verhindert das "Chat-in-MC2"-Muster und Ebenen-Verwechslungen: neue
docs/wissen/GRENZEN.md mappt die fuenf Flaechen (MC2=Steuerpult,
Lucy=Chat/Stimme, Hermes=Fundament/Quelle-tabu, Telegram, Hermes-Desktop)
mit "gehoert hin / gehoert NICHT hin", den Code-Ebenen-Grenzen und einer
"ich will X bauen - wohin?"-Entscheidungshilfe + roten Linien.
Eingewoben: README-Lesereihenfolge, ARBEITSWEISE (Rollen-Abgrenzung zeigt
auf GRENZEN + "MC2 = Steuerpult, kein Chat"), und der pre_llm_call-Worker-
Hook (box-steckbrief-inject.sh) gibt jedem Worker die Kurz-Grenzen inline
(MC2=Steuerpult/kein Chat-UI, Lucy=Chat, Hermes-Quelle tabu) + Zeiger auf
GRENZEN.md. Verifiziert: Hook injiziert 1236 Z inkl. Grenzen, Lucy-UUID No-op.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ein blindes cp aktualisiert die mtime auch bei identischem Inhalt und loest
dadurch bei jedem Deploy die harmlose "script modified since approval"-Warnung
von `hermes hooks doctor` aus. cmp -s ueberspringt unveraenderte Hooks.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wichtige Korrektur vor dem Scharfschalten: Hermes setzt
effective_task_id = task_id OR uuid4() (agent/turn_context.py:216) — Lucys
interaktiver/Voice-Chat laeuft also mit einer NICHT-leeren UUID-Ersatz-task_id.
Der urspruengliche "task_id nicht leer"-Check haette damit auch Lucy getroffen
(Persona-/Latenz-Schaden). Fix: nur injizieren, wenn task_id dem echten
Kanban-Muster t_<hex> entspricht; UUIDs (mit Bindestrichen, nie t_-Prefix)
fallen auf No-op. Verifiziert: t_-ID -> injiziert, UUID/leer/non-t_ -> No-op.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fallstrick #1 behoben: Ops-/Mess-/Verify-Aufgaben landen oft auf `default`
(= Lucys Persona, "nicht technisch, keine Pfade/Versionen") und flailen, weil
sie llama-swap :8080 & Co. nicht kennen. Nur `werkstatt` hatte Box-Wissen.
deploy/agent-hooks/box-steckbrief-inject.sh (neu): pre_llm_call-Hook, haengt
eine kompakte Box-Orientierung ephemer an die User-Message JEDES Kanban-Workers
(egal welches Profil) — aber NUR wenn eine task_id gesetzt ist. Lucys
interaktiver/Voice-Chat hat keine task_id -> sofortiger No-op (7 ms gemessen),
kein Persona- oder Latenz-Eingriff. Inhalt: Identitaet + Modell-Endpunkte
(llama-swap :8080, MC2 :9001/v1, gateway :8642, mem0 :8765) + Tabu-Live-Checkout
+ Zeiger auf den vollen Selbst-Steckbrief und docs/wissen. = der "via Hook/
Wrapper/Guard"-Weg aus der Fallstrick-Karte (Dispatcher-Spawn ist Hermes-intern).
deploy/agent-hooks/pre-verify-gates.sh: der bestehende py_compile/dist-Gate-Hook,
bisher nur manuell auf der Box -> jetzt verbatim im Repo getrackt (ueberlebt
Box-Neuaufbau, schliesst eine Autonomie-Luecke).
deploy.sh synct beide nach ~/.hermes/agent-hooks/ (+chmod). Die Registrierung
in ~/.hermes/config.yaml (hooks: pre_llm_call) bleibt einmalig von Hand
(config.yaml ist Zwei-Schreiber-sensibel).
Verifiziert: Hook-Logik auf der Box gegen synthetische Payloads (Worker ->
987-Zeichen-Kontext injiziert, Lucy/leer -> {}, JSON valide), bash -n + LF sauber.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sackgasse behoben: ein Worker blockte eine Aufgabe mit einer Frage
(kanban block --kind needs_input), aber die Zentrale zeigte nur den
roten Status "haengt - braucht dich" - ohne die Frage und ohne
Eingabefeld. Der Worker blieb so dauerhaft stehen.
Backend (services/ideen.py):
- _blocker_frage(): liest die Worker-Frage aus dem juengsten
blocked-Event (payload.reason/kind), Fallback: BLOCKED:-Kommentar.
- list_queue() reichert blockierte Karten mit frage + frage_kind an
(max 6 Extra-show-Aufrufe pro Poll).
- answer_task(): unblock --reason schreibt die Antwort als Kommentar
und stellt die Karte auf ready -> Dispatcher spawnt den Worker neu,
der die Antwort im Kontext vorfindet. Mit ID-/Laengen-Validierung.
Router: POST /api/ideen/antwort.
Frontend (AuftragsbuchView): blockierte Karten zeigen die Frage
(je nach Grund "Die Box hat eine Frage:" / "kam hier nicht weiter:")
plus Antwortfeld + "Antworten & weiter". Fallback-Text ohne Grund.
Vertraegt sich mit dem Live-Log-Blick (nur triage/running).
Verifiziert: E2E gegen die echte Box-Kanban-CLI (Frage auslesen,
answer_task entsperrt + protokolliert, Fehlerpfade), py_compile +
Frontend-Build gruen, Antwort-UI im Dev-Server gerendert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Die 'Box gesund'-Speicher-Pille zeigte den GTT-Pool (GPU-Sicht auf den
Unified-Memory der APU), die System-Status-Kachel daneben den System-RAM
— zwei verschiedene Zahlen fuer denselben Speicher (z.B. 73/124 vs 90/122).
useLucyHealth: Speicher-Ampel jetzt aus sys.ram (dieselbe Quelle wie die
RAM-Zeile), Schwellen am RAM-Charakter geeicht (warn 85%, full 93%; 4 Modelle
warm ~78% bleibt gruen). CockpitView: Pille auf 1 Nachkommastelle wie gb().
Live verifiziert: beide zeigen jetzt identisch 95.9/122.7 GB.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Fix: 'Interaktives Terminal' im Cockpit führte ins Leere (#terminal) → Konsole
- Mobile: Off-Canvas-Sidebar mit Hamburger unter md, Inhalt volle Breite
(vorher: 240px starre Sidebar, 135px Rest mit Quer-Scroll auf dem Handy)
- Dead Weight raus: src/mc3/ (verworfener Prototyp), DashboardView (alte
Zentrale) + 6 nur dort genutzte Karten, 8 ungenutzte npm-Pakete
(three, three-vrm, react-three fiber/drei, sigma, graphology ×2, @types/three)
- Code-Splitting: alle Views außer Cockpit per React.lazy → Haupt-Bundle
983 → 739 KB, jede View ein eigenes Chunk
- Fonts lokal (@fontsource) statt Google-CDN → UI offline identisch
- Polling harmonisiert: EINE Takt-Tabelle in queries.ts (Graphen 3s, Rest
8-60s), keine Override-Intervalle mehr in Komponenten; Updates-Check
(apt/git!) von 4s auf 60s
- CSS-Hack-Layer aufgelöst: !important-Klassen-Sniffing → explizite
.mc-card/.mc-card-sm/.nav-active-Klassen (Look identisch, ungeschichtete
Regeln statt Utility-Raten); totes .light-Theme raus; Scrollbars 1× definiert
- Aurora: animierte Fullscreen-Blur-Filter → statische radial-gradients
(gleicher Look, keine Dauer-GPU-Last)
- Sicherheit: Sudo-Passwort/HF-Token nur noch bei mutierenden Requests,
nicht mehr auf jedem GET-Poll
- Strg+K statt ⌘K auf Windows; dist neu gebaut
Live gegen die Box verifiziert: alle 10 Views + Mobile-Flow, 0 Konsolen-Fehler.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Portiert vom PC-Skill (F:\Coding Stuff\projekt-start): 4 Phasen mit hartem
Plan-Riegel, Savepoints, AGENTS.md/SAVEPOINT.md/.aiexclude-Ritual und
Kontext-Waechter. Zed-Verweise durch Hermes Desktop ersetzt (Modellwaehler
"Box / Coder (bauen)" / "Box / Planer (denken)", Planer-Kontexthinweis),
.aiexclude-Regel in die AGENTS.md-Vorlage gehoben, Verweis auf den
Werkstatt-Weg fuer Box/Lucy-Wartung ergaenzt. deploy.sh installiert ihn
nach ~/.hermes/skills/projekt-start.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Erstlauf-Befund 12.07.: Karte mit 0 Dateien bekam ANNEHMEN - ein LLM
kann einen leeren Vorschlag nicht pruefen. Jetzt deterministische Regel
vor dem Richter.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Auftrag 12.07. ("bau das alles ein im Sinne der Autonomie. Auch muss
Lucy selbst bemerken wenn sich etwas aendert"):
- deploy/selbst-inventur.sh (Cron 03:35): SELBST-STECKBRIEF wird LIVE aus
der Realitaet GENERIERT (Versionen, Dienste, Timer, Modelle, Crons,
Queue, Karten -> ~/.hermes/state/selbst-steckbrief.md) statt von Hand
gepflegt. Diff gegen gestern => die Box BEMERKT SELBST Aenderungen an
sich (stille Chronik-Karte + kurze Telegram-Zeile; sonst still).
- deploy/karten-gutachter.sh (Cron 04:00): stempelt jede neue Karte mit
"Empfehlung: ANNEHMEN/ABLEHNEN/UNKLAR + ein ehrlicher Satz" (prueft
Redundanz gegen den Steckbrief, Risiko, Nutzen; Ein-Schuss-Richter
gpt-oss/GLM; Stempel = Meinung, kein Gate; neuer Commit entwertet den
alten Stempel). Backend mischt den Stempel in /api/auftragsbuch,
UI zeigt ihn farbig auf der Karte.
- Ablehnen mit Grund (Lern-Klick): UI-Inline-Feld beim Ablehnen ->
/srv/models/mc2-ablehnungen.jsonl -> Idle-Radar bekommt die Gruende
als "NIE wieder vorschlagen"-Material vorgelegt.
- idle-radar-feed.sh: Material + Raster erweitert um Selbst-Steckbrief,
Inventur-Diff und Ablehn-Gruende (Fehlerfall 12.07.: redundanter
Gateway-Restart-Vorschlag waere damit gestorben).
- werkstatt-SOUL Regel 7 + wartung-Skill: REALITAETS-CHECK - existiert es
schon? Dann kanban_block statt Branch (ein Branch fuer Ueberfluessiges
ist ein gescheiterter Lauf).
- hermes-release-radar-feed.sh: echter Treffer legt zusaetzlich EINE rohe
Idee in die Queue (idempotent je Release-Tag) - der Blick nach draussen
fuettert denselben Kreislauf.
- deploy.sh: kopiert beide neuen Skripte; Doku AUFTRAGSBUCH.md +
wissen/OFFENE-FAEDEN.md; frontend/dist frisch gebaut (tsc+vite gruen,
UI gegen Live-Box verifiziert).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Antwort in der Uebergabe-Session: Router/Engine/Hermes duerfen automatisch
(So 04:30, Fangnetz Rollback+Pin) - ersetzt "nur bestaetigt" vom 04.07.
STACK/RUNBOOK/OFFENE-FAEDEN/deploy.sh-Kommentar entsprechend korrigiert;
deploy.sh schaltet den Timer weiterhin NICHT selbst.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Baustein 2-4 des Plans "mehr Hermes nativ, weniger Eigenkreationen":
- deploy/hermes-release-radar-feed.sh: woechentlicher Cron-Feed (Muster chef-gutachter) —
GitHub-Releases seit letztem Stand holen (nur Tags, kein main-Churn), Ein-Schuss-Abgleich
gegen ~/wissens-vault/eigenbau-landkarte.md (Analyst gpt-oss-120b, Vertretung GLM),
Zitat-Pflicht, fremdblick-Gegenpruefung bei Treffern, stiller Briefkasten-Spiegel
(source=release-radar). Informiert nur — Updates bleiben manuell (Entscheid 04.07.).
- deploy/release-radar-prompt.md: versionierter Auftrag fuer den Boten-Agenten.
- deploy.sh: Feed nach ~/.hermes/scripts/ ausrollen.
- Skills wartung+orchestrator: Hermes-first-Leitplanke (vor Neubau nativ pruefen,
Befund in den Vorschlag).
- backup.sh/restore.sh: Nebenbefund geschlossen — ~/.hermes/cron (ALLE Cron-Jobs!) und
~/.hermes/state wurden bisher nicht gesichert; Restore haette sie still verloren.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die /v1/models-Liste zeigte Router-Lanes (coding/chat), Rollen-Aliase und rohe
llama-swap-IDs durcheinander (verwirrte coding-vs-coder im Hermes-Desktop-Waehler).
Jetzt nur noch die Klarnamen-Aliase: Router-Lanes nicht mehr gelistet (Routing
bleibt, /chat/completions nimmt coding/chat weiter an), rohe Doppel-IDs ausgeblendet
wenn ein Alias sie schon zeigt, tote Konstanten LANES/_LANE_LABELS entfernt.
fast/scout/heavy unangetastet (tragend). py_compile gruen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Datenbefund: 336 der 679 Kanten laufen quer zwischen Kategorien und uebermalten
das Quadranten-Clustering komplett; Kantengewichte (0,45-1,0) wurden nie genutzt.
- Querkanten im Ruhezustand ausgeblendet, erscheinen nur am aktiven Knoten
(Hover/Auswahl zeigt ALLE seine Verbindungen, auch schwache/quere)
- Gewichts-Schwelle mit Regler in der Legende (alle <-> stark, Default 0,75,
Live-Zaehler): 679 -> 114 sichtbare Kanten im Standard
- Cluster-Huellen: konvexe, geglaettete, getoente Flaeche + Landkarten-Label
je Kategorie via onRenderFramePre (Monotone-Chain-Hull, pro Frame billig)
- Insel-Physik: Intra-Kanten ziehen nach Gewicht (distance 70), Querkanten
fast gar nicht (strength 0,01, distance 200); Cluster-Kraefte 0,07 -> 0,1
E2E verifiziert (Preview mit gepatchtem rAF): Huellen zeichnen ueber viele
Frames fehlerfrei, Regler 0,45=342/0,95=1 Kanten, Hover+Klick unveraendert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ursache im force-graph-Internals gefunden: die Hit-Erkennung laeuft ueber eine
Schatten-Canvas, die nur alle 800 ms aktualisiert wird (HOVER_CANVAS_THROTTLE_DELAY)
- waehrend Simulation/Zoom/Pan zeigt sie auf Positionen von vor fast einer Sekunde,
und Klicks werden ueber genau dieses veraltete hoverObj ausgeloest. Dazu verschluckt
das eingebaute Node-Dragging Klicks ab 2 px Mausbewegung.
- Eigenes Picking gegen LIVE-Knotenkoordinaten (screen2GraphCoords + Naechster-
Nachbar, Trefferradius min. ~16 Bildschirm-Pixel, zoom-kompensiert)
- enablePointerInteraction=false: Schatten-Canvas wird gar nicht mehr gemalt (Perf)
- enableNodeDrag=false: kein Klick-Verschlucken, kein Layout-Anschubsen beim Klicken
- Pan-Schutz: >6 px Mausweg zaehlt nicht als Klick
E2E im Browser verifiziert: Hover (Cursor), Knoten-Klick oeffnet Detail,
Hintergrund-Klick waehlt ab, Pan aendert Auswahl nicht.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Doppel-Mount behoben: GraphView lief unsichtbar doppelt (Desktop+Mobile), jetzt nur eine Instanz via matchMedia
- ctx.shadowBlur pro Knoten/Frame durch billigen Halo-Kreis ersetzt (Blur nur fuer aktiven Knoten)
- Kantenfarben beim Datenaufbau vorberechnet statt nodes.find() pro Kante pro Frame
- Knoten-Objekte ueber Daten-Updates wiederverwendet: Positionen ueberleben Refetch/Suche, Reheat nur bei Strukturaenderung
- Hit-Zone zoom-kompensiert (min. ~14 Bildschirm-Pixel) - Knoten sind rausgezoomt jetzt klick- und hoverbar
- Suche via useDeferredValue vom Graph-Umbau entkoppelt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Systemblick 09.07. abends fand vier Lücken, drei davon hier (die vierte,
blogwatcher-Cron, ist Box-Config):
1. deploy.sh enablete mc2-autoupdate.timer bei JEDEM Deploy — und hat damit
den User-Entscheid vom 04.07. ("Updates nur bestätigt") über die heutige
Annahme-Kaskade still rückgängig gemacht. Zeile raus, Timer manuell
wieder disabled; wer Auto-Updates will, enabled einmalig von Hand.
2. self-smoke.sh prüft jetzt auch das Desktop-Gateway (:9119 /api/status) —
stirbt hermes-builtin-ui, ist die Desktop-App tot, das muss der
Selbst-Test melden statt der User.
3. backup.sh/restore.sh sichern die neue Infrastruktur mit: agent-hooks/
(pre_verify-Gates), shell-hooks-allowlist.json, desktop-gateway-token,
pc-paths.yaml und den systemd-Token-Drop-in (mit chmod 600 + +x beim
Restore). Vorher hätte ein Restore Desktop-Verbindung und Gates STILL
verloren. bash -n auf allen vier Skripten grün.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Konsequenz aus dem Zed-Aus: Der Tab führte alle Anbindungen gleichrangig,
obwohl der rohe /v1-Zugang am PC kaum noch reale Nutzer hat. Neu:
- "Hermes Desktop anbinden" als prominente eigene Karte (Anleitung + Status).
- Kilo Code / Claude Code / Gedächtnis-MCP in den zugeklappten Ausklapper
"Sonstige Tools (roher /v1-Zugang + Gedächtnis-MCP)" — alles weiter da,
nur nicht mehr im Vordergrund. Drei-Leitungen-Hero bleibt.
- Header-Text entsprechend.
Browser-verifiziert gegen die Box (Karte, Ausklapper zu/auf, Leitungen grün);
tsc + Build grün, dist mit-committet, package-lock unangetastet.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1. "Auf der Box gibt es KEIN Node" war FALSCH — zwei Läufe haben dort gebaut.
Neu: im Worktree bauen + dist mit-committen (AGENTS.md-Pflicht), danach
package-lock.json zurücksetzen, wenn npm install es nur als Nebeneffekt
anfasste (3 Läufe in Folge hatten lockfile-Dreck).
2. Schreibziel-Pflicht: jedes write_file/patch-Ziel muss unter /tmp/orch-<slug>/
liegen; nie in den Live-Checkout, nie fremde Slug-Verzeichnisse recyceln
(Doku-Lauf schrieb in ~/mission-control-v2, weil das alte Work-Dir
wiederverwendet wurde).
3. Grosse Artefakte nie im Klartext in die Antwort — der Doku-Lauf starb am
Output-Limit vor Kritiker-Gate und Vorschlag. Antwort = Pfade + Kurzfassung.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Übernimmt den unproponierten Entwurf aus /tmp/orch-pc-pfad-cache (Users
Orchestrator-Läufe 09.07. früh) mit einem konstruktiven Fix: der Entwurf rief
pc_shell als Shell-Befehl auf — das ist aber ein Agent-Tool, kein Binary, der
Fallback konnte nie funktionieren (der untracked .py-Rest war ein angefangener
Reparaturversuch via MCP-stdio, unnötig kompliziert). Neues Design:
pc_path_lookup.sh = reiner YAML-Cache (lookup/merken/liste, exit 3 = Miss);
die PC-Suche bei Cache-Miss macht der Agent selbst mit seinem pc_shell-TOOL
und merkt den Fund. SKILL.md im Hausstandard, deploy.sh installiert Skill +
Skript. Getestet auf der Box: merken/lookup-Roundtrip inkl. Umlaut-
Normalisierung (Ä→ae, dabei tr-Umlaut-Falle gefixt), Miss=exit 3, bash -n grün.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- BEDIENUNG.md: Bereichs-Liste auf die echten 10 Sidebar-Tabs gebracht
(Auftragsbuch/Wissen/Chronik/Konsole fehlten komplett), Verbinden-Abschnitt
auf Hermes Desktop/Kilo/Claude Code umgestellt (Zed/Roo abgeschafft),
Verweis "Arbeiten = Desktop-App, MC2 = Maschinenraum".
- DISASTER_RECOVERY.md: hermes-terminal-Zeile durch Desktop-Gateway
(hermes-builtin-ui) + Token-Drop-in + Token-Kopie ersetzt (übernimmt die
gerettete Orchestrator-Änderung), nesquena-WebUI-Zeile durch
Hermes-Desktop-Eintrag (PC) ersetzt, Wizard-Checkliste angepasst.
- HERMES_SETUP.md: §3 (nesquena-webui-Install, obsolet) durch "Hermes
Desktop (PC) anbinden" ersetzt: Token-Drop-in auf der Box,
connection.json am PC, MC2-Proxy-URL, cli-Toolset-Hinweis.
Hintergrund: Der Orchestrator-Lauf zu diesem Auftrag delegierte erstmals
echt (worker.sh plan/build), scheiterte aber an falschem Schreibziel
(Live-Checkout statt Worktree) + Output-Limit — Rest von Hand zu Ende
geführt, gerettete Änderung übernommen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Vorfall 09.07.2026 (Session 20260709_090725_9eebf3): Der Manager übersprang
Planung, Delegation UND das Zwei-Kritiker-Gate mit der Ansage "Overkill für
so einen kleinen Task" und baute selbst — transparent, aber ein Bruch des
Pflicht-Gates (ein Agent, der sein eigenes Werk durchwinkt). Neue Leitplanke:
kein Ermessensspielraum; der einzige erlaubte Ausweg bei zu kleinen Aufträgen
ist Abbruch ohne Code mit Verweis auf Werkstatt/Desktop. Code-liefernde Läufe
enthalten IMMER worker.sh-Belege und beide Kritiker-Verdikte.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Der Dienst ist seit der MC2-Diät stillgelegt (deploy.sh disable --now +
Unit-Löschung, auf der Box verifiziert inactive). Die Repo-Datei blieb nur
einen Deploy-Zyklus als Schutz gegen die deploy.sh-Selbst-Reset-Falle
(das alte deploy.sh kopierte sie noch beim Annahme-Deploy). Der Zyklus ist
durch — die Datei kann weg.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Der nächtliche Traum beschreibt Skill-Kandidaten künftig gleich als
SKILL.md-Gerüst (Frontmatter name/description<=60/version + Wann nutzen /
Schritte mit echten Hermes-Tools / Belege) statt als Freitext — die
Werkstatt übernimmt beim "Beauftragen" ein fertiges Gerüst. Propose-only
bleibt unverändert (kein skill_manage im Traum, Fremdblick-Gate davor).
Schließt das offene Traum-Increment "echte Skill-Extraktion" ab, indem es
den /learn-Autorenstandard von Hermes v0.18 in den Kreislauf holt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
dist-Konflikt (Hash-Assets beider Builds) durch frischen Build aufgelöst —
damit sind BEIDE Auftragsbuch-Karten in beliebiger Reihenfolge Ein-Klick-fähig
(role-metadata zuerst = sauber; diaet enthält die Rollen-Texte mit).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Der "Hermes GUI"-Tab (iframe auf /hermes-ui/) und das Hermes-Terminal-ttyd
(:7681) entfallen — die Agent-Oberfläche ist jetzt die Hermes-Desktop-App,
die über den BESTEHENDEN MC2-Proxy /hermes-ui/ (WS inklusive) an die Box
andockt. hermes-builtin-ui (:9119) bleibt als Desktop-Gateway erhalten und
wird im Dienste-Drawer + /api/system/services erstklassig geführt (statt
hermes-terminal); Wartungs-Allowlist kann ihn jetzt neu starten.
- Frontend: Tab/View raus (nav.ts, App.tsx, TerminalView.tsx gelöscht),
AgentView + (Legacy-)AgentStatusCard zeigen Desktop-Gateway statt ttyd,
Dienste-Zeile hermes-terminal → hermes-builtin-ui, Versions-Zeile
"Hermes UI" (nesquena-Karteileiche ~/hermes-webui) entfernt.
- Backend: terminal_url/terminal_reachable + HERMES_TERMINAL_* raus,
console.py proxyt nur noch die Box-Konsole, /api/system/services führt
hermes-builtin-ui, USER_SERVICES getauscht, hermes-webui-GitInfo raus.
- deploy.sh: legt hermes-terminal + hermes-webui idempotent still
(disable --now + Unit-Löschung). deploy/hermes-terminal.service bleibt
EINEN Zyklus im Repo (das laufende alte deploy.sh kopiert es noch —
Selbst-Reset-Falle); Aufräum-Commit folgt nach dem nächsten Deploy.
- frontend/dist mit-committet (Box baut nicht selbst).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fmtSnap kannte nur Zeitstempel mit Trennzeichen (2026-07-08T...), backup.sh
schreibt aber kompakt (20260708-181136) — Datum erschien roh. Regex tolerant
gemacht. Dazu docs/AUFTRAGSBUCH.md (Funktionsweise + Leitplanken); dieser Branch
ist zugleich die erste echte E2E-Annahme-Probe des Auftragsbuchs.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Neue Views: Auftragsbuch (Karten mit Diff/Kritiker-Kontext, Annehmen/Ablehnen mit
Fangnetz-Dialog), Chronik (Tages-Timeline aus dem Briefkasten + Zeitmaschine mit
Ein-Klick-Restore), Wissen (Vault als klickbares Wiki, [[Links]] springen).
Cockpit: Auftragsbuch-Kachel + Braucht-dich-Eintrag, Morgenlage-Karte (juengstes
Chef-Verdikt), Anstehendes (Erinnerungen anlegen/loeschen), Wissen/Chronik-Kacheln.
Gedaechtnis: Dubletten-Dialog zeigt jetzt konkret, was bleibt und was wegfaellt.
dist mitgebaut (tsc+vite gruen).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Der letzte Meter des propose-only-Kreislaufs: Vorschlags-Branches (Werkstatt/
Orchestrator) und Traum-Skill-Kandidaten werden als API sichtbar; Annehmen laeuft
als detached systemd-Unit (Merge im Worktree -> Push main -> Deploy -> Health ->
Auto-Revert bei Rot). Dazu: Chronik-Endpoint (Announce-Store als Timeline),
Wissens-Vault-Reader (read-only, Traversal-Guard), Zeitmaschine (Snapshots +
detached Restore) und Morgenlage-Spiegel im Chef-Gutachter-Feed (priority=silent).
python-multipart explizit in requirements (voice braucht es, war implizit).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die requirements sind teils ungepinnt — bei einer Neuinstallation sagt
known-good/, welche Versionen nachweislich zusammen liefen: pip freeze je
venv (backend/mem0/voice), llama.cpp+llama-swap-Version, MC2+Hermes-Git-
Staende, OS/Kernel, GGUF-Bestand. Best-effort, restore.sh unberuehrt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Befund 08.07.: 'hermes update' scheiterte real an einem verwaisten
.git/index.lock (git stash exit 1), aber der Job wurde GRUEN — das ';'
vor dem Dienst-Neustart (noetig, damit die gestoppte UI auch im
Fehlerfall wieder hochkommt) schluckte den Update-Fehler, und der
Postcheck bestand mit dem ALTEN Agenten. User sah 'done', Badge blieb
(125 Commits Rueckstand). Neu: RC wird festgehalten, Dienste starten
IMMER wieder, aber der Job uebernimmt den echten Update-RC und
schreibt eine Klartext-Zeile ins Log. Lock auf der Box entfernt
(Verwaisung von gestern 21:22, wie beim MC2-Repo).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Neuer POST /api/maintenance/update-all kettet die AUSSTEHENDEN Updates
sequenziell (Engine -> Router -> Hermes -> OS) in einem maintenance-Job.
Bewusst reine Wiederverwendung: jeder Teil ist exakt der Befehl des
Einzel-Updates inkl. dessen Backup/Postcheck/Selbst-Rollback; &&-Kette
stoppt beim ersten Fehler, Banner-Zeilen im Log zeigen den Schritt.
OS zuletzt (breitester Eingriff, braucht als einziges das Box-Passwort;
fehlt es, laufen die sudo-freien Teile trotzdem und OS wird uebersprungen).
Hermes-Befehlskette in _hermes_update_cmd() extrahiert (DRY).
UI (SystemDrawer/Updates): Button 'Alle aktualisieren (N)' neben der
Update-Suche, nur sichtbar wenn etwas aussteht, gesperrt waehrend ein
Wartungs-Job laeuft, mit Bestaetigungs-Dialog der die Kette benennt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
(1) useLucyHealth: ruhende Augen sind seit der Warm-Set-Diaet 07.07. der
NORMALZUSTAND (vision on-demand, Lucy waermt selbst) -> kein Dauer-warn
mehr im Cockpit ('Kleinigkeit an der Box' ohne Grund). Geladen = 'sieht
gerade zu', ruhend = ok mit ehrlicher Erklaerung + Weck-Knopf.
(2) Cockpit-Statuszeile SAGT jetzt, was der Hinweis ist (erster warn-Check
mit Label+Detail statt generischem 'Nichts Schlimmes — nur ein Hinweis';
User-Feedback 08.07.). useLucyHealth exportiert dafuer die warns-Liste.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die zwei neuen Rollen aus dem Rollen-Audit tauchen jetzt ueberall
ordentlich auf statt als namenlose Eintraege:
- ROLE_IDS (llamaswap + sources) um kritiker/reranker erweitert
- roleMeta.ts: 'Kritiker' (Scale, cyan — die unbestechliche Zweitmeinung)
+ 'Gedaechtnis-Sortierer' (ListOrdered, lime — Feinsortierung hinter
dem Gedaechtnis, direkt nach embed einsortiert)
- werkbank/roleColors.ts: Speicherleisten-Farben passend dazu
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ergebnis des Rollen-Audits 07.07. (User: 'das beste, aber sinnvollste'):
(1) KRITIKER: fremdblick-Prosa + Chef-Gutachter-Vertretung liefen auf der
9B-Vision-GLM, obwohl es reine Text-Jobs sind. Neu: GLM-4.7-Flash
(30B-A3B, MIT, Unsloth UD-Q4_K_XL, 17,5 GB, on-demand ttl 600, Alias
'kritiker'). Gleicher Fremd-Vendor wie bisher -> die 'andere Brille'
des Kritiker-Konzepts bleibt. 4.6V-Flash bleibt scout (Bild-Jobs).
(2) RERANKER (die eine echte Rollen-Luecke): Mem0-Suche war reine
Vektor-Aehnlichkeit. Neu: Qwen3-Reranker-0.6B (q8_0, Mungert-GGUF —
Community-Konvertierungen liefern bekannt Nullscores) via llama-swap
/v1/rerank ordnet die Top-20 Kandidaten nach echter Relevanz um.
NUR die Reihenfolge aendert sich: score bleibt Vektor-Score (Hermes-
Plugin-Filter RECALL_MIN_SCORE bleibt kalibriert), rerank_score kommt
als neues Feld dazu; jeder Fehler -> lautlos Vektor-Reihenfolge.
Env: MC_RERANK_ENABLED/_URL/_MODEL/_TIMEOUT/_CANDIDATES. In brains
(verdraengungssicher, ~0,7 GB).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Entscheid 07.07.: 'Gehirn + Embedding reichen komplett aus' — die Augen
(VL-30B, ~19 GB) werden nur gebraucht, wenn Lucy auf dem Desktop an ist oder
die IDE-Lane sie ruft. Warm-Set = nur noch Qwen3.6 + embed; damit passt der
60-GB-Chef-Gutachter (gpt-oss) wieder neben das Hirn.
- llama-swap.config.yaml: VL-30B aus brains raus, ttl 0 -> 900 (15 min
Nachlauf); Kommentare entstaubt. AUSSERDEM Template<->Live-Drift beendet:
Template hatte coder-lite wiederbelebt (live seit 05.07. entfernt) und
KV q4_k (lief NIE live) — beides auf Live-Wahrheit (q8_0, kein coder-lite)
zurueckgesetzt; Qualitaet vor ein paar GB, RAM-Engpass ist mit der Diaet weg.
- warmup.sh: Default 'fast vision' -> 'fast' (Root-Kopie unter
/usr/local/bin braucht spaeter einmal sudo cp — bis dahin waermt ein
llama-swap-Restart vision einmalig, ttl 900 raeumt es wieder ab)
- warmer.py: Docstring auf neues Warm-Set angepasst
- Lucy-Seite (eigenes Repo): App waermt die Augen beim Start + alle 10 min,
solange sie laeuft — Augen-Lebenszyklus == Lucy-Lebenszyklus
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Idee 06.07.: das grosse Modell NICHT im heissen Pfad, sondern als
naechtlicher Gutachter (04:30) — Kaltladen ist dann egal, Lucy bleibt
tagsueber schnell. Feed sammelt 24h-Beweise (Vorschlags-Branches, main-
Commits, Vault-Notizen, Journal-Warnungen, Insights), der Richter laeuft
als Ein-Schuss-Completion gegen llama-swap (fremdblick-Architektur).
Richter-Kette: gpt-oss-120b -> GLM-4.6V-Flash als gekennzeichnete
Vertretung (gpt-oss wirft neben dem Warm-Set weiterhin 'exited
prematurely', E2E 07.07. verifiziert). Bote = Cron-Agent mit striktem
Treu-Wiedergeben-Mandat (chef-gutachter-prompt.md), Ausfall wird ehrlich
gemeldet statt verschwiegen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
(1) /v1/models meldet jetzt den ECHTEN Kontext pro Slot: --parallel teilt
den Server-Kontext hart auf (131072 / 2 Slots = 65536). Vorher budgetierte
Hermes gegen 131k -> Kompaktierung feuerte nie, llama-server kappte bei
~52k-Sessions Prompt/Antwort -> abgerissene Tool-Calls, Retry-Schleifen,
gefuehlte Abstuerze (journalctl 07.07 17:11, 152 msgs / ~51.700 Tokens).
Dazu auf der Box: context.engine 'default' (existiert nicht, warnte jeden
Turn) -> 'compressor' (der echte eingebaute Name).
(2) Cockpit: neue Sektion 'Leistung' mit den drei bestehenden Live-Karten
(System-Status, Token-Durchsatz, Latenz je Turn) — waren nach UI v3 nur
noch in der alten Zentrale, User will sie auf der Startseite. Browser-
verifiziert gegen die Box (rendert live, keine Konsolen-Fehler).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>