Neue gueltige Zellen in Iteration 3 - claude-opus-5/solo/high: 363 Anforderungen, 99,7 % mit Primaerbeleg, Belege je Anforderung Median 2,0, 38,1 Mio. Tokens - claude-fable-5/solo/high: 241 Anforderungen, 98,3 % mit Primaerbeleg, 89,0 % PRIMAER-Anteil, vollstaendig regelkonform, 30,6 Mio. Tokens Damit sind 6 von 12 Zellen des Rasters belegt. Zwei Befunde daraus: Die Belegdichte folgt dem Modell, nicht dem Effort. Opus erreicht Median 2,0 auch auf high; alle 44 Sonnet-Laeufe lagen bei 1,0. max hebt Opus auf 3,0. Die frueher dem Effort zugeschriebene Verdopplung ist damit eingegrenzt. Die Fable-Modellverletzung ist reproduziert und abgegrenzt. Bei builtin laufen die Subagenten auf claude-opus-5[1m] statt Fable (zweiter Fall nach Iteration 1), bei solo dagegen sauber. Nicht das Modell ist die Ursache, sondern Fable in Kombination mit Delegation. Fehlmessungen, vollstaendig protokolliert - vier 429-Abbrueche (Session-Kontingent) aus dem Parallelblock 19:59; drei davon mit Teilbestand, einer ohne Ergebnis - opus-5/builtin/high zum dritten Mal gescheitert: 790,7 Mio. Tokens ueber drei Anlaeufe ohne Artefakt. Zelle mit dieser Prompt-Version nicht messbar. Skill 7.0.0 (MAJOR) - Isolationsmechanismus modusabhaengig: --safe-mode schaltet MCP-Server und Custom-Agenten ab und ist mit V2/V3 unvereinbar. Smoke-Test verifiziert: mit Flag spawned=0, ohne Flag spawned=2. Ersatz fuer custom/MCP: --strict-mcp-config plus --disallowedTools Skill WebSearch WebFetch SlashCommand. - 6.1.0: Pflichtpruefung leeres Ergebnisverzeichnis = Fehlmessung unabhaengig von is_error; CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0; Protokollfeld Gueltigkeit - extract-subagenten.py: Start-Quittung wird nicht mehr als Ertragsmass ausgewiesen Versuch 2 und 3 vorbereitet - Prompt-Kette V1 -> V2 (02-A, angepasst an Agentendateien) -> V3 (02-B, MCP) - V2: acht Rollen inkl. nicht delegierendem ISO-29148-Orchestrator - V3: elf Rollen, fuenf Werkzeugserver, neue Belegklasse LAUFZEIT Ablaufprotokoll um Phase 6 und 7 sowie die Vorbereitung von V2/V3 ergaenzt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Versuch 03 – Werkzeugzugriff (V3)
Wie Versuch 2, zusätzlich externe Werkzeugserver – einschließlich Zugriff auf das laufende
ERP-System. Agentenmodus custom, dazu --mcp-config 01_MCP.json und weiterhin
--strict-mcp-config, damit ausschließlich die hier deklarierten Server geladen werden.
Dateien
| Datei | SHA-256 | Zweck |
|---|---|---|
01_Prompt.md |
E65A696C…6A06E1 |
Analyseanweisung, Prompt-Version 02-B |
01_Agents.json |
EDCB8001…C49B55 |
elf Agentenrollen |
01_MCP.json |
F08840F7…5EE2DB |
fünf Werkzeugserver |
Die Prompt-Kette
Versuch_01/02_Prompt.md → Versuch_02/01_Prompt.md (02-A, angepasst an Agentendateien) →
Versuch_03/01_Prompt.md (02-B, angepasst an MCP-Server).
V3 erbt damit den Abschnitt Arbeitsteilung aus V2 unverändert. Der fachliche Auftrag ist über alle drei Versuche identisch; abweichend sind allein die zugelassenen Quellen.
Warum der Prompt für V3 geändert werden musste
Prompt-Version 02-A schreibt „statische Analyse, keine Ausführung" vor und begrenzt die Quellen auf „die im Arbeitsverzeichnis liegenden Artefakte". Ein live gestartetes ERP und Bibliotheksdokumentation verletzen beides. Ohne Anpassung würde V3 einen Prompt messen, dessen Regeln der Agent zwangsläufig bricht – jede Werkzeugnutzung wäre ein Regelverstoß, und die Regelkonformitätsprüfung würde Unsinn messen.
| Änderung | Grund |
|---|---|
| Quellenbeschränkung um Beobachtung am laufenden System erweitert | sonst ist Werkzeugnutzung regelwidrig |
| Neuer Schritt 2b „Beobachtung am laufenden System", ausdrücklich lesend | dynamische Analyse ist der Untersuchungsgegenstand von V3 |
Neue Belegklasse LAUFZEIT, nachrangig gegenüber PRIMÄR |
beobachtetes Verhalten belegt nicht, wo die Regel durchgesetzt wird |
| Herkunft fremden Wissens kennzeichnen | trennt Framework-Verhalten von Geschäftsregeln |
Unverändert: Auftrag, Scope, Arbeitsteilung, Vorgehensschritte 0 bis 6, Blockformat, Prüfidee, Tracelinks, Konsolidierungsbegriff, Ergebnisstruktur.
LAUFZEIT ersetzt PRIMÄR nicht. Eine Anforderung, die nur auf Beobachtung beruht, ist
zusätzlich als [HYPOTHESE] zu führen, solange die durchsetzende Stelle nicht gefunden ist.
Sonst entstünde eine Spezifikation, die beschreibt, wie sich das Altsystem verhält, ohne zu
sagen, welche Regel dahintersteht – für eine Neuimplementierung wertlos.
Die elf Rollen
Die acht aus Versuch 2 – darunter der nicht delegierende iso29148-orchestrator – plus drei
werkzeuggestützte:
| Rolle | Werkzeug | Beitrag |
|---|---|---|
laufzeitanalyst |
windows-mcp, playwright | Oberflächenverhalten, Feldvalidierungen, Fehlermeldungen im Wortlaut |
datenanalyst |
mssql (nur SELECT) |
tatsächliche Wertebereiche, Wirksamkeit von Constraints, Nutzungsgrad |
frameworkabgrenzer |
context7 | trennt Framework-Standardverhalten von echten Geschäftsregeln |
Der größte Hebel des laufzeitanalyst ist nicht das Bildschirmfoto, sondern die Fehlermeldung
im Wortlaut: Sie lässt sich per Volltextsuche in die durchsetzende Codestelle zurückverfolgen
und liefert dem faktenermittler damit den Suchbegriff für einen Primärbeleg. Dessen Prompt
wurde für V3 um genau diesen Hinweis ergänzt.
Der datenanalyst liefert als Einziger einen harten Beleg für die Einstufung veraltet: Ein im
Code definierter Status, der in keinem Datensatz vorkommt, ist toter Code. Umgekehrt beweisen
Datensätze, die eine im Code geprüfte Regel verletzen, dass die Regel nicht durchgesetzt
wird – ein Befund, der die Belegeinstufung einer Anforderung ändert.
Die fünf Werkzeugserver
| Server | Beitrag | In der Arbeit genannt? |
|---|---|---|
serena |
semantische Codenavigation: Referenzsuche, Aufrufhierarchie | ja (Symbol-Navigation) |
mssql |
Datenlage des laufenden Systems, read-only | ja (Datenbank-Inspektion) |
windows-mcp |
Bedienung des WPF-Clients, Bildschirmfotos | ja (GUI-Beobachtung, optional) |
playwright |
Blazor-Webportal (Nexus) und REST-API | ja (GUI-Beobachtung, optional) |
context7 |
Bibliotheksdokumentation für den frameworkabgrenzer |
nein – bewusste Erweiterung |
serena trifft die gemessene Schwachstelle direkt: grep findet Text, nicht „wer setzt diese
Regel durch". playwright deckt den Systemteil ab, den windows-mcp nicht erreicht – die
Codebasis enthält neben dem WPF-Client ein Blazor-Portal und eine REST-API.
context7 steht nicht in der Aufzählung der Arbeit und ist eine bewusst hinzugenommene
Erweiterung. Zu beachten: Er ist der einzige der fünf Server, der nicht lokal betrieben wird.
Ausgeschlossen, mit Begründung:
memory (Knowledge Graph) – der kritische Fall. Er trägt Zustand zwischen Läufen.
Wiederholungsmessungen wären nicht mehr unabhängig: Lauf 2 profitierte von Lauf 1, und die
Varianzaussage, für die in Versuch 1 siebzehn Läufe erhoben wurden, wäre wertlos. Soll er dennoch
eingesetzt werden, muss der Speicher vor jedem Lauf nachweislich geleert und das im Protokoll
belegt werden.
sequential-thinking – dupliziert den --effort-Parameter, der sich in Versuch 1 als wirksamste
Einzelvariable erwiesen hat (Belegdichte Median 1,0 auf high gegenüber 2,0–3,0 auf max).
Beide gleichzeitig zu variieren wiederholte den Fehler des Fable-Blocks aus Iteration 1, wo
Modell und Effort zusammen wechselten und der Befund unzuordenbar blieb.
fetch – unbegrenzter Webzugriff macht die Herkunft von Aussagen unprüfbar; context7 ist die
engere, zitierbare Variante.
Wichtig: --safe-mode ist hier nicht verwendbar
--safe-mode schaltet ausweislich der CLI-Hilfe „all customizations (CLAUDE.md, skills, plugins,
hooks, MCP servers, custom commands and agents, output styles, …)" ab – also genau das, was
dieser Versuch untersucht. Smoke-Test am 2026-08-26 (CLI 2.1.246, identischer Aufruf, nur das
Flag variiert):
| Konfiguration | spawned |
by_type |
|---|---|---|
mit --safe-mode |
0 | leer – „die Rollen sind nicht in der Agent-Registry registriert" |
ohne --safe-mode |
2 | {"modulinventar": 1, "konsistenzpruefer": 1} |
Ohne diesen Test wäre der erste Lauf stillschweigend als V1-Lauf gemessen worden: --agents
hätte keine Wirkung gehabt, der Lauf hätte fehlerfrei durchlaufen und Anforderungen erzeugt – nur
eben ohne die Rollen, die den Versuch ausmachen.
Der Ersatz (Skill 7.0.0): kein --safe-mode, stattdessen --strict-mcp-config und
--disallowedTools Skill WebSearch WebFetch SlashCommand zusätzlich zur 33er-Denylist.
Gegengeprüft mit derselben Werkzeugabfrage: VORGELADEN: NICHTS VORGELADEN · SKILLS: KEINE ·
WEB: KEIN WEBZUGRIFF · alle Rollen verfügbar. Ohne die Sperre lädt die CLI 16 global
installierte Skills (darunter code-review, security-review, run, init);
--setting-sources '' unterdrückt sie nicht.
Was der Ersatz nicht abdeckt: Plugins, Hooks und Output-Styles. Auf der Versuchsmaschine ist davon nichts konfiguriert, das ist aber eine Eigenschaft der Umgebung und keine Garantie. Der Skill verlangt deshalb vor jedem Lauf eine Umgebungsprüfung, deren Ergebnis ins Protokoll geht.
Folge für die Vergleichbarkeit: Läufe dieses Versuchs sind hinsichtlich der Isolation nicht
unmittelbar mit den solo- und builtin-Läufen aus Versuch 1 vergleichbar. Der Unterschied ist
benannt und begrenzt – er betrifft Plugins, Hooks und Output-Styles, nicht CLAUDE.md, Skills,
Webzugriff oder MCP.
Vor dem ersten Lauf zu erledigen
- Zugangsdaten in
01_MCP.jsonsind Platzhalter. Der MSSQL-Benutzer muss ein reiner Lesebenutzer sein – die Leseregel im Agentenprompt ist eine Anweisung, keine Absicherung. Die ausgefüllte Datei gehört nicht ins Repository. - Serverversionen festhalten.
@latestunduvxohne Versionsbindung machen den Lauf unreproduzierbar. Vor dem ersten Messlauf pinnen und die Versionen ins Protokoll übernehmen. - Zustand des laufenden Systems protokollieren. Ein laufendes ERP mit eigener Datenbank ist Teil des Untersuchungsgegenstands, steckt aber nicht im Git-Snapshot. Datenbankstand, Mandant und Datenart (Produktiv-, Test- oder Demodaten) sind je Lauf festzuhalten; sonst sind V3-Läufe untereinander nicht vergleichbar.
- Skill erweitern: Es gibt noch kein Protokollfeld für die MCP-Konfiguration. Pfad und
SHA-256 von
01_MCP.jsongehören wie die Agentendefinition ins Protokoll. - Modellbedingung. Wie in V2: bei Delegation über
--modelallein nicht herstellbar – nach jedem LaufmodelUsageprüfen. extract-subagenten.pyist nicht gegencustom-Agententypen geprüft.
Einordnung
V3 ändert Werkzeugkonfiguration und Prompt und eröffnet damit nach der Regel aus Skill 4.4.0 zwingend eine neue Iteration. Läufe aus V1, V2 und V3 sind nicht poolbar; der Vergleich zwischen ihnen ist der Zweck, nicht die Wiederholungsmessung.