Faden 8+5-Fix: Worker-Scope korrigieren + Profil-Hooks reproduzierbar
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>
This commit is contained in:
@@ -1,15 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
"""pre_tool_call-Guard (Faden 8, 13.07.2026): sperrt Schreibzugriffe von Kanban-Workern
|
||||
auf den LIVE-Checkout ~/mission-control-v2 und die Hermes-QUELLE ~/.hermes/hermes-agent
|
||||
HART - egal welches Profil. Nur fuer echte Worker (task_id = t_<hex>); Lucy/Wartung/
|
||||
interaktiv/CLI (UUID-task_id) = sofortiger No-op. Loest Fallstrick #2 (Worker wandert in
|
||||
die falsche Ebene / lag Patches im Live-Checkout ab). Die native is_write_denied deckt
|
||||
diese Pfade NICHT ab (nur Credentials/System) -> dieser Guard schliesst die Luecke.
|
||||
"""pre_tool_call-Guard (Faden 8, 13.07.2026): sperrt Schreibzugriffe auf den LIVE-Checkout
|
||||
~/mission-control-v2 und die Hermes-QUELLE ~/.hermes/hermes-agent HART. Loest Fallstrick #2
|
||||
(Worker wandert in die falsche Ebene / lag Patches im Live-Checkout ab). Die native
|
||||
is_write_denied deckt diese Pfade NICHT ab (nur Credentials/System) -> diese Luecke.
|
||||
|
||||
WICHTIG: Der Worker KLONT MC2 in seinen Workspace (<workspace>/mission-control-v2) und
|
||||
arbeitet DORT legitim. Gesperrt wird deshalb NUR der home-verankerte Live-Checkout
|
||||
($HOME/mission-control-v2), NIE der blosse Name "mission-control-v2". Lesen ist erlaubt -
|
||||
geblockt werden nur Schreib-Operationen.
|
||||
UNBEDINGT (kein Task-/Profil-Scope): KEIN legitimer Hermes-Agent-Flow schreibt je in diese
|
||||
zwei Pfade — der Werkstatt-Worker arbeitet im WORKSPACE-Klon (<workspace>/mission-control-v2,
|
||||
NICHT home-verankert -> erlaubt), Lucy fasst MC2-Quelle nie an, und die Wartungs-Pipeline
|
||||
(deploy.sh, Annahme-Runner) laeuft als Shell ueber ssh, NICHT ueber Hermes-Tools. Ein
|
||||
Task-Scope waere hier sogar gefaehrlich: Worker tragen als task_id den Session-Zeitstempel
|
||||
(z.B. 20260713_224206_267304), NICHT die Kanban-t_-ID — ein "nur t_"-Check liesse also alle
|
||||
Worker-Schreibzugriffe durch (Bug 13.07., so entdeckt).
|
||||
|
||||
WICHTIG: Gesperrt wird NUR der home-verankerte Live-Checkout ($HOME/mission-control-v2), NIE
|
||||
der blosse Name "mission-control-v2" (der Workspace-Klon enthaelt ihn) — sonst waere die
|
||||
legitime Worker-Arbeit blockiert. Lesen ist erlaubt; geblockt werden nur Schreib-Operationen.
|
||||
|
||||
Ausgabe {"action":"block","message":...} = Tool geblockt; {} = durchlassen.
|
||||
"""
|
||||
@@ -26,13 +31,6 @@ try:
|
||||
except Exception:
|
||||
out({})
|
||||
|
||||
extra = payload.get("extra") or {}
|
||||
task_id = str(extra.get("task_id") or payload.get("task_id") or "")
|
||||
# Scope: NUR echte Kanban-Worker. Hermes setzt fuer Lucy/CLI eine UUID-task_id
|
||||
# (agent/turn_context.py) -> nur das t_<hex>-Muster ist ein Worker.
|
||||
if not re.match(r"^t_[0-9a-f]{4,}$", task_id):
|
||||
out({})
|
||||
|
||||
tool = payload.get("tool_name") or ""
|
||||
ti = payload.get("tool_input") or {}
|
||||
home = os.path.realpath(os.path.expanduser("~"))
|
||||
|
||||
Reference in New Issue
Block a user