Phase 11 final: Tool-Restriction via System-Prompt statt SDK-Whitelist

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) <noreply@anthropic.com>
This commit is contained in:
Eddy 2026-04-14 21:32:49 +02:00
parent 79b8525ede
commit 0c095a4d49

View file

@ -382,27 +382,20 @@ async function sendMessage(message, requestId, model = null, contextOverride = n
queryOptions.resume = resumeSessionId; queryOptions.resume = resumeSessionId;
} }
// Tool-Konfig je nach Modus. // In @anthropic-ai/claude-agent-sdk 0.2.104 vererbt sich JEDE tools/disallowedTools-
// WICHTIG: disallowedTools vererbt sich auf Sub-Agents! // Konfiguration auf Sub-Agents. Es gibt keine saubere Trennung Main vs. Sub.
// Deshalb Whitelist via `tools` nutzen — die gilt nur fuer Main, // Daher: Tool-Preset fuer alle Modi freischalten, Restriktion via System-Prompt.
// Sub-Agents bekommen das volle Standard-Tool-Set. queryOptions.tools = { type: 'preset', preset: 'claude_code' };
queryOptions.allowedTools = ['Task', 'TodoWrite', 'Read', 'Grep', 'Glob', 'Write', 'Edit', 'Bash']; queryOptions.allowedTools = ['Task', 'TodoWrite', 'Read', 'Grep', 'Glob', 'Write', 'Edit', 'Bash'];
if (effectiveMode === 'handlanger') { if (effectiveMode === 'handlanger') {
queryOptions.tools = ['Task', 'TodoWrite']; sendMonitorEvent('agent', 'Handlanger: Delegation per System-Prompt durchgesetzt', {
sendMonitorEvent('agent', 'Handlanger: Main nur Task+TodoWrite, Sub-Agents mit vollem Tool-Set', {
mode: effectiveMode, mode: effectiveMode,
mainTools: queryOptions.tools,
}); });
} else if (effectiveMode === 'experten') { } else if (effectiveMode === 'experten') {
queryOptions.tools = ['Task', 'TodoWrite', 'Read', 'Grep', 'Glob']; sendMonitorEvent('agent', 'Experten: Multi-Agent via System-Prompt', {
sendMonitorEvent('agent', 'Experten: Main lesen+delegieren, Sub-Agents voll', {
mode: effectiveMode, mode: effectiveMode,
mainTools: queryOptions.tools,
}); });
} else {
// solo: volles Preset
queryOptions.tools = { type: 'preset', preset: 'claude_code' };
} }
let conversation = query({ let conversation = query({