Übersicht
Sie können Subagenten auf drei Arten erstellen:- Programmgesteuert: Verwenden Sie den Parameter
agentsin Ihrenquery()-Optionen. Siehe die Referenzen für TypeScript und Python - Dateisystem-basiert: Definieren Sie Agenten als Markdown-Dateien in
.claude/agents/-Verzeichnissen. Siehe Subagenten als Dateien definieren - Integriert allgemein einsetzbar: Claude kann den integrierten
general-purpose-Subagenten jederzeit über das Agent-Tool aufrufen, ohne dass Sie etwas definieren müssen
Vorteile der Verwendung von Subagenten
Da Subagenten separate Agenten-Instanzen sind, bietet die Delegierung von Aufgaben an sie vier Vorteile:- Kontext-Isolation: Jeder Subagent läuft in seiner eigenen Konversation, die neu beginnt, es sei denn, der Subagent ist ein Fork. In jedem Fall bleiben zwischenzeitliche Tool-Aufrufe und Ergebnisse innerhalb des Subagenten; nur seine abschließende Nachricht kehrt zum übergeordneten Agenten zurück. Ein
research-assistant-Subagent kann Dutzende von Dateien durchsuchen, ohne dass sich dieser Inhalt in der Hauptkonversation ansammelt. Der übergeordnete Agent erhält eine prägnante Zusammenfassung, nicht jede Datei, die der Subagent gelesen hat. Siehe What subagents inherit für genau das, was sich im Kontext des Subagenten befindet. - Parallelisierung: Mehrere Subagenten können gleichzeitig ausgeführt werden, sodass unabhängige Teilaufgaben in der Zeit des langsamsten statt in der Summe aller abgeschlossen werden. Während einer Code-Überprüfung können Sie
style-checker-,security-scanner- undtest-coverage-Subagenten gleichzeitig statt nacheinander ausführen. - Spezialisierte Anweisungen und Wissen: Jeder Subagent kann eine maßgeschneiderte System-Eingabeaufforderung mit spezifischer Expertise, Best Practices und Einschränkungen haben. Ein
database-migration-Subagent kann detailliertes Wissen über SQL-Best-Practices, Rollback-Strategien und Datenintegritätsprüfungen haben, die in den Anweisungen des Hauptagenten unnötiges Rauschen wären. - Tool-Einschränkungen: Subagenten können auf bestimmte Tools beschränkt werden, was das Risiko unbeabsichtigter Aktionen verringert. Ein
doc-reviewer-Subagent könnte nur Zugriff auf Read- und Grep-Tools haben, um sicherzustellen, dass er analysieren, aber niemals versehentlich Ihre Dokumentationsdateien ändern kann.
Subagenten erstellen
Programmatische Definition (empfohlen)
Definieren Sie Subagenten direkt in Ihrem Code mit dem Parameteragents. Claude ruft Subagenten über das Tool Agent auf.
Die meisten Beispiele auf dieser Seite geben nur das Endergebnis aus. Um zu bestätigen, dass Claude an einen Subagenten delegiert hat, anstatt direkt zu antworten, siehe Subagenten-Aufruf erkennen.
Dieses Beispiel erstellt zwei Subagenten: einen Code-Reviewer mit Lesezugriff und einen Test-Runner, der Befehle ausführen kann.
AgentDefinition-Konfiguration
Im Python SDK behalten mehrteilige Feldnamen wie
disallowedTools und mcpServers ihre camelCase-Schreibweise, um dem Wire-Format zu entsprechen, anstatt Pythons snake_case-Konvention zu folgen. Siehe die AgentDefinition-Referenz für Details.
Subagenten laufen standardmäßig im Hintergrund. Ein Agent-Tool-Aufruf, der die run_in_background-Eingabe weglässt, startet einen Hintergrund-Subagenten, und Claude setzt run_in_background: false, wenn es das Ergebnis benötigt, bevor es fortfährt. Setzen Sie das Feld background auf true, um die Hintergrund-Ausführung für einen bestimmten Agent zu erzwingen, unabhängig davon, was Claude anfordert. Vor Claude Code v2.1.198 wurde der Hintergrund-Standard schrittweise eingeführt, und ein Agent-Tool-Aufruf, der run_in_background wegließ, konnte den Subagenten synchron ausführen.
Subagenten können auch ihre eigenen Subagenten spawnen. Um zu begrenzen, wie tief diese Verschachtelung geht, wie viele Subagenten gleichzeitig laufen und wie viel eine Abfrage ausgibt, siehe Subagenten-Tiefe, Parallelität und Ausgaben begrenzen.
Dateisystem-basierte Definition (Alternative)
Sie können Subagenten auch als Markdown-Dateien in.claude/agents/-Verzeichnissen definieren. Siehe die Claude Code Subagenten-Dokumentation für Details zu diesem Ansatz. Programmatisch definierte Agenten haben Vorrang vor dateisystem-basierten Agenten mit demselben Namen.
Wenn Claude das Agent-Tool ohne einen
subagent_type aufruft, erhält es den integrierten general-purpose-Subagenten, den Claude auch spawnen kann, wenn Sie keine Agenten selbst definieren. Das Setzen von CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1 entfernt diesen Standard, und ein solcher Aufruf schlägt mit subagent_type is required fehl.Was Subagenten erben
Sofern der Subagent kein Fork ist, startet sein Kontextfenster neu, ohne übergeordnete Konversation, ist aber nicht leer. Der einzige Inhalt, den Sie vom übergeordneten Agent zum Subagenten übergeben, ist die Prompt-Zeichenkette des Agent-Tools. Fügen Sie daher alle Dateipfade, Fehlermeldungen oder Entscheidungen, die der Subagent benötigt, direkt in diese Prompt ein. Ein Subagent, der dasSendMessage-Tool hat, startet mit einer Liste der anderen benannten Agenten, die in der Sitzung ausgeführt werden, sodass er weiß, an welche Namen er Nachrichten senden kann. Claude Code fügt die Liste automatisch beim ersten Durchgang des Subagenten hinzu. Ein Fork erhält die Liste nicht, da er stattdessen die übergeordnete Konversation erbt.
Ein Subagent erbt auch die Konfiguration des erweiterten Denkens der Hauptsitzung.
Die folgende Tabelle zeigt, welche Inhalte der Kontext eines Nicht-Fork-Subagenten enthält und was er nicht enthält.
Der übergeordnete Agent erhält den abschließenden Bericht des Subagenten, kann ihn aber in seiner eigenen Antwort zusammenfassen. Um die Ausgabe des Subagenten wörtlich in der benutzerorientierten Antwort zu bewahren, fügen Sie eine Anweisung dazu in den Prompt oder die
systemPrompt-Option ein, die Sie an den Hauptaufruf query() übergeben.In v2.1.210 und später scannt Claude Code die letzte Nachricht auf anweisungsähnliche Muster, bevor der übergeordnete Agent sie liest. Der Scan behandelt drei Arten von Mustern unterschiedlich:- Imitation von Steuertags: Claude Code neutralisiert ein Tag, das nur das Harness ausgibt, wie einen
<system-reminder>-Block, an Ort und Stelle. Es fügt einen Backslash nach der öffnenden spitzen Klammer ein und löscht nichts. - Erwähnungen der Berechtigungskonfiguration: Claude Code behält Verweise auf die Berechtigungskonfiguration, wie
.claude/settings.json,bypassPermissionsoder--dangerously-skip-permissions, wie geschrieben bei. - Durchsatzmarker: Eine Zeile, die mit
Human:oderAssistant:beginnt, erhält einen Backslash vor dem Doppelpunkt, sodass die Nachricht keine Konversationsdurchsatzgrenze imitieren kann.
[harness: ...]-Markerzeile voran, die die übereinstimmenden Muster benennt; eine Durchsatzmarker-Übereinstimmung fügt die Markerzeile nicht hinzu. Dies sind die einzigen Änderungen, die der Scan vornimmt: Er entfernt oder umformuliert niemals den Text des Subagenten.Subagenten aufrufen
Automatischer Aufruf
Claude entscheidet automatisch, wann Subagenten basierend auf der Aufgabe und derdescription jedes Subagenten aufgerufen werden. Wenn Sie beispielsweise einen performance-optimizer-Subagenten mit der Beschreibung „Performance-Optimierungsspezialist für Query-Tuning“ definieren, wird Claude ihn aufrufen, wenn Ihr Prompt die Optimierung von Queries erwähnt.
Schreiben Sie klare, spezifische Beschreibungen, damit Claude Aufgaben dem richtigen Subagenten zuordnen kann.
Expliziter Aufruf
Um sicherzustellen, dass Claude einen bestimmten Subagenten verwendet, erwähnen Sie ihn namentlich in Ihrem Prompt:Dynamische Agent-Konfiguration
Sie können Agent-Definitionen dynamisch basierend auf Laufzeitbedingungen erstellen. Dieses Beispiel erstellt einen Security-Reviewer mit verschiedenen Strenge-Ebenen und verwendet ein leistungsfähigeres Modell für strenge Überprüfungen.Subagent-Aufrufe erkennen
Claude ruft Subagenten über das Agent-Tool auf. Um zu erkennen, wenn ein Subagent aufgerufen wird, suchen Sie nachtool_use-Blöcken, bei denen name gleich "Agent" ist.
Nachrichten aus dem Kontext eines Subagenten enthalten ein parent_tool_use_id-Feld. In TypeScript enthält außerdem jede Assistenten- und Benutzernachricht, die ein Subagent erzeugt, agent_id: die task_id der Task-Ereignisse dieses Subagenten. agent_id erfordert TypeScript Agent SDK v0.3.292 oder höher.
Das Tool wird in
tool_use-Blöcken als "Agent" angezeigt, aber in der system:init-Toolsliste als "Task". Vor Claude Code v2.1.63 benannten tool_use-Blöcke es ebenfalls "Task". Um die Erkennung über SDK-Versionen hinweg funktionsfähig zu halten, stimmen Sie beide Werte in block.name ab.message.content auf Inhaltsblöcke zu. In TypeScript umhüllt SDKAssistantMessage die Claude-API-Nachricht, daher greifen Sie über message.message.content auf Inhalte zu.
Dieses Beispiel durchläuft gestreamte Nachrichten und protokolliert, wenn ein Subagent aufgerufen wird und wenn nachfolgende Nachrichten aus dem Ausführungskontext dieses Subagenten stammen. Die TypeScript-Version protokolliert außerdem die agent_id jeder Subagent-Nachricht, die eine solche enthält.
Subagenten fortsetzen
Sie können einen Subagenten fortsetzen, um dort weiterzumachen, wo er aufgehört hat, anstatt von vorne zu beginnen. Ein fortgesetzter Subagent behält seine vollständige Gesprächshistorie bei, einschließlich aller vorherigen Tool-Aufrufe, Ergebnisse und Überlegungen. Wenn ein Subagent seinmaxTurns-Limit erreicht, markiert Claude Code die Ausgabe im Agent-Tool-Ergebnis als teilweise, damit Claude weiß, dass die Ausführung unvollständig ist.
Wenn ein Subagent abgeschlossen ist, enthält das Agent-Tool-Ergebnis einen Textblock mit agentId: <id>. Die integrierten Explore- und Plan-Agenten sind einmalig und geben keine agentId zurück. Verwenden Sie daher einen benutzerdefinierten Agenten oder general-purpose, wenn Sie fortsetzen müssen. Um einen Subagenten programmgesteuert fortzusetzen:
- Erfassen Sie die Sitzungs-ID: Extrahieren Sie
session_idaus Nachrichten während der ersten Abfrage - Extrahieren Sie die Agent-ID: Analysieren Sie
agentIdaus dem Agent-Tool-Ergebnis-Text - Setzen Sie die Sitzung fort: Übergeben Sie
resume: sessionIdin den Optionen der zweiten Abfrage, und fügen Sie die Agent-ID in Ihrem Prompt ein. Jederquery()-Aufruf startet standardmäßig eine neue Sitzung, und Sie müssen dieselbe Sitzung fortsetzen, um auf das Transkript des Subagenten zuzugreifen.
Wenn Sie einen benutzerdefinierten Agenten verwenden, übergeben Sie dieselbe Agent-Definition im
agents-Parameter für beide Abfragen.endpoint-finder-Agenten. Die erste Abfrage führt ihn aus und erfasst die Sitzungs-ID und Agent-ID aus dem Agent-Tool-Ergebnis. Dann setzt die zweite Abfrage die Sitzung fort, um eine Folgefrage zu stellen, die Kontext aus der ersten Analyse erfordert.
cleanupPeriodDays-Bereinigungszeitraum.
Werkzeugbeschränkungen
Verwenden Sie das Feldtools, um zu begrenzen, was ein Subagent tun kann:
toolsweglassen: Der Subagent erhält jedes Werkzeug, das für Subagenten verfügbar ist- Werkzeuge auflisten: Der Subagent erhält nur diese. Ein Code-Reviewer, der niemals Dateien bearbeiten sollte, erhält beispielsweise
["Read", "Grep", "Glob"]
Häufige Werkzeugkombinationen
Tiefe, Parallelität und Ausgaben von Subagenten begrenzen
Dieser Abschnitt beschreibt TypeScript SDK v0.3.219 und Python SDK v0.2.127 und später, die Versionen, die Claude Code v2.1.219 oder später enthalten. Bei früheren Versionen fehlen einige dieser Limits oder haben andere Standardwerte, daher sollten Sie ein Upgrade durchführen, bevor Sie sich auf diese Limits verlassen. Die Umgebungsvariablenreferenz und Durchläufe und Budget dokumentieren die Claude Code-Version, die jede Variable hinzugefügt hat, und die Durchsetzung der Ausgabenbegrenzung für Subagenten.
total_cost_usd der Abfrage zählen, und ein Subagent kann seine eigenen Subagenten erzeugen, sodass ein Prompt zu einem Baum von Agenten wachsen kann.
Sie können dieses Wachstum auf drei Arten begrenzen: wie tief Subagenten verschachtelt sind, wie viele gleichzeitig ausgeführt werden und wie viel die gesamte Abfrage kostet. Legen Sie die Tiefe- und Parallelitätslimits als Umgebungsvariablen über die env-Option fest, und das Ausgabenlimit als Abfrageoption:
Die beiden SDKs behandeln die
env-Option unterschiedlich: Das TypeScript SDK ersetzt die Subprocess-Umgebung damit, daher verteilen Sie process.env darin, um Variablen wie PATH zu behalten, während das Python SDK es in die geerbte Umgebung zusammenführt. Dieses Beispiel deaktiviert Verschachtelung, erlaubt höchstens fünf Subagenten gleichzeitig und stoppt die Abfrage, sobald die geschätzten Ausgaben $5 erreichen:
- Unter der Ausgabenbegrenzung: Sie sehen
successund die geschätzten Kosten. - Bei der Ausgabenbegrenzung: Sie sehen
error_max_budget_usdmit Kosten bei oder über5, und dann wird Ihr Fehlerhandler ausgeführt. - Bei der Parallelitätsbegrenzung: Sie sehen einen
tool_result-Block im Nachrichtenstrom mitConcurrent subagent limit reached. Claude erhält denselben Block als Ergebnis des Agent-Tools.
Opus 5 mit Subagenten ausführen
Claude Opus 5 delegiert bereitwilliger an Subagenten als frühere Modelle, daher sind die Tiefe-, Parallelitäts- und Ausgabenlimits am wichtigsten bei Abfragen, die Opus 5 ausführen. Der Opus 5-Prompting-Leitfaden enthält eine Delegationsanweisung, die Sie zu jedem Prompt hinzufügen können. Ob Claude Code eine eigene Anweisung hinzufügt, hängt davon ab, welche System-Prompt Sie verwenden:claude_code-Voreinstellung: Wenn das Modell Opus 5 ist, fügt Claude Code eine Zeile zu seinem System-Prompt hinzu, die Claude mitteilt, das Agent-Tool nicht aufzurufen, es sei denn, es wird danach gefragt. Das Agent-Tool bleibt verfügbar.- Ein benutzerdefinierter Prompt oder kein
systemPrompt: Claude Code erstellt seinen System-Prompt nicht, daher fehlt diese Zeile. Fügen Sie die Delegationsanweisung aus dem Prompting-Leitfaden zu Ihrem eigenen Prompt hinzu.
Skalierung mit dynamischen Workflows
Subagenten funktionieren gut für einige delegierte Aufgaben pro Turn. Für Läufe, die Dutzende bis Hunderte von Agenten koordinieren, verwenden Sie dasWorkflow-Tool, das die Orchestrierung in ein Skript verlagert, das die Laufzeit außerhalb des Konversationskontexts ausführt. Siehe dynamische Workflows für die Unterschiede zwischen Workflows und Turn-für-Turn-Subagenten-Delegation.
Das Workflow-Tool ist im TypeScript Agent SDK v0.3.149 und später verfügbar. Fügen Sie Workflow in allowedTools ein, um Workflow-Läufe automatisch zu genehmigen. Die Tool-Input- und Output-Schemas sind in der TypeScript-Referenz aufgelistet.
Fehlerbehebung
Claude delegiert nicht an Subagenten
Wenn Claude Aufgaben direkt abschließt, anstatt an Ihren Subagenten zu delegieren:- Verwenden Sie explizites Prompting: Erwähnen Sie den Subagenten nach Name in Ihrem Prompt, zum Beispiel „Verwenden Sie den Code-Reviewer-Agent, um das Authentifizierungsmodul zu überprüfen“
- Schreiben Sie eine klare Beschreibung: Erklären Sie genau, wann der Subagent verwendet werden sollte, damit Claude Aufgaben angemessen zuordnen kann
Dateisystem-basierte Agenten werden nicht geladen
Claude Code überwacht~/.claude/agents/ und .claude/agents/ und erkennt eine neue oder bearbeitete Agent-Datei innerhalb weniger Sekunden, ohne dass ein Neustart erforderlich ist. Wenn eine Definition nie angezeigt wird, arbeiten Sie diese Ursachen durch:
- Neues
agents-Verzeichnis: Der Watcher deckt nur Verzeichnisse ab, die beim Start der Session vorhanden waren, daher benötigt die erste Datei in einem neuen Verzeichnis einen Session-Neustart. Dies ist die häufigste Ursache. - Ungültiges Frontmatter oder doppelter
name: Überprüfen Sie die YAML der Datei und ob ein vorhandener Agent bereits dennameverwendet. --disable-slash-commands: Sessions, die mit diesem Flag gestartet wurden, überwachen diese Verzeichnisse nicht und benötigen immer einen Neustart, um neue Dateien zu laden.- Eine Datei unter einem hinzugefügten Verzeichnis: Claude Code lädt
.claude/agents/aus Verzeichnissen, die mit deradd_dirs-Option (Python) oderadditionalDirectories-Option (TypeScript) oder der CLI-Option--add-diroder/add-dirhinzugefügt wurden, überwacht sie aber nicht, daher benötigt eine neue oder bearbeitete Datei dort einen Session-Neustart. - Ein programmatischer Agent mit demselben Namen:
agents, die anquery()übergeben werden, überschreiben einen Dateisystem-Agent mit demselben Namen.
Verwandte Dokumentation
- Claude Code Subagenten: Subagenten-Dokumentation einschließlich dateisystem-basierter Definitionen
- Dynamische Workflows: Orchestrieren Sie viele Subagenten aus einem Skript für Jobs, die zu groß für eine Konversation sind
- SDK-Übersicht: Erste Schritte mit dem Claude Agent SDK