I subagent funzionano all’interno di una singola sessione. Per eseguire molte sessioni indipendenti in parallelo e monitorarle da un unico posto, consulti background agents. Per sessioni che comunicano tra loro, consulti agent teams.
- Preservare il contesto mantenendo l’esplorazione e l’implementazione fuori dalla sua conversazione principale
- Applicare vincoli limitando quali strumenti un subagent può utilizzare
- Riutilizzare configurazioni tra progetti con subagent a livello utente
- Specializzare il comportamento con prompt di sistema focalizzati per domini specifici
- Controllare i costi instradando le attività a modelli più veloci e economici come Haiku
Subagent integrati
Claude Code include subagent integrati che Claude utilizza automaticamente quando appropriato. Ognuno eredita le autorizzazioni della conversazione principale con restrizioni di strumenti aggiuntive. Explore e Plan saltano i vostri file CLAUDE.md e lo stato git della sessione principale per mantenere la ricerca veloce ed economica. Ogni altro subagent integrato e subagent personalizzato carica entrambi. Per la suddivisione completa di ciò che raggiunge un subagent, consultate cosa si carica all’avvio.- Explore
- Plan
- General-purpose
- Other
Un agente veloce e di sola lettura ottimizzato per la ricerca e l’analisi delle basi di codice.
- Model: Haiku, che è veloce e a bassa latenza
- Tools: strumenti di sola lettura; Write e Edit sono negati
- Purpose: scoperta di file, ricerca di codice, esplorazione della base di codice
- Per bloccare un tipo integrato specifico, aggiungetelo a
permissions.denycome mostrato in Disabilitare subagent specifici. - Per impedire a Claude di delegare a qualsiasi subagent, negate lo strumento
Agentstesso conpermissions.deny. - In modalità non interattiva e in Agent SDK, impostate
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1per rimuovere tutti i tipi integrati e fornire solo i vostri.
Quickstart: crea il suo primo subagent
I subagent sono definiti in file Markdown con frontmatter YAML. Può crearli manualmente o utilizzare il comando/agents.
Questa procedura la guida attraverso la creazione di un subagent a livello utente con il comando /agents. Il subagent esamina il codice e suggerisce miglioramenti per la base di codice.
Scelga una posizione
Selezioni la scheda Library, selezioni Create new agent, quindi scelga Personal. Questo salva il subagent in
~/.claude/agents/ in modo che sia disponibile in tutti i suoi progetti.Generi con Claude
Selezioni Generate with Claude. Quando richiesto, descriva il subagent:Claude genera l’identificatore, la descrizione e il prompt di sistema per lei.
Selezioni gli strumenti
Per un revisore di sola lettura, deselezioni tutto tranne Read-only tools. Se mantiene tutti gli strumenti selezionati, il subagent eredita tutti gli strumenti disponibili per la conversazione principale.
Selezioni il modello
Scelga quale modello utilizza il subagent. Per questo agente di esempio, selezioni Sonnet, che bilancia capacità e velocità per analizzare i modelli di codice.
Scelga un colore
Scelga un colore di sfondo per il subagent. Questo la aiuta a identificare quale subagent è in esecuzione nell’interfaccia utente.
Configuri la memoria
Selezioni User scope per dare al subagent una directory di memoria persistente in
~/.claude/agent-memory/. Il subagent utilizza questo per accumulare intuizioni tra le conversazioni, come modelli di base di codice e problemi ricorrenti. Selezioni None se non vuole che il subagent persista gli insegnamenti.Salvi e provi
Esamini il riepilogo della configurazione. Prema Claude delega al suo nuovo subagent, che scansiona la base di codice e restituisce suggerimenti di miglioramento.
s o Enter per salvare, oppure prema e per salvare e modificare il file nel suo editor. Il subagent è disponibile immediatamente. Lo provi:Configuri i subagent
Usi il comando /agents
Il comando/agents apre un’interfaccia a schede per gestire i subagent. La scheda Running elenca i subagent live e quelli terminati di recente e le consente di aprirli o fermarli. La scheda Library le consente di:
- Visualizzare tutti i subagent disponibili (integrati, utente, progetto e plugin)
- Creare nuovi subagent con configurazione guidata o generazione Claude
- Modificare la configurazione del subagent esistente e l’accesso agli strumenti
- Eliminare subagent personalizzati
- Vedere quali subagent sono attivi quando esistono duplicati
Scelga l’ambito del subagent
I subagent sono file Markdown con frontmatter YAML. Li archivi in posizioni diverse a seconda dell’ambito. Quando più subagent condividono lo stesso nome, Claude Code utilizza quello dalla posizione con priorità più alta.| Location | Scope | Priority | Come creare |
|---|---|---|---|
| Managed settings | Organization-wide | 1 (massima) | Distribuito tramite managed settings |
Flag CLI --agents | Sessione corrente | 2 | Passa JSON quando avvia Claude Code |
.claude/agents/ | Progetto corrente | 3 | Interattivo o manuale |
~/.claude/agents/ | Tutti i suoi progetti | 4 | Interattivo o manuale |
Directory agents/ del plugin | Dove il plugin è abilitato | 5 (minima) | Installato con plugins |
.claude/agents/) sono ideali per subagent specifici di una base di codice. Li archivi nel controllo della versione in modo che il suo team possa utilizzarli e migliorarli in modo collaborativo.
I subagent di progetto vengono scoperti camminando verso l’alto dalla directory di lavoro corrente, quindi ogni .claude/agents/ tra lì e la radice del repository viene scansionato. A partire da v2.1.178, quando più di una di queste directory annidate definisce lo stesso name, Claude Code utilizza la definizione più vicina alla directory di lavoro.
Le directory aggiunte con --add-dir vengono anche scansionate: una cartella .claude/agents/ all’interno di una directory aggiunta si carica insieme ai subagent di progetto. Consulti Directory aggiuntive per quali altri tipi di configurazione si caricano da --add-dir. Per condividere i subagent tra progetti senza --add-dir, usi ~/.claude/agents/ o un plugin.
I subagent utente (~/.claude/agents/) sono subagent personali disponibili in tutti i suoi progetti.
Claude Code scansiona .claude/agents/ e ~/.claude/agents/ ricorsivamente, quindi può organizzare le definizioni in sottocartelle come agents/review/ o agents/research/. Il percorso della sottodirectory non influisce su come un subagent viene identificato o invocato, perché l’identità proviene solo dal campo frontmatter name.
Mantenga i valori name univoci in tutto l’albero: se due file all’interno di un ambito dichiarano lo stesso nome, Claude Code carica solo uno di essi. A partire da v2.1.196, l’esecuzione di /doctor segnala i nomi di agenti duplicati nello stesso ambito e mostra quale definizione è attiva.
Le directory agents/ del plugin vengono scansionate anche ricorsivamente. A differenza degli ambiti di progetto e utente, una sottocartella all’interno della directory agents/ di un plugin diventa parte dell’identificatore con ambito: un file in agents/review/security.md nel plugin my-plugin si registra come my-plugin:review:security.
I subagent definiti da CLI vengono passati come JSON quando avvia Claude Code. Esistono solo per quella sessione e non vengono salvati su disco, rendendoli utili per test rapidi o script di automazione. Può definire più subagent in una singola chiamata --agents:
- macOS, Linux, WSL
- Windows PowerShell
--agents accetta JSON con gli stessi campi frontmatter dei subagent basati su file: description, prompt, tools, disallowedTools, model, permissionMode, mcpServers, hooks, maxTurns, skills, initialPrompt, memory, effort, background, isolation e color. Usi prompt per il prompt di sistema, equivalente al corpo markdown nei subagent basati su file.
I subagent gestiti vengono distribuiti dagli amministratori dell’organizzazione. Posizioni file markdown in .claude/agents/ all’interno della directory managed settings, utilizzando lo stesso formato frontmatter dei subagent di progetto e utente. Le definizioni gestite hanno la precedenza sui subagent di progetto e utente con lo stesso nome.
I subagent plugin provengono da plugins che ha installato. Appaiono in /agents insieme ai suoi subagent personalizzati. Consulti il riferimento dei componenti plugin per i dettagli sulla creazione di subagent plugin.
Per motivi di sicurezza, i subagent plugin non supportano i campi frontmatter
hooks, mcpServers o permissionMode. Questi campi vengono ignorati durante il caricamento degli agenti da un plugin. Se ne ha bisogno, copi il file dell’agente in .claude/agents/ o ~/.claude/agents/. Può anche aggiungere regole a permissions.allow in settings.json o settings.local.json, ma queste regole si applicano all’intera sessione, non solo al subagent plugin.tools e model, con il corpo della definizione aggiunto al prompt di sistema del compagno di squadra come istruzioni aggiuntive. Consulti agent teams per quali campi frontmatter si applicano su quel percorso.
Scriva file subagent
I file subagent utilizzano frontmatter YAML per la configurazione, seguito dal prompt di sistema in Markdown:I subagent vengono caricati all’avvio della sessione. Se aggiunge o modifica un file subagent direttamente su disco, riavvii la sua sessione per caricarlo. I subagent creati tramite l’interfaccia
/agents hanno effetto immediatamente senza un riavvio.cd non persistono tra le chiamate dello strumento Bash o PowerShell e non influenzano la directory di lavoro della conversazione principale. Per dare al subagent una copia isolata del repository, imposti isolation: worktree.
Campi frontmatter supportati
I seguenti campi possono essere utilizzati nel frontmatter YAML. Soloname e description sono obbligatori.
| Field | Required | Description |
|---|---|---|
name | Yes | Identificatore univoco utilizzando lettere minuscole e trattini. Hooks ricevono questo valore come agent_type. Il nome del file non deve corrispondere |
description | Yes | Quando Claude dovrebbe delegare a questo subagent |
tools | No | Strumenti che il subagent può utilizzare. Eredita tutti gli strumenti se omesso. Per precaricare Skills nel contesto, usi il campo skills piuttosto che elencare Skill qui |
disallowedTools | No | Strumenti da negare, rimossi dall’elenco ereditato o specificato |
model | No | Modello da utilizzare: sonnet, opus, haiku, fable, un ID modello completo (ad esempio, claude-opus-4-8), o inherit. Predefinito: inherit |
permissionMode | No | Modalità di autorizzazione: default, acceptEdits, auto, dontAsk, bypassPermissions, o plan. Ignorato per subagent plugin |
maxTurns | No | Numero massimo di turni agentici prima che il subagent si fermi |
skills | No | Skills da precaricare nel contesto del subagent all’avvio. Il contenuto completo della skill viene iniettato, non solo la descrizione. I subagent possono ancora invocare skills di progetto, utente e plugin non elencate tramite lo strumento Skill |
mcpServers | No | MCP servers disponibili per questo subagent. Ogni voce è un nome di server che fa riferimento a un server già configurato (ad esempio, "slack") o una definizione inline con il nome del server come chiave e una configurazione MCP server completa come valore. Ignorato per subagent plugin |
hooks | No | Lifecycle hooks limitati a questo subagent. Ignorato per subagent plugin |
memory | No | Ambito di memoria persistente: user, project, o local. Abilita l’apprendimento tra sessioni |
background | No | Imposta su true per eseguire sempre questo subagent come background task. Predefinito: false |
effort | No | Livello di sforzo quando questo subagent è attivo. Sostituisce il livello di sforzo della sessione. Predefinito: eredita dalla sessione. Opzioni: low, medium, high, xhigh, max; i livelli disponibili dipendono dal modello |
isolation | No | Imposta su worktree per eseguire il subagent in un git worktree temporaneo, dandogli una copia isolata del repository diramata per impostazione predefinita dal suo ramo predefinito piuttosto che dall’HEAD della sessione principale. Il worktree viene automaticamente pulito se il subagent non apporta modifiche |
color | No | Colore di visualizzazione per il subagent nell’elenco attività e nella trascrizione. Accetta red, blue, green, yellow, purple, orange, pink, o cyan |
initialPrompt | No | Auto-inviato come primo turno utente quando questo agente viene eseguito come agente della sessione principale (tramite --agent o l’impostazione agent). Commands e skills vengono elaborati. Anteposto a qualsiasi prompt fornito dall’utente |
Scelga un modello
Il campomodel controlla quale modello AI utilizza il subagent:
- Alias modello: Usi uno degli alias disponibili:
sonnet,opus,haiku, ofable - ID modello completo: Usi un ID modello completo come
claude-opus-4-8oclaude-sonnet-5. Accetta gli stessi valori del flag--model - inherit: Usi lo stesso modello della conversazione principale
- Omesso: Se non specificato, predefinito a
inherit(usa lo stesso modello della conversazione principale)
model per quella specifica invocazione. Claude Code risolve il modello del subagent in questo ordine:
- La variabile di ambiente
CLAUDE_CODE_SUBAGENT_MODEL, quando impostata a un alias modello o ID modello - Il parametro
modelper invocazione - Il frontmatter
modeldella definizione del subagent - Il modello della conversazione principale
CLAUDE_CODE_SUBAGENT_MODEL su inherit è lo stesso che lasciarla non impostata: la risoluzione continua con il parametro model per invocazione, quindi il frontmatter. Nelle versioni precedenti, inherit forzava i subagent sul modello della conversazione principale e ignorava entrambe quelle fonti.
La variabile di ambiente, il parametro per invocazione e i valori frontmatter vengono controllati rispetto alla lista di consentimento availableModels della sua organizzazione. Un valore che si risolve in un modello escluso non viene utilizzato e il subagent viene eseguito sul modello ereditato.
Controlli le capacità del subagent
Può controllare cosa possono fare i subagent attraverso l’accesso agli strumenti, le modalità di autorizzazione e le regole condizionali.Strumenti disponibili
I subagent ereditano gli strumenti interni e gli strumenti MCP disponibili nella conversazione principale per impostazione predefinita. I seguenti strumenti dipendono dall’interfaccia utente della conversazione principale o dallo stato della sessione e non sono disponibili per i subagent, anche se elencati nel campotools:
AskUserQuestionEnterPlanModeExitPlanMode, a meno che lapermissionModedel subagent non siaplanScheduleWakeupWaitForMcpServers
tools (allowlist) o il campo disallowedTools (denylist). Questo esempio usa tools per consentire esclusivamente Read, Grep, Glob e Bash. Il subagent non può modificare file, scrivere file o utilizzare alcuno strumento MCP:
disallowedTools per ereditare ogni strumento dalla conversazione principale tranne Write e Edit. Il subagent mantiene Bash, strumenti MCP e tutto il resto:
disallowedTools viene applicato per primo, quindi tools viene risolto rispetto al pool rimanente. Uno strumento elencato in entrambi viene rimosso.
Entrambi i campi accettano modelli a livello di server MCP oltre ai nomi esatti degli strumenti: mcp__<server> o mcp__<server>__* concede o rimuove ogni strumento dal server denominato. In disallowedTools, mcp__* rimuove anche ogni strumento MCP da qualsiasi server. Questo esempio rimuove ogni strumento dal server MCP github mentre mantiene gli strumenti da altri server e ogni strumento integrato:
Limiti quali subagent possono essere generati
Quando un agente viene eseguito come thread principale conclaude --agent, può generare subagent utilizzando lo strumento Agent. Per limitare quali tipi di subagent può generare, usi la sintassi Agent(agent_type) nel campo tools.
Nella versione 2.1.63, lo strumento Task è stato rinominato in Agent. I riferimenti
Task(...) esistenti nelle impostazioni e nelle definizioni degli agenti continuano a funzionare come alias.worker e researcher possono essere generati. Se l’agente tenta di generare qualsiasi altro tipo, la richiesta fallisce e l’agente vede solo i tipi consentiti nel suo prompt. Per bloccare agenti specifici mentre consente tutti gli altri, usi permissions.deny invece.
Per consentire la generazione di qualsiasi subagent senza restrizioni, usi Agent senza parentesi:
Agent è completamente omesso dall’elenco tools, l’agente non può generare alcun subagent.
La sintassi allowlist Agent(agent_type) si applica solo a un agente eseguito come thread principale con claude --agent. In una definizione di subagent, elencare Agent in tools consente a quel subagent di generare subagent annidati, ma qualsiasi elenco di tipi all’interno delle parentesi viene ignorato.
Limiti i server MCP a un subagent
Usi il campomcpServers per dare a un subagent accesso ai server MCP che non sono disponibili nella conversazione principale. I server inline definiti qui vengono connessi quando il subagent inizia e disconnessi quando finisce. I riferimenti stringa condividono la connessione della sessione principale.
Il campo
mcpServers si applica in entrambi i contesti in cui un file agente può essere eseguito:- Come subagent, generato tramite lo strumento Agent o un @-mention
- Come sessione principale, avviato con
--agento l’impostazioneagent
.mcp.json e ai file di impostazioni..mcp.json (stdio, http, sse, ws), con chiave il nome del server.
Per mantenere un server MCP fuori dalla conversazione principale e evitare che le descrizioni dei suoi strumenti consumino contesto lì, lo definisca inline qui piuttosto che in .mcp.json. Il subagent ottiene gli strumenti; la conversazione principale no.
A partire da v2.1.153, le restrizioni MCP che si applicano alla sessione principale coprono anche i server dichiarati nel frontmatter del subagent:
--strict-mcp-confige--bare- Configurazione MCP gestita aziendale
- Politiche
allowedMcpServersedeniedMcpServers
--strict-mcp-config non filtra i server che passa inline tramite --agents o l’opzione SDK agents, poiché si tratta di input esplicito del chiamante.
Modalità di autorizzazione
Il campopermissionMode controlla come il subagent gestisce i prompt di autorizzazione. I subagent ereditano il contesto di autorizzazione dalla conversazione principale e possono sovrascrivere la modalità, tranne quando la modalità principale ha la precedenza come descritto di seguito.
| Mode | Behavior |
|---|---|
default | Controllo di autorizzazione standard con prompt |
acceptEdits | Auto-accetta modifiche ai file e comandi comuni del filesystem per i percorsi nella directory di lavoro o additionalDirectories |
auto | Auto mode: un classificatore AI valuta ogni chiamata di strumento |
dontAsk | Auto-nega prompt di autorizzazione (gli strumenti esplicitamente consentiti continuano a funzionare) |
bypassPermissions | Salta i prompt di autorizzazione |
plan | Plan mode (esplorazione di sola lettura) |
bypassPermissions o acceptEdits, questo ha la precedenza e non può essere sovrascritto. Se il principale utilizza auto mode, il subagent eredita auto mode e qualsiasi permissionMode nel suo frontmatter viene ignorato: il classificatore valuta le chiamate di strumenti del subagent con le stesse regole di blocco e consentimento della sessione principale.
Precarichi skills nei subagent
Usi il camposkills per iniettare il contenuto della skill nel contesto del subagent all’avvio. Questo dà al subagent conoscenza del dominio senza richiedere che scopra e carichi le skills durante l’esecuzione.
Skill dall’elenco tools o aggiunga a disallowedTools.
Non può precaricare skills che impostano disable-model-invocation: true, poiché il precaricamento attinge dallo stesso insieme di skills che Claude può invocare. Se una skill elencata è mancante o disabilitata, Claude Code la salta e registra un avviso nel log di debug.
Questo è l’inverso di eseguire una skill in un subagent. Con
skills in un subagent, il subagent controlla il prompt di sistema e carica il contenuto della skill. Con context: fork in una skill, il contenuto della skill viene iniettato nell’agente che specifica. Entrambi utilizzano lo stesso sistema sottostante.Abiliti memoria persistente
Il campomemory dà al subagent una directory persistente che sopravvive tra le conversazioni. Il subagent utilizza questa directory per costruire conoscenza nel tempo, come modelli di base di codice, intuizioni di debug e decisioni architettoniche.
| Scope | Location | Usi quando |
|---|---|---|
user | ~/.claude/agent-memory/<name-of-agent>/ | il subagent dovrebbe ricordare gli insegnamenti tra tutti i progetti |
project | .claude/agent-memory/<name-of-agent>/ | la conoscenza del subagent è specifica del progetto e condivisibile tramite controllo della versione |
local | .claude/agent-memory-local/<name-of-agent>/ | la conoscenza del subagent è specifica del progetto ma non dovrebbe essere archiviata nel controllo della versione |
- Il prompt di sistema del subagent include istruzioni per leggere e scrivere nella directory di memoria.
- Il prompt di sistema del subagent include anche le prime 200 righe o 25KB di
MEMORY.mdnella directory di memoria, a seconda di quale sia minore, con istruzioni per curareMEMORY.mdse supera quel limite. - Gli strumenti Read, Write e Edit vengono automaticamente abilitati in modo che il subagent possa gestire i suoi file di memoria.
-
projectè l’ambito predefinito consigliato. Lo rende condivisibile tramite controllo della versione. Usiuserquando la conoscenza del subagent è ampiamente applicabile tra progetti, olocalquando la conoscenza non dovrebbe essere archiviata nel controllo della versione. - Chieda al subagent di consultare la sua memoria prima di iniziare il lavoro: “Review this PR, and check your memory for patterns you’ve seen before.”
- Chieda al subagent di aggiornare la sua memoria dopo aver completato un’attività: “Now that you’re done, save what you learned to your memory.” Nel tempo, questo costruisce una base di conoscenza che rende il subagent più efficace.
-
Includa istruzioni di memoria direttamente nel file markdown del subagent in modo che mantenga proattivamente la sua stessa base di conoscenza:
Regole condizionali con hooks
Per un controllo più dinamico sull’utilizzo degli strumenti, usi gli hookPreToolUse per convalidare le operazioni prima che vengono eseguite. Questo è utile quando ha bisogno di consentire alcune operazioni di uno strumento mentre ne blocca altre.
Questo esempio crea un subagent che consente solo query di database di sola lettura. L’hook PreToolUse esegue lo script specificato in command prima di ogni comando Bash:
shell: powershell alla voce dell’hook come mostrato in running hooks in PowerShell.
Disabiliti subagent specifici
Può impedire a Claude di utilizzare subagent specifici aggiungendoli all’arraydeny nelle sue impostazioni. Usi il formato Agent(subagent-name) dove subagent-name corrisponde al campo name del subagent.
--disallowedTools:
Definisca hook per i subagent
I subagent possono definire hook che vengono eseguiti durante il ciclo di vita del subagent. Ci sono due modi per configurare gli hook:- Nel frontmatter del subagent: Definisca hook che vengono eseguiti solo mentre quel subagent è attivo
- In
settings.json: Definisca hook che vengono eseguiti nella sessione principale quando i subagent iniziano o si fermano
Hook nel frontmatter del subagent
Definisca gli hook direttamente nel file markdown del subagent. Questi hook vengono eseguiti solo mentre quel subagent specifico è attivo e vengono puliti quando finisce.Gli hook nel frontmatter si attivano quando l’agente viene generato come subagent tramite lo strumento Agent o un @-mention, e quando l’agente viene eseguito come principale della sessione tramite
--agent o l’impostazione agent. Nel caso della sessione principale, vengono eseguiti insieme a qualsiasi hook definito in settings.json.| Event | Matcher input | Quando si attiva |
|---|---|---|
PreToolUse | Nome dello strumento | Prima che il subagent utilizzi uno strumento |
PostToolUse | Nome dello strumento | Dopo che il subagent ha utilizzato uno strumento |
Stop | (nessuno) | Quando il subagent finisce (convertito in SubagentStop al runtime) |
PreToolUse ed esegue un linter dopo le modifiche ai file con PostToolUse:
Stop nel frontmatter vengono automaticamente convertiti in eventi SubagentStop.
Hook a livello di progetto per gli eventi dei subagent
Configuri gli hook insettings.json che rispondono agli eventi del ciclo di vita dei subagent nella sessione principale.
| Event | Matcher input | Quando si attiva |
|---|---|---|
SubagentStart | Nome del tipo di agente | Quando un subagent inizia l’esecuzione |
SubagentStop | Nome del tipo di agente | Quando un subagent completa |
name del frontmatter dell’agente per i subagent a livello di progetto e utente, o l’identificatore con ambito del plugin come my-plugin:db-agent per subagent plugin. Un nome con ambito contiene un due punti, quindi viene valutato come un’espressione regolare non ancorata; ancoratelo con ^ e $, come in ^my-plugin:db-agent$, per corrispondere solo a quell’agente.
Questo esempio esegue uno script di configurazione solo quando il subagent db-agent inizia e uno script di pulizia quando qualsiasi subagent si ferma:
db-agent corrisponde esattamente su Claude Code v2.1.195 o successivo. Nelle versioni precedenti viene valutato come un’espressione regolare non ancorata e si attiva anche per qualsiasi tipo di agente che lo contiene, come prod-db-agent; ancoratelo come ^db-agent$ su quelle versioni.
Consulti Hooks per il formato di configurazione dell’hook completo.
Lavori con i subagent
Comprenda la delegazione automatica
Claude delega automaticamente le attività in base alla descrizione dell’attività nella sua richiesta, al campodescription nelle configurazioni dei subagent e al contesto attuale. Per incoraggiare la delegazione proattiva, includa frasi come “use proactively” nel campo description del suo subagent.
Invochi i subagent esplicitamente
Quando la delegazione automatica non è sufficiente, può richiedere un subagent lei stesso. Tre modelli escalation da un suggerimento una tantum a un predefinito a livello di sessione:- Linguaggio naturale: nomini il subagent nel suo prompt; Claude decide se delegare
- @-mention: garantisce che il subagent viene eseguito per un’attività
- A livello di sessione: l’intera sessione utilizza il prompt di sistema, le restrizioni di strumenti e il modello di quel subagent tramite il flag
--agento l’impostazioneagent
@ e scelga il subagent dal typeahead, nello stesso modo in cui @-mention i file. Questo assicura che quel subagent specifico viene eseguito piuttosto che lasciare la scelta a Claude:
my-plugin:code-reviewer o my-plugin:review:security quando il plugin organizza gli agenti in sottocartelle. I subagent in background denominati attualmente in esecuzione nella sessione appaiono anche nel typeahead, mostrando il loro stato accanto al nome.
Può anche digitare la mention manualmente senza usare il picker: @agent-<name> per i subagent locali, o @agent- seguito dal nome con ambito per i subagent plugin, ad esempio @agent-my-plugin:code-reviewer.
Esegua l’intera sessione come un subagent. Passi --agent <name> per avviare una sessione in cui il thread principale stesso assume il prompt di sistema, le restrizioni di strumenti e il modello di quel subagent:
--system-prompt fa. I file CLAUDE.md e la memoria del progetto continuano a caricarsi attraverso il flusso di messaggi normale. Il nome dell’agente appare come @<name> nell’intestazione di avvio in modo che possa confermare che è attivo.
Questo funziona con i subagent integrati e personalizzati, e la scelta persiste quando riprende la sessione.
Per un subagent fornito da un plugin, può passare solo il nome dell’agente e Claude Code lo troverà:
agents/, includa la sottocartella nel nome con ambio, ad esempio claude --agent my-plugin:review:security.
Per renderlo il predefinito per ogni sessione in un progetto, imposti agent in .claude/settings.json:
Esegua i subagent in primo piano o in background
I subagent possono essere eseguiti in primo piano o in background:- Subagent in primo piano bloccano la conversazione principale fino al completamento. I prompt di autorizzazione vengono passati a lei mentre si presentano.
- Subagent in background vengono eseguiti contemporaneamente mentre continua a lavorare. A partire da v2.1.186, quando un subagent in background raggiunge una chiamata di strumento che necessita di autorizzazione, il prompt emerge nella sua sessione principale e nomina il subagent che sta chiedendo. Approvi per consentire al subagent di continuare, o premi Esc per negare quella singola chiamata di strumento senza fermare il subagent. Prima di v2.1.186, i subagent in background auto-negavano qualsiasi chiamata di strumento che avrebbe richiesto un prompt.
- Chiedere a Claude di “run this in the background”
- Premere Ctrl+B per mettere in background un’attività in esecuzione
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS su 1. Consulti Environment variables.
Quando CLAUDE_CODE_FORK_SUBAGENT è impostato su 1, ogni spawn di subagent viene eseguito in background indipendentemente dal campo background. I prompt di autorizzazione da questi subagent in background emergono nella sua sessione principale come descritto sopra.
Modelli comuni
Isoli operazioni ad alto volume
Uno degli usi più efficaci per i subagent è isolare le operazioni che producono grandi quantità di output. L’esecuzione di test, il recupero della documentazione o l’elaborazione di file di log possono consumare contesto significativo. Delegando questi a un subagent, l’output dettagliato rimane nel contesto del subagent mentre solo il riassunto rilevante ritorna alla sua conversazione principale.Esegua ricerca parallela
Per indagini indipendenti, generi più subagent per lavorare simultaneamente:Concateni i subagent
Per flussi di lavoro multi-step, chieda a Claude di utilizzare i subagent in sequenza. Ogni subagent completa la sua attività e restituisce i risultati a Claude, che poi passa il contesto rilevante al subagent successivo.Scelga tra subagent e conversazione principale
Usi la conversazione principale quando:- L’attività necessita di frequenti scambi o raffinamento iterativo
- Più fasi condividono contesto significativo, come pianificazione, implementazione e test
- Sta facendo un cambio rapido e mirato
- La latenza è importante. I subagent iniziano da zero e potrebbero aver bisogno di tempo per raccogliere contesto
- L’attività produce output dettagliato che non ha bisogno nel suo contesto principale
- Vuole applicare restrizioni di strumenti o autorizzazioni specifiche
- Il lavoro è autonomo e può restituire un riassunto
/btw invece di un subagent. Vede il suo contesto completo ma non ha accesso agli strumenti e la risposta viene scartata piuttosto che aggiunta alla cronologia.
Generi subagent annidati
A partire da Claude Code v2.1.172, un subagent può generare i suoi propri subagent. Usi questo quando un’attività delegata si divide in sottoattività parallele, come un subagent revisore che invia un verificatore per ogni risultato, in modo che l’output intermedio non raggiunga mai la sua conversazione principale. Solo il riassunto del subagent di livello superiore ritorna a lei. Un subagent annidato è configurato nello stesso modo di uno di livello superiore e si risolve dagli stessi ambiti. Il pannello dei subagent sotto l’input del prompt mostra l’albero completo: ogni riga visualizza un conteggio(+N) di discendenti, e a partire da v2.1.193, aprire una riga mostra i fratelli e i figli diretti di quel subagent con un percorso di ritorno a main. La scheda Running in /agents elenca i subagent in esecuzione come un elenco piatto.
La profondità viene conteggiata come il numero di livelli di subagent sotto la conversazione principale, indipendentemente dal fatto che ogni livello venga eseguito in primo piano o in background. Un subagent a profondità cinque non riceve lo strumento Agent e non può generare ulteriormente. Il limite è fisso e non configurabile.
A partire da Claude Code v2.1.187, la profondità di un subagent in background è fissata quando viene generato per la prima volta, e riprendere successivamente non cambia quella profondità. Ad esempio, se la sua conversazione principale genera il subagent A, e A genera un subagent in background B a profondità due, B è ancora a profondità due quando lo riprende direttamente dalla conversazione principale. Riprendere un subagent da un contesto più superficiale non gli consente di generare livelli aggiuntivi che il limite di profondità ha già impedito.
Per impedire a un subagent specifico di generare altri, ometta Agent dal suo elenco tools o aggiunga a disallowedTools.
Una fork ancora non può generare un’altra fork. Può generare altri tipi di subagent, e questi contano verso il limite di profondità.
Gestisca il contesto del subagent
Cosa si carica all’avvio
Ogni subagent inizia con una finestra di contesto fresca e isolata. Non vede la cronologia della sua conversazione, le skills che ha già invocato, o i file che Claude ha già letto. Claude compone un messaggio di delegazione che riassume l’attività, e il subagent lavora da lì. L’eccezione è una fork, che eredita la conversazione genitore invece di iniziare da zero. Il contesto iniziale di un subagent non-fork contiene:- System prompt: il prompt dell’agente stesso più i dettagli dell’ambiente che Claude Code aggiunge, non il prompt di sistema completo di Claude Code. I subagent personalizzati definiscono il loro nel corpo markdown o nel campo
prompt. Gli agenti integrati hanno prompt predefiniti. - Task message: il prompt di delegazione che Claude scrive quando consegna il lavoro.
- CLAUDE.md e memory: ogni livello della gerarchia di memoria che la conversazione principale carica, inclusi
~/.claude/CLAUDE.md, regole del progetto,CLAUDE.local.mde file di policy gestiti. Gli agenti Explore e Plan integrati saltano questo. - Git status: uno snapshot preso all’inizio della sessione genitore. Assente quando la directory di lavoro non è un repository Git o quando
includeGitInstructionsèfalse. Explore e Plan lo saltano comunque. - Preloaded skills: contenuto completo di qualsiasi skill denominata nel campo
skillsdell’agente. Gli agenti integrati non precaricano skills.
vendor/”, la rienunci nel prompt che dà a Claude quando delega.
Riprenda i subagent
Ogni invocazione di subagent crea una nuova istanza con contesto fresco. Per continuare il lavoro di un subagent esistente invece di ricominciare, chieda a Claude di riprendere. I subagent ripresi mantengono la loro cronologia di conversazione completa, incluse tutte le precedenti chiamate di strumenti, risultati e ragionamento. Il subagent riprende esattamente da dove si era fermato piuttosto che ricominciare da zero. Quando un subagent completa, Claude riceve il suo ID agente. Gli agenti integrati Explore e Plan sono una tantum e non restituiscono alcun ID agente, quindi non possono essere ripresi; usigeneral-purpose o un subagent personalizzato quando ha bisogno di continuare il lavoro. Claude utilizza lo strumento SendMessage con l’ID dell’agente come campo to per riprendere. Lo strumento SendMessage è sempre disponibile per riprendere i subagent per ID agente o nome. I messaggi strutturati del protocollo di team come shutdown_request e plan_approval_response richiedono che agent teams siano abilitati.
Per riprendere un subagent, chieda a Claude di continuare il lavoro precedente:
SendMessage, si auto-riprende in background senza richiedere una nuova invocazione Agent.
Può anche chiedere a Claude l’ID agente se vuole fare riferimento ad esso esplicitamente, o trovare gli ID nei file di trascrizione in ~/.claude/projects/{project}/{sessionId}/subagents/. Ogni trascrizione è archiviata come agent-{agentId}.jsonl.
Le trascrizioni dei subagent persistono indipendentemente dalla conversazione principale:
- Compattazione della conversazione principale: quando la conversazione principale si compatta, le trascrizioni dei subagent non sono interessate. Sono archiviate in file separati.
- Persistenza della sessione: le trascrizioni dei subagent persistono all’interno della loro sessione. Può riprendere un subagent dopo aver riavviato Claude Code riprendendo la stessa sessione.
- Pulizia automatica: le trascrizioni vengono pulite in base all’impostazione
cleanupPeriodDays, che per impostazione predefinita è 30 giorni.
Auto-compattazione
I subagent supportano la compattazione automatica utilizzando la stessa logica della conversazione principale. La compattazione si attiva nelle stesse condizioni, eCLAUDE_AUTOCOMPACT_PCT_OVERRIDE si applica anche ai subagent. Consulti environment variables per quando l’override ha effetto.
Gli eventi di compattazione vengono registrati nei file di trascrizione dei subagent:
preTokens mostra quanti token sono stati utilizzati prima che si verificasse la compattazione.
Esegua il fork della conversazione corrente
I subagent di fork richiedono Claude Code v2.1.117 o successivo. Da v2.1.161 il comando
/fork è abilitato per impostazione predefinita; nelle versioni precedenti richiede l’impostazione della variabile di ambiente CLAUDE_CODE_FORK_SUBAGENT su 1. Consentire a Claude stesso di generare fork è sperimentale e potrebbe cambiare nelle versioni future. Questa capacità può anche essere abilitata nelle sessioni interattive come parte di un rollout graduale.CLAUDE_CODE_FORK_SUBAGENT su 1 per abilitarla esplicitamente o su 0 per disabilitarla. La variabile è rispettata in modalità interattiva e tramite SDK o claude -p.
L’abilitazione della modalità fork cambia Claude Code in due modi:
- Claude può generare un fork richiedendo esplicitamente il tipo di subagent
fork. Gli spawn senza un tipo di subagent continuano a utilizzare il subagent general-purpose, e i subagent denominati come Explore continuano a generarsi come prima. - Ogni spawn di subagent viene eseguito in background, sia che sia un fork che un subagent denominato. Imposti
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSsu1per mantenere gli spawn sincroni.
/fork seguito da una direttiva, con o senza la variabile impostata. Claude Code nomina il fork dalle prime parole della direttiva. L’esempio seguente esegue il fork della conversazione per redigere casi di test mentre continua con l’implementazione nella sessione principale:
Osservi e dirija i fork in esecuzione
I fork in esecuzione appaiono in un pannello sotto l’input del prompt, con una riga per la sessione principale e una per ogni fork. Usi questi tasti per interagire con il pannello:| Key | Action |
|---|---|
↑ / ↓ | Sposta tra le righe |
Enter | Apra la trascrizione del fork selezionato e invii messaggi di follow-up |
x | Chiuda un fork finito o fermi uno in esecuzione |
Esc | Restituisca il focus all’input del prompt |
Come i fork differiscono dai subagent denominati
Un fork eredita tutto ciò che la sessione principale ha nel momento in cui viene generato. Un subagent denominato inizia dalla sua propria definizione.| Fork | Subagent denominato | |
|---|---|---|
| Context | Cronologia di conversazione completa | Contesto fresco con il prompt che passa |
| System prompt e tools | Uguale alla sessione principale | Dalla definition file del subagent |
| Model | Uguale alla sessione principale | Dal campo model del subagent |
| Permissions | I prompt emergono nel suo terminale | I prompt emergono nella sua sessione principale quando viene eseguito in background |
| Prompt cache | Condiviso con la sessione principale | Cache separata |
isolation: "worktree" in modo che le modifiche ai file del fork vengano scritte in un git worktree separato invece del suo checkout.
Limitazioni
L’impostazione diCLAUDE_CODE_FORK_SUBAGENT=1 abilita la modalità fork in sessioni interattive, modalità non interattiva e SDK Agent; l’impostazione su 0 disabilita la modalità fork ovunque, incluso qualsiasi rollout lato server. Un fork non può generare ulteriori fork.
Subagent di esempio
Questi esempi dimostrano modelli efficaci per la costruzione di subagent. Li usi come punti di partenza, o generi una versione personalizzata con Claude.Revisore di codice
Un subagent di sola lettura che esamina il codice senza modificarlo. Questo esempio mostra come progettare un subagent focalizzato con accesso limitato agli strumenti (nessun Edit o Write) e un prompt dettagliato che specifica esattamente cosa cercare e come formattare l’output.Debugger
Un subagent che può sia analizzare che correggere i problemi. A differenza del revisore di codice, questo include Edit perché correggere i bug richiede la modifica del codice. Il prompt fornisce un flusso di lavoro chiaro dalla diagnosi alla verifica.Data scientist
Un subagent specifico del dominio per il lavoro di analisi dei dati. Questo esempio mostra come creare subagent per flussi di lavoro specializzati al di fuori dei tipici compiti di codifica. Imposta esplicitamentemodel: sonnet per un’analisi più capace.
Validatore di query di database
Un subagent che consente l’accesso a Bash ma convalida i comandi per consentire solo query SQL di sola lettura. Questo esempio mostra come usare gli hookPreToolUse per la convalida condizionale quando ha bisogno di un controllo più fine di quello che il campo tools fornisce.
command nella sua configurazione dell’hook:
shell: powershell alla voce dell’hook. Consulti esecuzione degli hook in PowerShell.
L’hook riceve JSON tramite stdin con il comando Bash in tool_input.command. Il codice di uscita 2 blocca l’operazione e alimenta il messaggio di errore a Claude. Consulti Hooks per i dettagli sui codici di uscita e Hook input per lo schema di input completo.
Passaggi successivi
Ora che comprende i subagent, esplori queste funzionalità correlate:- Distribuisca subagent con i plugin per condividere i subagent tra team o progetti
- Esegua Claude Code a livello di programmazione con l’Agent SDK per CI/CD e automazione
- Usi i server MCP per dare ai subagent accesso a strumenti e dati esterni