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>
Drittes Gate nach merge-base + rebase: git ls-remote origin <branch> muss den Branch zeigen, sonst kanban_block statt kanban_complete. Behebt Schein-Erfolg (13.07.2026: Worker meldete gepusht+done, Branch war nie auf Gitea).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Persistenz-Datei ANNOUNCE_BRANCHES_PATH (mc2-announce-branches.json) für gemeldete Branches
- list_proposals() pingt NEUE Branches per notify_telegram() und announce.add()
- Idempotenz: nur EINMAL pro Branch, bei jedem Poll nur wirklich NEUE melden
- notify_telegram ist best-effort/posix (Windows-Dev = No-op), in try/except gekapselt
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>
Anlass: feature/cleanse-skill-index — ein Werkstatt-Worker hatte git init statt
Klonen gemacht (Orphan-Commit ohne gemeinsamen Vorfahren, Inhalt: ~/.hermes-Index-
Dateien statt Repo-Dateien). Solche Karten sahen aus wie normale Vorschlaege,
liefen bei Annahme aber IMMER in 'refusing to merge unrelated histories' — und
die Fehlermeldung ('bitte am PC aufloesen') war eine Sackgasse. Das passiert
oefter; darum drei Schichten dagegen:
1) ERKENNEN (Auftragsbuch): neue Karten-Flags 'verwaist' (kein merge-base mit
main -> rote Markierung 'kein gemeinsamer Ursprung', Annehmen-Knopf fehlt,
API+Runner halten zusaetzlich dicht) und 'leer' (Diff gegen main leer ->
'bringt nichts'-Badge). Empfehlung auf der Karte: ablehnen mit Grund,
Idee frisch in die Queue.
2) HEILEN (beide Runner, mc2 + lucy): kollidiert der Merge, weil main weiter-
gelaufen ist, versucht der Runner automatisch einen Rebase des Branches auf
main (isolierter Worktree; Gates laufen danach normal, Merge-Message sagt
'auto-rebased'). Nur wenn auch der Rebase kollidiert, faellt die Karte durch —
mit ehrlicher Meldung statt 'am PC aufloesen'.
3) VERHINDERN (werkstatt-SOUL): voll klonen (nie git init/--depth), Selbstcheck
'git merge-base HEAD origin/main' + fetch/rebase vor JEDEM Push, nie
~/.hermes-Artefakte committen.
Doku: AUFTRAGSBUCH.md + FALLEN.md (Erkennungsmuster: Diff 0 Dateien + behind ~
ganze Historie) + OFFENE-FAEDEN. Geprueft: py_compile gruen, bash -n beide
Runner gruen, tsc+vite build gruen (dist dabei); merge-base-Verhalten am echten
kaputten Branch auf der Box verifiziert.
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>