From 0c095a4d49f549a7c641549daa4c4d0539ae3c18 Mon Sep 17 00:00:00 2001 From: Eddy Date: Tue, 14 Apr 2026 21:32:49 +0200 Subject: [PATCH] Phase 11 final: Tool-Restriction via System-Prompt statt SDK-Whitelist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In claude-agent-sdk 0.2.104 vererbt sich tools/disallowedTools auf Sub-Agents — keine saubere Trennung Main vs. Sub via Query-Options. Fix: Tool-Preset (claude_code) fuer alle Modi freischalten, Modus- Verhalten ausschliesslich via System-Prompt (Orchestrator-Prompts) durchsetzen. Sub-Agents haben jetzt funktionierenden Bash-Zugriff, liefern echte ls-Ausgaben statt Halluzinationen. Phase 11 ist damit final funktional: - Solo: alle Tools, direkter Zugriff - Handlanger: Delegation via Prompt durchgesetzt - Experten: Multi-Agent via Prompt durchgesetzt - Auto: Heuristik wechselt zwischen den Modi Co-Authored-By: Claude Opus 4.6 (1M context) --- scripts/claude-bridge.js | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/scripts/claude-bridge.js b/scripts/claude-bridge.js index 20652dd..b13adf4 100644 --- a/scripts/claude-bridge.js +++ b/scripts/claude-bridge.js @@ -382,27 +382,20 @@ async function sendMessage(message, requestId, model = null, contextOverride = n queryOptions.resume = resumeSessionId; } - // Tool-Konfig je nach Modus. - // WICHTIG: disallowedTools vererbt sich auf Sub-Agents! - // Deshalb Whitelist via `tools` nutzen — die gilt nur fuer Main, - // Sub-Agents bekommen das volle Standard-Tool-Set. + // In @anthropic-ai/claude-agent-sdk 0.2.104 vererbt sich JEDE tools/disallowedTools- + // Konfiguration auf Sub-Agents. Es gibt keine saubere Trennung Main vs. Sub. + // Daher: Tool-Preset fuer alle Modi freischalten, Restriktion via System-Prompt. + queryOptions.tools = { type: 'preset', preset: 'claude_code' }; queryOptions.allowedTools = ['Task', 'TodoWrite', 'Read', 'Grep', 'Glob', 'Write', 'Edit', 'Bash']; if (effectiveMode === 'handlanger') { - queryOptions.tools = ['Task', 'TodoWrite']; - sendMonitorEvent('agent', 'Handlanger: Main nur Task+TodoWrite, Sub-Agents mit vollem Tool-Set', { + sendMonitorEvent('agent', 'Handlanger: Delegation per System-Prompt durchgesetzt', { mode: effectiveMode, - mainTools: queryOptions.tools, }); } else if (effectiveMode === 'experten') { - queryOptions.tools = ['Task', 'TodoWrite', 'Read', 'Grep', 'Glob']; - sendMonitorEvent('agent', 'Experten: Main lesen+delegieren, Sub-Agents voll', { + sendMonitorEvent('agent', 'Experten: Multi-Agent via System-Prompt', { mode: effectiveMode, - mainTools: queryOptions.tools, }); - } else { - // solo: volles Preset - queryOptions.tools = { type: 'preset', preset: 'claude_code' }; } let conversation = query({