agents definieren und verwenden.
Übersicht
Sie können Subagenten auf drei Arten erstellen:- Programmatisch: Verwenden Sie den Parameter
agentsin Ihrenquery()-Optionen (TypeScript, 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
description jedes Subagenten, ob dieser aufgerufen werden soll. Schreiben Sie klare Beschreibungen, die erklären, wann der Subagent verwendet werden sollte, und Claude wird automatisch geeignete Aufgaben delegieren. Sie können einen Subagenten auch explizit nach Name in Ihrem Prompt anfordern (zum Beispiel „Verwenden Sie den Code-Reviewer-Agent, um…”).
Vorteile der Verwendung von Subagenten
Kontextisolation
Jeder Subagent läuft in seiner eigenen frischen Konversation. Zwischentool-Aufrufe und Ergebnisse bleiben innerhalb des Subagenten; nur seine abschließende Nachricht wird an den übergeordneten Agent zurückgegeben. Siehe Was Subagenten erben für genau das, was sich im Kontext des Subagenten befindet. Beispiel: Einresearch-assistant-Subagent kann Dutzende von Dateien durchsuchen, ohne dass dieser Inhalt in der Hauptkonversation angesammelt wird. Der übergeordnete Agent erhält eine prägnante Zusammenfassung, nicht jede Datei, die der Subagent gelesen hat.
Parallelisierung
Mehrere Subagenten können gleichzeitig ausgeführt werden und beschleunigen komplexe Workflows dramatisch. Beispiel: Während einer Code-Überprüfung können Sie die Subagentenstyle-checker, security-scanner und test-coverage gleichzeitig ausführen und die Überprüfungszeit von Minuten auf Sekunden reduzieren.
Spezialisierte Anweisungen und Wissen
Jeder Subagent kann maßgeschneiderte System-Prompts mit spezifischer Expertise, Best Practices und Einschränkungen haben. Beispiel: Eindatabase-migration-Subagent kann detailliertes Wissen über SQL-Best-Practices, Rollback-Strategien und Datenintegritätsprüfungen haben, die in den Anweisungen des Haupt-Agenten unnötiger Lärm wären.
Tool-Einschränkungen
Subagenten können auf bestimmte Tools beschränkt werden, was das Risiko unbeabsichtigter Aktionen verringert. Beispiel: Eindoc-reviewer-Subagent könnte nur Zugriff auf Read- und Grep-Tools haben, um sicherzustellen, dass er Ihre Dokumentationsdateien analysieren, aber niemals versehentlich ändern kann.
Erstellen von Subagenten
Programmatische Definition (empfohlen)
Definieren Sie Subagenten direkt in Ihrem Code mit dem Parameteragents. Dieses Beispiel erstellt zwei Subagenten: einen Code-Reviewer mit Nur-Lese-Zugriff und einen Test-Runner, der Befehle ausführen kann. Claude ruft Subagenten über das Agent-Tool auf, daher müssen Sie Agent in allowedTools einschließen, um Subagenten-Aufrufe automatisch zu genehmigen, ohne eine Berechtigungsaufforderung anzuzeigen.
AgentDefinition-Konfiguration
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
description | string | Ja | Natürlichsprachige Beschreibung, wann dieser Agent verwendet werden soll |
prompt | string | Ja | Der System-Prompt des Agenten, der seine Rolle und sein Verhalten definiert |
tools | string[] | Nein | Array von zulässigen Tool-Namen. Falls weggelassen, erbt alle Tools |
disallowedTools | string[] | Nein | Array von Tool-Namen, die aus dem Tool-Set des Agenten entfernt werden sollen |
model | string | Nein | Modell-Override für diesen Agent. Akzeptiert einen Alias wie 'sonnet', 'opus', 'haiku', 'inherit' oder eine vollständige Modell-ID. Standardmäßig Haupt-Modell, falls weggelassen |
skills | string[] | Nein | Liste von Skill-Namen, die beim Start in den Kontext des Agenten vorgeladen werden sollen. Nicht aufgelistete Skills bleiben über das Skill-Tool aufrufbar |
memory | 'user' | 'project' | 'local' | Nein | Speicherquelle für diesen Agent |
mcpServers | (string | object)[] | Nein | MCP-Server, die diesem Agent zur Verfügung stehen, nach Name oder Inline-Konfiguration |
maxTurns | number | Nein | Maximale Anzahl von Agent-Turns, bevor der Agent stoppt |
background | boolean | Nein | Führen Sie diesen Agent als nicht-blockierende Hintergrund-Aufgabe aus, wenn er aufgerufen wird |
effort | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number | Nein | Reasoning-Effort-Level für diesen Agent |
permissionMode | PermissionMode | Nein | Berechtigungsmodus für die Tool-Ausführung innerhalb dieses Agenten |
AgentDefinition-Referenz für Details.
Subagenten können keine eigenen Subagenten spawnen. Fügen Sie
Agent nicht in das tools-Array eines Subagenten ein.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.
Auch ohne benutzerdefinierte Subagenten zu definieren, kann Claude den integrierten
general-purpose-Subagenten spawnen. Dies ist nützlich, um Recherche- oder Explorationsaufgaben zu delegieren, ohne spezialisierte Agenten zu erstellen. Fügen Sie Agent in allowedTools ein, damit diese Aufrufe automatisch genehmigt werden, ohne eine Berechtigungsaufforderung anzuzeigen.Was Subagenten erben
Das Kontextfenster eines Subagenten startet frisch (keine übergeordnete Konversation), ist aber nicht leer. Der einzige Kanal vom übergeordneten Agent zum Subagenten ist der Prompt-String des Agent-Tools, daher fügen Sie alle Dateipfade, Fehlermeldungen oder Entscheidungen, die der Subagent benötigt, direkt in diesen Prompt ein.| Der Subagent erhält | Der Subagent erhält nicht |
|---|---|
Seinen eigenen System-Prompt (AgentDefinition.prompt) und den Prompt des Agent-Tools | Die Konversationshistorie oder Tool-Ergebnisse des übergeordneten Agenten |
Projekt CLAUDE.md (geladen über settingSources) | Vorgeladener Skill-Inhalt, es sei denn, er ist in AgentDefinition.skills aufgelistet |
Tool-Definitionen (geerbt vom übergeordneten Agent oder die Teilmenge in tools) | Der System-Prompt des übergeordneten Agenten |
Der übergeordnete Agent erhält die abschließende Nachricht des Subagenten wörtlich als Agent-Tool-Ergebnis, kann sie 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 Haupt-query()-Aufruf übergeben.Aufrufen von Subagenten
Automatischer Aufruf
Claude entscheidet automatisch, wann Subagenten basierend auf der Aufgabe und derdescription jedes Subagenten aufgerufen werden sollen. 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 nach Name 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-Leveln und verwendet ein leistungsfähigeres Modell für strenge Überprüfungen.Erkennen von Subagenten-Aufrufen
Subagenten werden über das Agent-Tool aufgerufen. Um zu erkennen, wann ein Subagent aufgerufen wird, suchen Sie nachtool_use-Blöcken, bei denen name "Agent" ist. Nachrichten aus dem Kontext eines Subagenten enthalten ein Feld parent_tool_use_id.
Der Tool-Name wurde in Claude Code v2.1.63 von
"Task" zu "Agent" umbenannt. Aktuelle SDK-Releases geben "Agent" in tool_use-Blöcken aus, verwenden aber immer noch "Task" in der system:init-Tools-Liste und in result.permission_denials[].tool_name. Das Überprüfen beider Werte in block.name gewährleistet Kompatibilität über SDK-Versionen hinweg.Die Nachrichtenstruktur unterscheidet sich zwischen SDKs. In Python werden Inhaltsblöcke direkt über
message.content aufgerufen. In TypeScript umhüllt SDKAssistantMessage die Claude API-Nachricht, daher wird auf den Inhalt über message.message.content zugegriffen.Fortsetzen von Subagenten
Subagenten können fortgesetzt werden, um dort fortzufahren, wo sie aufgehört haben. Fortgesetzte Subagenten behalten ihre vollständige Konversationshistorie, einschließlich aller vorherigen Tool-Aufrufe, Ergebnisse und Reasoning. Der Subagent setzt genau dort an, wo er gestoppt hat, anstatt von vorne zu beginnen. Wenn ein Subagent abgeschlossen ist, erhält Claude seine Agent-ID im Agent-Tool-Ergebnis. Um einen Subagenten programmatisch fortzusetzen:- Erfassen Sie die Session-ID: Extrahieren Sie
session_idaus Nachrichten während der ersten Abfrage - Extrahieren Sie die Agent-ID: Analysieren Sie
agentIdaus dem Nachrichteninhalt - Setzen Sie die Session fort: Übergeben Sie
resume: sessionIdin den Optionen der zweiten Abfrage und fügen Sie die Agent-ID in Ihren Prompt ein
Sie müssen dieselbe Session fortsetzen, um auf das Transkript des Subagenten zuzugreifen. Jeder
query()-Aufruf startet standardmäßig eine neue Session, daher übergeben Sie resume: sessionId, um in derselben Session fortzufahren.Wenn Sie einen benutzerdefinierten Agent verwenden (nicht einen integrierten), müssen Sie auch dieselbe Agent-Definition im Parameter agents für beide Abfragen übergeben.- Hauptkonversations-Komprimierung: Wenn die Hauptkonversation komprimiert wird, sind Subagenten-Transkripte nicht betroffen. Sie werden in separaten Dateien gespeichert.
- Session-Persistenz: Subagenten-Transkripte bleiben innerhalb ihrer Session bestehen. Sie können einen Subagenten nach dem Neustart von Claude Code fortsetzen, indem Sie dieselbe Session fortsetzen.
- Automatische Bereinigung: Transkripte werden basierend auf der Einstellung
cleanupPeriodDaysbereinigt (Standard: 30 Tage).
Tool-Einschränkungen
Subagenten können über das Feldtools eingeschränkten Tool-Zugriff haben:
- Feld weglassen: Agent erbt alle verfügbaren Tools (Standard)
- Tools angeben: Agent kann nur aufgelistete Tools verwenden
Häufige Tool-Kombinationen
| Anwendungsfall | Tools | Beschreibung |
|---|---|---|
| Schreibgeschützte Analyse | Read, Grep, Glob | Kann Code untersuchen, aber nicht ändern oder ausführen |
| Test-Ausführung | Bash, Read, Grep | Kann Befehle ausführen und Ausgabe analysieren |
| Code-Änderung | Read, Edit, Write, Grep, Glob | Vollständiger Lese-/Schreibzugriff ohne Befehlsausführung |
| Vollständiger Zugriff | Alle Tools | Erbt alle Tools vom übergeordneten Agent (Feld tools weglassen) |
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:- Überprüfen Sie, dass Agent-Aufrufe genehmigt sind: Fügen Sie
AgentinallowedToolsein, um Subagenten-Aufrufe automatisch zu genehmigen. Ohne diese Einstellung fallen Agent-Aufrufe auf IhrencanUseTool-Callback zurück oder werden imdontAsk-Modus abgelehnt - Verwenden Sie explizites Prompting: Erwähnen Sie den Subagenten nach Name in Ihrem Prompt (zum Beispiel „Verwenden Sie den Code-Reviewer-Agent, um…”)
- 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
Agenten, die in.claude/agents/ definiert sind, werden nur beim Start geladen. Wenn Sie eine neue Agent-Datei erstellen, während Claude Code läuft, starten Sie die Session neu, um sie zu laden.
Windows: Fehler bei langen Prompts
Unter Windows können Subagenten mit sehr langen Prompts aufgrund von Befehlszeilenlängenbeschränkungen (8191 Zeichen) fehlschlagen. Halten Sie Prompts prägnant oder verwenden Sie dateisystem-basierte Agenten für komplexe Anweisungen.Verwandte Dokumentation
- Claude Code Subagenten: umfassende 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