Commit Graph

120 Commits

Author SHA1 Message Date
Hitonabi d68ee60182 Chef-Gutachter-Cron (Orchestrator-Finale): gpt-oss urteilt naechtlich ueber die autonome Arbeit
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>
2026-07-07 21:26:24 +02:00
Hitonabi 092dcc2ada fix(hermes-ui): switch from headless 'hermes serve' to 'hermes dashboard --no-open' 2026-07-07 17:27:49 +02:00
Hitonabi 6f77dbb9d9 chore(config): remove missing Qwen3.5-122B and Qwen3-VL-8B, promote gpt-oss-120b 2026-07-07 17:18:31 +02:00
Hitonabi edf1614e66 feat(perf): Optimize KV-Cache to Q4_K and fix Hermes Context bounds 2026-07-07 17:11:50 +02:00
root 97be0f1d00 feat: lower memory dedupe threshold for more aggressive cleaning 2026-07-07 16:45:30 +02:00
Hitonabi c92f238d2d refactor: architektur-optimierungen (systemd, jq, httpx, commit-hook) 2026-07-06 20:38:18 +02:00
Hitonabi 3fba487963 feat: orchestrator skill nutzt gpt-oss-120b zur initialen planung 2026-07-06 20:28:45 +02:00
Hitonabi b95530ee70 fix: absolute imports and type annotations in app.py
- replace implicit relative imports with absolute ones (from backend.*)
- add type hints for lifespan tasks list and middleware
- fix unused bool return value in task.cancel() call
2026-07-06 20:06:40 +02:00
Hitonabi 3a6e3c5432 Hermes-GUI: eingebaute hermes serve-Weboberflaeche same-origin in MC2 einbetten (ersetzt CLI-Terminal-Tab)
Statt des ttyd-CLI-Terminals zeigt der Tab jetzt die reiche eingebaute Hermes-Web-GUI
(hermes serve/dashboard: Threads, sichtbare Tool-Calls, Sessions, Config) - same-origin,
ohne offenen Port, ohne Login (Loopback :9119 = LAN-Trust wie Terminal/Konsole).

- backend/routers/hermes_ui.py: generischer Reverse-Proxy /hermes-ui/* (alle Methoden + beliebige
  WebSockets) -> 127.0.0.1:9119; injiziert window.__HERMES_BASE_PATH__=/hermes-ui in die index.html,
  damit die SPA ihre API/WS-Calls unter dem Praefix absetzt (sonst Kollision mit MC2s /api).
- deploy/hermes-builtin-ui.service: hermes serve --skip-build auf Loopback :9119.
- deploy/deploy.sh: baut das GUI-Bundle mit Vite-base=/hermes-ui/ (Temp->Swap, ueberlebt Hermes-
  Updates) + installiert/startet den Dienst.
- backend/app.py + config.py + services/agent.py: Router registriert, Upstream/Pfad + Status-Feld.
- frontend: Terminal-Tab -> "Hermes GUI" (TerminalView iframe /hermes-ui/, nav-Label, vite-Dev-Proxy).

E2E im Browser verifiziert: GUI rendert eingebettet, /hermes-ui/api/* liefern echte Daten
(289 Sessions, verbundene Plattformen), Assets + Plugins laden, Basis-Pfad korrekt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:48:12 +02:00
Hitonabi 42f0497253 Engine-Update-Fix: neueste Release MIT Vulkan-Asset waehlen (404 vermeiden)
Ursache des fehlgeschlagenen Engine-Updates: die allerneueste llama.cpp-Release traegt
oft noch KEINE CI-Binaries (0 Assets). update-engine.sh lud aber stur von releases/latest
→ 404 „Download fehlgeschlagen".

Fix:
- update-engine.sh: nimmt die neueste Release, die wirklich ein ubuntu-vulkan-x64.tar.gz
  traegt, und nutzt dessen echte browser_download_url (robust gegen Namensaenderungen).
- maintenance.py: _engine_update_available + engine_update_details pruefen jetzt ebenfalls
  gegen die neueste ASSET-tragende Release → das Badge luegt nicht mehr („verfuegbar", aber
  Download 404). Verifiziert: aufgeloeste URL liefert HTTP 200.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 21:52:41 +02:00
Hitonabi eff23643e6 Hermes-Terminal same-origin + Passwort-Login; Engine/OS-Update-Fixes
Terminals (wie die Box-Konsole):
- hermes-terminal bindet jetzt NUR Loopback (--interface lo --base-path /hermes-terminal)
  und wird von MC2 same-origin durchgereicht (routers/console.py generalisiert auf beide
  ttyd-Instanzen). Kein eigener Firewall-Port mehr noetig.
- Beide Terminals starten die Shell/CLI ueber `su - hitonabi` → fragen beim Oeffnen das
  Box-Passwort ab (PAM gegen das echte Konto, nichts gespeichert). „Login mit sudo-PW".
- agent_status.terminal_url = /hermes-terminal/ (+ reachable via Loopback-Check).

Engine-Update (llama.cpp) — Fix „nicht moeglich":
- update-engine.sh/update-swap.sh sind per sudoers NOPASSWD freigegeben → das fruehere
  `sudo true`-Passwort-Gate hat sie faelschlich blockiert (wenn kein/falsches Box-PW). Gate
  entfernt → Engine-/Router-Update laufen jetzt passwortlos.

OS-Update (apt) — Fix „nicht moeglich":
- DEBIAN_FRONTEND wird jetzt INNERHALB `sudo bash -c '…'` gesetzt statt `sudo VAR=… cmd`
  (sonst lehnt sudos env-Policy die Variable ab und das Upgrade bricht ab).
- Frontend verschluckt password_required/incorrect_password nicht mehr still, sondern zeigt
  einen klaren Hinweis (Box-Passwort in „Box-Zugang" setzen/pruefen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 21:18:55 +02:00
Hitonabi 00fc7d6d81 Box-Konsole hinter MC2-Reverse-Proxy (kein Firewall-Port noetig)
Problem: ttyd auf :7682 war von aussen per ufw geblockt (nur 7681/9001 offen), also
im Browser Timeout — und ufw oeffnen braucht sudo, das MC2 hier nicht passwortlos hat.

Fix: ttyd bindet jetzt NUR an Loopback (--interface lo, --base-path /console) und wird
von MC2 ueber den ohnehin offenen Port 9001 same-origin durchgereicht:
- routers/console.py: HTTP-Passthrough (index/token) + WebSocket-Bridge (tty-Subprotokoll
  auf beiden Seiten) → /console/ + /console/ws.
- app.py: console.router VOR dem SPA-Catch-all eingehaengt.
- config: BOX_CONSOLE_UPSTREAM (127.0.0.1:7682) + BOX_CONSOLE_PATH (/console/);
  agent_status liefert box_console_url=/console/ + reachable=Upstream-Check.
- deploy/box-console.service: --interface lo --base-path /console.
- vite: /console (ws:true) fuer die Dev-Vorschau geproxyt.

Kein Firewall-/sudo-Eingriff noetig; Konsole laeuft same-origin zum Dashboard.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 20:58:40 +02:00
Hitonabi 18afa37412 UI v3: Cockpit-Startseite + Modelle-Werkbank als Default, neue Box-Konsole
Kompletter Frontend-Umbau auf das abgenommene v3-Konzept, dazu zwei neue Funktionen.

Frontend (Neuordnung bestehender IST-Views, kein Backend-Umbau):
- Cockpit ist die neue Startseite: ruhige Bereichs-Kacheln (je 1 Live-Zahl +
  Status-Punkt), ehrliche Status-Zeile "Box gesund" + Speicher-Pille, "Braucht dich"
  (kritische Probleme mit 1-Klick-Reparatur + bereitliegende Updates).
- Modelle-Werkbank: Maschinenraum-Speicherleiste als Hero (Arbeitsspeicher-Balken,
  nach Rolle eingefaerbt + frei), darunter Master/Detail. Eingebettet als Haupt-Tab
  im Modell-Manager ("Werkbank"), "Modelle finden" + JobsBar bleiben.
- Sidebar/Nav neu strukturiert; alle Aktionen ueber die bestehenden /api-Endpoints.

Neue Features:
- Box-Konsole: zweites ttyd-Web-Terminal mit echter Login-Shell auf :7682 (direkter,
  SSH-artiger Box-Zugriff, kein Passwort — gleiches LAN-Trust-Modell wie hermes-terminal).
  Neuer Dienst deploy/box-console.service + agent_status-Felder box_console_url/-reachable.
- Box-Zugang: das Host-Sudo-Passwort laesst sich jetzt direkt in der Konsole-Seite
  setzen/aendern/loeschen (lokal im Browser), statt nur versteckt im System-Drawer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 20:41:19 +02:00
Hitonabi 854393ce5f Werkstatt-Reviewer: Fremd-Kritik ueber fremdblick.sh statt kaputter heavy-Delegation
Das in Haertung 1b eingefuehrte Fremd-Modell-Review delegierte per delegation.model
an heavy (gpt-oss) — das aber als Kritiker DOPPELT disqualifiziert ist: Hermes'
MINIMUM_CONTEXT_LENGTH=64000 screent den 32k-heavy als delegate_task-Ziel raus, UND
heavy (60 GB) stirbt beim Laden neben dem VL-30B-Warmset (Health-Check-Timeout).
Die Fremd-Pruefung konnte damit im Werkstatt-Alltag STILL ausfallen (Durchwink-Gefahr,
genau das, was 1b verhindern sollte).

- deploy/skills/wartung/SKILL.md Schritt 4: statt delegate_task nun
  `FREMDBLICK_MODE=code fremdblick.sh` (Qwen3-Coder-Next, 128k, anderes Modell als der
  Qwen3.6-Worker, laedt klein). REPRODUZIERT-ODER-ABGELEHNT bleibt (im Raster verankert),
  3-Wege-Urteil ABGELEHNT/FREIGABE-MIT-VORBEHALT/FREIGABE, Fallback bei Ausfall = UNGEPRUEFT.
- deploy/fremdblick.sh: FREMDBLICK_MODE=code (Code-Review-Raster + Coder-Next) neben dem
  Default prose-Raster (Dreaming, unveraendert).

E2E gegen die Box verifiziert: kaputter Patch (falsche Bedingung) -> ABGELEHNT mit
konkreter Reproduktion; sauberer Fix (Leerlisten-Guard) -> FREIGABE. Kritiker diskriminiert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 17:00:32 +02:00
Hitonabi f6029e25fc Dreaming (Phase 2): naechtlicher Traum-Cron + Wissens-Vault + Fremdblick-Helfer
Der Continual-Learning-Kreislauf als Capstone: idle-Zeit -> Session-Review ->
navigierbare Markdown-Notizen (Wissens-Vault, eigenes git-Repo) -> Vorschlag mit
Fremd-Modell-Kritiker, Mensch als Gate.

- deploy/dreaming-prompt.md: versionierter Traum-Auftrag. Reflektieren (insights/
  sessions/journey/curator) -> Notizen entwerfen -> Fremdblick PFLICHT-GATE (wartet
  auf Urteil) -> bereinigen+INDEX -> committen -> zuletzt berichten (Lucys Stimme).
  Propose-only: einziger Schreib-Ort ist der Vault; alles andere = Vorschlag.
- deploy/dreaming-feed.sh: bootstrappt ~/wissens-vault (idempotent) + sammelt
  Schlaf-Daten. INDEX zwischen Markern (kein Feed-Bleed in die Datei).
- deploy/fremdblick.sh: Ein-Schuss-Zweitmeinung von einem ANDEREN Modell
  (GLM-4.6V-Flash, anderer Vendor). Umgeht Hermes' 64K-Delegations-Floor UND das
  60-GB-Ladeproblem von gpt-oss/heavy (kollidiert mit VL-30B-Warm-Set).
- deploy.sh: kopiert feed + fremdblick nach ~/.hermes/scripts (chmod +x).

E2E gegen die Box verifiziert (cron-Kontext): Kritiker gatet + diskriminiert
(2 Overclaims als TRAEGT-NICHT abgelehnt, Zahlen korrigiert), Vault sauber
committed, Warm-Set unberuehrt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 16:41:59 +02:00
Hitonabi 51552ae836 Haertung 1b: Fremd-Modell-Kritiker erzwingen + Anti-Durchwink-Regel
Gesellenpruefungs-Lehre (03.07.): Reviewer winkte kaputten Patch durch.
- wartung/SKILL.md Reviewer-Schritt: FREMD-MODELL-PFLICHT explizit
  (Worker=hermes/Qwen3.6-35B != Reviewer=heavy/gpt-oss-120b via
  delegation.model; per-Aufruf-Modell gibt delegate_task nicht her ->
  Trennung aktiv pruefen, sonst als offene Kritik ausweisen), eigenes
  Raster statt Autor-Erzaehlung, harte Regel REPRODUZIERT-ODER-ABGELEHNT
  (Freispruch nur mit belegtem Vorher/Nachher, sonst = Kritik).
- selbstkritik-prompt.md: Fremdblick vor dem Absenden (delegierte
  Kritiker-Runde auf anderem Modell zerpflueckt Belege).

Akzeptanz verifiziert gegen die Box: bewusst kaputter Patch (Kommentar
behauptet Fix, Logik fixt nicht) -> gpt-oss-120b ABGELEHNT mit konkreter
Reproduktion. Kein Deploy in diesem Commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:36:22 +02:00
Hitonabi ab63b05b9c Repo-Schnappschuss: VL-30B ttl 300->0 (Warm-Set-Drift schliessen)
Live war VL-30B (Augen) schon auf ttl:0 gesetzt, der Repo-Schnappschuss
deploy/llama-swap.config.yaml stand aber noch auf ttl:300 -> bei einer
Neu-Provisionierung aus dem Repo waere der Warm-Set-Auskuehl-Bug
zurueckgekommen (persistent schuetzt nicht gegen ttl-Selbstentladen).
Kommentar auf den Live-Stand (Augen/vision, brains-Mitglied) aktualisiert.
Reiner Snapshot-Fix, kein Live-Effekt (Deploy fasst llama-swap-Config nicht an).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 00:19:10 +02:00
Hitonabi 5ee3f8f73d D16d-Fix: volles Warm-Set nachwärmen statt nur das Hirn
Auto-Rewarm (Nudge + Idle-Tick) lädt jetzt das GANZE Warm-Set über
deploy/warmup.sh nach (fast+vision via chat, embed via /v1/embeddings,
Agent-Prompt-Prefill) statt nur einen Brain-Ping. Erkennt TEIL-Kälte
(Mitglied fehlt in /running), nicht nur den komplett leeren Zustand —
genau der Fall nach einem watch-config-Reload/Deploy (Augen+Gedächtnis
fielen raus, Hirn blieb warm). deploy.sh ruft am Ende warmup.sh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 19:57:31 +02:00
Hitonabi 612ce127fa Autonomie 0d+0g: Lucy-Alarm-Weg, taegliche Selbst-Smokes, Selbstreparatur nach rotem Update
- /api/alarm: Lucy-unabhaengiger Telegram-Weg (fuer den PC-Lucy-Watchdog, wenn die App haengt).
- self-smoke.sh + mc2-selfsmoke.timer (taeglich 07:15): Gateway/Tools/Voice aktiv durchspielen,
  Meldung nur bei Rot. Ergaenzt den passiven Health-Waechter um echte Funktion.
- self-repair.sh + autoupdate.sh: bei rotem Hermes-Update zieht die Box Config-Brueche selbst
  (nur eindeutige, nicht-sicherheitsrelevante Keys; Backup -> YAML-Check -> Gehirn-Check, sonst
  zurueck). Greift es nicht, haengt eine LLM-Diagnose an die Rollback-Meldung.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 19:27:31 +02:00
Hitonabi 357285e798 C12: Off-Box-Backup-Spiegel auf den Proxmox-Host (rsync)
backup.sh spiegelt nach dem lokalen Tarball die Backups per rsync aufs
Proxmox (root@192.168.178.108:/var/lib/vz/mc2-backups) -- Retention via
--delete mitgezogen, chmod 600 erhalten, best-effort (Fehlschlag = lokal
gilt trotzdem). restore.sh kennt den Spiegel: --list zeigt Off-Box,
--pull-offsite holt alles zurueck, und fehlt ein Backup lokal, wird es
automatisch vom Proxmox gezogen (Platte-tot-Fall). Nebenbei latenten
Abbruch in list_backups bei leerem Ordner gefixt (set -e + leeres Glob).
Auth: dedizierter, gehaerteter Key ~/.ssh/mc2_offsite. Live E2E verifiziert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 19:26:04 +02:00
Hitonabi b21794a750 Werkstatt haerten (0k): Reviewer muss Fehlerfall nachstellen, Gate prueft Live-Checkout
Zwei Befunde aus der Gesellenpruefung (03.07.):
- Reviewer-Subagent war zu milde -> Skill fordert jetzt: konkreten Fehlerfall
  nachstellen + aktiv nach Versagen suchen, Urteil konkret ausschreiben.
- "Live unberuehrt" war nur curl-geprueft -> Gate verlangt jetzt zusaetzlich
  git status --porcelain -uno == leer im Live-Checkout.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 19:04:57 +02:00
Hitonabi a682e3c4e7 Selbstkritik-Feed: Journal-Syntax, doppelte Nullen, Allowlist-blinde Messung
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:04:42 +02:00
Hitonabi 8b0e14db7c Selbstkritik-Cron (Faden 11b): der Radar-Zwilling nach innen
- selbstkritik-prompt.md: Auftrag (1-3 belegte Verbesserungen, Lucys Stimme,
  Leitplanken: nur vorschlagen, Hermes-Quellcode tabu, Security nur benennen)
- selbstkritik-feed.sh: Live-Daten (Voice-Latenzen, Token-Stats, Prompt-Größen
  je Lane als Diät-Kontrolle, Journal-Warnmuster, Tool-Loops, Curator, notify-
  Fallbacks); deploy.sh kopiert ihn nach ~/.hermes/scripts

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:02:12 +02:00
Hitonabi 019bd6d18b Lucy-Proaktivität (A3): Melde-Briefkasten + Health-Wächter
- services/announce.py: persistenter Briefkasten (/srv/models/mc2-announce.json),
  POST /api/voice/announce + GET /api/voice/announcements (Cursor-Polling)
- services/sentry.py: Health-Wächter (Engine/Hirn/Hermes/Mem0/Voice/Platte),
  flankenerkannt (Alarm nach 3 Fehl-Ticks, Entwarnung, 6h-Erinnerung),
  meldet in Briefkasten + Telegram; Hirn-Verdrängung durch IDE-Last = kein Alarm
- notify.sh spiegelt jede Telegram-Meldung in den Briefkasten (Updates/Radar
  erreichen damit auch die Desktop-Lucy)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:45:07 +02:00
Hitonabi a23f4c0652 Warmup kaut jetzt auch den Hermes-Agenten-Prompt vor (Erster-Call-Fix)
Gemessen 03.07.: erster User-Call nach Modell-Reload 37 s (Prefill des
~70-KB-Hermes-Prompts, 50 KB davon Tool-Schemas), mit warmem Prompt-Cache
~6 s. warmup.sh schickt nach dem Modell-Laden einen Wegwerf-Turn an den
api_server (:8642, wartet auf /health) — der -cram-Cache ist damit gefuellt,
bevor der User zum ersten Mal fragt. Strukturelle Prompt-Diaet = Faden 7.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:32:28 +02:00
Hitonabi d2ab662146 Immer-bereit-Set ehrlich gemacht: vision ttl 0, Warmup inkl. vision, Texte
Nutzer-Fund (Screenshots 03.07.): drei UI-Diskrepanzen im Modell-Manager.
1) Augen (VL-8B) hatten ttl 300 + fehlten im Warmup — standen also entgegen
   dem UI-Versprechen NICHT immer bereit. Jetzt ttl 0 (Box live + Snapshot)
   und Warmup-Default "fast vision".
2) Warn-Text beschrieb das alte Verdraengungs-Verhalten (seit persistent-Fix
   falsch) — jetzt: Set bleibt geladen, bei Ueberlauf scheitert das grosse
   Modell. 3) "Reserviert" als Vorsichts-Schaetzung/Obergrenze gekennzeichnet
   (68,8 GB Schaetzer vs. 25 GB real — Schaetzer-Umbau ist eigener Faden).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:10:44 +02:00
Hitonabi a2091b4f5f Warmhalte-Fix: llama-swap-Key heißt persistent, nicht persist
Live gefunden (Zed-Start warf Lucys Hirn raus): llama-swap ignoriert
unbekannte Group-Keys stillschweigend — der Verdrängungsschutz der
brains-Gruppe war seit jeher wirkungslos. set_group() schreibt jetzt
beide Keys (persistent für llama-swap, persist für MC2-API/UI),
budget.py rechnet die echte Ko-Residenz (on-demand reserviert das
Warm-Set statt 0), Warn-Texte beschreiben Überlauf statt Verdrängung.
Box-Config live gefixt + verifiziert: Coder und Qwen3.6 gleichzeitig ready.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:46:23 +02:00
Hitonabi dd3d66156b Werkstatt-Skill: Box pusht ihre Branches jetzt selbst zu Gitea (scoped Token)
Token mc2-box-werkstatt (write:repository) auf der Box hinterlegt (User-Freigabe 02.07.),
Push verifiziert. Leitplanke bleibt: NIE nach main pushen, Merge+Deploy macht der PC.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:32:06 +02:00
Hitonabi 9e5392fa4f Meldewege sprechen als Lucy (SOUL.md-Abgleich): Radar-Report, Werkstatt-Vorschlag, Wochenpflege
Radar-Endnachricht + Werkstatt-Telegram in Lucys Stimme an den Commander (Fazit zuerst,
Technik in Alltagssprache); autoupdate-Summary angepasst. Hintergrund: SOUL.md der Box
wurde auf Lucy-Identitaet umgestellt (Review-Session 02.07.).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:12:16 +02:00
Hitonabi 14b5c6d6a0 Radar-Tuning nach Report #1: Inventar-Pflicht (Schritt 1) + hermes --version im Feed
Ground-Truth-Abgleich ergab 4 Fehler mit einer Ursache (Inventar-Blindheit):
nie Updates auf installierte Versionen empfehlen; bei aktiv genutzten Komponenten
(Parakeet=STT deutsch! Silero v5, pocket-tts) erst eigene Nutzung nennen; bereitliegende
Kandidaten (gpt-oss-120b, VL-30B) nicht als Neuentdeckung verkaufen. hipEngine-Fund
des Reports war echt und korrekt eingestuft.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:52:50 +02:00
Hitonabi 2c8d4a081e E4-Haertung: /v1/models liefert context_length + Alias-Eintraege (heavy/coder/...)
Radar-Erstlauf-Lehre: Hermes-Subagents fanden keine Kontextlaenge (llama-swap listet
nur kanonische Namen, ohne Metadaten), nahmen 256k an und rissen mit ihren max_tokens
den Server-Kontext. Gateway blendet jetzt Rollen-Aliase als Eintraege ein und liefert
context_length aus der geparsten llama-swap-Config. Delegation per hermes config auf
Verdikt gesetzt (max_concurrent_children 2, max_spawn_depth 1). Radar-Prompt: Fallback
"sequenziell selbst recherchieren, Report muss IMMER kommen".

Erstlauf-Ergebnis: Report wurde an Telegram zugestellt (Last run ok).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:49:57 +02:00
Hitonabi ab8d651efc Autonomie E6+DoD6: Werkstatt-Skill (wartung) + RUNBOOK
- deploy/skills/wartung/SKILL.md: Selbstwartungs-Kreislauf (Worktree -> Patch ->
  Reviewer-Subagent -> Gate -> Telegram-Merge-Vorschlag); Leitplanken hart codiert
  (nie main/merge/deploy/Security-Config); deploy.sh installiert nach ~/.hermes/skills/
- Box hat bewusst KEINE Gitea-Push-Rechte (Token = offener User-Entscheid) -> v1 endet
  beim Merge-Vorschlag mit lokalem Branch
- docs/RUNBOOK.md: 1 Seite Mensch-Anleitung (Telegram-Meldungen, Box tot, Pins,
  einmalige sudo-Session, Automatik-Fahrplan)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:29:19 +02:00
Hitonabi dd947298d0 Radar-Prompt: 5. Subagent IDE-/Agent-Tools (Tod-/Nachfolger-Meldungen, Roo-Code-Lehre)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:24:15 +02:00
Hitonabi 2c95f1c5bc Autonomie E4: Evolution-Radar (Hermes-cron monatlich, Fan-out-Subagents)
- deploy/radar-prompt.md: versionierter Auftrag (delegate_task-Fan-out mit Muell-Filter,
  Verdikt-Liste inline, kurzes deutsches Telegram-Report-Format)
- deploy/radar-feed.sh: speist Auftrag + Live-Inventar (Updates/Modelle/Versionen/Pins)
  in den Cron-Agenten; deploy.sh kopiert ihn nach ~/.hermes/scripts/
- Cron registriert: evolution-radar, 0 9 1 * * (monatlich), --deliver telegram

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:19:41 +02:00
Hitonabi 2db0ce080f Autonomie E2: Auto-Update-Timer (So 04:30) + Pin-Register + Rollback
- deploy/autoupdate.sh: Router->Engine->Hermes ueber bestehende Pfade; rot = Rollback + Selbst-Pinning (/srv/models/mc2-pins.json) + Telegram; gruen = Meldung "eingespielt X->Y"; Abschluss-Summary je Lauf
- Hermes-Rollback selbst gebaut (Job kann nur rot werden): git reset auf alten Stand + Config aus frischem Backup + Gateway-Neustart + Gehirn-Check
- sudoers-mc2-autonomie: NOPASSWD-Snippet fuer Engine/Router (einmalige sudo-Session); bis dahin wird die Ebene uebersprungen + gemeldet
- Verifiziert auf der Box: Happy-Path (11+2 Commits echt eingespielt), Fake-Fail -> Rollback+Pin+Meldung, Pin-Skip, Unpin -> regulaeres Update

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:01:13 +02:00
Hitonabi 2263e298fd Autonomie E1: Meldeweg deploy/notify.sh (hermes send -> Telegram, Fallback Log+wall)
Verifiziert auf der Box: 2 Testnachrichten via Telegram zugestellt (mc2-notify.log OK).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 19:49:26 +02:00
Hitonabi 41aeb111d7 Kickoff-Paket Kapitel 0: Autonomie-Plan (E1-E6) + Bench-Harnesses ins Repo
- docs/AUTONOMIE_PLAN.md: 3 Saeulen + Werkstatt, Etappen mit Verifikation, Leitplanken,
  Definition-of-Done, Session-Start-Checkliste — naechste Session startet mit 'leg los'
- deploy/bench/{model-bench,brain-bench}.sh: die 02.07.-Benches als versionierte Harnesses
  (Grundlage der Modell-Selbst-Evaluation E5; Quoting-/pipefail-Lehren eingebaut)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 17:20:22 +02:00
Hitonabi 4eaa11c32a Postcheck: pipefail-Falle im Voice-Smoke (head schliesst Pipe -> curl 23 -> Fehlalarm)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 16:10:21 +02:00
Hitonabi 8c7dd5b30f Postcheck: Voice-Smoke mit 3 Versuchen (Session-Kaltstart nach Gateway-Neustart war Fehlalarm)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 16:07:01 +02:00
Hitonabi 9822af7640 Hermes-Update-Playbook: doctor im Job, Config-Drift-Scan + Tool-/Voice-Smoke im Postcheck, LLM-Release-Notes im Modal
- Update-Job: nach 'hermes update' laeuft 'hermes doctor' (Job rot bei Fehlern)
- hermes-postcheck.sh: Journal-Scan auf Unknown/deprecated/defaulting (Lehre aus v0.18:
  approvals.mode 'auto' wurde still ungueltig -> alle Tools in pending_approval),
  Tool-Smoke (echo via Agent, erkennt pending_approval), Voice-Smoke (/api/voice/chat)
- Update-Modal: die Box fasst anstehende Hermes-Commits selbst zusammen (fast-Modell,
  no-think, gecacht auf neuesten Hash) — Breaking Changes zuerst

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:53:37 +02:00
Hitonabi 2a4eb51bd7 Kandidaten live testbar: gpt-oss-120b (2,3x schneller als heavy) + VL-30B in Config (Review P3-17 abgeschlossen)
Bench (Box, Vulkan, 32k ctx): gpt-oss-120b tg 54-55 t/s vs. Qwen3.5-122B 23,5 t/s bei
60 statt 73 GB. Beide OHNE Alias-Wechsel deployt — Qualitaets-Entscheid beim User.
brains-Gruppe nach Reload wieder angewaermt (hermes/embed/vision ready).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:52:22 +02:00
Hitonabi 88c2659a9c P3: llama-swap capabilities deklariert + Plugin lernt Tool-Namen (Hermes-0.18-API)
- deploy-Config: capabilities (in/out/tools/context) je Modell — /v1/models informiert
  Clients korrekt; context = nutzbarer Kontext pro Request (c/parallel)
- mc2-memory: sync_turn nutzt messages aus Hermes >=0.18 — nur Tool-NAMEN (Ergebnisse
  bleiben draussen: untrusted/Poisoning-Vektor); deployt, Postcheck gruen
- Mem0 v3-Algorithmus auf der Box verifiziert (BM25/Entity/Hybrid in 2.0.8 aktiv)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:25:46 +02:00
Hitonabi a1cea1a1ea deploy-Config: Kommentar aus dem cmd-Literalblock heraus (waere Teil des Kommandos gewesen)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:09:29 +02:00
Hitonabi 68ad291a8f P2: Vision im Stream (C2), TTS-Warmup-Retry (L2), parallel-2-Config vorbereitet
- voice.py: Bildschirm-Sicht laeuft IM SSE-Stream (+hermes.vision.progress-Event fuer
  Warte-Ansage), Vision-Timeout 120->45s (MC_VISION_TIMEOUT); deployt + Smoke-Test ok
- useVoiceAgent: Warm-Gate mit Retry/Backoff + sichtbarer Meldung statt stummem Fake-ready
- deploy-Config: hermes -c 131072 --parallel 2 (+KV Q8_0) — Mem0-Extraktion blockiert
  Voice-Turns nicht mehr; speicherneutral. Live-Schaltung: User
- Report: P2-Nachtrag; C5 (pricing/token_stats) war Fehlalarm — in Benutzung

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:07:00 +02:00
Hitonabi e08d812598 Brain-Bench + Latenz-Metrik (Review P1-9/P1-10)
- Bench-Matrix Qwen3.6 (5 Configs, separater Port): MTP n-max 3 bestaetigt (+26% tg),
  n-max 4 lohnt nicht, KV Q8_0 gratis (78,6=78,6 t/s) bei halbem KV-Speicher
- deploy-Config: -ctk/-ctv q8_0 am hermes-Eintrag (Live-Schaltung: User-Freigabe noetig)
- voice.py: chat_first_content-Metrik (echte Hirn-Latenz bis erster Inhalts-Token)
- Report um Umsetzungs-Nachtrag ergaenzt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:56:23 +02:00
Hitonabi 9967155332 Backend: Box-Sync + Drift-Fixes (Review P0-3)
- deploy/llama-swap.config.yaml: Live-Box-Config jetzt versioniert (war untracked + veraltet)
- config.py: Template -fa 1 -> -fa on (Box-Standard)
- llamaswap.py: cache-reuse NICHT bei mmproj-Modellen anhaengen (verifizierte Vision-Falle)
- voice.py: Thinking-Deaktivierung fuer Voice-Chat (MC_VOICE_NO_THINK)
- connect.py: IDE-Snippets zeigen nur noch die coding-Lane

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:29:01 +02:00
Hitonabi b1fa8bea43 Fix: Embedding-Modell (Qwen3-Embedding-0.6B) auch automatisch vorwaermen
Das Embedding-Modell (Alias `embed`, fuer Mem0/Gedaechtnis) ist zwar brains-Member
(persist), aber Pingen von `fast` laedt die anderen Gruppenmitglieder NICHT mit —
es blieb kalt bis zur ersten /v1/embeddings-Anfrage.

- warmup.sh: waermt jetzt zusaetzlich die Embedding-Modelle ueber /v1/embeddings
  (anderer Endpunkt als chat), gesteuert via MC_WARMUP_EMBED (default "embed").
- stack-postcheck.sh: prueft nach jedem Update zusaetzlich, dass das Embedding-Modell
  laedt und einen Vektor liefert (sonst ist Mem0/Gedaechtnis betroffen) -> Job rot.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 12:02:35 +02:00
Hitonabi d73075bea0 Fix: Engine-Update lief ins Leere (falsches Skript gepinnt) + Text-file-busy
ROOT CAUSE: Die Unit pinnte MC_ENGINE_UPDATE_CMD=/usr/local/bin/update-llamacpp —
ein Alt-Skript aus der ROCm-Zeit, das den ROCm-Build nach /opt/llamacpp (totes
Rollback-Dir) zog statt des aktiven Vulkan-Builds nach /opt/llamacpp-vulkan. Es
endete mit 0 → Job "DONE", aber die aktive Engine blieb auf 9821. Mein
deploy/update-engine.sh lag dadurch komplett brach. Fix: Pin aus der Unit raus →
Backend nutzt den Default `sudo bash <repo>/deploy/update-engine.sh`.

Zusätzlich (vom User vermutet): mit geladenem Modell laeuft llama-server → die
Binary ist "Text file busy", in-place ueberschreiben scheitert. update-engine.sh
und update-swap.sh stoppen llama-swap jetzt VOR dem Austausch und starten danach,
mit robustem Fehlerpfad (set -uo statt -e, Service kommt immer zurueck, sonst
Rollback aus .bak).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:52:49 +02:00
Hitonabi 4ee016d3a7 Feat: Auto-Rollback bei Engine-/Router-Update wenn Stack-Check fehlschlaegt
update-engine.sh / update-swap.sh sichern jetzt den alten Build/die alte Binary
VOR dem Ueberschreiben (.bak), verifizieren nach dem Restart per stack-postcheck.sh
und rollen bei Fehler automatisch zurueck (Binary/Dir wiederherstellen + restart +
erneut pruefen). Exit-Codes: 0 = neuer Build verifiziert, 1 = fehlgeschlagen aber
Rollback ok (alter Stand laeuft wieder), 2 = Update UND Rollback kaputt.

Da die Skripte den Postcheck nun selbst fahren (um reagieren zu koennen), entfaellt
das `&& stack-postcheck` in engine/swap-update-job. OS-Update behaelt den reinen
Detect-Check (apt-Downgrade waere unsicher). Backups sind winzig (Engine 86M,
Swap 14M) bei 1.6TB frei.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:34:41 +02:00
Hitonabi 9923743219 Feat: Stack-Funktionsprüfung nach OS-/Engine-/Router-Update
Bisher hatte nur das Hermes-Update einen echten Post-Check; OS/Engine/Router
liefen mit Exit 0 durch, auch wenn der neue Build den Stack zerschoss (gruener
Job trotz totem Stack). Neu: deploy/stack-postcheck.sh prueft nach jedem Update
funktional — llama-swap aktiv, /v1/models 200, ECHTE 1-Token-Inferenz auf dem
Hirn-Modell (beweist Laden+Generieren), MC2 /api/health engine_reachable, Mem0
erreichbar. Eingehaengt als `<update> && bash stack-postcheck.sh` in os/engine/
swap-update-job → Exit 1 macht den jobengine-Job ROT. Pendant zu hermes-postcheck.sh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:29:32 +02:00