Was this page helpful?
Gli Agent Skills estendono le capacità di Claude attraverso cartelle organizzate di istruzioni, script e risorse. Questa guida mostra come utilizzare sia gli Skill predefiniti che quelli personalizzati con l'API di Claude.
Per il riferimento completo dell'API, inclusi gli schemi di richiesta/risposta e tutti i parametri, consulta:
Questa funzionalità non è idonea per Zero Data Retention (ZDR). I dati vengono conservati secondo la politica di conservazione standard della funzionalità.
Crea il tuo primo Skill
Best practice per la creazione di Skill
Per un approfondimento sull'architettura e sulle applicazioni reali degli Agent Skills, leggi il post del blog di engineering: Equipping agents for the real world with Agent Skills.
Gli Skill si integrano con la Messages API attraverso lo strumento di esecuzione del codice. Che si utilizzino Skill predefiniti gestiti da Anthropic o Skill personalizzati che hai caricato, la forma dell'integrazione è identica: entrambi richiedono l'esecuzione del codice e utilizzano la stessa struttura container.
Gli Skill si integrano in modo identico nella Messages API indipendentemente dalla fonte. Specifichi gli Skill nel parametro container con un skill_id, type e un version opzionale, e vengono eseguiti nell'ambiente di esecuzione del codice.
Puoi utilizzare Skill da due fonti:
| Aspetto | Skill Anthropic | Skill personalizzati |
|---|---|---|
| Valore type | anthropic | custom |
| ID Skill | Nomi brevi: pptx, xlsx, docx, pdf | Generati: skill_01AbCdEfGhIjKlMnOpQrStUv |
| Formato versione | Basato su data: 20251013 o latest | Timestamp epoch: 1759178010641129 o latest |
Entrambe le fonti di Skill vengono restituite dall'endpoint List Skills (usa il parametro source per filtrare). La forma dell'integrazione e l'ambiente di esecuzione sono identici. L'unica differenza è da dove provengono gli Skill e come vengono gestiti.
Per utilizzare gli Skill, hai bisogno di:
code-execution-2025-08-25 - Abilita l'esecuzione del codice (richiesto per gli Skill)skills-2025-10-02 - Abilita la Skills APIfiles-api-2025-04-14 - Per caricare/scaricare file da/verso il containerGli Skill vengono specificati utilizzando il parametro container nella Messages API. Puoi includere fino a 8 Skill per richiesta.
La struttura è identica sia per gli Skill Anthropic che per quelli personalizzati. Specifica i campi obbligatori type e skill_id, e includi opzionalmente version per fissare una versione specifica:
Quando gli Skill creano documenti (Excel, PowerPoint, PDF, Word), restituiscono attributi file_id nella risposta. Devi utilizzare la Files API per scaricare questi file.
Come funziona:
file_id per ogni file creatoEsempio: creazione e download di un file Excel
Operazioni aggiuntive della Files API:
Per i dettagli completi sulla Files API, consulta la documentazione della Files API.
Riutilizza lo stesso container su più messaggi specificando l'ID del container:
Gli Skill possono eseguire operazioni che richiedono più turni. Gestisci i motivi di arresto pause_turn:
La risposta può includere un motivo di arresto pause_turn, che indica che l'API ha messo in pausa un'operazione Skill di lunga durata. Puoi fornire la risposta così com'è in una richiesta successiva per consentire a Claude di continuare il suo turno, oppure modificare il contenuto se desideri interrompere la conversazione e fornire indicazioni aggiuntive.
Combina più Skill in una singola richiesta per gestire flussi di lavoro complessi:
Un bundle Skill è una directory contenente un file SKILL.md al livello superiore con frontmatter YAML name e description, più eventuali script o risorse di supporto. Consulta Inizia con gli Agent Skills nell'API per crearne uno, e l'elenco Requisiti che segue gli esempi per i vincoli completi.
Carica il tuo Skill personalizzato per renderlo disponibile nel tuo workspace. Puoi caricare un archivio zip o singoli oggetti file; l'SDK Python fornisce inoltre un helper files_from_dir che accetta un percorso di directory.
Requisiti:
name: massimo 64 caratteri, solo lettere minuscole/numeri/trattini, nessun tag XML, nessuna parola riservata ("anthropic", "claude")description: massimo 1024 caratteri, non vuoto, nessun tag XMLPer gli schemi completi di richiesta/risposta, consulta il riferimento API Create Skill.
Recupera tutti gli Skill disponibili nel tuo workspace, inclusi sia gli Skill predefiniti di Anthropic che i tuoi Skill personalizzati. Usa il parametro source per filtrare per tipo di Skill:
Consulta il riferimento API List Skills per le opzioni di paginazione e filtro.
Ottieni i dettagli su uno Skill specifico:
Per eliminare uno Skill, devi prima eliminare tutte le sue versioni:
Il tentativo di eliminare uno Skill con versioni esistenti restituisce un errore 400.
Gli Skill supportano il versionamento per gestire gli aggiornamenti in modo sicuro:
Skill Anthropic:
20251013Skill personalizzati:
1759178010641129"latest" per ottenere sempre la versione più recenteConsulta il riferimento API Create Skill Version per i dettagli completi.
Quando specifichi gli Skill in un container:
/skills/{directory}/L'architettura di "progressive disclosure" (divulgazione progressiva) garantisce un utilizzo efficiente del contesto: Claude carica le istruzioni complete dello Skill solo quando necessario.
Brand e comunicazione
Gestione dei progetti
Operazioni aziendali
Creazione di contenuti
Analisi dei dati
Sviluppo e automazione
Combina gli Skill Excel e di analisi DCF personalizzata:
name: massimo 64 caratteri, solo lettere minuscole/numeri/trattini, nessun tag XML, nessuna parola riservata ("anthropic", "claude")description: massimo 1024 caratteri, non vuoto, nessun tag XMLGli Skill vengono eseguiti nel container di esecuzione del codice con queste limitazioni:
Consulta Strumento di esecuzione del codice per i pacchetti disponibili.
Combina gli Skill quando le attività coinvolgono più tipi di documenti o domini:
Casi d'uso appropriati:
Da evitare:
Per la produzione:
# Fissa a versioni specifiche per garantire stabilità
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129", # Specific version
}
]
}Per lo sviluppo:
# Usa latest per lo sviluppo attivo
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest", # Always get newest
}
]
}Quando utilizzi la cache dei prompt, tieni presente che modificare l'elenco degli Skill nel tuo container invalida la cache:
Per ottenere le migliori prestazioni di caching, mantieni coerente l'elenco degli Skill tra le richieste.
Gestisci gli errori relativi agli Skill in modo appropriato:
Gli Agent Skills non sono coperti dagli accordi ZDR. Le definizioni degli Skill e i dati di esecuzione vengono conservati secondo la politica standard di conservazione dei dati di Anthropic.
Per l'idoneità ZDR su tutte le funzionalità, consulta API e conservazione dei dati.
| Predefiniti e mantenuti da Anthropic |
| Carica e gestisci tramite la Skills API |
| Disponibilità | Disponibili per tutti gli utenti | Privati al tuo workspace |
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "pptx", "version": "latest"}]
},
messages=[
{"role": "user", "content": "Create a presentation about renewable energy"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)client = anthropic.Anthropic()
# Passo 1: Usa una Skill per creare un file
response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[
{
"role": "user",
"content": "Create an Excel file with a simple budget spreadsheet",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Passo 2: Estrai gli ID dei file dalla risposta
def extract_file_ids(response):
file_ids = []
for item in response.content:
if item.type == "bash_code_execution_tool_result":
content_item = item.content
if content_item.type == "bash_code_execution_result":
# lista con tipo concreto: List[BashCodeExecutionOutputBlock]
for file in content_item.content:
file_ids.append(file.file_id)
return file_ids
# Passo 3: Scarica il file usando la Files API
for file_id in extract_file_ids(response):
file_metadata = client.beta.files.retrieve_metadata(file_id=file_id)
file_content = client.beta.files.download(file_id=file_id)
# Passo 4: Salva su disco
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")client = anthropic.Anthropic()
file_id = "file_abc123"
# Ottieni i metadati del file
file_info = client.beta.files.retrieve_metadata(file_id=file_id)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")
# Elenca tutti i file
files = client.beta.files.list()
for file in files.data:
print(f"{file.filename} - {file.created_at}")
# Elimina un file
client.beta.files.delete(file_id=file_id)# La prima richiesta crea il container
response1 = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[{"role": "user", "content": "Analyze this sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Continua la conversazione con lo stesso container
messages = [
{"role": "user", "content": "Analyze this sales data"},
{"role": "assistant", "content": response1.content},
{"role": "user", "content": "What was the total revenue?"},
]
response2 = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response1.container.id, # Reuse container
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)messages = [{"role": "user", "content": "Process this large dataset"}]
max_retries = 10
response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Gestisci pause_turn per operazioni lunghe
for i in range(max_retries):
if response.stop_reason != "pause_turn":
break
messages.append({"role": "assistant", "content": response.content})
response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response.container.id,
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "anthropic", "skill_id": "pptx", "version": "latest"},
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
},
]
},
messages=[
{"role": "user", "content": "Analyze sales data and create a presentation"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)# Opzione 1: Carica file individuali (un flag --file per ogni file)
ant beta:skills create \
--display-title "Financial Analysis" \
--file financial_skill/SKILL.md \
--file financial_skill/analyze.py \
--beta skills-2025-10-02
# Opzione 2: Carica un archivio zip
ant beta:skills create \
--display-title "Financial Analysis" \
--file financial_analysis_skill.zip \
--beta skills-2025-10-02# Elenca tutte le Skill
ant beta:skills list
# Elenca solo le Skill personalizzate
ant beta:skills list --source customant beta:skills retrieve \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv# Passaggio 1: Elimina tutte le versioni
ant beta:skills:versions list \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--transform version --raw-output \
| while read -r VERSION; do
ant beta:skills:versions delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--version "$VERSION" >/dev/null
done
# Passaggio 2: Elimina la Skill
ant beta:skills delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/null# Crea una nuova versione
VERSION_NUMBER=$(ant beta:skills:versions create \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--file updated_skill/SKILL.md \
--transform version --raw-output)
# Usa una versione specifica
ant beta:messages create \
--beta code-execution-2025-08-25 \
--beta skills-2025-10-02 <<YAML
model: claude-opus-4-8
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: $VERSION_NUMBER
messages:
- role: user
content: Use updated Skill
tools:
- type: code_execution_20250825
name: code_execution
YAML
# Usa la versione più recente
ant beta:messages create \
--beta code-execution-2025-08-25 \
--beta skills-2025-10-02 <<'YAML'
model: claude-opus-4-8
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: latest
messages:
- role: user
content: Use latest Skill version
tools:
- type: code_execution_20250825
name: code_execution
YAML# Crea una Skill personalizzata per l'analisi DCF
from anthropic.lib import files_from_dir
dcf_skill = client.beta.skills.create(
display_title="DCF Analysis",
files=files_from_dir("/path/to/dcf_skill"),
)
# Usa con Excel per creare un modello finanziario
response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "custom", "skill_id": dcf_skill.id, "version": "latest"},
]
},
messages=[
{
"role": "user",
"content": "Build a DCF valuation model for a SaaS company with the attached financials",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)# La prima richiesta crea la cache
response1 = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
"prompt-caching-2024-07-31",
],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[{"role": "user", "content": "Analyze sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Aggiungere/rimuovere Skill invalida la cache
response2 = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
"prompt-caching-2024-07-31",
],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{
"type": "anthropic",
"skill_id": "pptx",
"version": "latest",
}, # Cache miss
]
},
messages=[{"role": "user", "content": "Create a presentation"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)client = anthropic.Anthropic()
try:
response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=[{"role": "user", "content": "Process data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
except anthropic.BadRequestError as e:
if "skill" in str(e):
print(f"Skill error: {e}")
# Gestisci gli errori specifici della skill
else:
raise