• Messaggi
  • Agenti gestiti
  • Amministrazione

Search...
⌘K
Primi passi
Introduzione a ClaudeGuida rapida
Sviluppare con Claude
Panoramica delle funzionalitàUtilizzo dell'API MessagesMotivi di interruzione e fallbackRifiuti e fallbackCredito di fallback
Capacità del modello
Pensiero estesoPensiero adattivoSforzoBudget delle attività (beta)Modalità veloce (anteprima di ricerca)Output strutturatiCitazioniStreaming dei messaggiElaborazione batchRisultati di ricercaStreaming dei rifiutiSupporto multilingueEmbedding
Strumenti
PanoramicaCome funziona l'uso degli strumentiTutorial: Creare un agente che usa strumentiDefinire gli strumentiGestire le chiamate agli strumentiUso degli strumenti in paralleloTool Runner (SDK)Uso degli strumenti rigorosoUso degli strumenti con cache dei promptStrumenti serverRisoluzione dei problemiStrumento di ricerca webStrumento di recupero webStrumento di esecuzione del codiceStrumento consulenteStrumento di memoriaStrumento BashStrumento di uso del computerStrumento editor di testo
Infrastruttura degli strumenti
Riferimento degli strumentiGestire il contesto degli strumentiCombinazioni di strumentiRicerca di strumentiChiamata programmatica degli strumentiStreaming granulare degli strumenti
Gestione del contesto
Finestre di contestoCompattazioneModifica del contestoCache dei promptMessaggi di sistema a metà conversazioneCreare una modalità di orchestrazioneDiagnostica della cache (beta)Conteggio dei token
Lavorare con i file
API FilesSupporto PDFImmagini e visione
Skill
PanoramicaGuida rapidaBest practiceSkill per le aziendeSkill nell'API
MCP
Server MCP remotiConnettore MCP
Claude su piattaforme cloud
Amazon BedrockAmazon Bedrock (legacy)Claude Platform su AWSMicrosoft FoundryVertex AI

Log in
Skill nell'API
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Messaggi/Skill

Utilizzo degli Agent Skills con l'API

Scopri come utilizzare gli Agent Skills per estendere le capacità di Claude attraverso l'API.

Was this page helpful?

  • Link rapidi
  • Panoramica
  • Utilizzo degli Skill
  • Prerequisiti
  • Utilizzo degli Skill nei Messaggi
  • Parametro container
  • Download dei file generati
  • Conversazioni multi-turno
  • Operazioni di lunga durata
  • Utilizzo di più Skill
  • Gestione degli Skill personalizzati
  • Creazione di uno Skill
  • Elenco degli Skill
  • Recupero di uno Skill
  • Eliminazione di uno Skill
  • Versionamento
  • Come vengono caricati gli Skill
  • Casi d'uso
  • Skill organizzativi
  • Skill personali
  • Esempio: modellazione finanziaria
  • Limiti e vincoli
  • Limiti delle richieste
  • Vincoli dell'ambiente
  • Best practice
  • Quando utilizzare più Skill
  • Strategia di gestione delle versioni
  • Considerazioni sulla cache dei prompt
  • Gestione degli errori
  • Conservazione dei dati
  • Passaggi successivi

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:

  • Riferimento API per la gestione degli Skill - Operazioni CRUD per gli Skill
  • Riferimento API per le versioni degli Skill - Gestione delle versioni


Questa funzionalità non è idonea per Zero Data Retention (ZDR). I dati vengono conservati secondo la politica di conservazione standard della funzionalità.

Link rapidi

Inizia con gli Agent Skills

Crea il tuo primo Skill

Crea Skill personalizzati

Best practice per la creazione di Skill

Panoramica



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.

Utilizzo degli Skill

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:

AspettoSkill AnthropicSkill personalizzati
Valore typeanthropiccustom
ID SkillNomi brevi: pptx, xlsx, docx, pdfGenerati: skill_01AbCdEfGhIjKlMnOpQrStUv
Formato versioneBasato su data: 20251013 o latestTimestamp 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.

Prerequisiti

Per utilizzare gli Skill, hai bisogno di:

  1. Chiave API di Claude dalla Console
  2. Header beta:
    • code-execution-2025-08-25 - Abilita l'esecuzione del codice (richiesto per gli Skill)
    • skills-2025-10-02 - Abilita la Skills API
    • files-api-2025-04-14 - Per caricare/scaricare file da/verso il container
  3. Strumento di esecuzione del codice abilitato nelle tue richieste

Utilizzo degli Skill nei Messaggi

Parametro container

Gli 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:

Download dei file generati

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:

  1. Gli Skill creano file durante l'esecuzione del codice
  2. La risposta include file_id per ogni file creato
  3. Usa la Files API per scaricare il contenuto effettivo del file
  4. Salva localmente o elabora secondo necessità

Esempio: 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.

Conversazioni multi-turno

Riutilizza lo stesso container su più messaggi specificando l'ID del container:

Operazioni di lunga durata

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.

Utilizzo di più Skill

Combina più Skill in una singola richiesta per gestire flussi di lavoro complessi:


Gestione degli Skill personalizzati

Creazione di uno Skill

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:

  • Deve includere un file SKILL.md al livello superiore
  • Tutti i file devono specificare una directory radice comune nei loro percorsi
  • La dimensione totale del caricamento deve essere inferiore a 30 MB
  • Requisiti del frontmatter YAML:
    • 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 XML

Per gli schemi completi di richiesta/risposta, consulta il riferimento API Create Skill.

Elenco degli 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.

Recupero di uno Skill

Ottieni i dettagli su uno Skill specifico:

Eliminazione di uno Skill

Per eliminare uno Skill, devi prima eliminare tutte le sue versioni:

Il tentativo di eliminare uno Skill con versioni esistenti restituisce un errore 400.

Versionamento

Gli Skill supportano il versionamento per gestire gli aggiornamenti in modo sicuro:

Skill Anthropic:

  • Le versioni utilizzano il formato data: 20251013
  • Nuove versioni rilasciate man mano che vengono apportati aggiornamenti
  • Specifica versioni esatte per garantire stabilità

Skill personalizzati:

  • Timestamp epoch generati automaticamente: 1759178010641129
  • Usa "latest" per ottenere sempre la versione più recente
  • Crea nuove versioni quando aggiorni i file dello Skill

Consulta il riferimento API Create Skill Version per i dettagli completi.


Come vengono caricati gli Skill

Quando specifichi gli Skill in un container:

  1. Scoperta dei metadati: Claude vede i metadati per ogni Skill (nome, descrizione) nel prompt di sistema
  2. Caricamento dei file: i file dello Skill vengono copiati nel container in /skills/{directory}/
  3. Utilizzo automatico: Claude carica e utilizza automaticamente gli Skill quando sono rilevanti per la tua richiesta
  4. Composizione: più Skill si compongono insieme per flussi di lavoro complessi

L'architettura di "progressive disclosure" (divulgazione progressiva) garantisce un utilizzo efficiente del contesto: Claude carica le istruzioni complete dello Skill solo quando necessario.


Casi d'uso

Skill organizzativi

Brand e comunicazione

  • Applica formattazione specifica dell'azienda (colori, font, layout) ai documenti
  • Genera comunicazioni seguendo i template organizzativi
  • Garantisci linee guida del brand coerenti in tutti gli output

Gestione dei progetti

  • Struttura le note con formati specifici dell'azienda (OKR, registri delle decisioni)
  • Genera attività seguendo le convenzioni del team
  • Crea riepiloghi standardizzati delle riunioni e aggiornamenti di stato

Operazioni aziendali

  • Crea report, proposte e analisi standard dell'azienda
  • Esegui procedure analitiche specifiche dell'azienda
  • Genera modelli finanziari seguendo i template organizzativi

Skill personali

Creazione di contenuti

  • Template di documenti personalizzati
  • Formattazione e stile specializzati
  • Generazione di contenuti specifici per dominio

Analisi dei dati

  • Pipeline di elaborazione dati personalizzate
  • Template di visualizzazione specializzati
  • Metodi analitici specifici per settore

Sviluppo e automazione

  • Template di generazione del codice
  • Framework di testing
  • Flussi di lavoro di deployment

Esempio: modellazione finanziaria

Combina gli Skill Excel e di analisi DCF personalizzata:


Limiti e vincoli

Limiti delle richieste

  • Numero massimo di Skill per richiesta: 8
  • Dimensione massima di caricamento dello Skill: 30 MB (tutti i file combinati)
  • Requisiti del frontmatter YAML:
    • 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 XML

Vincoli dell'ambiente

Gli Skill vengono eseguiti nel container di esecuzione del codice con queste limitazioni:

  • Nessun accesso alla rete: non è possibile effettuare chiamate API esterne
  • Nessuna installazione di pacchetti a runtime: sono disponibili solo i pacchetti preinstallati
  • Ambiente isolato: i container sono isolati; viene creato un nuovo container a meno che non specifichi un ID container esistente

Consulta Strumento di esecuzione del codice per i pacchetti disponibili.


Best practice

Quando utilizzare più Skill

Combina gli Skill quando le attività coinvolgono più tipi di documenti o domini:

Casi d'uso appropriati:

  • Analisi dei dati (Excel) + creazione di presentazioni (PowerPoint)
  • Generazione di report (Word) + esportazione in PDF
  • Logica di dominio personalizzata + generazione di documenti

Da evitare:

  • Includere Skill inutilizzati (influisce sulle prestazioni)

Strategia di gestione delle versioni

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
        }
    ]
}

Considerazioni sulla cache dei prompt

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.

Gestione degli errori

Gestisci gli errori relativi agli Skill in modo appropriato:


Conservazione dei dati

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.

Passaggi successivi


Riferimento API

Riferimento API completo con tutti gli endpoint


Guida alla creazione

Best practice per scrivere Skill efficaci

Strumento di esecuzione del codice

Scopri l'ambiente di esecuzione del codice

Gestione
Predefiniti e mantenuti da Anthropic
Carica e gestisci tramite la Skills API
DisponibilitàDisponibili per tutti gli utentiPrivati 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 custom
ant 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