Subagenten arbeiten innerhalb einer einzelnen Sitzung. Um viele unabhängige Sitzungen parallel auszuführen und sie von einem Ort aus zu überwachen, siehe Hintergrund-Agenten. Für separate Sitzungen, die Nachrichten aneinander weitergeben, siehe Sitzungsübergreifendes Messaging. Für ein koordiniertes Team von Sitzungen, das Claude spawnt und beaufsichtigt, siehe Agent-Teams.
- Kontext bewahren, indem Sie Exploration und Implementierung aus Ihrer Hauptkonversation heraushalten
- Einschränkungen durchsetzen, indem Sie begrenzen, welche Werkzeuge ein Subagent verwenden kann
- Konfigurationen wiederverwenden über Projekte hinweg mit Subagenten auf Benutzerebene
- Verhalten spezialisieren mit fokussierten Systemprompts für spezifische Domänen
- Kosten kontrollieren, indem Sie Aufgaben an schnellere, günstigere Modelle wie Haiku weiterleiten
description-Felder Ihrer Subagenten und verschieben Sie Details in den Systemprompt jedes Subagenten, der nur geladen wird, wenn dieser Subagent ausgeführt wird.
Integrierte Subagenten
Claude Code enthält integrierte Subagenten, die Claude automatisch bei Bedarf verwendet. Jeder erbt die Berechtigungen der übergeordneten Konversation; die meisten werden mit einem eingeschränkten Werkzeugsatz ausgeführt. Explore und Plan starten ohne Ihre CLAUDE.md-Dateien und den Git-Status-Snapshot, um die Recherche schnell und kostengünstig zu halten. Andere integrierte und benutzerdefinierte Subagenten laden beides, es sei denn, Sie setzenomitClaudeMd in der Definition eines benutzerdefinierten Subagenten, um ihn ohne die Benutzer-, Projekt- und lokalen CLAUDE.md-Dateien zu starten. Für die vollständige Aufschlüsselung dessen, was einen Subagenten erreicht, siehe was beim Start geladen wird.
- Explore
- Plan
- General-purpose
- Other
Ein schneller, schreibgeschützter Agent, der für die Suche und Analyse von Codebases optimiert ist.
- Modell: das Modell der Hauptkonversation. Wenn die Hauptkonversation Fable ausführt, hängt das Modell von Explore davon ab, wie Sie sich verbinden:
- Mit einem Claude-Abonnement, einem Anthropic Console-Konto oder einem LLM-Gateway, das über
ANTHROPIC_BASE_URLerreicht wird, läuft Explore auf dem Opus-Modell, auf das deropus-Alias verweist. - Auf Amazon Bedrock, Google Cloud’s Agent Platform, Microsoft Foundry, Claude Platform on AWS oder einem Claude apps gateway bleibt Explore auf dem Modell der Hauptkonversation.
- Mit einem Claude-Abonnement, einem Anthropic Console-Konto oder einem LLM-Gateway, das über
- Tools: Tools mit reinem Lesezugriff; Write und Edit sind nicht zulässig
- Zweck: Dateiermittlung, Codesuche, Erkundung der Codebasis
Explore überschreibt den integrierten und behält sein eigenes model-Feld, daher definieren Sie einen mit model: haiku, um die Exploration auf einem kostengünstigeren Modell auszuführen. Um ein Modell für jeden Subagenten zu erzwingen, einschließlich Explore, siehe Führen Sie jeden Subagenten auf einem Modell aus.Claude delegiert an Explore, wenn es eine Codebase durchsuchen oder verstehen muss, ohne Änderungen vorzunehmen. Dies hält Explorationsergebnisse aus Ihrem Hauptkonversationskontext heraus.Beim Aufrufen von Explore gibt Claude ein Gründlichkeitsniveau an: quick für gezielte Lookups, medium für ausgewogene Exploration oder very thorough für umfassende Analyse.- Um einen bestimmten integrierten Typ zu blockieren, fügen Sie ihn zu
permissions.denyhinzu, wie in Spezifische Subagenten deaktivieren gezeigt. - Um zu verhindern, dass Claude an einen Subagenten delegiert, verweigern Sie das
Agent-Werkzeug selbst mitpermissions.deny. - Um nur die integrierten
Explore- undPlan-Subagenten zu entfernen, setzen SieCLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1. Claude liest und erkundet Dateien direkt, anstatt an sie zu delegieren. Erfordert Claude Code v2.1.198 oder später. - Im nicht-interaktiven Modus und dem Agent SDK setzen Sie
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1, um alle integrierten Typen zu entfernen und nur Ihre eigenen bereitzustellen.
subagent_type auslässt, schlägt mit subagent_type is required fehl, wenn die Sitzung keinen general-purpose-Subagenten hat, auf den zurückgegriffen werden kann.
Über diese integrierten Subagenten hinaus können Sie Ihre eigenen mit benutzerdefinierten Prompts, Werkzeugbeschränkungen, Berechtigungsmodi, Hooks und Skills erstellen. Die folgenden Abschnitte zeigen, wie Sie anfangen und Subagenten anpassen.
Schnellstart: Erstellen Sie Ihren ersten Subagenten
Subagenten sind Markdown-Dateien mit YAML-Frontmatter. Um einen zu erstellen, bitten Sie Claude, ihn für Sie zu schreiben, oder schreiben Sie die Datei selbst. Diese Anleitung erstellt einen Subagenten auf Benutzerebene, der Code überprüft und Verbesserungen vorschlägt.1
Bitten Sie Claude, den Subagenten zu erstellen
Beschreiben Sie in Claude Code den Subagenten, den Sie möchten, und wo Sie ihn speichern möchten:Claude schreibt die Datei mit einem
name, einer description, einer tools-Liste, einem model und einem System-Prompt.2
Überprüfen Sie die Datei
Öffnen Sie Da sich die Datei in
~/.claude/agents/code-improver.md und bestätigen Sie, dass das Frontmatter dem entspricht, was Sie angefordert haben. Das Ergebnis sieht so aus:~/.claude/agents/ befindet, ist der Subagent in jedem Projekt auf Ihrem Computer verfügbar. Um ihn stattdessen auf ein Projekt zu beschränken, verschieben Sie ihn in das .claude/agents/-Verzeichnis dieses Projekts. Wählen Sie den Geltungsbereich des Subagenten vergleicht die beiden.3
Probieren Sie es aus
Bitten Sie Claude, an den neuen Subagenten zu delegieren:Claude delegiert an Ihren neuen Subagenten, der die Codebasis durchsucht und Verbesserungsvorschläge zurückgibt. Im Transkript wird die Delegierung als Tool-Aufruf-Zeile angezeigt, die den Namen des Subagenten gefolgt von einer kurzen Aufgabenbeschreibung zeigt, wie z. B.
code-improver(Suggest code improvements).Wenn Claude den neuen Subagenten nicht finden kann, starten Sie Claude Code neu und versuchen Sie es erneut. Dies geschieht nur, wenn ~/.claude/agents/ vor dem Sitzungsstart nicht vorhanden war, da eine laufende Sitzung ein neu erstelltes agents-Verzeichnis nicht erkennt.Das Ausführen von
/agents gibt eine Erinnerung aus, Claude zu fragen oder .claude/agents/ und ~/.claude/agents/ direkt zu bearbeiten.
In Claude Code v2.1.197 und früher öffnet /agents einen interaktiven Assistenten mit einer Registerkarte Running, die aktive Subagenten auflistet, und einer Registerkarte Library zum Erstellen, Bearbeiten und Löschen. Konfigurieren Sie Subagenten
Der Dateispeicherort eines Subagenten bestimmt, wer darauf zugreifen kann, und sein Frontmatter bestimmt, was er tun kann. Dieser Abschnitt behandelt, wo Subagenten-Dateien gespeichert werden und welche Felder sie unterstützen.Wählen Sie den Subagenten-Umfang
Speichern Sie Subagenten-Dateien an verschiedenen Orten je nach Umfang. Wenn mehrere Subagenten denselben Namen haben, verwendet Claude Code den aus dem höherrangigen Ort.
Projekt-Subagenten (
.claude/agents/) sind ideal für Subagenten, die spezifisch für eine Codebase sind. Checken Sie sie in die Versionskontrolle ein, damit Ihr Team sie gemeinsam verwenden und verbessern kann.
Projekt-Subagenten werden durch Aufwärts-Traversierung vom aktuellen Arbeitsverzeichnis entdeckt, sodass jedes .claude/agents/-Verzeichnis zwischen dort und dem Repository-Root gescannt wird. Wenn mehr als eines dieser verschachtelten Verzeichnisse denselben name definiert, verwendet Claude Code die Definition, die dem Arbeitsverzeichnis am nächsten liegt.
Wenn Sie ein Verzeichnis mit --add-dir oder /add-dir hinzufügen, lädt Claude Code auch seinen .claude/agents/-Ordner zusammen mit Ihren Projekt-Subagenten. Siehe Zusätzliche Verzeichnisse für welche anderen Konfigurationstypen aus --add-dir geladen werden. Um Subagenten über Projekte hinweg zu teilen, ohne --add-dir zu verwenden, nutzen Sie ~/.claude/agents/ oder ein Plugin.
Benutzer-Subagenten (~/.claude/agents/) sind persönliche Subagenten, die in allen Ihren Projekten verfügbar sind.
Claude Code scannt .claude/agents/ und ~/.claude/agents/ rekursiv, sodass Sie Definitionen in Unterordnern wie agents/review/ oder agents/research/ organisieren können. Der Unterverzeichnis-Pfad beeinflusst nicht, wie ein Subagent identifiziert oder aufgerufen wird, da die Identität nur vom name-Frontmatter-Feld stammt.
Halten Sie name-Werte über den gesamten Baum eindeutig: Wenn zwei Dateien unter demselben .claude/agents/-Verzeichnis, einschließlich seiner Unterordner, denselben Namen deklarieren, lädt Claude Code nur eine von ihnen, ausgewählt nach Dateisystem-Lesereihenfolge statt nach dokumentierter Priorität. Über verschachtelte Projekt-Verzeichnisse hinweg gewinnt die Definition, die dem Arbeitsverzeichnis am nächsten liegt, wie oben beschrieben. Die /doctor-Setup-Überprüfung meldet Dateien im selben Verzeichnis, die einen Namen teilen, und schlägt vor, alle außer einer umzubenennen oder zu entfernen.
Plugin-agents/-Verzeichnisse werden ebenfalls rekursiv gescannt. Im Gegensatz zu Projekt- und Benutzer-Umfängen wird ein Unterordner in einem Plugin-agents/-Verzeichnis Teil des scoped identifier: Eine Datei unter agents/review/security.md im Plugin my-plugin registriert sich als my-plugin:review:security.
CLI-definierte Subagenten werden als JSON beim Starten von Claude Code übergeben. Sie existieren nur für diese Sitzung und werden nicht auf der Festplatte gespeichert, was sie für schnelle Tests oder Automatisierungsskripte nützlich macht. Sie können mehrere Subagenten in einem einzigen --agents-Aufruf definieren:
- macOS, Linux, WSL
- Windows PowerShell
--agents auch den Pfad zu einer JSON-Datei, die das gleiche Objekt enthält, für Definitionen, die zu groß sind, um sie in der Befehlszeile zu übergeben. Zum Beispiel liest claude -p --agents ./agents.json "Review my changes" die Definitionen aus dieser Datei. In einer interaktiven Sitzung weigert sich Claude Code, einen Dateipfad zu akzeptieren. Die Dateiform erfordert Claude Code v2.1.281 oder später.
Jeder Top-Level-Schlüssel im JSON ist ein Agent-Name, und sein Wert ist die Definition dieses Agenten. Starten Sie einen Namen nicht mit -. Eine Definition nimmt diese Felder auf:
prompt: Der Systemprompt des Agenten, äquivalent zum Markdown-Body in dateibasierten Subagenten.promptkann leer sein. Wenn Sie einen Agent mit einem leerenpromptund ohnememory-Feld als Sitzungs-Agent mit--agentauswählen, bleibt der Systemprompt der Sitzung unverändert. Ein leererprompterfordert Claude Code v2.1.281 oder später.- Frontmatter-Felder:
description,tools,disallowedTools,model,permissionMode,mcpServers,hooks,maxTurns,autoCompactWindow,skills,initialPrompt,memory,effort,background,omitClaudeMdundisolation. - Ignorierte Felder:
colorundexperimentalwerden hier nicht akzeptiert und werden ignoriert statt abgelehnt.
Invalid --agents configuration.
Verwaltete Subagenten werden von Organisationsadministratoren bereitgestellt. Platzieren Sie Markdown-Dateien in .claude/agents/ im Verzeichnis der verwalteten Einstellungen, wobei Sie das gleiche Frontmatter-Format wie bei Projekt- und Benutzer-Subagenten verwenden. Verwaltete Definitionen haben Vorrang vor Projekt- und Benutzer-Subagenten mit demselben Namen.
Plugin-Subagenten stammen von Plugins, die Sie installiert haben. Sie werden automatisch zusammen mit Ihren benutzerdefinierten Subagenten geladen und erscheinen in der @-Erwähnung-Typeahead unter ihrem scoped name. Siehe die Plugin-Komponenten-Referenz für Details zum Erstellen von Plugin-Subagenten.
Aus Sicherheitsgründen unterstützen Plugin-Subagenten die Frontmatter-Felder
hooks, mcpServers oder permissionMode nicht. Diese Felder werden ignoriert, wenn Agenten aus einem Plugin geladen werden. Wenn Sie sie benötigen, kopieren Sie die Agent-Datei in .claude/agents/ oder ~/.claude/agents/. Sie können auch Regeln zu permissions.allow in settings.json oder settings.local.json hinzufügen, aber diese Regeln gelten für die gesamte Sitzung, nicht nur für den Plugin-Subagenten.Wenn Sie der Autor des Plugins sind, liefern Sie die Hooks stattdessen in der hooks/hooks.json des Plugins und die MCP-Server in seiner .mcp.json aus. Sie gelten immer dann, wenn das Plugin aktiviert ist, und nicht nur innerhalb des Subagenten.Schreiben Sie Subagenten-Dateien
Subagenten-Dateien verwenden YAML-Frontmatter für die Konfiguration, gefolgt vom Systemprompt in Markdown:Claude Code überwacht
~/.claude/agents/ und .claude/agents/. Wenn Sie eine Subagenten-Datei auf der Festplatte hinzufügen oder bearbeiten oder Claude bitten, eine für Sie zu schreiben, erkennt Claude Code die Änderung innerhalb weniger Sekunden und die nächste Delegation verwendet die aktualisierte Definition, ohne dass ein Neustart erforderlich ist.Drei Fälle erfordern immer noch einen Neustart:- Der Watcher deckt nur Verzeichnisse ab, die beim Sitzungsstart existierten, daher müssen Sie nach dem Erstellen der ersten Agent-Datei eines Umfangs in einem neuen
agents-Verzeichnis neu starten, um sie zu laden. - Claude Code überwacht
.claude/agents/nicht in Verzeichnissen, die mit--add-diroder/add-dirhinzugefügt wurden, daher müssen Sie nach dem Hinzufügen oder Bearbeiten eines Subagenten dort neu starten, um die Änderung zu laden. - Sitzungen, die mit
--disable-slash-commandsgestartet wurden, überwachen diese Verzeichnisse überhaupt nicht.
.claude/agents/code-reviewer.md
--append-subagent-system-prompt den von Ihnen bereitgestellten Text an das Ende des Systemprompts jedes Subagenten an, einschließlich verschachtelter Subagenten, außer einem forked Subagenten, der den Prompt der Konversation selbst wiederverwendet. Erfordert Claude Code v2.1.205 oder später. Wenn Ihr Text zu lang ist, um ihn in der Befehlszeile zu übergeben, speichern Sie ihn in einer Datei und übergeben Sie den Pfad mit --append-subagent-system-prompt-file stattdessen. Das Datei-Flag erfordert Claude Code v2.1.261 oder später.
Ein Subagent startet im aktuellen Arbeitsverzeichnis der Hauptkonversation. Innerhalb eines Subagenten bleiben cd-Befehle nicht zwischen Bash- oder PowerShell-Werkzeugaufrufen bestehen und beeinflussen nicht das Arbeitsverzeichnis der Hauptkonversation. Um dem Subagenten stattdessen eine isolierte Kopie des Repositorys zu geben, setzen Sie isolation: worktree.
Ein Subagent mit isolation: worktree führt seine Bash- und PowerShell-Befehle in seinem Worktree aus. Ein Befehl, dessen Arbeitsverzeichnis sich stattdessen zu Ihrem Haupt-Checkout auflöst, beispielsweise weil das Worktree-Verzeichnis entfernt wurde, während der Subagent lief, schlägt mit einem Fehler fehl.
Diese Arbeitsverzeichnis-Überprüfung deckt das gesamte Repository ab, das das Verzeichnis enthält, von dem aus Sie Claude Code gestartet haben. Wenn Ihre Sitzung in einem eigenen verknüpften Worktree läuft, deckt die Überprüfung auch den Haupt-Checkout ab, von dem dieser Worktree verknüpft ist.
Für Bash-Befehle überprüft Claude Code auch den Befehl selbst auf zwei Arten:
- Es blockiert einen Befehl, der Git in den Haupt-Checkout umleitet.
- Es weigert sich, einen Befehl auszuführen, wenn es nicht vom Befehlstext überprüfen kann, dass jedes Git, das der Befehl ausführt, im Worktree bleibt, beispielsweise wenn der Befehlsname zur Laufzeit berechnet wird.
isolation: worktree; siehe Wie Claude Code Isolation erzwingt.
Frontmatter-Referenz
Konfigurieren Sie einen Subagenten mit YAML-Frontmatter zwischen----Markierungen am Anfang seiner Datei, und schreiben Sie seinen Systemprompt als Markdown nach dem schließenden ---. Nur name und description sind erforderlich.
Mehrteilige Feldnamen verwenden camelCase, wie maxTurns und disallowedTools, und müssen genau mit der Tabelle übereinstimmen: Claude Code ignoriert ein Feld, das es nicht erkennt, ohne einen Fehler zu melden.
- Um ein falsch geschriebenes Feld in einem geladenen Subagenten zu finden, führen Sie
claude --debugin Ihrer Shell aus und durchsuchen Sie das Debug-Log unter~/.claude/debug/<session-id>.txtnachdoes not recognize or apply. Das Debug-Log nennt bis zu fünf Felder der obersten Ebene in der Datei des Subagenten, die Claude Code nicht erkennt, zusammen mit dem wahrscheinlich gemeinten Namen, wenn ein unterstütztes Feld ähnlich ist. Erfordert Claude Code v2.1.296 oder später. - Um herauszufinden, warum eine Subagenten-Datei nicht geladen wurde, siehe Subagenten-Dateien, die Claude Code überspringt.
Schreiben Sie
cacheTtl in die experimental-Zuordnung, nicht auf die oberste Ebene des Frontmatters.
Subagenten-Dateien, die Claude Code überspringt
Claude Code überspringt eine Datei in einem Projekt-, Benutzer- oder verwaltetenagents-Verzeichnis oder in einem unter einem Verzeichnis, das Sie mit --add-dir hinzufügen, ohne es in der Sitzung zu melden, wenn das Frontmatter eines dieser Probleme hat:
- Kein
name: Claude Code behandelt die Datei als Dokumentation, die neben Ihren Agenten aufbewahrt wird. - Ein öffnendes
---, das nicht die erste Zeile der Datei ist: Claude Code liest die Datei als ohne Frontmatter und behandelt sie als Dokumentation. - Ein
name, der mit-beginnt,:enthält oder länger als 256 Zeichen ist: Claude Code überspringt die Datei und schreibt einen Fehler in das Debug-Log. - Ein
name, aber keinedescription: Claude Code überspringt die Datei und schreibt den Grund in das Debug-Protokoll. - YAML, das nicht analysiert wird: Claude Code liest keine Felder aus der Datei, überspringt sie und schreibt den Parse-Fehler in das Debug-Protokoll.
--debug aus.
Ein Plugin-Subagent, dessen Frontmatter kein name hat oder nicht analysiert wird, wird immer noch unter seinem Dateinamen geladen.
Überprüfen Sie ein agents-Verzeichnis vor einer Sitzung
Um Dateien in einem agents-Verzeichnis zu finden, deren Frontmatter nicht analysiert wird, führen Sie claude plugin validate gegen das Verzeichnis aus, beispielsweise .claude/agents oder ~/.claude/agents. Claude Code überprüft nur das Verzeichnis, das Sie benennen, und kennzeichnet keine Datei, deren Frontmatter analysiert wird, aber kein name hat. Erfordert Claude Code v2.1.233 oder später.
Wählen Sie ein Modell
Dasmodel-Feld steuert, welches Modell der Subagent verwendet:
- Modell-Alias: Verwenden Sie einen der verfügbaren Aliase:
sonnet,opus,haikuoderfable - Vollständige Modell-ID: Verwenden Sie eine vollständige Modell-ID wie
claude-opus-5-5oderclaude-sonnet-5. Akzeptiert dieselben Werte wie das--model-Flag - inherit: Verwenden Sie dasselbe Modell wie die Hauptkonversation
model-Parameter für diese spezifische Invokation übergeben. Bei einem Aufruf des Agent-Tools akzeptiert dieser Parameter einen Modell-Alias: sonnet, opus, haiku oder fable. Claude kann bei diesem Aufruf keine vollständige Modell-ID und kein inherit übergeben. Claude Code löst das Modell des Subagenten in dieser Reihenfolge auf:
- Der Per-Invokation-
model-Parameter - Das
model-Frontmatter des Subagenten, wobeiinheritdas Modell der Hauptkonversation auswählt - Die
CLAUDE_CODE_SUBAGENT_MODEL-Umgebungsvariable, wenn Sie sie auf einen Modell-Alias oder eine Modell-ID setzen - Das Modell der Hauptkonversation
agent.spawn-Hook ein Modell festlegt, verwendet Claude Code dieses Modell anstelle des Parameters pro Aufruf.
In zwei Fällen wird ein Familien-Alias wie opus im Per-Invokation-Parameter oder im Frontmatter stattdessen zum Modell der Hauptkonversation aufgelöst, anstatt zur Version, auf die der Alias verweist:
- Das Modell der Hauptkonversation gehört zu dieser Familie: Der Subagent läuft auf dem genauen Modell der Hauptkonversation, einschließlich aller
[1m]-Suffixe, sodass er das gleiche erweiterte Kontextfenster wie die Hauptkonversation erhält. - Claude Code kann die Modellfamilie der Hauptkonversation nicht bestimmen, auf einem anderen Provider als der Anthropic API: Dies kann mit einem Application Inference Profile ARN auf Amazon Bedrock passieren, das Claude Code nicht zu einem Backing-Modell aufgelöst hat. Dieser Fall deckt nur den
opus-Alias ab und gilt nicht, wenn SieANTHROPIC_DEFAULT_OPUS_MODELsetzen, daopusdann zum von Ihnen gesetzten Modell aufgelöst wird.
CLAUDE_CODE_SUBAGENT_MODEL wird immer zur Version aufgelöst, auf die der Alias verweist, auch wenn er die Familie der Hauptkonversation benennt. Das Setzen der Variablen auf inherit ist dasselbe wie das Nichtsetzen.
Das Setzen von CLAUDE_CODE_SUBAGENT_MODEL allein ändert nicht das Modell, auf dem die integrierten Explore- und Plan-Subagenten laufen. Um es zu ändern, siehe Führen Sie jeden Subagenten auf einem Modell aus.
Vor v2.1.251 kam CLAUDE_CODE_SUBAGENT_MODEL zuerst in dieser Reihenfolge und überschrieb sowohl den Per-Invokation-Parameter als auch das Frontmatter, einschließlich model: inherit.
Claude Code überprüft die Per-Invokation-Parameter, Frontmatter und Umgebungsvariablenwerte gegen die availableModels-Allowlist Ihrer Organisation. Für einen blockierten Wert ersetzt es ein anderes Modell:
- Wenn der blockierte Wert ein Familien-Alias wie
opusist, führt Claude Code den Subagenten auf der neuesten Version dieser Familie aus, die die Allowlist zulässt, und folgt den gleichen Substitutionsregeln und Provider-Umfang wie/model. Vor v2.1.222 führte Claude Code den Subagenten auf dem geerbten Modell für einen blockierten Familien-Alias aus. - Für jeden anderen blockierten Wert, auf Providern, wo diese Substitution nicht funktioniert, oder wenn die Allowlist keine Version der Familie zulässt, führt Claude Code den Subagenten stattdessen auf dem geerbten Modell aus. Wenn Sie
CLAUDE_CODE_SUBAGENT_MODELsetzen, versucht Claude Code zuerst dieses Modell unter den gleichen Regeln.
/tasks aus. Claude Code benennt das Modell in der Zeile des Subagenten und fügt gegebenenfalls die für diesen Subagenten festgelegte Effort-Stufe hinzu. Erfordert Claude Code v2.1.242 oder später.
Ein model-Parameter pro Aufruf gilt auch, wenn der Subagent fortgesetzt wird oder eine Folgenachricht erhält, sodass der Subagent auf diesem Modell bleibt.
Ab v2.1.198 erben Subagenten auch die Extended Thinking-Konfiguration der Hauptkonversation: Wenn Thinking in Ihrer Sitzung aktiviert ist, ist es für den Subagenten aktiviert, und wenn es deaktiviert ist, bleibt es deaktiviert. Es gibt keine Pro-Subagenten-Thinking-Einstellung. Vor v2.1.198 liefen Subagenten mit deaktiviertem Extended Thinking, unabhängig von der Einstellung der Hauptkonversation.
Führen Sie jeden Subagenten auf einem Modell aus
CLAUDE_CODE_SUBAGENT_MODEL ist ein Standard, daher hat die Definition eines Subagenten oder ein Modell, das Claude übergibt, immer noch Vorrang vor ihm. Um ein Modell auf jeden Subagenten, Teammate und Workflow-Agent anzuwenden, setzen Sie auch CLAUDE_CODE_SUBAGENT_MODEL_FORCE auf 1. Erfordert Claude Code v2.1.257 oder später.
- Wenn Sie beide Variablen setzen, laufen Subagenten auf dem Modell in
CLAUDE_CODE_SUBAGENT_MODEL. - Wenn Sie nur
CLAUDE_CODE_SUBAGENT_MODEL_FORCEsetzen, laufen Subagenten auf dem Modell der Hauptkonversation, mit der Ausnahme, dass der integrierte Explore-Subagent auf dem Modell läuft, das für ihn unter Integrierte Subagenten aufgeführt ist.
env-Block einer Einstellungsdatei:
/tasks aus, während ein Subagent läuft. Die Zeile des Subagenten zeigt das Modell, auf dem er läuft.
Während CLAUDE_CODE_SUBAGENT_MODEL_FORCE aktiviert ist, ignoriert Claude Code das model-Feld in Subagenten-Definitionen, und Claude kann kein Modell übergeben, wenn es einen Subagenten startet. Diese Subagenten laufen weiterhin auf dem Modell der Hauptkonversation:
- Ein Fork
- Ein Skill, der in einem Subagenten läuft mit
model: inherit
Wählen Sie eine Effort-Stufe
Um einen Subagenten mit einer eigenen Effort-Stufe auszuführen, setzen Sie das Feldeffort in seiner Definition.
Wenn Sie Claude bitten, einen Subagenten, der kein Fork ist, mit einer bestimmten Effort-Stufe auszuführen, kann Claude für diesen Aufruf auch einen effort-Parameter übergeben. Der Parameter überschreibt das effort-Feld und bleibt wirksam, wenn der Subagent fortgesetzt wird. Die Umgebungsvariable CLAUDE_CODE_EFFORT_LEVEL hat Vorrang vor beiden. Der Parameter pro Aufruf erfordert Claude Code v2.1.292 oder später.
Wenn ein Subagent weder ein effort-Feld noch einen Parameter hat
Auf dem Modell der Hauptkonversation läuft der Subagent mit der Stufe, die Sie in der Sitzung wählen, etwa mit /effort, oder mit --effort festlegen. Auf einem anderen Modell gilt diese Stufe nicht. Um seine Stufe festzulegen, setzen Sie das Feld effort.
Kontrollieren Sie Subagenten-Fähigkeiten
Sie können kontrollieren, was Subagenten durch Werkzeugzugriff, Berechtigungsmodi und bedingte Regeln tun können.Verfügbare Werkzeuge
Subagenten erben die integrierten Werkzeuge und MCP-Werkzeuge, die in der Hauptkonversation verfügbar sind, eingeengt durch zwei Filter: Der erste entfernt eine kurze Liste von Werkzeugen aus jedem Subagenten, und der zweite reduziert den integrierten Werkzeugsatz für Subagenten, die im Hintergrund laufen, was der Standard ist. Auf macOS, Linux und WSL kann ein Subagent auch die Glob- und Grep-Werkzeuge erhalten, wenn die Hauptkonversation sie nicht hat, wie unter Glob-Werkzeugverhalten beschrieben. Forks überspringen beide Filter und erhalten den genauen Werkzeugpool der Hauptkonversation. Der erste Filter entfernt diese Werkzeuge, auch wenn sie imtools-Feld aufgelistet sind:
Agent, wenn der Subagent die Tiefengrenze erreicht hat; in einem Fork bleibt das Werkzeug aufgelistet, gibt aber stattdessen einen Fehler zurückAskUserQuestionEndConversation, das nur die Hauptkonversation beenden kann; siehe EndConversation-WerkzeugverhaltenEnterPlanModeExitPlanMode, es sei denn, derpermissionModedes Subagenten istplanScheduleWakeupWaitForMcpServersWorkflow
Agent und ExitPlanMode, die den Bedingungen des ersten Filters folgen, wo immer der Subagent läuft, behält ein Hintergrund-Subagent jedes MCP-Werkzeug, aber nur diese integrierten Werkzeuge: Read, Grep, Glob, LSP, Bash, PowerShell, Edit, Write, NotebookEdit, WebFetch, WebSearch, TodoWrite, Skill, ToolSearch, EnterWorktree, ExitWorktree, Monitor, TaskStop, SendMessage und Artifact, plus SubagentHandback für einen Subagenten, der durch ihn berichtet. Claude Code entfernt jedes andere integrierte Werkzeug aus einem Hintergrund-Subagenten, ob geerbt oder im tools-Feld aufgelistet, sodass die gleiche Definition zu verschiedenen Werkzeugen im Vordergrund und im Hintergrund führen kann. Die Entfernung meldet keinen Fehler, es sei denn, sie hinterlässt die tools-Liste aufgelöst zu nichts.
Vor v2.1.280 konnten Hintergrund-Subagenten LSP nicht verwenden.
ListAgents folgt diesen Filtern wie jedes integrierte Werkzeug: Ein Vordergrund-Subagent erbt es in Sitzungen, wo sitzungsübergreifendes Messaging aktiviert ist, und ein Hintergrund-Subagent behält es nicht.
Teammates in Agent-Teams behalten zusätzlich die Task-Tools und Cron-Tools: TaskCreate, TaskGet, TaskList, TaskUpdate, CronCreate, CronDelete und CronList. In einer Sitzung ohne die Task-Tools stellt Claude Code die Task-Tools auch nicht für Subagenten bereit, auch wenn der Subagent ein anderes Modell ausführt. Ein In-Process-Teammate folgt Ihrer Sitzung auf die gleiche Weise. Um herauszufinden, ob ein Split-Pane-Teammate die Task-Tools hat, siehe Task-Tool-Verfügbarkeit.
Beschränken Sie, welche Tools ein Subagent verwenden kann
Um Tools einzuschränken, verwenden Sie dastools-Feld als Allowlist oder das disallowedTools-Feld als Denylist. Wenn beide gesetzt sind, wird disallowedTools zuerst angewendet, dann wird tools gegen den verbleibenden Pool aufgelöst. Ein Tool, das in beiden aufgelistet ist, wird entfernt.
Dieses Beispiel verwendet tools, um ausschließlich Read, Grep, Glob und Bash zuzulassen. Der Subagent kann keine Dateien bearbeiten, keine Dateien schreiben und keine MCP-Tools verwenden:
disallowedTools, um alle verfügbaren Werkzeuge außer Write und Edit zu erben. Der Subagent behält Bash, MCP-Werkzeuge und den Rest seines Pools:
tools-Liste zu einem Tool auflöst, beispielsweise weil jeder Eintrag falsch geschrieben ist oder ein Tool benennt, das für Subagenten nicht verfügbar ist, weigert sich Claude Code normalerweise, den Subagenten zu starten, und das Agent-Tool gibt einen Fehler zurück, der die nicht aufgelösten Einträge benennt; siehe Agent would be spawned with zero tools für die Meldung und wie Sie jeden Eintrag korrigieren.
Die Felder tools und disallowedTools akzeptieren auch Einträge für einen ganzen MCP-Server:
Dieses Beispiel entfernt jedes Tool des
github-MCP-Servers, während Tools anderer Server und die integrierten Tools im Pool des Subagenten erhalten bleiben:
disallowedTools-Eintrag mit einem Spezifizierer, wie Bash(git push *), entfernt immer noch das ganze Werkzeug aus dem Subagenten, nicht nur die übereinstimmenden Befehle. Um Bash zu behalten und bestimmte Befehle zu blockieren, fügen Sie eine Bash-Ablehnungsregel wie Bash(git push *) zu permissions.deny in Ihren Einstellungen hinzu. Die Regel gilt für die Hauptkonversation und für Subagenten.
MCP-Servernamen, die einen doppelten Unterstrich enthalten
Wenn ein Subagent keines der Tools eines MCP-Servers erhält, dessen Name__ enthält, wie etwa reports__v2, überprüfen Sie die mcp__-Einträge des Subagenten:
- In
tools: Schreiben Siemcp__, gefolgt vom vollständigen Namen des Servers und__*, wie inmcp__reports__v2__*. Ohne das abschließende__*passtmcp__reports__v2auf keines der Tools dieses Servers. - In
disallowedTools: Suchen Sie nachmcp__reportsodermcp__reports__*, den Einträgen, die die Tools eines Servers namensreportsvorenthalten. Mit jedem der beiden Einträge verliert der Subagent auch jedesreports__v2-Tool, da diese Tool-Namen ebenfalls mitmcp__reports__beginnen. Um nur die Tools desreports-Servers vorzuenthalten, listen Sie sie stattdessen einzeln auf, etwamcp__reports__run_query.
Beschränken Sie, welche Subagenten gespawnt werden können
Wenn ein Agent als Hauptthread mitclaude --agent läuft, kann er Subagenten mit dem Agent-Werkzeug spawnen. Um zu beschränken, welche Subagenten-Typen er spawnen kann, verwenden Sie die Agent(agent_type)-Syntax im tools-Feld.
In Version 2.1.63 wurde das Task-Werkzeug in Agent umbenannt. Vorhandene
Task(...)-Verweise in Einstellungen und Agent-Definitionen funktionieren weiterhin als Aliase.worker- und researcher-Subagenten können gespawnt werden. Wenn der Agent versucht, einen anderen Typ zu spawnen, schlägt die Anfrage fehl und der Agent sieht nur die zulässigen Typen in seinem Prompt. Um bestimmte Agenten zu blockieren und alle anderen zuzulassen, verwenden Sie stattdessen permissions.deny.
Um das Spawnen eines beliebigen Subagenten ohne Einschränkungen zu ermöglichen, verwenden Sie Agent ohne Klammern:
Agent vollständig aus der tools-Liste weggelassen wird, kann der Agent keine Subagenten spawnen.
Die Agent(agent_type)-Allowlist-Syntax gilt nur für einen Agent, der als Hauptthread mit claude --agent läuft. In einer Subagenten-Definition ermöglicht das Auflisten von Agent in tools diesem Subagenten, Subagenten zu spawnen, während die Tiefengrenze es zulässt, aber jede Typenliste in den Klammern wird ignoriert.
Umfang von MCP-Servern auf einen Subagenten
Verwenden Sie dasmcpServers-Feld, um einem Subagenten Zugriff auf MCP-Server zu geben, die in der Hauptkonversation nicht verfügbar sind. Inline-Server, die hier definiert sind, werden verbunden, wenn der Subagent startet, unter Beachtung der Vertrauensregel für den Ordner der Agent-Datei, und getrennt, wenn er endet. String-Verweise teilen die Verbindung der übergeordneten Sitzung.
Das
mcpServers-Feld gilt in beiden Kontexten, in denen eine Agent-Datei ausgeführt werden kann:- Als Subagent, gespawnt durch das Agent-Werkzeug oder eine @-Erwähnung
- Als Hauptsitzung, gestartet mit
--agentoder deragent-Einstellung
.mcp.json und Einstellungsdateien, unter der gleichen Vertrauensregel für den Ordner der Agent-Datei. In /mcp kann ein Remote-Server (HTTP oder SSE), den Sie zuvor verwendet haben, den cached-Status statt anzeigen; Claude Code verbindet ihn, wenn Claude zuerst eines seiner Werkzeuge aufruft..mcp.json-Server-Einträge, mit dem Servernamen als Schlüssel, und unterstützen die Typen stdio, http, sse und ws.
Um einen MCP-Server vollständig aus der Hauptkonversation herauszuhalten und zu vermeiden, dass seine Werkzeugbeschreibungen dort Kontext verbrauchen, definieren Sie ihn inline hier statt in .mcp.json. Der Subagent erhält die Werkzeuge; die übergeordnete Konversation nicht.
Die MCP-Einschränkungen, die für die Hauptsitzung gelten, gelten auch für Server, die im Subagenten-Frontmatter deklariert sind:
--strict-mcp-configund--bare- Enterprise-verwaltete MCP-Konfiguration
allowedMcpServers- unddeniedMcpServers-Richtlinien
--strict-mcp-config filtert keine Server, die Sie inline über --agents oder die SDK-Option agents übergeben, da diese explizite Eingaben des Aufrufers sind.
Erforderliches Vertrauen für Inline-MCP-Server
Claude Code lädt einen Inline-MCP-Server aus einer Agent-Datei im.claude/agents/-Verzeichnis Ihres Projekts oder im .claude/agents/ eines --add-dir-Verzeichnisses erst, nachdem Sie dem Ordner vertrauen, aus dem die Agent-Datei stammt. Vor v2.1.238 lud Claude Code diese Server ohne Vertrauensprüfung.
- Vertrauen, das nicht zählt: Vertrauen eines übergeordneten Ordners und das automatische Vertrauen, das eine
-p- oder SDK-Sitzung für Hooks in Einstellungsdateien erhält - Bis dahin: Claude Code überspringt jeden Inline-Server in dieser Agent-Datei und schreibt den genauen
projects["<path>"].hasTrustDialogAccepted-Schlüssel für~/.claude.jsonin das Debug-Protokoll --add-dir-Verzeichnisse: Ein Verzeichnis außerhalb des Repositorys Ihres vertrauenswürdigen Arbeitsbereichs benötigt seinen eigenen Vertrauenseintrag, da seine.claude/agents/-Dateien das Vertrauen Ihres Arbeitsbereichs nicht erben
- Ein Name, der auf einen bereits konfigurierten Server verweist
- Ein Inline-Server in einer Agent-Datei aus
~/.claude/agents/, in einer, die Sie mit--agentsoder der SDK-Optionagentsübergeben, oder in einer, die verwaltete Einstellungen liefern
Berechtigungsmodi
Setzen SiepermissionMode, um den Berechtigungsmodus zu wählen, in dem ein Subagent läuft. Verwenden Sie die Konfigurationswerte der Modi, daher ist der Manual-Modus default. Wenn Sie ihn nicht setzen, erbt der Subagent den Berechtigungsmodus der Hauptkonversation.
Die Hauptkonversation’s Berechtigungsmodus entscheidet, ob Claude Code den Wert verwendet, den Sie setzen:
-
Wenn die Hauptkonversation in
bypassPermissions,acceptEditsoder Auto-Modus ist, läuft der Subagent in diesem gleichen Modus und Claude Code ignoriert denpermissionMode, den Sie setzen. Unter Auto-Modus bewertet der Klassifizierer die Werkzeugaufrufe des Subagenten mit den Block- und Zulassungsregeln der Hauptkonversation. Wenn der Subagent endet, überprüft der Klassifizierer auch seine Arbeit und seinen endgültigen Bericht, bevor der Bericht geliefert wird, wie Wie Auto-Modus Subagenten handhabt beschreibt. Wenn ein Subagent um Erlaubnis fragt, während die Hauptkonversation inbypassPermissionsist, prüfen Sie, ob sein Tool-Aufruf zu den Aktionen gehört, die kein Modus automatisch genehmigt. -
Wenn die Hauptkonversation im Modus
planist, bleibt der Subagent im Plan-Modus, unabhängig davon, welchenpermissionModeSie setzen, es sei denn, er läuft als Teammate eines Agent-Teams gemäß den Regeln für Agent-Teams. Wenn SiedontAsksetzen, fragt der Subagent Sie außerdem nicht nach: Eine Aktion, für die der Plan-Modus Sie um Genehmigung bitten würde, wird stattdessen abgelehnt. -
Wenn die Hauptkonversation im Modus
defaultoderdontAskist, läuft der Subagent in dem Berechtigungsmodus, den Sie setzen. In diesen Fällen behält er stattdessen den Berechtigungsmodus der Hauptkonversation:- Sie setzen
bypassPermissions. DiebypassPermissions-Ausnahme erfordert Claude Code v2.1.267 oder später. - Sie setzen
auto, und der Auto-Modus ist für den Subagenten nicht verfügbar, etwa wenn eine EinstellungsdateidisableAutoModesetzt oder das Modell des Subagenten den Auto-Modus nicht unterstützt.
- Sie setzen
permissionMode akzeptiert diese Werte und manual als Alias für default:
Laden Sie Skills in Subagenten vor
Verwenden Sie dasskills-Feld, um Skill-Inhalte beim Start in den Kontext eines Subagenten einzuspeisen. Dies gibt dem Subagenten Domänenwissen, ohne dass er Skills während der Ausführung entdecken und laden muss.
Skill aus der tools-Liste weg oder fügen Sie es zu disallowedTools hinzu.
Sie können keine Skills vorausladen, die disable-model-invocation: true setzen, da das Vorausladen aus demselben Satz von Skills schöpft, die Claude aufrufen kann. Dies schließt den gebündelten /verify-Skill ein, den Claude nicht selbstständig ausführen kann.
Wenn ein aufgelisteter Skill fehlt oder deaktiviert ist, beispielsweise durch die Richtlinie Ihrer Organisation, überspringt Claude Code ihn und protokolliert eine Warnung im Debug-Protokoll.
Dies ist das Gegenteil von Ausführen eines Skills in einem Subagenten. Mit
skills in einem Subagenten kontrolliert der Subagent den Systemprompt und lädt Skill-Inhalte. Mit context: fork in einem Skill wird der Skill-Inhalt in den von Ihnen angegebenen Agent eingespritzt. In beiden Fällen startet der Subagent ohne Ihre Konversationshistorie.Aktivieren Sie persistenten Speicher
Dasmemory-Feld gibt dem Subagenten ein persistentes Verzeichnis, das über Konversationen hinweg bestehen bleibt. Der Subagent verwendet dieses Verzeichnis, um im Laufe der Zeit Wissen aufzubauen, wie z. B. Codebase-Muster, Debugging-Erkenntnisse und architektonische Entscheidungen.
Subagenten-Speicher ist Teil des Auto-Speichers: Wenn Sie Auto-Speicher mit der
autoMemoryEnabled-Einstellung oder CLAUDE_CODE_DISABLE_AUTO_MEMORY ausschalten, hat das memory-Feld keine Auswirkung und der Subagent startet ohne die Speicheranweisungen oder den Speicher-Werkzeugzugriff, der unten beschrieben ist.
Wenn der Speicher aktiviert ist:
- Der Systemprompt des Subagenten enthält Anweisungen zum Lesen und Schreiben in das Speicherverzeichnis.
- Der Systemprompt des Subagenten enthält auch die ersten 200 Zeilen oder 25 KB von
MEMORY.mdim Speicherverzeichnis, je nachdem, was zuerst kommt, mit Anweisungen zur Verwaltung vonMEMORY.md, wenn es diese Grenze überschreitet. - Read-, Write- und Edit-Werkzeuge werden automatisch aktiviert, damit der Subagent seine Speicherdateien verwalten kann.
Tipps zum persistenten Speicher
-
projectist der empfohlene Standard-Umfang. Es macht Subagenten-Wissen über Versionskontrolle teilbar. - Bitten Sie den Subagenten, seinen Speicher vor dem Start zu konsultieren: “Review this PR, and check your memory for patterns you’ve seen before.”
- Bitten Sie den Subagenten, seinen Speicher nach Abschluss einer Aufgabe zu aktualisieren: “Now that you’re done, save what you learned to your memory.” Im Laufe der Zeit baut dies eine Wissensdatenbank auf, die den Subagenten effektiver macht.
-
Fügen Sie Speicheranweisungen direkt in die Markdown-Datei des Subagenten ein, damit er proaktiv seine eigene Wissensdatenbank verwaltet:
Bedingte Regeln mit Hooks
Für dynamischere Kontrolle über die Werkzeugnutzung verwenden SiePreToolUse-Hooks, um Operationen vor ihrer Ausführung zu validieren. Dies ist nützlich, wenn Sie einige Operationen eines Werkzeugs zulassen möchten, während Sie andere blockieren.
Dieses Beispiel erstellt einen Subagenten, der nur schreibgeschützte Datenbankabfragen zulässt. Der PreToolUse-Hook führt das in command angegebene Skript vor jeder Bash-Befehlsausführung aus:
UPDATE-Anweisung auszuführen: Das Skript beendet sich mit Code 2, Claude Code blockiert den Befehl, und der Subagent sieht die Nachricht Blocked: Only SELECT queries are allowed.
Siehe Hook-Eingabe für das vollständige Eingabeschema und Exit-Codes für die Auswirkungen von Exit-Codes auf das Verhalten. Unter Windows schreiben Sie Hook-Skripte in PowerShell und fügen Sie shell: powershell zum Hook-Eintrag hinzu, wie in Ausführen von Hooks in PowerShell gezeigt.
Deaktivieren Sie spezifische Subagenten
Sie können verhindern, dass Claude bestimmte Subagenten verwendet, indem Sie sie zumdeny-Array in Ihren Einstellungen hinzufügen. Verwenden Sie das Format Agent(subagent-name), wobei subagent-name dem Namensfeld des Subagenten entspricht.
--disallowedTools-CLI-Flag verwenden:
Definieren Sie Hooks für Subagenten
Subagenten können Hooks definieren, die während des Lebenszyklus des Subagenten ausgeführt werden. Es gibt zwei Möglichkeiten, Hooks zu konfigurieren:- Im Frontmatter des Subagenten: Definieren Sie Hooks, die nur ausgeführt werden, während dieser Subagent aktiv ist
- In
settings.json: Definieren Sie Hooks auf Sitzungsebene, die auch in Subagenten ausgelöst werden. Tool-Ereignisse wiePreToolUseundPostToolUsewerden für die Werkzeugaufrufe des Subagenten auf die gleiche Weise ausgelöst wie in der Hauptkonversation, undSubagentStartundSubagentStopwerden ausgelöst, wenn ein Subagent startet oder endet
PreToolUse-Hook in settings.json auch vor jedem Werkzeug ausgeführt, das ein Subagent verwendet.
Hooks im Subagenten-Frontmatter
Definieren Sie Hooks direkt in der Markdown-Datei des Subagenten. Diese Hooks werden nur ausgeführt, während dieser spezifische Subagent aktiv ist, und werden bereinigt, wenn er endet.Frontmatter-Hooks werden ausgelöst, wenn der Agent als Subagent durch das Agent-Werkzeug oder eine @-Erwähnung gespawnt wird, und wenn der Agent als Hauptsitzung über
--agent oder die agent-Einstellung läuft. Im Hauptsitzungs-Fall werden sie zusammen mit allen Hooks ausgeführt, die in settings.json definiert sind.~/.claude/agents/ und von Definitionen, die Sie mit --agents übergeben, werden ohne diesen Schritt ausgeführt. Wenn Sie einen Ordner mit --add-dir von außerhalb des Repositorys Ihres vertrauenswürdigen Workspace hinzugefügt haben, vertrauen Sie diesem Ordner separat: Seine .claude/agents/-Hooks erben die Freigabe des Workspace nicht.
Bis Sie dem Ordner vertrauen, wird der Subagent trotzdem ausgeführt, aber Claude Code überspringt seine Frontmatter-Hooks und protokolliert im Debug-Log einen Fehler, der erklärt, wie Sie dem Ordner vertrauen. Dies ist eine strengere Regel als die für Hooks in Einstellungsdateien: Das Vertrauen eines übergeordneten Ordners reicht nicht aus, und eine -p-Sitzung zählt nicht als vertrauenswürdig. Was ausgeführt wird, bevor Sie einem Ordner vertrauen vergleicht die beiden.
Alle Hook-Ereignisse werden unterstützt. Die häufigsten Ereignisse für Subagenten sind:
Dieses Beispiel validiert Bash-Befehle mit dem
PreToolUse-Hook und führt einen Linter nach Dateibearbeitungen mit PostToolUse aus:
Stop-Hooks im Frontmatter automatisch in SubagentStop-Ereignisse konvertiert.
Hooks auf Projektebene für Subagenten-Ereignisse
Konfigurieren Sie Hooks insettings.json, die auf Subagenten-Lebenszyklus-Ereignisse in der Hauptsitzung reagieren.
Beide Ereignisse unterstützen Matcher, um bestimmte Agent-Typen nach Name zu adressieren. Der Matcher-Wert ist der
name des Frontmatters des Agenten für Projekt- und Benutzer-Subagenten oder der Plugin-Umfang-Identifier wie my-plugin:db-agent für Plugin-Subagenten. Ein Umfang-Name enthält einen Doppelpunkt, daher wird er als unverankerte reguläre Ausdrücke ausgewertet; verankern Sie ihn mit ^ und $, wie in ^my-plugin:db-agent$, um nur diesen Agent zu treffen.
Dieses Beispiel führt ein Setup-Skript nur aus, wenn der db-agent-Subagent startet, und ein Cleanup-Skript, wenn ein beliebiger Subagent stoppt:
Mit Subagenten arbeiten
Automatische Delegation verstehen
Claude delegiert Aufgaben automatisch basierend auf der Aufgabenbeschreibung in Ihrer Anfrage, dem Felddescription in Subagenten-Konfigurationen und dem aktuellen Kontext. Um proaktive Delegation zu fördern, fügen Sie Phrasen wie „use proactively“ in das Beschreibungsfeld Ihres Subagenten ein.
Halten Sie Beschreibungen kurz: Claude Code zeigt eine Startwarnmeldung an, wenn die kombinierten Beschreibungen Ihrer Subagenten das Limit von 15.000 Token überschreiten, und lädt dennoch jeden Subagenten.
Wenn der Subagent in einem Plugin enthalten ist, können Sie messen, wie zuverlässig Claude ihn über realistische Prompts hinweg delegiert, anstatt sie einzeln zu überprüfen: claude plugin eval führt jeden Prompt mit und ohne das Plugin aus und bewertet die Ergebnisse.
Subagenten explizit aufrufen
Wenn automatische Delegation nicht ausreicht, können Sie einen Subagenten selbst anfordern. Drei Muster eskalieren von einem einmaligen Vorschlag zu einem sitzungsweiten Standard:- Natürliche Sprache: Nennen Sie den Subagenten in Ihrem Prompt; Claude entscheidet, ob delegiert werden soll
- @-Erwähnung: Garantiert, dass der Subagent für eine Aufgabe ausgeführt wird
- Sitzungsweit: Die gesamte Sitzung wird als dieser Subagent über das Flag
--agentoder die Einstellungagentausgeführt
@ ein und wählen Sie den Subagenten aus der Typeahead-Liste aus, genauso wie Sie Dateien @-erwähnen. Dies stellt sicher, dass dieser spezifische Subagent ausgeführt wird, anstatt die Wahl Claude zu überlassen:
my-plugin:code-reviewer oder my-plugin:review:security, wenn das Plugin Agenten in Unterordnern organisiert. Benannte Hintergrund-Subagenten, die derzeit in der Sitzung ausgeführt werden, erscheinen auch in der Typeahead-Liste und zeigen ihren Status neben dem Namen.
Sie können die Erwähnung auch manuell eingeben, ohne den Picker zu verwenden: @agent-<name> für lokale Subagenten oder @agent- gefolgt vom scoped Namen für Plugin-Subagenten, z. B. @agent-my-plugin:code-reviewer. Während Sie diese Form eingeben, zeigt die Typeahead-Liste Dateiübereinstimmungen anstelle von Agenten. Die Agent-Erwähnung wird trotzdem aufgelöst, wenn Sie absenden.
Führen Sie die gesamte Sitzung als Subagent aus. Übergeben Sie --agent <name>, um eine Sitzung zu starten, in der der Hauptthread selbst die Tool-Einschränkungen und das Modell dieses Subagenten annimmt:
--system-prompt es tut. CLAUDE.md-Dateien und das Projekt-Memory werden immer noch durch den normalen Nachrichtenfluss geladen, auch wenn die Agent-Definition omitClaudeMd setzt. Wenn Sie die Sitzung mit -p als benutzerdefinierten Agenten mit eigenem Prompt ausführen, startet sie außerdem ohne den Git-Status-Snapshot.
Der Agent-Name erscheint als @<name> in der Startup-Kopfzeile, damit Sie bestätigen können, dass er aktiv ist.
Dies funktioniert mit integrierten und benutzerdefinierten Subagenten, und die Wahl bleibt bestehen, wenn Sie die Sitzung fortsetzen: Claude Code stellt die Tool-Einschränkungen und das Modell des Agenten zusammen mit der Konversation wieder her. Wenn der Agent nicht mehr vorhanden ist, wenn Sie fortsetzen, wird die Sitzung mit den Standard-Tools fortgesetzt und zeigt eine Warnung mit dem Namen des Agenten. Für den System-Prompt in beiden Fällen siehe System-Prompt-Flags in fortgesetzten Konversationen.
Für einen von einem Plugin bereitgestellten Subagenten können Sie nur den Agent-Namen übergeben und Claude Code findet ihn:
agents/-Verzeichnisses platziert, fügen Sie den Unterordner in den scoped Namen ein, z. B. claude --agent my-plugin:review:security.
Um es zum Standard für jede Sitzung in einem Projekt zu machen, setzen Sie agent in .claude/settings.json:
Subagenten im Vordergrund oder Hintergrund ausführen
Subagenten können im Vordergrund oder im Hintergrund ausgeführt werden:- Vordergrund-Subagenten blockieren die Hauptkonversation bis zur Fertigstellung. Berechtigungsabfragen werden an Sie weitergeleitet, wenn sie auftauchen.
- Hintergrund-Subagenten werden gleichzeitig ausgeführt, während Sie weiterarbeiten. Wenn ein Hintergrund-Subagent einen Tool-Aufruf erreicht, der eine Berechtigung benötigt, zeigt Claude Code die Abfrage in Ihrer Hauptsitzung an und nennt den Subagenten, der fragt. Genehmigen Sie, um den Subagenten fortfahren zu lassen, oder drücken Sie Esc, um diesen einen Tool-Aufruf zu verweigern, ohne den Subagenten zu stoppen.
Welche Subagenten im Hintergrund laufen
Ohne weitere Konfiguration startet ein Subagent, den Claude aus Ihrer Hauptkonversation spawnt, im Hintergrund.claude -pund das Agent SDK: Claude kann warten, nach eigenem Ermessen oder wenn Sie darum bitten.- Interaktive Terminal-Sitzung, VS Code und Sitzungen der Desktop-App auf Ihrem Rechner: Damit Claude auf einen Subagenten warten kann, schalten Sie den Fork-Modus aus, der standardmäßig aktiviert ist.
context: fork folgt Claude Code stattdessen den Regeln in Skills in einem Subagenten ausführen, unabhängig davon, ob Fork-Modus an ist.
Claude auf einen Subagenten warten lassen
-
Schalten Sie den Fork-Modus aus, indem Sie
CLAUDE_CODE_FORK_SUBAGENTauf0setzen, zum Beispiel insettings.json: -
Führen Sie
claudeerneut in Ihrer Shell aus oder öffnen Sie eine neue VS Code-Konversation. - Bitten Sie Claude zu warten, wenn Sie zuerst ein Ergebnis benötigen, zum Beispiel „run the reviewer subagent and wait for its report“.
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS auf 1 setzen, anstatt den Fork-Modus auszuschalten, wartet Claude, bis Subagenten fertig sind, bevor er fortfährt. Auch Hintergrundbefehle sind dann ausgeschaltet, und Ctrl+B verschiebt nichts in den Hintergrund.
Tools, Berechtigungen und Ergebnisse von Hintergrund-Subagenten
Hintergrund-Subagenten werden mit einem kleineren integrierten Tool-Set als Vordergrund-Subagenten ausgeführt, außer für Konversations-Forks und fortgesetzte Vordergrund-Subagenten. Hintergrund-Subagenten zeigen jede Berechtigungsabfrage in Ihrer Hauptsitzung an. Wenn Sie eine dieser Abfragen mit einer Wahl beantworten, die über diesen einen Tool-Aufruf hinausgeht, z. B. eine Genehmigung, die für den Rest der Sitzung gilt, wendet Claude Code Ihre Antwort auf die gesamte Sitzung an, einschließlich Ihrer Hauptkonversation. Ein Hintergrund-Subagent kann einen Hintergrund-Bash- oder PowerShell-Befehl über das Ende seines Turns hinaus laufen lassen. Wenn dieser Befehl endet, sendet Claude Code dem Subagenten eine Benachrichtigung. Die Ergebnisse eines Hintergrund-Subagenten erreichen Claude als Abschlussbenachrichtigung in einem späteren Turn. Claude wartet auf diese Benachrichtigung, bevor er die Ergebnisse des Subagenten meldet, und wenn Sie zuerst nach Fortschritt fragen, meldet er, dass der Subagent noch läuft.Beendete Subagenten im Panel und in der Aufgabenliste
Claude Code löscht die Zeile eines Hintergrund-Subagenten aus dem Subagenten-Panel unter der Prompt-Eingabe auf eine von zwei Arten, je nachdem, wie der Subagent endete:- Wenn ein Subagent erfolgreich beendet wird, entfernt Claude Code seine Zeile sofort und zeigt, außer im Screen-Reader-Modus,
/tasks to see subagentsin der Fußzeile für 30 Sekunden an. Während dieser 30 Sekunden führen Sie/tasksaus und drückenEnterauf dem Subagenten, um sein Transkript zu öffnen. Vor v2.1.232 behielt Claude Code die Zeile 30 Sekunden nach Beendigung des Subagenten, genauso wie bei einem fehlgeschlagenen, und zeigte keinen Fußzeilentipp. - Wenn ein Subagent fehlschlägt oder Sie ihn stoppen, behält Claude Code seine Zeile für 30 Sekunden. Um die Zeile schneller zu löschen, wählen Sie sie aus und drücken
x.
/tasks aufgelistet, als erledigt markiert und unter laufender Arbeit sortiert, für die gleichen 30 Sekunden wie der Fußzeilentipp. Seine Detailansicht bleibt offen, wenn der Subagent beendet wird. Subagenten, die fehlschlagen oder die Sie stoppen, verlassen die Liste. Vor v2.1.208 verließ ein abgeschlossener Subagent die Liste in dem Moment, in dem er beendet wurde, und seine Detailansicht schloss sich.
Subagenten-Namen
Wenn Sie eine Sitzung mit aktivierten Agent-Teams starten, kann Claude einem Subagenten einen Namen geben, indem er einenname-Parameter beim Agent-Tool-Aufruf übergibt. Er kann dies auch von selbst tun, ohne Sie zuerst zu fragen. Der Name macht den Subagenten adressierbar: Claude kann ihn nach Abschluss nach Name ansprechen oder fortsetzen.
In einer interaktiven Sitzung mit aktivierten Agent-Teams wird ein Subagent, den Claude aus der Hauptkonversation mit einem name spawnt, stattdessen als Teamkollege gestartet, sofern der Aufruf kein Fork ist oder isolation beim Aufruf selbst übergibt. Ein isolation-Wert im Frontmatter des Subagenten verhindert es nicht, und der Teamkollege wird dann im Arbeitsverzeichnis der Hauptsitzung ausgeführt. Siehe Wie Claude Agent-Teams startet.
API-Fehler in Subagenten
Wenn etwas die Antwort eines Subagenten mitten im Stream unterbricht, und die teilweise Antwort Text enthält, aber keine Tool-Aufrufe, fordert Claude Code den Subagenten auf, fortzufahren, anstatt den Lauf zu beenden. Dies geschieht auch in interaktiven Sitzungen. Der Lauf endet beim Fehler nur, wenn diese Fortsetzungen aufgebraucht sind. Ein Subagent, dessen Lauf bei einem API-Fehler endet, z. B. bei einem Nutzungslimit oder wiederholtem Serverfehler, meldet diesen Fehler an Claude zurück. Was Claude erhält, hängt davon ab, wo der Subagent lief:- Vordergrund: Wenn ein Rate-Limit, eine Überlastung oder ein Serverfehler einen Subagenten unterbricht, der bereits Textausgabe produziert hat, gibt das Agent-Tool diese teilweise Ausgabe mit einer Notiz zurück, dass der Subagent unterbrochen wurde und seine Aufgabe nicht abgeschlossen hat. Ein Subagent, der nichts produziert hat oder dessen einzige Ausgabe Tool-Aufrufe waren, schlägt mit
Agent terminated early due to an API errorfehl, gefolgt vom Fehlerdetail. - Hintergrund: Der Subagent wird als fehlgeschlagen markiert, und die Nachricht, die Claude erhält, wenn er endet, nennt den API-Fehler und enthält die letzte Ausgabe des Subagenten, sodass teilweise Arbeit nicht verloren geht.
Subagenten-Ausgabe-Scanning
Claude Code scannt den abschließenden Bericht jedes Subagenten, bevor Claude ihn liest. Ein Subagent kann Dateien, Webseiten oder Befehlsausgaben gelesen haben, die Sie nie überprüft haben, und Text aus diesen Quellen kann Anweisungen enthalten, die auf die Hauptkonversation abzielen. Der Scan entfernt oder umformuliert niemals etwas; er nimmt zwei Arten von Änderungen vor, die Sie in einem Bericht bemerken können:- Backslash-Einfügung: Der Scan fügt einen Backslash in Text ein, der die eigene Ausgabe von Claude Code imitiert, z. B. ein
<system-reminder>-Tag oder eine Zeile, die mitHuman:oderAssistant:beginnt, damit die Imitation als gewöhnlicher Text gelesen wird, anstatt als Teil der Konversation verwechselt zu werden. - Marker-Zeile: Der Scan stellt eine Zeile voran, die mit
[harness: subagent output matched instruction-shaped pattern(s):beginnt, wenn der Bericht ein Tag wie<system-reminder>imitiert oder Berechtigungseinstellungen wiebypassPermissionsoder--dangerously-skip-permissionserwähnt. Erwähnungen von Berechtigungseinstellungen erhalten die Marker-Zeile, aber der Text selbst bleibt wie geschrieben.
Häufige Muster
Isolieren Sie hochvolumige Operationen
Eine der effektivsten Verwendungen für Subagenten ist die Isolierung von Operationen, die große Mengen an Ausgabe produzieren. Das Ausführen von Tests, das Abrufen von Dokumentation oder die Verarbeitung von Logdateien kann erheblichen Kontext verbrauchen. Durch die Delegierung an einen Subagenten bleibt die ausführliche Ausgabe im Kontext des Subagenten, während nur die relevante Zusammenfassung zu Ihrer Hauptkonversation zurückkehrt.Führen Sie parallele Recherchen durch
Für unabhängige Untersuchungen spawnen Sie mehrere Subagenten, um gleichzeitig zu arbeiten:Verketten Sie Subagenten
Für mehrstufige Workflows bitten Sie Claude, Subagenten nacheinander zu verwenden. Jeder Subagent schließt seine Aufgabe ab und gibt Ergebnisse an Claude zurück, der dann relevanten Kontext an den nächsten Subagenten übergibt.Wählen Sie zwischen Subagenten und Hauptkonversation
Verwenden Sie die Hauptkonversation, wenn:- Die Aufgabe häufiges Hin und Her oder iterative Verfeinerung benötigt
- Mehrere Phasen teilen erheblichen Kontext, z. B. Planung, Implementierung und Tests
- Sie eine schnelle, gezielte Änderung vornehmen
- Latenz ist wichtig. Ein Subagent, der kein Fork ist, startet von vorne und benötigt möglicherweise Zeit, um Kontext zu sammeln
- Die Aufgabe ausführliche Ausgabe produziert, die Sie nicht in Ihrem Hauptkontext benötigen
- Sie spezifische Tool-Einschränkungen oder Berechtigungen durchsetzen möchten
- Die Arbeit in sich geschlossen ist und eine Zusammenfassung zurückgeben kann
/btw anstelle eines Subagenten. Es hat keinen Tool-Zugriff, und die Antwort wird nicht zur Historie hinzugefügt.
Lassen Sie Subagenten ihre eigenen Subagenten spawnen
Standardmäßig kann ein Subagent seine eigenen Subagenten spawnen, bis zu drei Ebenen unter der Hauptkonversation. Bei der Tiefenbegrenzung entzieht Claude Code dasAgent-Tool jedem Subagenten außer einem Fork, sodass ein Subagent bei der Grenze seine delegierte Arbeit selbst erledigt und eine Zusammenfassung zurückgibt. Ein Fork bei der Grenze behält Agent in seiner geerbten Tool-Liste, aber das Tool gibt einen Fehler zurück, anstatt zu spawnen.
Verschachtelte Subagenten eignen sich für eine delegierte Aufgabe, die sich selbst in parallele Unteraufgaben aufteilt, z. B. ein Reviewer-Subagent, der einen Verifier pro Befund versendet. Standardmäßig wartet der startende Subagent auf den Bericht jedes verschachtelten Subagenten:
- Interaktive Terminal-Sitzung: Nur die Zusammenfassung des Top-Level-Subagenten kehrt zu Ihnen zurück, da ein Subagent, der Hintergrund-Subagenten startet, auf deren Ergebnisse wartet, bevor er beendet wird.
claude -pund das Agent SDK: Der startende Subagent wartet, solange der Fork-Modus aktiviert ist. Wenn Sie den Fork-Modus ausschalten, starten verschachtelte Subagenten stattdessen im Hintergrund. Der startende Subagent wartet nicht auf einen verschachtelten Hintergrund-Subagenten, der an Ihre Hauptkonversation meldet, wenn er den startenden Subagenten überdauert.
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH auf die Anzahl der Subagenten-Ebenen, die Sie unter Ihrer Hauptkonversation möchten. Beispielsweise begrenzt dieser Eintrag in settings.json die Verschachtelung auf zwei Ebenen:
1, um Verschachtelung auszuschalten.
Ein verschachtelter Subagent wird genauso konfiguriert wie ein Top-Level-Subagent und wird aus denselben Geltungsbereichen aufgelöst. Um zu verhindern, dass ein Subagent spawnt, während Verschachtelung an ist, z. B. ein Reviewer, der nur lesend bleiben sollte, lassen Sie Agent aus seiner tools-Liste weg oder fügen Sie es zu disallowedTools hinzu.
Im Terminal zeigt Claude Code verschachtelte Subagenten als Baum im Subagenten-Panel unter der Prompt-Eingabe an und markiert jede Zeile, die immer noch Nachkommen im Panel hat, mit einer (+N)-Anzahl von ihnen. Öffnen Sie eine Zeile, um die Geschwister und direkten Kinder dieses Subagenten mit einem Pfad zurück zu main zu sehen.
Gleichzeitige Subagenten-Grenze
Zwei Grenzen steuern die Subagenten-Nutzung, jede mit ihrer eigenen Variablen: Diese hindert Claude daran, mehr Subagenten zu spawnen, während zu viele laufen, und die Tiefenbegrenzung begrenzt, wie tief Subagenten verschachtelt sind. Es gibt keine Grenze für die Gesamtzahl der Subagenten, die Claude über eine Sitzung hinweg spawnen kann. Standardmäßig schlägt das Spawnen eines weiteren mit dem Agent-Tool mitConcurrent subagent limit reached fehl, wenn 20 Subagenten in einer Sitzung laufen, und der Fehler teilt Claude mit, es nicht erneut zu versuchen. Das Spawnen gelingt wieder, wenn die laufende Anzahl unter die Grenze fällt. Um die Grenze zu ändern, setzen Sie CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS auf eine beliebige positive ganze Zahl. Sitzungen mit aktivem ultracode sind ausgenommen: Die Grenze wird dort nicht durchgesetzt. Erfordert Claude Code v2.1.217 oder später.
Die Grenze blockiert nur Subagenten, die Claude mit dem Agent-Tool spawnt, aber andere Läufe belegen die gleichen Slots:
- Ein In-Session-Fork, den Sie mit
/subtaskstarten, belegt einen Slot, während er läuft, und wird niemals durch die Grenze blockiert. - Fortsetzen eines Subagenten, der bereits beendet wurde, belegt einen frischen Slot, ohne die Grenze zu überprüfen, sodass Fortsetzungen die laufende Anzahl über sie hinaus drücken können.
Verwalten Sie den Subagenten-Kontext
Was beim Start geladen wird
Jeder Subagent startet mit einem frischen, isolierten Kontextfenster. Er sieht Ihre Konversationshistorie nicht, die Skills, die Sie bereits aufgerufen haben, oder die Dateien, die Claude bereits gelesen hat. Claude verfasst eine Delegierungsnachricht, die die Aufgabe zusammenfasst, und der Subagent arbeitet von dort aus. Die Ausnahme ist ein Fork, der die übergeordnete Konversation erbt, anstatt von vorne zu beginnen. Der anfängliche Kontext eines Non-Fork-Subagenten enthält:- System-Prompt: der eigene Prompt des Agenten plus Umgebungsdetails, die Claude Code anfügt, nicht der System-Prompt von Claude Code. Benutzerdefinierte Subagenten definieren ihren im Markdown-Body oder im Feld
prompt. Integrierte Agenten haben vordefinierte Prompts. - Task-Nachricht: der Delegierungs-Prompt, den Claude schreibt, wenn er die Arbeit übergibt.
- CLAUDE.md-Dateien: jede Ebene der CLAUDE.md-Hierarchie, die die Hauptkonversation lädt, einschließlich
~/.claude/CLAUDE.md, Projektregeln,CLAUDE.local.md, verwaltete Richtliniendateien und alleAGENTS.md-Dateien, die als Projektanweisungen geladen werden. Die integrierten Explore- und Plan-Agenten überspringen dies. Ein Subagent, dessen DefinitionomitClaudeMdsetzt, lädt nur die verwalteten Richtliniendateien oder gar keine, wenn die Definition aus verwalteten Einstellungen kommt. - Git-Status: Ein Snapshot, den Claude Code aus Ihrem Repository liest, wenn der Subagent startet. Für einen Subagenten in seinem eigenen Worktree dieses Repositorys zeigt der Snapshot den Branch, den Status und die letzten Commits des Worktrees. Abwesend außerhalb eines Git-Repositorys oder wenn der Snapshot ausgeschaltet ist; siehe
includeGitInstructions. Explore und Plan überspringen es unabhängig davon. - Vorgeladene Skills: Vollständiger Inhalt jedes Skills, der im Feld
skillsdes Agenten benannt ist. Integrierte Agenten laden Skills nicht vor. - Geschwister-Roster: Eine System-Erinnerung, die
mainund jeden anderen benannten Agenten in der Sitzung auflistet, jeweils ein gültigerto-Wert fürSendMessage. Das Roster erscheint nur, wenn die Tools des SubagentenSendMessageenthalten und mindestens ein anderer Agent einen Namen hat, ob Claude ihn beim Spawnen benannt hat oder er als Agent-Team-Teamkollege läuft. Es ist ein Snapshot, der beim Start des Subagenten aufgenommen wird, sodass später benannte Agenten nicht erscheinen.
omitClaudeMd: true in sein Frontmatter oder --agents JSON. Für Explore, Plan und Subagenten mit omitClaudeMd werden die CLAUDE.md eines Unterverzeichnisses und passende pfadbezogene Regeln weiterhin geladen, wenn der Subagent mit Dateien dort arbeitet.
Die Hauptkonversation hat immer noch Ihre vollständige CLAUDE.md, wenn sie die Ergebnisse dieser Subagenten liest, sodass die meisten Regeln nicht den Subagenten selbst erreichen müssen. Wenn eine Regel dies muss, z. B. „ignorieren Sie das vendor/-Verzeichnis“, wiederholen Sie sie im Prompt, den Sie Claude geben, wenn Sie delegieren.
Sie können nicht ändern, welche Subagenten Git-Status erhalten. Nur Explore und Plan überspringen es.
Ein Teil des Hauptkonversations-Status erreicht niemals einen Non-Fork-Subagenten:
- Ausgabestil: Ein Subagent führt seinen eigenen System-Prompt aus, sodass Ihr Ausgabestil seine Antworten nicht formt, außer in einem Fork.
- Auto-Memory: Das Auto-Memory der Hauptkonversation wird nicht geladen. Um einem Subagenten sein eigenes persistentes Gedächtnis zu geben, verwenden Sie das Feld
memory. - Kontextfenstergröße: Das Kontextfenster eines Subagenten wird durch sein eigenes Modell dimensioniert, nicht das des übergeordneten. Die Delegierung an ein Modell mit einem kleineren Fenster gibt diesem Subagenten das kleinere Fenster.
Subagenten fortsetzen
Jeder Subagenten-Aufruf erstellt eine neue Instanz, anstatt eine frühere fortzusetzen. Um die Arbeit eines bestehenden Subagenten fortzusetzen, anstatt von vorne zu beginnen, bitten Sie Claude, ihn fortzusetzen. Fortgesetzte Subagenten behalten ihre vollständige Konversationshistorie, einschließlich aller vorherigen Tool-Aufrufe, Ergebnisse und Überlegungen. Wenn der Subagent Hintergrund-Subagenten seiner eigenen spawnte, enthält diese Historie die Ergebnisse, die sie während des Laufs lieferten. Vor v2.1.304 konnte ein Subagent, dem Claude direkt nach seinem Abschluss eine Nachricht sendete oder den Claude direkt danach fortsetzte, seine jüngste Arbeit vergessen.- Wenn ein Subagent abgeschlossen wird, erhält Claude seine Agent-ID.
- Die integrierten Explore- und Plan-Agenten sind einmalig und geben keine Agent-ID zurück, sodass Claude sie nicht fortsetzen kann. Verwenden Sie
general-purposeoder einen benutzerdefinierten Subagenten, wenn Sie die Arbeit fortsetzen müssen. - Wenn ein Subagent bei seiner
maxTurns-Grenze stoppt, markiert Claude Code die zurückgegebene Ausgabe als teilweise, und Claude kann den Subagenten fortsetzen, um seine Arbeit weiterzuführen.
SendMessage-Tool mit der Agent-ID oder dem Namen des Agenten als Feld to, um ihn fortzusetzen. SendMessage erfordert nicht, dass Agent-Teams aktiviert sind; nur strukturierte Team-Protokoll-Nachrichten wie shutdown_request und plan_approval_response tun dies. Über Subagenten und Teamkollegen hinaus kann Claude in Sitzungen, in denen Cross-Session-Messaging aktiviert ist, mit demselben Tool Ihre anderen Claude-Code-Sitzungen ansprechen, auf dieser Maschine oder darüber hinaus.
Um einen Subagenten fortzusetzen, bitten Sie Claude, die vorherige Arbeit fortzusetzen:
SendMessage-Tool eine Nachricht sendet, wird der Subagent im Hintergrund ohne einen neuen Agent-Aufruf fortgesetzt. Das Gleiche gilt für einen Subagenten, den Claude mit dem TaskStop-Tool gestoppt hat, sobald sein gestoppter Lauf beendet ist. Der fortgesetzte Lauf behält das Tool-Set von dort, wo der Subagent zuerst lief, und kann weiterhin den Prompt-Cache lesen, den der ursprüngliche Lauf aufgewärmt hat.
Ein Subagent, der das SendMessage-Tool hat, kann diese Nachricht auch senden. In einer interaktiven Sitzung meldet der fortgesetzte Agent dann an den Subagenten zurück, der ihn fortgesetzt hat, nicht an Ihre Hauptkonversation. Dieser Subagent wartet auf das Ergebnis, bevor er seine eigene Arbeit beendet. Wenn ein Subagent einen Agenten anspricht, an den er meldet, z. B. seinen eigenen Starter, setzt Claude Code diesen Agenten fort, ohne seine Ergebnisse umzuleiten.
Ein Subagent, den Sie selbst gestoppt haben, mit x in /tasks oder einer SDK-stop_task-Anfrage, wird nicht automatisch fortgesetzt. Wenn Claude ihm eine Nachricht sendet, wird die Nachricht abgelehnt und Claude wird mitgeteilt, dass der Agent abgebrochen wurde.
Während die Zeile dieses Subagenten immer noch im Subagenten-Panel ist, geben Sie in sein Transkript ein, um ihn selbst fortzusetzen. Danach kann eine Nachricht von Claude ihn wieder automatisch fortsetzen.
Das Fortsetzen startet einen neuen Lauf des Agenten unter derselben ID, sodass ein Subagent, der bereits fehlgeschlagen oder abgeschlossen war, wieder als laufend in der Task-Liste und in den Task-Events des Agent SDK angezeigt wird.
SendMessage überprüft, dass ein Name immer noch auf denselben Agenten verweist, den er früher in der Konversation erreicht hat. Wenn ein neuerer Agent den Namen übernommen hat, z. B. ein neu gespawnter Hintergrund-Agent, der ihn wiederverwendet hat, weigert sich Claude Code, die Nachricht zu senden, anstatt sie an den falschen Agenten zu liefern, und der Fehler meldet, welchen Agenten der Name jetzt erreicht, damit Claude sie umleiten kann. Um den früheren Agenten zu erreichen, während er noch läuft, adressiert Claude ihn nach der Agent-ID, die er erhielt, als er diesen Agenten spawnte. Die Überprüfung ist auf die aktuelle Konversation beschränkt und setzt sich bei /clear zurück.
Ein Subagent behandelt Nachrichten vom Agenten, der ihn gestartet hat, als normale Task-Anweisungen, einschließlich Kurskorrekturen mitten in der Aufgabe, und handelt danach innerhalb seiner eigenen Berechtigungseinstellungen. Zwei Grenzen gelten unabhängig davon, wer die Nachricht gesendet hat: Keine Nachricht von einem Agenten zählt als Ihre Genehmigung für eine ausstehende Berechtigungsabfrage, und keine Agent-Nachricht kann die Berechtigungseinstellungen, CLAUDE.md oder Konfiguration eines Subagenten ändern. Nur das Berechtigungssystem oder Ihre eigenen Nachrichten können eine Genehmigung erteilen.
Sie können Claude auch nach der Agent-ID fragen, wenn Sie sie explizit referenzieren möchten, oder IDs in den Transkriptdateien unter ~/.claude/projects/{project}/{sessionId}/subagents/ finden. Jedes Transkript wird als agent-{agentId}.jsonl gespeichert.
Subagenten-Transkripte bleiben unabhängig von der Hauptkonversation bestehen:
- Hauptkonversations-Komprimierung: Wenn die Hauptkonversation komprimiert wird, sind Subagenten-Transkripte nicht betroffen. Sie werden in separaten Dateien gespeichert.
- Sitzungs-Persistenz: Subagenten-Transkripte bleiben innerhalb ihrer Sitzung bestehen. Sie können einen Subagenten fortsetzen, nachdem Sie Claude Code neu gestartet haben, indem Sie dieselbe Sitzung fortsetzen.
- Automatische Bereinigung: Claude Code löscht Subagenten-Transkripte nach der Aufbewahrungsfrist
cleanupPeriodDays, standardmäßig 30 Tage, nach den Regeln für die automatische Bereinigung.
Einem Subagenten nach einem Neustart per Name eine Nachricht senden
Für einen Subagenten, der als Teamkollege gestartet wurde, siehe stattdessen die Einschränkungen von Agent-Teams.
agent-{agentId}.meta.json in ~/.claude/projects/{project}/{sessionId}/subagents/.
Nach einer Nachricht per ID funktioniert der Name des Subagenten wieder, es sei denn, ein neuerer Agent hat diesen Namen übernommen. Vor v2.1.299 überstand kein Name einen Neustart, und ein Senden per Name wurde abgelehnt, selbst wenn die Agent-ID noch funktionierte.
Automatische Komprimierung
Subagenten unterstützen automatische Komprimierung. Die Komprimierung wird ausgelöst, wenn sich das eigene Kontextfenster des Subagenten füllt, undCLAUDE_AUTOCOMPACT_PCT_OVERRIDE gilt auch für Subagenten. Siehe Umgebungsvariablen für den Zeitpunkt, an dem die Überschreibung wirksam wird.
Komprimierungsereignisse werden in Subagenten-Transkriptdateien protokolliert:
preTokens zeigt, wie viele Token vor der Komprimierung verwendet wurden.
Das Fenster für die automatische Komprimierung für einen Subagenten festlegen
Damit ein Subagent früher komprimiert, als er es sonst tun würde, setzen SieautoCompactWindow in seinem Frontmatter auf eine Token-Anzahl von 100000 bis 1000000. Wenn Sie CLAUDE_CODE_AUTO_COMPACT_WINDOW setzen, verwendet der Subagent stattdessen das Fenster dieser Variablen, und das Feld hat keine Wirkung, es sei denn, Claude Code ignoriert den Wert der Variablen. Erfordert Claude Code v2.1.296 oder später.
Dieses Frontmatter setzt autoCompactWindow auf 200.000 Token für einen Subagenten, der lange Logdateien liest:
200000, denn im Frontmatter liest Claude Code 200k als 200, was außerhalb des zulässigen Bereichs liegt. Der Subagent wird dann trotzdem geladen und komprimiert, als ob das Feld fehlen würde. Um zu prüfen, ob Claude Code Ihren Wert ignoriert hat, führen Sie claude --debug in Ihrer Shell aus und durchsuchen Sie das Debug-Log nach invalid autoCompactWindow.
Wenn der Wert im zulässigen Bereich liegt und Sie trotzdem keine Änderung sehen, prüfen Sie diese Ursachen:
- Der Wert liegt nicht unter dem Fenster für die automatische Komprimierung, das der Subagent sonst erben würde: Um früher zu komprimieren, setzen Sie einen Wert unterhalb dieses Fensters.
- Sie führen die gesamte Sitzung mit
--agentoder der Einstellungagentals diesen Subagenten aus: Das Feld hat dort keine Wirkung. Um das Fenster der Sitzung festzulegen, siehe Das Fenster für die automatische Komprimierung festlegen.
Gegabelte Konversation
Wenn die Agenten-Ansicht ausgeschaltet ist, ist
/subtask nicht verfügbar und /fork startet stattdessen den gegabelten Subagenten; andernfalls kopiert /fork die gesamte Sitzung in eine neue Hintergrund-Sitzung./subtask gefolgt von einer Aufgabe starten, unabhängig davon, ob der Fork-Modus aktiviert ist oder nicht. Claude Code benennt den Fork aus den ersten Worten der Aufgabe. Das folgende Beispiel gabelt die Konversation, um Testfälle zu entwerfen, während Sie mit der Implementierung in der Hauptsitzung fortfahren:
Beobachten und lenken Sie laufende Forks
Laufende Forks erscheinen in einem Panel unter der Eingabeaufforderung, mit einer Zeile für die Hauptsitzung und einer für jeden Fork. Wenn ein Fork erfolgreich abgeschlossen ist, entfernt Claude Code seine Zeile. Claude Code behält die Zeile eines Forks, der fehlgeschlagen ist oder den Sie gestoppt haben, für 30 Sekunden bei, das gleiche wie für jeden anderen Hintergrund-Subagenten. Vor v2.1.232 behielt Claude Code die Zeile eines abgeschlossenen Forks ebenfalls für 30 Sekunden bei. Verwenden Sie diese Tasten, um mit dem Panel zu interagieren:
Mit einem geöffneten Transkript eines Forks oder Subagenten gehen Folgenachrichten und Skills an diesen Agenten. Ab Claude Code v2.1.314 antwortet
/btw auf Grundlage des geöffneten Transkripts. Andere integrierte Befehle gehen an Ihre Hauptkonversation, mit diesen Schutzmaßnahmen:
/compact,/clearund/rewindwirken auf die Hauptkonversation, daher bittet Claude Code Sie um Bestätigung, bevor einer dieser Befehle aus dieser Ansicht ausgeführt wird./modelund/fastlegen das Modell und den Fast-Modus der Hauptkonversation fest, nicht die des angezeigten Agenten, daher werden sie aus dieser Ansicht nicht ausgeführt. Ein Hinweis erklärt Ihnen den Grund.
Ctrl+Enter oder Ctrl+X Ctrl+S. Jeder Shell-Befehl oder Subagent, auf den der Agent wartet und der in den Hintergrund verschoben werden kann, wird dorthin verschoben und läuft weiter. Wenn der Agent gerade eine Antwort schreibt oder auf Arbeit wartet, die nicht in den Hintergrund verschoben werden kann, macht er weiter und liest Ihre Nachricht, sobald diese abgeschlossen ist. Erfordert Claude Code v2.1.286 oder später.
Wie sich Forks von anderen Subagenten unterscheiden
Ein Fork erbt alles, was die Hauptsitzung zum Zeitpunkt des Spawnens hat. Jeder andere Subagent startet von seiner Definition aus.
Da der System-Prompt und die Tool-Definitionen eines Forks identisch mit denen des übergeordneten Elements sind, verwendet seine erste Anfrage den Prompt-Cache des übergeordneten Elements wieder. Aufgrund dieser Wiederverwendung kostet ein Fork bei Aufgaben, die denselben Kontext benötigen, weniger als ein frischer Subagent.
Wenn Claude einen Fork durch das Agent-Werkzeug spawnt, kann es
isolation: "worktree" übergeben, sodass die Dateibearbeitungen des Forks in einen separaten Git-Worktree geschrieben werden, anstatt in Ihren Checkout. Ein Fork kann keine weiteren Forks spawnen.
Fork-Modus deaktivieren
Der Fork-Modus ermöglicht es Claude, selbstständig einen Fork zu starten. So verhindern Sie, dass Claude Forks startet:- Nur Forks unterbinden: Fügen Sie
"Agent(fork)"zupermissions.denyin Ihren Einstellungen hinzu. - Fork-Modus deaktivieren: Setzen Sie
CLAUDE_CODE_FORK_SUBAGENTauf0und folgen Sie dabei den Schritten unter Claude auf einen Subagenten warten lassen.
Beispiel-Subagenten
Diese Beispiele demonstrieren effektive Muster für die Erstellung von Subagenten. Verwenden Sie sie als Ausgangspunkte oder generieren Sie eine angepasste Version mit Claude.Code-Reviewer
Ein schreibgeschützter Subagent, der Code überprüft, ohne ihn zu ändern. Dieses Beispiel zeigt, wie man einen fokussierten Subagenten mit begrenztem Werkzeugzugriff entwirft, der Edit und Write ausschließt, und einen detaillierten Prompt, der genau angibt, worauf zu achten ist und wie die Ausgabe formatiert wird.Debugger
Ein Subagent, der sowohl Probleme analysieren als auch beheben kann. Im Gegensatz zum Code-Reviewer enthält dieser Edit, da das Beheben von Bugs die Änderung von Code erfordert. Der Prompt bietet einen klaren Workflow von der Diagnose zur Verifizierung.Data Scientist
Ein domänenspezifischer Subagent für Datenanalyse-Arbeiten. Dieses Beispiel zeigt, wie man Subagenten für spezialisierte Workflows außerhalb typischer Coding-Aufgaben erstellt. Es setzt explizitmodel: sonnet für fähigere Analysen.
Datenbankabfrage-Validator
Ein Subagent, der Bash-Zugriff zulässt, aber Befehle validiert, um nur schreibgeschützte SQL-Abfragen zu ermöglichen. Dieses Beispiel zeigt, wie manPreToolUse-Hooks für bedingte Validierung verwendet, wenn Sie feinere Kontrolle benötigen, als das tools-Feld bietet.
command-Feld in Ihrer Hook-Konfiguration entsprechen:
shell: powershell zum Hook-Eintrag hinzu. Siehe Hooks in PowerShell ausführen.
Der Hook empfängt JSON über stdin mit dem Bash-Befehl in tool_input.command. Exit-Code 2 blockiert die Operation und leitet die Fehlermeldung an Claude weiter. Siehe Hooks für Details zu Exit-Codes und Hook-Eingabe für das vollständige Eingabeschema.
Das System-Prompt teilt dem Subagenten mit, Schreibanfragen abzulehnen, daher ist der Hook ein Sicherheitsmechanismus: Wenn der Subagent trotzdem einen Schreibvorgang versucht, blockiert Claude Code den Befehl und der Subagent sieht die Meldung Blocked: Write operations not allowed. Use SELECT queries only..
Nächste Schritte
Jetzt, da Sie Subagenten verstehen, erkunden Sie diese verwandten Funktionen:- Verteilen Sie Subagenten mit Plugins, um Subagenten über Teams oder Projekte hinweg zu teilen
- Führen Sie Claude Code programmgesteuert aus mit dem Agent SDK für CI/CD und Automatisierung
- Verwenden Sie MCP-Server, um Subagenten Zugriff auf externe Werkzeuge und Daten zu geben