fix(satellite): ARIA nutzt Satelliten fuer Geraete in fremden Netzen — statt zu fabulieren

Symptom: Frage nach dem Patronenstand des Heim-Druckers -> ARIA antwortet
"da komm ich nicht ran", obwohl im Heimnetz ein Satellit online ist, der den
Drucker findet UND http.get kann. Sie zieht Drucker-Fakten aus dem Gedaechtnis
und gibt auf, ohne den Satelliten zu nutzen.

Ursachen + Fixes:
- Claude-Pfad: die Seed-Regel triggerte nur auf Formulierungen wie "im Buero"/
  "im Netz X". Eine schlichte Geraetefrage (Patronenstand) griff sie nicht.
  -> Regel umformuliert: IMMER wenn ein Geraet/Host in einem Netz liegt, auf
  dem ARIA nicht direkt sitzt (Zuhause/Buero/private IP), ZUERST satellite_list
  pruefen; NIEMALS "erreiche ich nicht" sagen, bevor satellite_list lief.
  Drucker-http.get-Beispiel ergaenzt.
- satellite_list-Tool-Beschreibung als dauerhaften Anker verstaerkt (gilt auch,
  wenn ein Seed mal driftet).
- Lokales Tier hatte gar keine Satelliten-Tools (_LOCAL_TOOL_NAMES) -> konnte
  strukturell kein Geraet im fremden Netz erreichen und fabulierte. satellite_
  list/devices/command ergaenzt, damit auch das lokale Qwen Satelliten nutzt.

Greift beim naechsten Brain-Neustart (seed_rules.apply im Lifespan, idempotent
per migration_key).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-19 11:35:35 +02:00
co-authored by Claude Opus 4.8
parent 318bb47590
commit 6918ddca61
2 changed files with 26 additions and 7 deletions
+11 -6
View File
@@ -1184,9 +1184,11 @@ META_TOOLS = [
"description": (
"Zeigt welche ARIA-Satelliten (Aussenposten-Container in FREMDEN Netzen, "
"z.B. 'Buero') gerade ONLINE sind und was sie koennen (discover / "
"dial.launch / wol / http). Nutze das ZUERST, wenn Stefan etwas 'im "
"Buero' / 'im Netz X' / 'auf dem <Geraet> dort' machen will — so weisst "
"Du welche Netze erreichbar sind."
"dial.launch / wol / http). Nutze das ZUERST, wenn es um ein Geraet/einen "
"Host in einem Netz geht, auf dem Du nicht direkt sitzt (Zuhause, Buero, "
"jede private IP wie 192.168.x) — z.B. Drucker-Fuellstand, NAS, Smart-TV. "
"Rufe es IMMER auf, BEVOR Du sagst ein Geraet sei nicht erreichbar — ein "
"Satellit im Zielnetz ist der Weg hinein."
),
"parameters": {"type": "object", "properties": {}},
},
@@ -1718,9 +1720,12 @@ class Agent:
return False
# Kuratierte Tool-Auswahl fuers lokale Tier (B1b): web_search (local-only,
# SearXNG) + memory_search/trigger_timer (aus META_TOOLS) + Spotify-Skill.
# Bewusst klein (Speed + Sicherheit); alles andere → Claude.
_LOCAL_TOOL_NAMES = {"memory_search", "trigger_timer"}
# SearXNG) + memory_search/trigger_timer (aus META_TOOLS) + Spotify-Skill +
# die Satelliten-Tools (Augen/Haende in fremden Netzen — auch das lokale Tier
# muss ein Geraet im Heim-/Buero-Netz erreichen koennen, statt zu fabulieren).
# Sonst bewusst klein (Speed + Sicherheit); alles andere → Claude.
_LOCAL_TOOL_NAMES = {"memory_search", "trigger_timer",
"satellite_list", "satellite_devices", "satellite_command"}
def _build_local_tools(self) -> list:
tools = [WEB_SEARCH_TOOL]
+15 -1
View File
@@ -475,13 +475,27 @@ SEED_RULES: List[dict] = [
"zeigt UND steuerbar macht. So erreichst Du Netze, in denen der Haupt-Stack "
"NICHT steht.\n"
"\n"
"Wenn Stefan etwas 'im Buero' / 'im Netz X' / 'auf dem <Geraet> dort' will:\n"
"WICHTIG — nicht nur bei 'im Buero'/'im Netz X': IMMER wenn eine Anfrage ein "
"GERAET oder einen HOST betrifft, das/der in einem Netz lebt, auf dem Du NICHT "
"direkt sitzt (Stefans Zuhause, Buero, Werkstatt, irgendein LAN mit privater "
"IP wie 192.168.x/10.x) — z.B. Drucker-Fuellstand, NAS, Smart-TV, ein Host per "
"IP — dann pruefe ZUERST `satellite_list`, ob ein Satellit dieses Netz abdeckt. "
"Sage NIEMALS 'da komm ich nicht ran' / 'bin nicht im Netz', BEVOR Du "
"`satellite_list` aufgerufen hast — ein Satellit im Zielnetz ist genau der Weg "
"hinein. Nur wenn wirklich keiner online ist, ist 'erreiche ich nicht' korrekt.\n"
"\n"
"Ablauf:\n"
" 1. `satellite_list` — welche Satelliten/Netze sind online + was koennen sie.\n"
" 2. `satellite_devices(satellite='Buero')` — welche Geraete gibt es dort "
"(Fire TV, Chromecast, Smart-TVs, Drucker, NAS ...). Nutze es um das "
"gemeinte Geraet zu finden, BEVOR Du steuerst.\n"
" 3. `satellite_command(...)` — Aktion ausfuehren.\n"
"\n"
"Beispiel 'Patronenstand vom Drucker zuhause': satellite_list -> Satellit im "
"Heimnetz online? -> satellite_command(satellite='<Heim>', action='http.get', "
"params={'url':'http://<drucker-ip>/general/status.html'}) -> Fuellstaende "
"(BK/C/M/Y) aus dem HTML vorlesen. NICHT aus dem Gedaechtnis raten.\n"
"\n"
"Beispiel 'spiel YouTube-Video auf dem Buero-Stick':\n"
" satellite_command(satellite='Buero', device='Fire TV', "
"action='dial.launch', params={'app':'YouTube','v':'<videoId>'})\n"