From 15f95ed196f31d09c12807840702333045491eaf Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 30 May 2026 01:03:21 +0200 Subject: [PATCH] =?UTF-8?q?fix(brain):=20tools=20nach=20auto=5Fscaffold=20?= =?UTF-8?q?neu=20bauen=20=E2=80=94=20sonst=20halluziniert=20ARIA=20Tool-Ta?= =?UTF-8?q?gs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beobachtung beim ersten Live-Test (00:58:33): Auto-Scaffold legte den spotify-Skill mid-chat() an, all_skills + active_skills wurden refreshed, ABER die `tools=`-Liste die an den Proxy/claude-CLI geschickt wird nicht. Folge: ARIA sah im System-Prompt-Skills-Block dass `spotify` existiert und wusste sie soll `run_spotify` nutzen — aber claude-CLI kannte das Tool nicht weil dessen tool-schema noch ohne run_spotify war. Sie hat dann ... als XML in den Text geschrieben, das wurde nirgends ausgefuehrt (siehe "Pausiert" / "Restricted & NIKSTER" Antworten waren halluziniert). Fix in 4 Zeilen: nach scaffolded_any auch `tools = list(META_TOOLS) + [_skill_to_tool(s) for s in active_skills]` neu bauen. Damit kennt der CLI-Subprocess den frischen Skill-Tool sofort und kann ihn echt aufrufen. Beim naechsten chat-Turn waere es eh richtig (Tools werden neu gebaut), aber genau der erste Turn nach Auto-Scaffold ist der wichtigste — da soll's klappen. Co-Authored-By: Claude Opus 4.7 (1M context) --- aria-brain/agent.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aria-brain/agent.py b/aria-brain/agent.py index a0860c5..0038e90 100644 --- a/aria-brain/agent.py +++ b/aria-brain/agent.py @@ -990,6 +990,10 @@ class Agent: # Skills-Liste refresh damit der frische Skill im Prompt sichtbar ist all_skills = skills_mod.list_skills(active_only=False) active_skills = [s for s in all_skills if s.get("active", True)] + # WICHTIG: tools NEU bauen, sonst kennt der claude-CLI- + # Subprocess den frisch gescaffoldeten `run_` NICHT + # und ARIA muss ``-Tags halluzinieren. + tools = list(META_TOOLS) + [_skill_to_tool(s) for s in active_skills] _ah.invalidate_cache() # Heuristik neu rechnen — die scaffold-targets sind jetzt weg hints = _ah.compute_hints(existing_skills=all_skills, force=True)