refactor(local-llm): generische Tool-Fehler-Eskalation statt per-Skill-Router-Code

Stefan-Punkt: der 'auf <Geraet>'-Router-Patch war ein per-Fall-Band-Aid, das
nicht skaliert (naechster Skill mit komplexer API → wieder patchen). Besser:
das LLM merkt es selbst.

- Router-Hardcoding zurueckgenommen (kein 'auf Geraet'→Claude mehr).
- GENERAL: im lokalen Tool-Loop → scheitert ein Tool-Call (Ergebnis beginnt mit
  'FEHLER'), uebernimmt Claude. Gilt fuer JEDEN Skill, kein per-Fall-Wissen im
  Router. Lokal probiert, bei Fehler eskaliert.
- skill_create-Anleitung: SEMANTISCH bauen — Skills bieten klare Operationen als
  args (action/device_name), NICHT rohe {path,method,body}-Durchreichung. Das
  args-Schema ist die 'Bedienungsanleitung', die das LLM sieht (die haben wir
  also schon — sie muss nur semantisch sein). Was das LLM sonst raten muesste
  (Endpunkte/IDs/Payload) gehoert INS Skill.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 13:18:26 +02:00
co-authored by Claude Opus 4.8
parent 0e42cf775f
commit 53c098a9c8
2 changed files with 23 additions and 5 deletions
+1 -5
View File
@@ -67,11 +67,7 @@ _TOOL_HINTS = re.compile(
r"skill|projekt|oauth|"
r"licht|lampe|steckdose|rollade|heizung|"
r"kalender|termin|"
r"maild?|e-?mail|nachricht schreiben)\b|"
# Geraete-gezieltes Spotify-Abspielen = komplexer Transfer-Flow (Geraete
# abfragen -> Name->ID -> richtiger Endpoint). Das 8B fummelt das -> Claude.
r"(abspiel|spielen|play|weiter|wechsel|übertrag|transfer).{0,15}\bauf\b|"
r"\bauf\s+(android|handy|smartphone|desktop|duffy|firetv|tv|dem\s+\w+|mein)",
r"maild?|e-?mail|nachricht schreiben)\b",
re.IGNORECASE,
)