Du hast ein Feature, das drei Dinge gleichzeitig braucht. Du kannst Subagents innerhalb einer einzelnen Claude Code Session spawnen und sie parallel arbeiten lassen. Oder du teilst die Arbeit in drei unabhängige Tasks auf, gibst jeden einem separaten Agenten in einem eigenen tmux-Pane und lässt sie laufen, ohne voneinander zu wissen.
Beide Ansätze parallelisieren Arbeit. Sie lösen unterschiedliche Probleme. Wähle den falschen und du verbrennst entweder Context Window für Koordinations-Overhead oder erzeugst Merge-Konflikte, deren Behebung länger dauert als der ursprüngliche Task.
Das ist das Entscheidungs-Framework, das ich jeden Tag verwende, während ich 13 Claude Code Agenten auf derselben Codebase laufen lasse. Keine Theorie. Das Ergebnis davon, es oft genug falsch gemacht zu haben, um zu wissen, wo die Grenze verläuft.
Zwei Arten von Parallelismus
Claude Code unterstützt zwei grundlegend verschiedene Wege, Arbeit gleichzeitig auszuführen.
Subagents sind Kindprozesse, die innerhalb einer einzelnen Claude Code Session gestartet werden. Der Parent-Agent startet mehrere Subagents, jeder bearbeitet einen Teil des Problems, dann sammelt er die Ergebnisse ein. Sie teilen das gleiche Arbeitsverzeichnis und den Context des Parents. Stell sie dir als Threads in einem einzelnen Prozess vor.
Parent agent
├── Subagent A: "Search lib/ for all usages of parseConfig"
├── Subagent B: "Search server/ for all usages of parseConfig"
└── Subagent C: "Search components/ for all usages of parseConfig"
Separate Agenten laufen in unabhängigen Claude Code Sessions, typischerweise in separaten tmux-Panes. Jeder hat sein eigenes Context Window, seine eigene CLAUDE.md-Identitätsdatei und seine eigene Sicht auf die Codebase. Sie teilen keinen Speicher. Sie kommunizieren über Artefakte: Task-Kommentare, Status-Updates, committeten Code. Stell sie dir als separate Prozesse ohne Shared State vor.
tmux pane 1: eng1 agent → "Build the REST endpoint"
tmux pane 2: eng2 agent → "Build the React component"
tmux pane 3: qa1 agent → "Write integration tests for both"
Das mentale Modell ist wichtig, weil es bestimmt, wie Arbeit zwischen den Einheiten fließt. Subagents können Daten günstig an den Parent zurückgeben. Separate Agenten reichen Daten über das Dateisystem, Git oder einen externen Task-Tracker weiter.
Wann Subagents gewinnen
Verwende Subagents, wenn die Arbeit einen gemeinsamen State hat und die Ergebnisse zusammengeführt werden müssen.
Parallele Recherche. Du musst fünf Verzeichnisse nach einem Muster durchsuchen, drei Dokumentationsdateien lesen und die Erkenntnisse zu einer Empfehlung zusammenfassen. Subagents können jeweils einen Suchpfad übernehmen, Ergebnisse zurückgeben, und der Parent kann sie ohne Serialisierungs-Overhead kombinieren.
Unabhängige Transformationen auf denselben Daten. Du refactorst ein Modul und musst die Type Definitions, die Tests und die Dokumentation in einer kohärenten Änderung aktualisieren. Jeder Subagent kümmert sich um eine Datei, aber der Parent stellt sicher, dass die Änderungen konsistent sind, weil er alle drei Ergebnisse sieht, bevor er committet.
Schnelle Exploration. Du debuggst und musst gleichzeitig das Git-Log, die Test-Ausgabe und die Runtime-Config prüfen. Subagents können alle drei parallel sammeln und der Parent erstellt eine Diagnose.
Das Muster: Auffächern, einsammeln, auf dem kombinierten Ergebnis handeln. Wenn deine Parallelisierung damit endet, dass der Parent über alle Outputs zusammen nachdenken muss, sind Subagents das richtige Werkzeug.
Wobei Subagents schlecht abschneiden: Alles was mehr als ein paar Minuten pro Branch dauert, alles was Dateien in überlappenden Pfaden modifiziert, oder alles was eine unabhängige Verifizierung braucht. Subagents teilen ein Arbeitsverzeichnis, also korrumpieren zwei Subagents, die in dieselbe Datei schreiben, gegenseitig ihre Arbeit. Und weil sie den Context teilen, frisst ein langläufiger Subagent in das verfügbare Window des Parents.
Wann separate Agenten gewinnen
Verwende separate Agenten, wenn die Arbeit unabhängig verifiziert werden kann und keinen gemeinsamen Context braucht, um Sinn zu ergeben.
Verschiedene Komponenten desselben Features. "Baue den API-Endpoint" und "Baue das Frontend, das ihn aufruft" sind bis zur Integration unabhängig. Der API-Ingenieur braucht die React-Komponente nicht im Context. Der Frontend-Ingenieur braucht nicht das Datenbankschema. Jedem seinen eigenen Agenten mit einer scoped CLAUDE.md zu geben hält den Context sauber und verhindert, dass die Komplexität eines Agenten in die Arbeit des anderen blutet.
Unterschiedliche Akzeptanzkriterien. Wenn Task A erledigt ist, sobald der Endpoint 200 mit der korrekten JSON-Shape zurückgibt, und Task B erledigt ist, sobald die Komponente die Daten mit korrekten Error States rendert, sind das separate Verifizierungsziele. Ein QA-Agent kann jeden unabhängig validieren. Subagents können nicht unabhängig geprüft werden, weil sie einen kombinierten Output produzieren.
Arbeit, die verschiedene Teile der Codebase berührt. File Ownership ist der einfachste Weg, Merge-Konflikte zu vermeiden. Agent A besitzt server/, Agent B besitzt components/. Keiner greift in das Territorium des anderen. Wenn du das mit Subagents versuchst, müsste der Parent File-Locking verwalten, was den Zweck der Parallelisierung zunichtemacht.
Tasks mit unterschiedlichen Zeithorizonten. Ein Task dauert 10 Minuten, der andere 2 Stunden. Bei Subagents wartet der Parent auf das langsamste Kind. Bei separaten Agenten wird der kurze Task fertig, verifiziert und geshippt, während der lange noch läuft.
Das Muster: Abfeuern, vergessen, separat verifizieren. Wenn jedes Arbeitsstück für sich steht und einzeln geprüft werden kann, sind separate Agenten mit strukturierten Tasks sauberer.
Das Übergabe-Problem
Der eigentliche Entscheidungspunkt läuft auf Übergaben hinaus.
Subagent-Übergaben sind günstig. Das Kind gibt Daten an den Parent im selben Context zurück. Keine Serialisierung, keine File-Writes, kein Warten auf Status-Updates. Der Parent startet drei Subagents, sie liefern drei Ergebnisse, der Parent hat alles was er braucht.
Übergaben zwischen separaten Agenten sind teuer, aber langlebig. Agent A schließt Arbeit ab, committet Code, aktualisiert einen Task-Status und kommentiert, was er getan hat. Agent B nimmt dieses Signal auf (entweder über einen Koordinator oder durch Polling des Task-Trackers) und startet seine abhängige Arbeit. Der Overhead ist real: Du brauchst ein Task-System, ein Status-Protokoll und einen Weg für Agenten, zu erfahren, was andere Agenten getan haben.
Die Faustregel: Wenn die Arbeit mehr als eine Übergabe zwischen den parallelen Einheiten erfordert, verwende Subagents. Bei einem einzelnen Fan-out-and-gather sind Subagents einfacher. Wenn der Output von Agent A der Input von Agent B ist, der zum Input von Agent C wird, sind die Koordinationskosten separater Agenten gerechtfertigt, weil jede Übergabe ein verifiziertes, committetes Artefakt produziert, das nicht verloren geht, wenn ein Agent abstürzt oder an ein Context-Limit stößt.
Ein konkretes Beispiel. Du musst:
- Alle API-Endpoints finden, die User-Daten zurückgeben
- Rate Limiting zu jedem hinzufügen
- Tests für die neuen Rate Limits schreiben
- Die API-Dokumentation aktualisieren
Schritte 1 und 2 sind eng gekoppelt. Die Suchergebnisse (Schritt 1) fließen direkt in die Änderung (Schritt 2). Ein Subagent übernimmt die Suche; der Parent wendet die Änderungen an. Das ist ein Subagent-Pattern.
Schritte 3 und 4 sind voneinander unabhängig, hängen aber von Schritt 2 ab. Die Tests brauchen den tatsächlichen Endpoint-Code. Die Docs brauchen die finale API-Shape. Das sind separate Tasks für separate Agenten, jeder mit eigenen Akzeptanzkriterien, jeder für sich verifizierbar.
