#!/usr/bin/env bash # pre_llm_call-Hook (Faden 5, 13.07.2026): verdrahtet Box-Selbstwissen MECHANISCH in # JEDEN Kanban-Worker — egal welches Profil (werkstatt, default=Lucys Persona als Worker, # kuenftige betrieb-/Ops-Profile). Der Kontext wird ephemer pro Turn an die User-Message # angehaengt (agent/turn_context.py), NUR wenn die task_id ein echtes Kanban-`t_` # ist. Lucys interaktiver/Voice-Chat laeuft mit einer UUID-Ersatz-task_id (nicht `t_...`) # → sofortiger No-op, kein Persona- oder Latenz-Eingriff. Loest Fallstrick #1 (Ops/Mess/Verify-Worker landen auf der am # schlechtesten geruesteten Persona und flailen, weil sie llama-swap :8080 nicht kennen). # Ausgabe {"context":"..."} = anhaengen; {} = durchlassen (No-op). set -u payload="$(cat -)" # Scope-Gate: NUR echte Kanban-Worker. ACHTUNG (agent/turn_context.py:216): # Hermes setzt effective_task_id = task_id ODER — fuer Lucy-Chat/Voice/CLI/Telegram — # eine zufaellige UUID. Ein blosser "nicht leer"-Check wuerde also auch Lucy treffen # (Persona-/Latenz-Schaden). Kanban-IDs sind IMMER `t_`, UUIDs enthalten Bindestriche # und beginnen nie mit t_ → das Muster trennt sauber. Alles andere: sofortiger No-op # (ein jq, im Voice-Pfad vernachlaessigbar). task_id=$(printf %s "$payload" | jq -r '.extra.task_id // .task_id // ""' 2>/dev/null || echo "") case "$task_id" in t_[0-9a-f][0-9a-f][0-9a-f][0-9a-f]*) : ;; # Kanban-Worker → Orientierung anhaengen *) printf '{}'; exit 0 ;; # Lucy / UUID / leer → No-op esac # Zeiger auf den vollen, naechtlich generierten Selbst-Steckbrief (nur wenn er existiert). STECKBRIEF="$HOME/.hermes/state/selbst-steckbrief.md" hint="" [ -f "$STECKBRIEF" ] && hint=" Dein vollstaendiger Selbst-Steckbrief (aktuelle Versionen/Dienste/Modelle/Crons/offene Karten) liegt in $STECKBRIEF — dort nachlesen statt raten." # Stabile Anti-Flail-Orientierung: WER bin ich, WO laufen die Modelle, WAS ist tabu. ctx="$(cat <