Files
Masterarbeit/Versuche/AblaufProtokoll.md
T
Christoph SchwörerandClaude Opus 5 3d5b691bfa Iteration 3: Modell- und Modusraster erweitert, Skill 7.0.0, V2/V3 vorbereitet
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>
2026-08-27 08:03:00 +02:00

50 KiB
Raw Blame History

Ablaufprotokoll der Versuchsdurchführung

Zeitraum: 25.–26. August 2026 Ablage der Läufe: Versuche/Versuch_01/Tag 1/ – alle 24 Läufe entstanden am 25. August Untersuchungsgegenstand: c-entron ERP-Suite, eingefrorener Snapshot 79c1142 Zweck dieses Dokuments: Grundlage für den Ergebnisteil der Arbeit (Kapitel 5 und 6).

Festgehalten wird, wie Prompt und Versuchsaufbau schrittweise entstanden sind, welche Läufe durchgeführt wurden und welche Erkenntnisse sich daraus ergeben haben. Der methodisch wesentliche Punkt: Der Versuchsaufbau ist nicht vorab fertig gewesen, sondern an den Läufen gewachsen. Jede Änderung geht auf eine konkrete Beobachtung zurück. Diese Kopplung ist hier dokumentiert, damit im Ergebnisteil nachvollziehbar bleibt, welche Messung unter welchen Bedingungen entstand.


1. Ausgangslage

Zu Beginn lagen vor:

  • ein Initial-Prompt (Versuche/Versuch_01/01_Prompt.md) mit der Analyseanweisung nach ISO/IEC/IEEE 29148, abgestimmt auf die RRE-Methodenkette aus Kapitel 4
  • ein Skill run-experiment (Version 1.0.0), der den Prompt als Headless-Lauf ausführt und ein Messprotokoll schreibt
  • die Codebasis als eigenständiges Git-Repository mit aktivem GitHub-Remote

Nicht vorhanden waren: eine belastbare Isolationsstrategie, eine Definition der zu erhebenden Messgrößen über Tokens und Dauer hinaus, und jede Vorstellung davon, wie stark Läufe unter gleichen Bedingungen streuen.


2. Chronologie in sieben Phasen

Phase 1 – Erster Lauf und die Entdeckung der Werkzeugkonfiguration (12:29–13:00)

Der erste Lauf offenbarte sofort ein Grundproblem: Das Codebasis-Verzeichnis enthielt genau die Dinge, die die Versuchsbedingung „keine Agentendateien, keine MCP-Server" ausschließt – eine CLAUDE.md mit 201 Zeilen Projektkontext, AGENTS.md, drei projektspezifische Subagenten, 34 Skill-Definitionen, sechs Slash-Commands, elf Serena-Memories und einen aktiven MCP-Server.

Diese Dateien wurden vor dem Lauf gelöscht und danach per git restore zurückgesetzt.

Ergebnis: 96 Anforderungen, 13,1 Mio. Tokens, 36 Permission-Denials (32 × Bash, 4 × PowerShell). Der Lauf war unter --permission-mode acceptEdits gestartet – dieser Modus erlaubt Dateibearbeitungen, aber keine Shell-Ausführung. Der Agent wich auf Read, Grep und Glob aus; Verzeichnisinventuren und Dateizählungen standen ihm nicht zur Verfügung. Von rund 85 Business-Logic-Modulen blieben 55 bis 60 unanalysiert.

Auslöser für die erste große Skill-Änderung.

Phase 2 – Werkzeugfreigabe, Isolation und der eingefrorene Snapshot (13:49–15:00)

Zwei Entscheidungen fielen zusammen:

Shell-Zugriff wird Standard. --allowedTools "Bash" "PowerShell" mit einer Denylist von 33 Einträgen für schreibende und bauende Kommandos. Die Read-only-Eigenschaft der Codebasis wird weiterhin über den Vorher/Nachher-Vergleich per git status nachgewiesen; die Denylist senkt das Risiko, ersetzt die Verifikation aber nicht.

Isolation über --safe-mode – und die Erkenntnis, dass das nicht reicht. Ein Kontrolltest belegte: --safe-mode unterdrückt zuverlässig das Vorladen von CLAUDE.md als Systemanweisung – ohne das Flag zitiert der Agent deren Inhalt, mit dem Flag antwortet er „NICHTS VORGELADEN". Es verhindert jedoch nicht, dass der Agent diese Dateien mit Shell-Zugriff selbst liest. Im Smoke-Test tat er genau das.

Konsequenz: Die KI-Konfigurationen wurden dauerhaft aus der Codebasis entfernt (Commit 79c1142, 92 Dateien), das GitHub-Remote entkoppelt und der Stand als Versuchssnapshot eingefroren. Damit ist die Bedingung „keine Agentendateien" eine Eigenschaft des Untersuchungs- gegenstands und muss nicht pro Lauf hergestellt werden.

Lauf 2 brach nach 24 Minuten mit einem API-Transportfehler ab („The response stopped arriving"), nachdem vier von sieben Artefakten geschrieben waren. Kein Konfigurationsproblem – permission_denials war 0.

Lauf 3 lief vollständig durch: 106 Anforderungen, 11,5 Mio. Tokens, 0 Denials, 23:40 statt 31:31. Schneller, sparsamer und ergiebiger als Lauf 1 – die Werkzeugfreigabe schien sich in jeder Dimension auszuzahlen.

Phase 3 – Der Varianzbefund (15:05–19:31)

Lauf 4 unter identischer Konfiguration lieferte 55 Anforderungen – knapp die Hälfte von Lauf 3 – bei höheren Kosten. Der Agent hatte diesmal keinen einzigen Subagenten gestartet und stattdessen 147 eigene Turns absolviert.

Das war der Wendepunkt der Reihe. Die naheliegende Erklärung – die Subagentenzahl bestimmt den Ertrag – hielt der nächsten Messung nicht stand: Lauf 5 startete 14 Subagenten und lieferte 325 Anforderungen bei 52,7 Mio. Tokens; Lauf 6 startete ebenfalls 7 wie Lauf 3, lieferte aber 189 statt 106 Anforderungen bei dreifachem Verbrauch.

Nicht die Anzahl der Subagenten erklärt die Streuung, sondern die Freiheit, die Analyse überhaupt selbst zu zerlegen.

Um das zu prüfen, wurde der Modus solo eingeführt: Task, Agent und Workflow gesperrt, sodass keine Delegation möglich ist. Ein Verifikationstest bestätigte die Sperre (spawned: 0, Antwort „KEINE SUBAGENTEN MOEGLICH") und deckte dabei auf, dass der Agent nach der Sperre von Task/Agent auf Workflow auswich – dieses Werkzeug orchestriert ebenfalls Subagenten und musste ergänzt werden.

Fünf Solo-Läufe (42, 82, 60, 73, 67 Anforderungen) gegen neun Builtin-Läufe ergaben:

V1 (solo) V1b (builtin)
Anforderungen 42 – 82 (Faktor 2,0) 55 – 325 (Faktor 5,9)
Tokens 4,4 – 12,6 Mio. (Faktor 2,9) 11,5 – 52,7 Mio. (Faktor 4,6)
Median Tokens 5,1 Mio. 30,1 Mio.

Zentraler Befund der Reihe. Die selbstgewählte Zerlegung in Subagenten ist die dominierende Störgröße. Wird sie unterbunden, halbiert sich die Streuung mehr als, und der Verbrauch sinkt um Faktor 6.

Phase 4 – Modellvergleich und die Grenzen der Steuerbarkeit (19:59–23:10)

Um zu prüfen, ob die Streuung modellabhängig ist, wurde dieselbe Bedingung mit zwei weiteren Modellen wiederholt.

Opus 5, solo, fünf Läufe: 71 – 182 Anforderungen (Median 114), 13,6 – 24,9 Mio. Tokens (Median 22,8). Gegenüber Sonnet: 1,7-mal mehr Anforderungen bei 4,5-fachem Verbrauch, also rund das 2,7-fache an Tokens je Anforderung. Die Streuung blieb im selben Rahmen – der Modellwechsel verschiebt das Niveau, nicht die Stabilität.

Fable 5, solo, Effort max, zwei Läufe: 207 und 148 Anforderungen bei 24,2 und 31,1 Mio. Tokens – der höchste Solo-Verbrauch der Reihe, vom nominell sparsamsten Modell. Die Thinking-Tokens (35.220 und 39.609) übertreffen jeden der 21 Vorläufe deutlich; der bisherige Höchstwert lag bei 24.179. Das spricht für den Effort als Treiber, ist aber nicht beweisbar, weil Modell und Effort gleichzeitig gewechselt wurden.

Fable 5, builtin – ein Fehlschlag mit Erkenntniswert. --model claude-fable-5 steuerte nur den Hauptagenten. Die 13 Subagenten liefen auf claude-opus-5[1m], dem Standardmodell aus den Sitzungseinstellungen. Auf sie entfielen 136,7 von 150,3 Mio. Tokens – 91 %. Eine Gegenprüfung über alle 24 Läufe grenzte den Fall eindeutig ein: Sonnet und Opus werden an Subagenten durchgereicht, Fable nicht.

Konsequenz: Bei Modus builtin ist das Modell nicht allein durch das Flag festgelegt. Der Abgleich der tatsächlich eingesetzten Modelle wurde zur Pflichtprüfung.

Phase 5 – Nachbereitung und Ausrichtung auf die Arbeit (26.08.)

Nach Abschluss der Läufe folgte die Konsolidierung. Sie ist kein bloßes Aufräumen: Mehrere Schritte haben Messfehler aufgedeckt oder die Belastbarkeit der Ergebnisse erst hergestellt.

Aufwandsgröße von Kosten auf Tokenverbrauch umgestellt (Skill 3.5.0). USD-Beträge hängen an Preisliste und Modellwahl und veralten; Token sind die unmittelbare Verbrauchsgröße. Bei der Umstellung fiel auf, dass sich die berichteten Streuungsfaktoren ändern: In Dollar lag V1 gegen V1b bei Faktor 2,1 zu 5,6, in Token bei 2,9 zu 4,6. Cache-Read-Token werden günstiger abgerechnet als Output-Token – eine reine Tokensumme gewichtet sie gleich, der Preis nicht. Die inhaltliche Aussage bleibt, der Abstand ist geringer als die Dollarwerte nahelegten.

Verschachtelte Subagenten verifiziert (Skill 3.6.0). Bis dahin war unbelegt, ob Subagenten auf Tiefe 2 in die Tokensumme einfließen. Ein Kontrolltest mit erzwungener Kaskade, bei dem ausschließlich der Enkel-Agent arbeitete, ergab 49.103 Token im Hauptagenten gegenüber 1.689.288 in modelUsage – die Differenz stammt nachweislich von der tieferen Ebene. Nebenbefund: Subagenten-Transkripte werden nicht separat persistiert, ihre Prompts sind daher nicht rekonstruierbar, ihre Tokens dagegen vollständig erfasst.

Untersuchungsgegenstand im Arbeitsrepository gesichert. Die Codebasis war nur als Gitlink auf 79c1142 getrackt – ohne .gitmodules und ohne erreichbares Remote, nachdem das GitHub-Remote zu Versuchsbeginn entkoppelt worden war. Ein Klon des Arbeitsrepositories hätte ein leeres Verzeichnis erhalten; keiner der 3.287 Anforderungsbelege wäre überprüfbar gewesen. Die Historie wurde aus dem Arbeitsbaum ausgelagert und der Dateiinhalt als reguläre Dateien aufgenommen: 24.557 Dateien, rund 333 MB. Prompts, Protokolle, Ergebnisartefakte und der analysierte Quellcode sind damit gemeinsam versioniert.

Maschinelle Auswertung der Anforderungen (Skill 3.9.0). Die Protokolle maßen bis dahin nur den Aufwand, nicht den Ertrag. Ein Auswertungsskript parst die 3.287 Anforderungsblöcke und erhebt Verteilung, Typen, Belegqualität, Status und – methodisch am wertvollsten – die Regelkonformität gegen die Vorgaben des Prompts selbst. Erste Anwendung deckte sofort Verstöße gegen die risikobasierte Priorisierung auf, die von Hand nicht auffindbar gewesen wären.

Ordnerstruktur nach Bedingungen (Skill 3.10.0, später 4.1.0). Modell, Agentenmodus und Effort wurden von Namensbestandteilen zu Ordnerebenen; darüber kam die Ebene <Versuchstag>. Die Zellenbelegung ist damit unmittelbar abzählbar – und die Struktur macht sichtbar, dass von den möglichen Kombinationen nur fünf belegt sind.

Ausrichtung auf Kapitel 4 (Skill 4.0.0). Prompt und Skill waren organisch gewachsen und stellenweise nicht mehr deckungsgleich mit dem Versuchsdesign der Arbeit. Der Prompt enthielt Aussagen zur Werkzeugkonfiguration, die ihn an ein bestimmtes Werkzeug banden; der Skill verankerte weder den Evaluationsrahmen noch die geforderten Reproduzierbarkeitsangaben. Beides wurde getrennt: Der Prompt trägt seither ausschließlich die Analyseanweisung, der Skill den Prozess. Werkzeugkontext und Ausgabeverzeichnis werden zur Laufzeit angehängt.

Dabei fiel die Zuordnungsfrage an: Die Arbeit kannte nur V1 „Prompt-only, keine Agentendateien". Werkzeugeigene Subagenten sind keine Agentendateien und wären nach Wortlaut in V1 erlaubt – ihr Einsatz verändert die Ergebnisse aber erheblich. Entschieden wurde V1 = solo, V1b = builtin; Kapitel 4 der Arbeit wurde um V1b und um einen Absatz zum vorgezogenen Modellvergleich ergänzt.

Prompt-Version 02 (Skill 4.2.0). Auf Basis der Auswertung entstand die erste echte Iteration – ausführlich in Abschnitt 7.

Phase 6 – Prompt-Version 02, zehn Läufe und ein geänderter Untersuchungsgegenstand (26.08., ab 08:43)

Prompt-Version 02 wurde erstmals gemessen: ein serieller Lauf, danach zwei Parallelblöcke zu vier und fünf Läufen. Zwischen den Blöcken änderte sich der Untersuchungsgegenstand, weshalb die zehn Läufe auf Iteration 2 (fünf Läufe, ohne DB-Schema) und Iteration 3 (fünf Läufe, mit verfügbarem DB-Schema) aufgeteilt sind. Alle zehn liefen unter claude-sonnet-5 / solo / high.

Die Menge wird gebunden, die Struktur nicht. Iteration 2 ergab 123 bis 185 Anforderungen (Faktor 1,50) gegenüber 42 bis 82 unter Prompt-Version 01 (Faktor 2,0). Das Modulinventar aus Schritt 0 bindet die Anzahl also messbar. Die Ebenenverteilung streut dagegen über beide Iterationen extrem – von 92,7 % auf Stakeholder- bis 89,4 % auf Softwareebene:

Lauf It. Anf. StRS/SyRS/SwRS Primärbeleg Tracelinks Risiko offen Tokens
d6f9 (seriell) 2 170 20/120/30 85,3 % 100 % 1 von 51 35,7 Mio.
3983 2 185 37/28/120 34,6 % 100 % 18 von 49 17,3 Mio.
4840 2 123 114/2/7 56,1 % 56,9 % 1 von 17 53,4 Mio.
f631 2 156 40/56/60 98,1 % 91,7 % 0 18,2 Mio.
c69e 2 160 21/15/124 73,8 % 100 % 2 von 42 13,0 Mio.
0848 3 211 134/39/38 43,6 % 49,8 % 7 von 46 11,4 Mio.
1b24 3 215 34/101/80 42,8 % 100 % 8 von 48 49,7 Mio.
2316 3 175 20/36/119 78,3 % 100 % 0 48,3 Mio.
3ef5 3 237 25/28/184 38,8 % 100 % 9 von 51 68,9 Mio.
b652 3 151 7/9/135 96,0 % 100 % 0 42,9 Mio.

Der Prompt verlangt in Schritt 0b je Modul mindestens eine Anforderung, sagt aber nicht, auf welcher Ebene. Genau diese Lücke erzeugt die verbliebene Streuung. Auch der Inventarbegriff ist je Lauf ein anderer: 120 fachliche Module, 133 nach fachlich und technisch getrennt, oder eine Gliederung nach Verzeichnisstruktur des WPF-Clients. Für Prompt-Version 03 ist das der konkreteste Ansatzpunkt.

Befund 6.1 bestätigt sich – in verschärfter Form. Über alle zehn Läufe korrelieren Anforderungszahl und Primärbelegquote negativ (Pearson −0,63, Spearman −0,70). Die Läufe mit der besten Belegqualität liefern die wenigsten Anforderungen (f631 98,1 % bei 156, b652 96,0 % bei 151), die mengenstärksten die schlechteste (3ef5 38,8 % bei 237, 3983 34,6 % bei 185). Die Anforderungszahl ist damit nicht nur kein Qualitätsmaß – als Maß genommen zeigt sie ins Gegenteil.

Der Untersuchungsgegenstand änderte sich mitten im Betrieb (10:28:08). SSMS_DB_SCHEMA.sql kam in das Arbeitsverzeichnis: 3.266.626 B, 76.793 Zeilen, 1.558 Tabellen, 182 Views, 63 Prozeduren, 30 Funktionen, 134 Fremdschlüssel. Der Prompt fordert Datenbankschemata in Schritt 2 ausdrücklich als Quelle; Läufe mit und ohne die Datei sind nicht poolbar. Die Vorher/Nachher- Prüfung erfasste die Änderung selbsttätig – _meta/before.txt der neuen Läufe ist 46 B statt 2 B. Der Snapshot wurde als eigener Commit f349d189 festgeschrieben.

Verfügbarkeit ist nicht Nutzung. Von den fünf Läufen der Iteration 3 haben nur drei das Schema geöffnet (0848, 1b24, 2316); 3ef5 und b652 haben es in der Verzeichnisauflistung gesehen und ignoriert. Ob das Schema genutzt wird, ist damit eine abhängige Variable und wird seither je Lauf erhoben – über Werkzeugaufrufe, deren Eingabe den Dateinamen nennt, nicht über Texttreffer im Transkript.

Ein Verbrauchseffekt ist nicht belegt: 0848 nutzte das Schema und war mit 11,4 Mio. Tokens der sparsamste Lauf beider Iterationen, 2316 nutzte es ebenfalls und verbrauchte 48,3 Mio. 3ef5 nutzte es nicht und war mit 68,9 Mio. der teuerste. Der Median der Anforderungszahl steigt von 160 (Iteration 2) auf 211 (Iteration 3), aber die Spannen überlappen deutlich (123–185 gegen 151–237), und innerhalb der Iteration 3 trennt die Nutzung die Läufe nicht. Bei n = 5 je Gruppe ist das ein Hinweis, keine Wirkung.

Ein Lauf lag auf der Grenze und wurde am Transkript entschieden. 094249_v4.2.1-4840 startete um 09:43 ohne die Datei und lief noch, als sie erschien. Sein Transkript enthält null Treffer für SSMS_DB_SCHEMA, CentronVOED2 und .sql – er gehört zweifelsfrei zu Iteration 2. Dabei fiel eine Grenze der Read-only-Verifikation auf: Sein before.txt und sein after.txt sind beide leer, aber aus verschiedenen Gründen (vorher existierte die Datei nicht, nachher war sie committet). Zwei gleiche Messwerte bei ungleichen Zuständen – für künftige Läufe wäre der Snapshot zusätzlich über einen Inhaltshash zu führen.

Drei Defekte am Messinstrument aufgedeckt und behoben. Keiner ließ einen Lauf fehlschlagen, alle drei hätten Protokollangaben verfälscht:

  • Root-Prüfung ohne Pfadfilter (Skill 4.2.1). Seit die Codebasis als Dateien im Arbeitsrepo liegt statt als Gitlink, lieferte git -C <root> status --porcelain den Status des gesamten Arbeitsrepos – rund 55 KB, praktisch nur Versuchsdateien.
  • Ebenenbestimmung nach Dateiname (Skill 4.3.0). Das Auswertungsskript leitete die Ebene einer Anforderung aus der Datei ab, in der ihr Block stand. c69e legte 12 StRS- und 5 SyRS-Blöcke in SwRS.md ab; die Verteilungstabelle meldete 9/10/141 statt der tatsächlichen 21/15/124. Der Agent hatte korrekt gezählt, das Skript widersprach ihm zu Unrecht. Alle 24 Läufe der Iteration 1 wurden gegengeprüft: keine Fremdablage, ihre Protokolle bleiben gültig.
  • Schema-Nutzung über Texttreffer. Die erste Fassung der Erhebung zählte Vorkommen im Transkript und stufte b652 als Nutzer ein – der Treffer stammte aus der Verzeichnisauflistung. Gezählt werden seither nur Werkzeugaufrufe mit dem Dateinamen in der Eingabe.

Die Fremdablage aus dem zweiten Punkt ist kein Skriptartefakt, sondern ein Befund zur Set-Qualität: Die Dreiteilung StRS / SyRS / SwRS ist dann nicht mehr an der Dateistruktur ablesbar.

Die Denylist erzeugt systematisch Streudateien. Drei der zehn Läufe (f631, b652, 3ef5) ließen Arbeitsdateien im Ergebnisordner zurück – bis zu sechs bei 3ef5. In allen Fällen hatte der Agent versucht, sie aufzuräumen (rm, Remove-Item), und wurde von der Denylist gestoppt; die Löschversuche machen den Großteil aller Permission-Denials dieser Läufe aus. Die Dateien bleiben bewusst liegen: Nachträgliches Löschen würde die Artefaktlage verändern. Der Befund gehört zur Werkzeugkonfiguration, nicht zum Modell – die Denylist sperrt Löschbefehle pauschal, auch im Laufverzeichnis, für das der Agent Schreibrecht hat.

Zwei Umbenennungen (Skill 4.4.0). Die Ordnerebene <Versuchstag> heißt jetzt <Iteration>: Der alte Name band sie an das Kalenderdatum, obwohl sie die Vergleichbarkeit abbildet – Iteration 2 und Iteration 3 entstanden am selben Tag. Weil „Iteration" mit der Fassung der Prompt-Datei kollidierte, heißt diese seither Prompt-Version. Die Prompt-Dateien selbst blieben unverändert: Ihre SHA-256 sind in 33 Protokollen dokumentiert.

Phase 7 – Delegation, Effort und zwei Totalausfälle (26.08., ab 12:50)

Nach den zehn solo-Läufen folgten drei Zellen, die die verbliebenen Stellschrauben trennen sollten: builtin mit Sonnet, max-Effort mit Opus, und builtin mit Opus.

Der Effort ist die wirksamste Einzelvariable der gesamten Reihe. Über alle 44 Läufe auf high lag der Median konstant bei einem Beleg je Anforderung – genau der Befund, wegen dem Prompt-Version 02 geschrieben wurde und der sich unter Version 02 auf high sogar verschärft hatte. Die drei max-Läufe liegen bei 2,0 / 2,0 / 3,0:

Lauf Anf. Belege/Anf. mit Primärbeleg Risiko offen Tokens
a8f5 380 2,0 95,5 % 0 von 112 67,5 Mio.
37c5 434 2,0 100 % 0 von 100+ 77,3 Mio.
fcdf 446 3,0 98,2 % 0 von 139 116,2 Mio.

Alle drei erfüllen sämtliche fünf Regelkriterien. Damit kippt auch die Anti-Korrelation: Über die zehn solo/high-Läufe liefen Anforderungszahl und Belegqualität gegeneinander (Pearson −0,63, Spearman −0,70); auf max treten beide zusammen auf. Der Zielkonflikt war kein Gesetz, sondern Folge zu knappen Aufwands. Das beantwortet zugleich die in Abschnitt 8 offene Frage nach dem Fable-Block teilweise: Der Verbrauchssprung dort kam nicht allein vom Modell.

max zeigt sich nicht in Thinking-Tokens. a8f5 liegt mit 51.019 im Bereich der high-Läufe (33.051–55.760). Der Mehraufwand steckt in Turns und Laufzeit: 210 bis 371 Turns, 1:34 bis 2:33 Stunden. Die Vermutung aus Iteration 1, max sei an den Thinking-Token-Werten erkennbar, trägt nicht.

Bei builtin entscheidet die Beauftragung der Subagenten, nicht deren Anzahl. Drei Läufe, gleicher Prompt, gleiches Modell:

Lauf Subagenten Auftragsart Anf. mit Primärbeleg
4048 6 „concrete, citable FACTS only … find the EXACT enforcing location" 185 97,8 %
fb24 31 (2 Ebenen) „Research … M01–M20" mit Faktenpflicht 383 96,9 %
f8b4 8 „quickly inspect … open 1-3 representative files" 276 46,4 %

Aus einer Stichprobe von ein bis drei Dateien lässt sich kein Primärbeleg gewinnen – die durchsetzende Stelle liegt fast nie in der Datei, die repräsentativ aussieht. Damit hat Befund 6.3 erstmals eine inhaltliche Erklärung statt nur einer Zahl. Genau dafür wurde die Erfassung der Subagenten-Prompts in Skill 3.3.0 eingeführt.

Nebenbefund: fb24 verlagerte 63,5 % seines Verbrauchs auf die Subagenten, 4048 sogar 78,4 %, bei nur 26 Turns im Hauptagenten. Delegation verschiebt den Verbrauch, ohne ihn zwangsläufig zu erhöhen – anders als in Iteration 1, wo builtin deutlich über solo lag.

Zwei Totalausfälle in der Zelle Opus + builtin. Beide Läufe scheiterten, auf verschiedene Weise, und verbrauchten zusammen 586 Mio. Tokens ohne verwertbares Ergebnis:

  • 116d – stiller Fehlschlag. is_error: false, subtype: success, terminal_reason: completed – und null Ergebnisdateien. Der Hauptagent hatte zehn Subagenten im Hintergrund gestartet und seinen Turn beendet; der Headless-Modus wartete 600 s und brach ab. Der einzige Hinweis stand in Stderr.log. Verbraucht: 193,4 Mio. Tokens.
  • 9d9e – API-Abbruch, HTTP 429, „You've hit your session limit". 34 Subagenten, davon 24 von Subagenten gestartet, 22 weitere am Nebenläufigkeitslimit abgewiesen. Verbraucht: 392,9 Mio. Tokens, eine Ergebnisdatei von sieben.

Der stille Fehlschlag ist der methodisch wichtigere: is_error erkennt ihn nicht. Ohne den Blick ins Ergebnisverzeichnis wäre der Lauf als gültiger Messpunkt mit „0 Anforderungen" in den Modellvergleich eingegangen.

Die Modellbedingung ist bei Delegation nicht über --model herstellbar. 9d9e weist neben claude-opus-5 auch claude-sonnet-5 mit 18,5 Mio. Tokens (4,72 %) aus – der zweite dokumentierte Fall nach Fable in Iteration 1. Beide betreffen ausschließlich den Modus builtin. Für saubere Modellvergleiche ist solo zu verwenden oder die Modellbindung der Subagenten gesondert zu belegen. Das betrifft Versuch 2 und 3 unmittelbar, die beide auf Delegation setzen.

Vier weitere Messinstrument-Defekte gefunden und behoben:

  • Abgewiesene Subagenten wurden als Subagenten gezählt (Skill 4.5.0 / heute 6.1.0-Zweig). fb24 meldete 21 gefundene gegenüber 13 erwarteten Aufrufen; die Differenz waren 8 Absagen am Nebenläufigkeitslimit, die im Transkript wie Starts aussehen. Nach der Trennung stimmen alle drei Läufe exakt. Die Zahl der Absagen ist selbst eine Messgröße für die beabsichtigte Parallelität.
  • Die Rückgabe eines Hintergrund-Subagenten ist eine Start-Quittung, keine Befunde. Die einheitlichen 1.093 Zeichen, die als „Ergebnis" protokolliert wurden, sind der Text „Async agent launched successfully …". Als Ertragsmaß war das wertlos.
  • Subagenten-Transkripte werden unter <temp>\<session>\tasks\<agentId>.output angelegt, bleiben aber leer – geprüft an 33 Dateien aus zwei Läufen. Die bisherige Aussage, sie seien nicht auswertbar persistiert, gilt damit unverändert.
  • Gültigkeitsprüfung ergänzt: leeres Ergebnisverzeichnis oder Abbruchmeldung in Stderr.log bedeutet Fehlmessung, unabhängig von is_error. Vorbeugend setzt der Ausführungsabschnitt jetzt CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0.

Ein Befund zur Belegquelle, den ein Agent selbst entdeckte. 116d hielt im Abschlusstext fest, die Codebasis enthalte „keine .git-Historie und keine SQL-Migrationsskripte". Das trifft zu und gilt für alle Läufe der Reihe: Seit die Codebasis als Dateien ins Arbeitsrepo übernommen wurde, ist die Entwicklungshistorie der ERP-Suite nicht mehr erreichbar. Der Prompt fordert Commit-Messages, Tickets und Release Notes in Schritt 2 ausdrücklich als Artefaktquelle – diese Quelle steht der gesamten Versuchsreihe nicht zur Verfügung.

Vorbereitung von Versuch 2 und 3

Beide Versuchsverzeichnisse wurden angelegt und nach den Vorgaben aus @tab_versuchskonfiguration konfiguriert. Die Prompt-Kette folgt der dort festgelegten Ableitung V1 → V2 → V3.

Artefakt SHA-256 Ableitung
Versuch_02/01_Prompt.md DCDC0E3F…B71BCF Prompt-Version 02-A: aus V1, angepasst an Agentendateien
Versuch_02/01_Agents.json 6943EECD…AF1696 acht Rollen
Versuch_03/01_Prompt.md E65A696C…6A06E1 Prompt-Version 02-B: aus V2, angepasst an MCP-Server
Versuch_03/01_Agents.json EDCB8001…C49B55 elf Rollen
Versuch_03/01_MCP.json F08840F7…5EE2DB fünf Werkzeugserver

Die Anpassung „an Agentendateien" ist ein einziger neuer Abschnitt: Arbeitsteilung. Er nennt keine Rolle und schreibt keinen Zuschnitt vor. Er schließt die Lücken, die entstehen, wenn nicht mehr ein Bearbeiter die ganze Kette durchläuft: Prompt-Version 02 ordnet Schritte zeitlich, vergibt fortlaufende IDs und verlangt am Ende einen Konsistenzcheck – bei verteilter Bearbeitung ist nichts davon von selbst erfüllt. Die vier Kernsätze: ID-Bereiche vorab und überschneidungsfrei; die Ebene ergibt sich aus dem Inhalt, nicht aus dem Bearbeiter; die Mindestabdeckung gilt für das gemeinsame Inventar, nicht je Ausschnitt; der Konsistenzcheck gilt dem zusammengeführten Ergebnis. Der Abschnitt ist bei einem einzelnen Bearbeiter wirkungslos, sodass der Prompt auch für einen solo-Lauf gültig bleibt.

Die Rollen sind aus den Messungen abgeleitet. Drei getrennte Autoren je Ebene gegen die Verteilungsstreuung (92,7 % StRS bis 89,4 % SwRS bei identischem Prompt); ein faktenermittler nach dem Muster des erfolgreichsten builtin-Laufs samt Stichprobenverbot; ein neuer belegpruefer, der zitierte Primärbelege öffnet und prüft, ob die Einstufung trägt; ein konsistenzpruefer, der seinen Risikobegriff offenlegen muss, weil ein Lauf „alle 36 gedeckt" meldete, während die maschinelle Prüfung 51 risikorelevante Anforderungen fand.

Der ISO-29148-Orchestrator ist als konsolidierende, nicht delegierende Rolle umgesetzt. Er startet keine Subagenten und schreibt keine Anforderungen, sondern stellt her, was erst am zusammengeführten Bestand entsteht: durchgängige Nummerierung samt mitgezogener Verweise, beidseitig geschlossene Traceability, eine aus dem Gesamtbestand erzeugte Hypothesenliste und die Abdeckungstabelle über das gemeinsame Inventar. Sein Schwerpunkt liegt auf den Nahtstellen zwischen den Ausschnitten – dort sitzen die Fehler verteilter Bearbeitung. Ein delegierender Orchestrator wäre die naheliegende, aber messtechnisch schlechtere Lösung gewesen: Er erzeugte eine zweite Delegationsebene, deren Subagenten-Prompts nicht protokollierbar sind – bei fb24 blieben so 18 von 31 Aufrufen unerfassbar.

Versuch 3 erhielt eine eigene Prompt-Version. Prompt-Version 02-A schreibt „statische Analyse, keine Ausführung" vor und begrenzt die Quellen auf das Arbeitsverzeichnis; ein live gestartetes ERP verletzt beides. Geändert wurde nur das Nötige: Quellenbeschränkung erweitert, Schritt 2b „Beobachtung am laufenden System" (ausdrücklich lesend), neue Belegklasse LAUFZEIT als nachrangig gegenüber PRIMÄR, und Kennzeichnung fremden Wissens. Der Abschnitt Arbeitsteilung wird aus V2 unverändert geerbt.

Fünf Werkzeugserver sind vorgesehen: serena (Symbol-Navigation), mssql (Datenbank-Inspektion, read-only), windows-mcp und playwright (GUI-Beobachtung für Desktop-Client und Blazor-Portal) sowie context7. Letzterer steht nicht in der Aufzählung der Arbeit und ist eine bewusst hinzugenommene Erweiterung; er ist zugleich der einzige der fünf, der nicht lokal betrieben wird.

Zwei Server wurden ausgeschlossen: memory, weil er Zustand zwischen Läufen trägt und damit die Unabhängigkeit der Wiederholungsmessungen zerstört, und sequential-thinking, weil er den --effort-Parameter dupliziert – zwei Variablen gleichzeitig zu verändern war schon beim Fable-Block der Fehler.

Ein Blocker, gefunden bevor er einen Messlauf gekostet hat: --safe-mode ist mit V2 und V3 unvereinbar. Das Flag schaltet ausweislich der CLI-Hilfe „MCP servers, custom commands and agents" ab – also genau das, was beide Versuche untersuchen. 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}

Der Fehler wäre still geblieben: --agents hätte keine Wirkung gehabt, der Lauf wäre fehlerfrei durchgelaufen und hätte Anforderungen erzeugt – nur ohne die Rollen, die den Versuch ausmachen. Er wäre als V2-Lauf protokolliert worden und wäre in Wahrheit ein V1-Lauf gewesen.

Der Ersatz (Skill 7.0.0, MAJOR): kein --safe-mode in den Modi custom und bei MCP-Einsatz, stattdessen --strict-mcp-config plus --disallowedTools Skill WebSearch WebFetch SlashCommand. Gegengeprüft mit derselben Werkzeugabfrage: nichts vorgeladen, keine Skills, kein Webzugriff, alle Rollen verfügbar. Bemerkenswert dabei: Ohne die Sperre lädt die CLI 16 global installierte Skills – darunter code-review, security-review, run und init. --setting-sources '' unterdrückt sie nicht.

Der Ersatz deckt Plugins, Hooks und Output-Styles nicht ab. Auf der Versuchsmaschine ist davon nichts konfiguriert – geprüft: ~/.claude/settings.json enthält nur model und agentPushNotifEnabled, kein hooks; kein plugins- und kein output-styles-Verzeichnis. Das ist eine Eigenschaft der Umgebung, keine Garantie, weshalb der Skill vor jedem custom-Lauf eine Umgebungsprüfung verlangt. Läufe im Modus custom sind hinsichtlich der Isolation damit nicht unmittelbar mit den solo- und builtin-Läufen vergleichbar; der Unterschied ist benannt und auf Plugins, Hooks und Output-Styles begrenzt.

Nebenbefund derselben Prüfung: In den User-Settings steht model: opus[1m]. Das ist die Quelle der zwei dokumentierten Modellabweichungen bei Delegation – und --safe-mode hat sie nie verhindert, wirkt hier also weder positiv noch negativ.

Offene Punkte vor dem ersten Lauf beider Versuche: extract-subagenten.py ist nicht gegen custom-Agententypen geprüft; die Modellbedingung ist bei Delegation über --model allein nicht herstellbar; für V3 sind die Serverversionen nicht gepinnt, und der Zustand des laufenden Systems – Datenbankstand, Mandant, Datenart – ist als Teil des Untersuchungsgegenstands je Lauf zu erfassen.


3. Entwicklung des Prompts

Der Prompt blieb inhaltlich über alle 24 Läufe unverändert – der SHA-256 1B0DB06B…3C02FF ist in jedem Protokoll dokumentiert. Alle 24 Läufe sind damit Wiederholungsmessungen desselben Prompts, keine Prompt-Versionen im Sinne von Kapitel 4.

Erst nach Abschluss der Läufe wurde er überarbeitet (2026-08-26). Diese Überarbeitung war zunächst rein formal – sie machte den Prompt werkzeugneutral, ohne die Analyseanweisung zu ändern. Die inhaltliche Überarbeitung folgte als Prompt-Version 02 und ist in Abschnitt 7 dokumentiert.

Änderung Grund
Metadaten Werkzeugkonfiguration und Modell entfernt Beschreiben den Lauf, nicht die Analyse; gehören ins Messprotokoll
Satz „Es stehen weder spezialisierte Agenten noch MCP-Server zur Verfügung" entfernt Bindet den Prompt an eine Werkzeugkonfiguration; wird zur Laufzeit als Werkzeugkontext beigestellt
Feld Übernahmewürdigkeit ergänzt (übernehmen/Workaround/Sonderfall/veraltet) Der Evaluationsrahmen (Kap. 4.3) bewertet diese Dimension; bislang steckte sie halb im Feld Status und war nicht auswertbar
Pflichteigenschaft Redundanzfreiheit ergänzt Ergänzt das vorhandene Feld Konsolidierung um die ausdrückliche Abgrenzungsprüfung
Konsistenzcheck erweitert Prüft nun auch fehlende Übernahmewürdigkeit und nicht markierte Doubletten

Damit ist der Prompt werkzeug- und modellneutral und von jedem LLM verwendbar – eine Voraussetzung für den in Kapitel 4 geplanten LLM-Querschnitt.


4. Entwicklung des Versuchsaufbaus (Skill)

19 Versionen in zwei Tagen. Jede geht auf eine konkrete Beobachtung zurück:

Version Änderung Auslöser
1.0.0 Ausgangsfassung –
2.0.0 Shell-Zugriff + Denylist; Isolation über eingefrorenen Snapshot 36 Denials in Lauf 1; --safe-mode allein unzureichend
2.0.1 before.txt leerwertsicher schreiben Bei sauberem Root schrieb PowerShell die Datei nicht und ließ alten Inhalt stehen – der Vergleich meldete eine Abweichung, die es nicht gab
2.1.0 Modell wird vor jedem Lauf erfragt Das Modell wurde bis dahin ad hoc gewählt
2.1.1 Warnung zur Snapshot-Prüfung Ein verkürzter Regex sprach auf echte Produktdateien an (ClaudeCodeChatModelClient.cs)
3.0.0 Agentenmodus als Pflichtparameter (solo/builtin/custom) Subagenten-Einsatz schwankte zwischen 0 und 14 und war die dominierende Störgröße
3.1.0 Parallelfähigkeit; Steuerdateien nach _meta im Laufverzeichnis Geteilte Scratchpad-Dateien hätten sich zwischen parallelen Läufen überschrieben
3.2.0 Modell und Version im Verzeichnisnamen; Workflow mitgesperrt Im Verifikationstest wich der Agent auf Workflow aus
3.3.0 Subagenten-Prompts werden protokolliert Die selbstgewählte Zerlegung war nur als Zahl sichtbar, nicht inhaltlich
3.4.0 Effort als dritter Pflichtparameter Der Denkaufwand wurde nur aus der Sitzung geerbt und nirgends dokumentiert
3.5.0 Berichtete Aufwandsgröße ist der Tokenverbrauch statt USD USD-Beträge hängen an Preisliste und Modellwahl und veralten
3.6.0 Verschachtelte Subagenten verifiziert und dokumentiert Unbelegt, ob tiefere Ebenen in die Tokensumme einfließen – Kontrolltest belegte es
3.7.0 Effort im Verzeichnisnamen Erster max-Block; gleichnamige Verzeichnisse hätten verschiedene Bedingungen bezeichnet
3.8.0 Pflichtprüfung der tatsächlich eingesetzten Modelle Fable-Lauf: 91 % des Verbrauchs auf einem nicht angeforderten Modell
3.9.0 Pflichtabschnitt „Gefundene Anforderungen" Protokolle maßen nur Aufwand, nicht Ertrag
3.10.0 Bedingungen als Ordnerstruktur statt im Dateinamen Der Name wuchs mit jeder Variable und war kaum noch lesbar
4.0.0 Zweiteilung Prozess/Werkzeugadapter; V1 = solo, V1b = builtin; Evaluationsrahmen verankert Ausrichtung auf Kapitel 4 der Arbeit
4.1.0 Ebene <Versuchstag> über den Bedingungen Der Aufbau durchlief an Tag 1 siebzehn Versionen; die Tagesebene hält Blöcke auseinander, die unter unterschiedlichem Stand entstanden
4.2.0 Auswahlregel bei mehreren Prompt-Versionen; Protokollfeld „Prompt-Version" Mit 02_Prompt.md liegt erstmals mehr als eine Fassung vor; ohne Regel ließe sich der SHA-256 im Protokoll keiner Datei mehr zuordnen

Beobachtung für die Diskussion: Von den achtzehn Änderungen gehen zehn auf Messfehler oder Fehlannahmen zurück, die erst im Betrieb sichtbar wurden – nicht auf Planungslücken im klassischen Sinn. Betroffen waren durchweg Annahmen, die plausibel schienen und sich als falsch erwiesen: dass --safe-mode genügt, dass --model die Subagenten steuert, dass duration_ms die Laufzeit misst, dass gesperrte Werkzeuge Denials erzeugen, dass git status alle Schreibvorgänge erfasst. Ein Versuchsaufbau für agentische LLM-Werkzeuge lässt sich offenbar nicht vollständig vorab spezifizieren; er entsteht in der Auseinandersetzung mit dem Werkzeug.


5. Durchgeführte Läufe

24 Läufe, 745,2 Mio. Tokens, 3.287 erzeugte Anforderungen. Ein Lauf schlug fehl (Nr. 2, API-Transportfehler).

# Zeit Modell Modus Effort Subagenten Denials Turns Tokens Anforderungen
1 12:29 sonnet-5 builtin high 8 36 43 13.052.010 96
2 13:49 sonnet-5 builtin high 6 0 8 16.655.125 89 (Abbruch)
3 14:29 sonnet-5 builtin high 7 0 69 11.516.200 106
4 15:05 sonnet-5 builtin high 0 0 147 27.562.244 55
5 15:35 sonnet-5 builtin high 14 1 31 52.713.542 325
6 16:35 sonnet-5 builtin high 7 0 29 32.568.122 189
7 17:31 sonnet-5 solo high 0 0 68 4.357.855 42
8 17:31 sonnet-5 solo high 0 0 107 12.598.503 82
9 18:04 sonnet-5 solo high 0 0 72 5.659.692 60
10 18:04 sonnet-5 solo high 0 0 77 4.591.733 73
11 18:04 sonnet-5 solo high 0 0 67 5.050.595 67
12 18:29 sonnet-5 builtin high 19 (9 versch.) 2 94 55.167.397 246
13 18:29 sonnet-5 builtin high 8 1 84 42.204.257 238
14 18:29 sonnet-5 builtin high 20 (6) 0 23 40.787.325 113
15 18:29 sonnet-5 builtin high 21 (3) 0 15 44.713.674 145
16 18:29 sonnet-5 builtin high 18 (6) 0 33 65.101.243 239
17 19:59 opus-5 solo high 0 0 116 13.560.381 71
18 19:59 opus-5 solo high 0 1 195 22.759.401 119
19 19:59 opus-5 solo high 0 1 177 24.860.083 114
20 20:00 opus-5 solo high 0 0 145 24.280.282 182
21 20:00 opus-5 solo high 0 0 131 19.751.531 109
22 21:09 fable-5 solo max 0 1 152 24.225.555 207
23 21:09 fable-5 solo max 0 0 162 31.073.793 148
24 22:07 fable-5 builtin high 13 0 28 150.340.866 172

Die Läufe 7–8, 9–11, 12–16, 17–21 und 22–23 liefen jeweils parallel. Wanduhrzeiten dieser Läufe sind dadurch verzerrt und nicht für Laufzeitvergleiche verwendbar; Tokenverbrauch, Anforderungsanzahl und Denials bleiben unverzerrt.


6. Befunde

6.1 Die Anforderungsanzahl ist kein Qualitätsmaß

Vier Läufe unter identischer Bedingung (Nr. 3, 4, 5, 6) ergaben 106, 55, 325 und 189 Anforderungen – Faktor 5,9. Der Unterschied zwischen Lauf 1 (ohne Shell, 96) und Lauf 3 (mit Shell, 106) liegt vollständig innerhalb dieser Streuung. Jede Aussage der Form „Konfiguration X liefert mehr Anforderungen" ist ohne Wiederholungsläufe wertlos.

6.2 Die einzige robuste Wirkung der Werkzeugkonfiguration ist die Denial-Zahl

36 Denials ohne Shell-Zugriff, 0 mit. Das ist eine direkte Eigenschaft der Konfiguration und keine Zufallsgröße. Alle anderen Kennzahlen streuen zu stark.

6.3 Die selbstgewählte Zerlegung dominiert alles

solo gegen builtin: Streuung Faktor 2,0 gegen 5,9 bei den Anforderungen, Medianverbrauch 5,1 gegen 30,1 Mio. Tokens. Der Effekt gilt modellunabhängig – die Opus-Reihe zeigt dieselbe Stabilität im Solo-Modus.

Bemerkenswert ist die Gegenläufigkeit von Turns und Delegation: Lauf 15 delegierte am stärksten (21 Subagenten) und brauchte die wenigsten eigenen Turns (15); Lauf 4 delegierte gar nicht und brauchte 147. num_turns zählt nur den Hauptagenten und ist deshalb kein Aufwandsmaß.

6.4 Verschachtelte Delegation ist der Normalfall, nicht die Ausnahme

In vier von fünf Läufen des Blocks 12–16 erreichte die Delegation Tiefe 2, mit 3 bis 9 von Subagenten gestarteten Subagenten. Ein Kontrolltest belegte, dass deren Tokens vollständig in modelUsage einfließen – ihre Prompts dagegen liegen in nicht persistierten Transkripten und sind nicht rekonstruierbar. Die Prompt-Erfassung ist in diesen Läufen systematisch unvollständig, die Verbrauchsmessung nicht.

6.5 Modellstärke und Ertrag

Reihe Anforderungen (Median) Tokens (Median) Tokens je Anforderung
Sonnet 5, solo, high 67 5,1 Mio. ~76.000
Opus 5, solo, high 114 22,8 Mio. ~200.000
Fable 5, solo, max 178 27,6 Mio. ~155.000

Der Mehrertrag stärkerer Modelle wird mit überproportionalem Verbrauch erkauft. Die Anforderungsanzahl misst allerdings nur Menge; die Belegqualität ist davon unabhängig zu betrachten.

6.6 Regelkonformität – der Agent verfehlt teilweise die eigenen Vorgaben

Die maschinelle Auswertung prüft die Artefakte gegen die Vorgaben des Prompts. Zwei Beispiele:

  • Lauf 11 (Sonnet, solo): 5 von 31 risikorelevanten Anforderungen tragen weder einen PRIMÄR-Beleg noch die Kennzeichnung [HYPOTHESE], obwohl der Prompt das für Sicherheits-, Abrechnungs- und Berechtigungsthemen ausdrücklich verlangt. Primärbelegquote 62,7 %.
  • Lauf 24 (Fable/Opus, builtin): alle 58 risikorelevanten Anforderungen gedeckt, Primärbelegquote 100 %, Median 2 Belege je Anforderung.

Diese Prüfung wäre von Hand nicht leistbar und liefert eine inhaltliche Vergleichsgröße, die unabhängig vom Mengengerüst ist.

6.7 Werkzeugtechnische Befunde

Befund Beleg
--safe-mode unterdrückt das Vorladen von Projektanweisungen, nicht das Lesen Kontrolltest: ohne Flag zitiert der Agent CLAUDE.md, mit Flag „NICHTS VORGELADEN"; mit Shell liest er sie dennoch
Gesperrte Werkzeuge erzeugen keine Denials In allen 12 Solo-Läufen 0 Denials auf Task/Agent/Workflow – das Modell plant von vornherein ohne sie
--model steuert nur den Hauptagenten Lauf 24: 91 % des Verbrauchs auf nicht angefordertem Modell
Der Effort steht nicht im Ergebnisobjekt Nur über das Session-Transkript belegbar
duration_ms ist bei starker Nebenläufigkeit unbrauchbar Lauf 5: 09:37 gemeldet, 43:01 tatsächlich
Ein Lauf schrieb außerhalb von Codebasis und Laufverzeichnis Lauf 13 legte drei Arbeitsdateien in C:\DEV\ an; nur weil die Denylist das Aufräumen blockierte, wurde es sichtbar

Der letzte Punkt ist methodisch der unangenehmste: Die etablierte Prüfung „Root unverändert" deckt ausschließlich die Codebasis ab. Schreibvorgänge in andere Verzeichnisse bleiben unbemerkt.


7. Prompt-Version 02 (26.08.)

Bis hierher waren alle 24 Läufe Wiederholungsmessungen desselben Prompts – der SHA-256 blieb über zwei Tage identisch. Prompt-Version 02 ist damit die erste Prompt-Version im Sinne von Kapitel 4: Der Prompt wird auf Basis der Auswertung überarbeitet, jede Änderung ist an einen gemessenen Befund gekoppelt.

Was der Prompt bereits zuverlässig steuert

Diese Teile blieben unverändert, weil die Auswertung keine Schwäche zeigt:

Vorgabe Ergebnis über 3.287 Anforderungen
Prüfidee je Anforderung 100 % erfüllt
Tracelinks je Anforderung 100 % erfüllt
Belegklassifikation 78,6 % PRIMÄR, 11,5 % SEKUNDÄR, 9,8 % KONTEXT
Blockformat der Anforderungen über alle Läufe eingehalten

Was der Prompt nicht steuerte

Befund Zahl
Anforderungen je Lauf 42 – 325 (Faktor 5,9)
Modultabellen im Analysebericht 0 – 51 Zeilen
Läufe ohne jede Hypothese 2 (bei 71 bzw. 148 Anforderungen)
Hypothesenanteil je Lauf 0 % – 26,2 %
Konsolidierungskandidaten je Lauf 2,4 % – 35,2 %
Anforderungen mit genau einem Beleg 45,9 %
Anforderungen ohne jeden Beleg 1
ISO-25010-Merkmal als eigenes Feld 50 von 3.287 (1,5 %)
verschiedene Typ-Werte 301

Abgeleitete Änderungen

  1. Abdeckung wird gesteuert statt dem Modell überlassen. Der Satz „Priorisiere die Analysetiefe selbstständig" entfällt. An seine Stelle tritt eine dreistufige Vorstufe: Modulinventar vor der ersten Anforderung, dann Mindestabdeckung mit mindestens einer Anforderung je Modul, dann Vertiefung nach Risiko. Begründung im Prompt: Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust, eine flach erfasste Funktion lässt sich nachschärfen.
  2. Hypothesenpflicht kalibriert. Wer keine Hypothese führt, begründet das ausdrücklich. Hypothesen.md muss deckungsgleich mit den Inline-Markierungen sein.
  3. Primärbeleg präzisiert. Bei Risikoanforderungen genügt ein Dateipfad nicht mehr; der Beleg benennt Datei, Klasse, Methode und die konkrete Prüfung.
  4. Belegpflicht verschärft. Ohne Beleg wird die Anforderung nicht geschrieben, der offene Punkt wird als Hypothese erfasst.
  5. Konsolidierungsbegriff an einem Beispiel kalibriert (Stammblätter gegenüber Assets), mit ausdrücklicher Abgrenzung gegen ebenenübergreifende Dubletten.
  6. Feld Qualitätsmerkmal für die ISO-25010-Zuordnung, die bislang keinen Ablageort hatte.
  7. Konsistenzcheck erweitert um eine Liste aller risikorelevanten Anforderungen mit ihrer Belegsituation und um den Abgleich der Hypothesenliste.

Bewusst nicht geändert

Die formale Streuung – 301 Typ-Werte, zwei ID-Schemata, acht Hypothesen-Formate – bleibt bestehen. Geschlossene Vokabulare und erzwungene Dateivorlagen hätten sie beseitigt, wurden aber verworfen, um die Formulierungsfreiheit nicht einzuschränken. Für die Auswertung ist diese Streuung als Rauschen zu behandeln; die maschinelle Analyse ist entsprechend heuristisch ausgelegt.

Nebenbefund: Der Prompt war nachträglich verändert worden

Bei der Einführung von 02_Prompt.md fiel auf, dass 01_Prompt.md im Zuge der werkzeugneutralen Überarbeitung geändert und committet worden war. Der in allen 24 Protokollen dokumentierte SHA-256 zeigte damit auf eine Fassung, die im Repository nicht mehr existierte.

Die As-Run-Fassung ließ sich bitgenau rekonstruieren: Aus dem je Lauf archivierten _meta/combined_prompt.md den Text vor dem angehängten Ausgabeverzeichnis-Block abschneiden, Zeilenenden normalisieren – das Ergebnis stimmt für drei unabhängig geprüfte Läufe exakt mit 1B0DB06B…3C02FF überein. 01_Prompt.md wurde darauf zurückgesetzt.

Methodische Lehre: Die Archivierung des tatsächlich gesendeten Prompts je Lauf, ursprünglich als Nebeneffekt der Parallelfähigkeit eingeführt (Skill 3.1.0), hat hier die Reproduzierbarkeit gerettet. Ohne sie wäre der Bezug zwischen Protokoll und Prompt unwiederbringlich verloren gewesen.

Offene Frage

Ob die Steuerung greift, ist eine empirische Frage. Erwartet wird eine höhere Anforderungszahl bei geringerer Tiefe je Modul und eine kleinere Streuung zwischen Läufen. Der Vergleich mit den fünf Solo-Läufen von Tag 1 (42 bis 82 Anforderungen, Faktor 2,0) wird das zeigen. Möglich ist auch, dass die Mindestabdeckung nur die Zahl flacher Anforderungen erhöht, ohne die Belegqualität zu halten – dann wäre die Änderung zurückzunehmen.


8. Grenzen und offene Punkte

Teilweise geklärt: Ob der Verbrauchssprung im Fable-Block vom Modell oder vom Effort kommt – beide Variablen wechselten gleichzeitig. Die Zelle claude-opus-5 / solo / max (Iteration 3) zeigt, dass der Effort allein Verbrauch und Belegdichte erheblich anhebt. Vollständig isoliert wäre die Frage erst durch einen Opus-high-Block unter denselben Bedingungen – gleicher Snapshot, gleiche Prompt-Version.

Nicht messbar in der bisherigen Anlage: Die Zelle claude-opus-5 / builtin / high ist zweimal gescheitert (Zeitlimit, Session-Kontingent) und hat dabei 586 Mio. Tokens ohne Ergebnis verbraucht. Vor einer Wiederholung ist zu entscheiden, ob die Kombination Opus + Delegation + Prompt-Version 02 überhaupt sinnvoll messbar ist.

Offen für Versuch 2 und 3: Bei Delegation ist die Modellbedingung über --model allein nicht herstellbar (zwei dokumentierte Fälle). extract-subagenten.py ist noch nicht gegen custom-Agententypen geprüft. Für V3 fehlt im Skill ein Protokollfeld für die MCP-Konfiguration, und der Zustand des laufenden Systems – Datenbankstand, Mandant, Datenart – ist als Teil des Untersuchungsgegenstands je Lauf zu erfassen.

Nicht durchgeführt: Die Stakeholder-Validierung nach Kapitel 4.3. Alle Aussagen dieses Protokolls beruhen auf maschinell erhebbaren Größen. Ob die erzeugten Anforderungen sachlich korrekt sind, ist damit ausdrücklich nicht gezeigt.

Nicht abgedeckt: Versuch 2 (Agentendateien) und Versuch 3 (MCP-Server). Der Skill ist darauf vorbereitet (Modus custom), die Agentendefinitionen existieren aber noch nicht.

Offene Aufräumarbeiten: Drei Streudateien in C:\DEV\ aus Lauf 13; die Erweiterung der Nachlaufprüfung um Streudateien außerhalb des Laufverzeichnisses.

Nicht poolbar: Iteration 2 und Iteration 3 unterscheiden sich im Untersuchungsgegenstand (SSMS_DB_SCHEMA.sql, Commit f349d189). Ein Vergleich beider misst die Wirkung des Datenbankschemas – ein eigener Befund, keine Wiederholungsmessung. Mit n = 5 je Gruppe und überlappenden Spannen ist diese Wirkung derzeit nicht belegt.

Messtechnisch offen: Der Snapshot-Zustand wird über git status geführt. Wird eine Datei zwischen Laufbeginn und Auswertung committet, sind Vorher- und Nachher-Stand gleich, obwohl die Zustände es nicht sind (Fall 4840). Ein Inhaltshash des Arbeitsverzeichnisses je Lauf würde das schließen.

Offen für Prompt-Version 03: Der Prompt schreibt die Ebene der Mindestabdeckung nicht vor. Das ist die verbliebene Hauptquelle der Strukturstreuung – von 92,7 % StRS bis 89,4 % SwRS bei identischem Prompt.

Einschränkung der Zeitmessung: 18 der 24 Läufe liefen parallel. Für belastbare Laufzeitvergleiche wären serielle Wiederholungen nötig. Eine Teilauswertung zeigt bei den Solo-Läufen einen messbaren Kontentionseffekt: bei zwei gleichzeitigen Läufen 114–176 Sekunden je Million Tokens, bei drei gleichzeitigen 185–233 – nicht überlappende Bereiche trotz kleiner Stichprobe.


9. Verweise

  • Messprotokolle je Lauf: Versuche/Versuch_01/Tag 1/<ModellID>/<Modus>/<Effort>/<Laufverzeichnis>/Protokoll.md
  • Rohdaten: RawResult.json je Lauf, unverändert erhalten
  • Exakt gesendeter Prompt je Lauf: _meta/combined_prompt.md
  • Subagenten-Prompts: _meta/subagenten.md
  • Maschinelle Anforderungsauswertung: _meta/anforderungen.md und .json
  • Prozessvorgabe: .claude/skills/run-experiment/SKILL.md (Version 4.0.0, mit Änderungshistorie)
  • Nachweis des Untersuchungsgegenstands: Versuche/Versuch_01/_Codebasis-Nachweis.md
  • Struktur- und Umbenennungshistorie: Versuche/Versuch_01/_Umbenennung_*.md, _Umstrukturierung_2026-08-26.md