MANUALE COMPLETO – UTILIZZO E CREAZIONE DELLE SKILL

Versione 1.0 — 15 aprile 2026 — Autore: Luca Borio

Indice

  1. Scopo del documento e destinatari
  2. Cos’è una Skill
  3. Quando usare una Skill e quando NO
  4. Struttura ufficiale di una Skill
  5. Il file SKILL.md: YAML frontmatter e corpo Markdown
  6. Campi del frontmatter: guida completa
  7. user-invocable: true – significato e uso
  8. Cartelle opzionali e cosa inserirci
  9. Come funziona il progressive disclosure
  10. Skill vs Prompt vs MCP: confronto pratico
  11. Esempi completi
  12. Checklist qualità prima di distribuire una Skill
  13. Errori comuni da evitare
  14. Appendice A1: Standard e vincoli tecnici
  15. Appendice A2: Note di compatibilità e portabilità
  16. Appendice A3: Suggerimenti per test e manutenzione
  17. Appendice A4: Glossario
  18. Riferimenti ufficiali

1. Scopo del documento e destinatari

1.1 Scopo

Questo manuale fornisce una guida completa e operativa per comprendere, creare, distribuire e manutenere le Agent Skills (di seguito “Skill”). Il documento copre sia gli aspetti concettuali sia quelli tecnici, con esempi concreti e indicazioni pratiche pronte all’uso.

1.2 Destinatari

  • Product owner e project manager che devono decidere quando creare una Skill
  • Sviluppatori e tecnici che devono implementare, testare e distribuire le Skill
  • Power user che utilizzano assistenti AI (GitHub Copilot, Claude Code, Cursor, ecc.) e vogliono personalizzarne il comportamento
  • Responsabili IT che devono valutare compatibilità, sicurezza e manutenzione

1.3 Prerequisiti

Per seguire gli esempi di questo manuale è utile avere una conoscenza di base di:

  • Formato YAML (struttura chiave-valore con indentazione)
  • Markdown (formattazione testo con simboli come #, *, ecc.)
  • Struttura a cartelle di un filesystem

Non è richiesta esperienza di programmazione, anche se l’appendice tecnica approfondisce aspetti utili per i profili sviluppatore.


2. Cos’è una Skill

2.1 Definizione

Una Skill è un pacchetto di istruzioni, risorse e (opzionalmente) script che permette a un assistente AI di svolgere un compito specifico in modo affidabile e ripetibile. Tecnicamente, è una cartella contenente almeno un file SKILL.md che descrive cosa fa la Skill, quando usarla e come.

2.2 Analogia pratica

Immagina di dover spiegare a un nuovo collega come redigere un report trimestrale. Potresti:

  1. Dargli istruzioni a voce ogni volta (lento, soggetto a errori)
  2. Scrivere una procedura operativa su un documento Word (meglio, ma va cercata ogni volta)
  3. Creare una Skill che l’assistente AI carica automaticamente quando serve (ottimale)

La Skill è l’equivalente digitale di una procedura operativa standardizzata, ma progettata per essere letta e seguita da un agente AI.

2.3 Perché servono le Skill

  • Ripetibilità: le stesse istruzioni vengono seguite ogni volta, riducendo errori e variabilità
  • Efficienza: grazie al progressive disclosure, le Skill consumano risorse (token) solo quando servono
  • Portabilità: lo standard aperto Agent Skills funziona su più piattaforme (GitHub Copilot, Claude Code, Cursor, Gemini CLI, Codex CLI)
  • Manutenibilità: aggiornare una Skill aggiorna il comportamento dell’AI per tutti gli utenti che la usano
  • Modularità: ogni Skill è indipendente e può essere aggiunta, rimossa o sostituita senza impattare le altre

2.4 Dove vengono usate

Le Skill sono supportate nativamente dai principali assistenti AI per sviluppatori e knowledge worker:

PiattaformaSupporto Skill
GitHub Copilot (Cloud, CLI, VS Code)Completo
Claude Code (Anthropic)Completo + estensioni proprietarie
CursorBase (cartella .cursor/skills/)
Gemini CLIBase (cartella .gemini/skills/)
Codex CLIBase (cartella .codex/skills/)
Microsoft Agent FrameworkCompleto (SDK C#/Python)

(vedi Riferimenti ufficiali – Microsoft e Anthropic per la documentazione di ciascuna piattaforma)


3. Quando usare una Skill e quando NO

3.1 Criteri per creare una Skill

Crea una Skill quando:

  • Hai una procedura che si ripete frequentemente (es. generare report, validare dati, fare code review)
  • Le istruzioni sono complesse (più di 10 righe) e richiedono passi precisi
  • Vuoi che il comportamento sia identico ogni volta, indipendentemente da chi usa l’assistente
  • Hai bisogno di allegare risorse (template, script, documentazione di riferimento)
  • Vuoi condividere una procedura standardizzata con il team o l’intera organizzazione

3.2 Quando NON serve una Skill

Non creare una Skill quando:

  • L’istruzione è breve e generica (es. “usa sempre il tono formale”) → usa CLAUDE.md o le impostazioni del progetto
  • Hai bisogno di accedere a un’API esterna o a un servizio web → usa un server MCP
  • La procedura è unica e non verrà mai ripetuta → dai le istruzioni direttamente nella chat
  • Stai definendo regole globali del progetto (stile codice, comandi di build) → usa AGENTS.md o CLAUDE.md

3.3 Tabella decisionale

ScenarioStrumento consigliatoMotivazione
Regole di stile sempre attiveCLAUDE.md / AGENTS.mdContesto permanente, sempre in memoria
Procedura complessa ripetibileSkill (SKILL.md)Caricata on-demand, con risorse allegate
Accesso ad API/servizi esterniServer MCPIntegrazione tool con protocollo standard
Istruzione una tantumMessaggio diretto in chatNessuna infrastruttura necessaria
Template + istruzioni + scriptSkill (SKILL.md)Tutto il necessario in un unico pacchetto

4. Struttura ufficiale di una Skill

4.1 Struttura a cartelle

Ogni Skill è una cartella il cui nome deve corrispondere al campo name nel frontmatter YAML. La struttura minima e quella completa sono:

Struttura minima

nome-skill/
├── SKILL.md          # Obbligatorio: metadati + istruzioni

Struttura completa

nome-skill/
├── SKILL.md          # Obbligatorio: metadati + istruzioni
├── scripts/           # Opzionale: codice eseguibile
│   ├── validate.py
│   └── generate.sh
├── references/        # Opzionale: documentazione aggiuntiva
│   ├── REFERENCE.md
│   └── policy.json
└── assets/            # Opzionale: risorse statiche
    ├── template.xlsx
    └── logo.png

(vedi Riferimenti ufficiali – Microsoft per la specifica completa della struttura)

4.2 Convenzioni di naming

Il nome della cartella deve rispettare le seguenti regole, identiche a quelle del campo name nel frontmatter:

  • Solo lettere minuscole (a-z), numeri (0-9) e trattini (-)
  • Lunghezza massima: 64 caratteri
  • Non deve iniziare o terminare con un trattino
  • Non deve contenere trattini consecutivi (--)
  • Il nome della cartella deve corrispondere esattamente al campo name

Esempi validi e non validi

NomeValido?Motivo
expense-reportSolo minuscole e trattini
data-validator-v2Numeri consentiti
PDF-ProcessingNoLettere maiuscole non ammesse
-report-builderNoInizia con trattino
code--reviewNoTrattini consecutivi
report_generatorNoUnderscore non ammesso (usare trattino)

4.3 Dove posizionare le Skill

La posizione della cartella Skill dipende dalla piattaforma e dall’ambito (progetto o personale):

PiattaformaCartella progettoCartella personale
GitHub Copilot.github/skills/, .claude/skills/, .agents/skills/~/.copilot/skills/, ~/.claude/skills/
Claude Code.claude/skills/~/.claude/skills/
Codex CLI.codex/skills/~/.codex/skills/
Cursor.cursor/skills/Non documentata
Gemini CLI.gemini/skills/Non documentata

Nota: Per massima portabilità, posizionare le Skill nella cartella .claude/skills/ oppure .agents/skills/, riconosciute dalla maggior parte delle piattaforme.


5. Il file SKILL.md: YAML frontmatter e corpo Markdown

5.1 Formato generale

Il file SKILL.md ha due sezioni distinte:

  1. Frontmatter YAML: racchiuso tra due righe --- (tre trattini). Contiene i metadati strutturati della Skill.
  2. Corpo Markdown: tutto il testo dopo il secondo ---. Contiene le istruzioni operative, gli esempi e le spiegazioni.

Esempio di struttura base

---
name: expense-report
description: >
  Crea e valida le note spese secondo la policy aziendale.
  Usare quando si parla di rimborsi, spese o trasferte.
license: Apache-2.0
compatibility: Richiede python3
metadata:
  author: team-finance
  version: "1.0"
---

# Istruzioni per la creazione di note spese

## Passaggi
1. Raccogli i dati della spesa...
2. Verifica i limiti di policy...
3. Genera il documento...

5.2 Best practice per il corpo Markdown

  • Usa titoli Markdown (##, ###) per strutturare le istruzioni in sezioni chiare
  • Includi esempi concreti di input e output attesi
  • Documenta i casi limite e le eccezioni
  • Mantieni il file sotto 500 righe – sposta i contenuti di dettaglio nella cartella references/
  • Scrivi le istruzioni come se dovessi formare un collega nuovo: passi chiari, completi, senza ambiguità

Importante: Il limite di 500 righe per SKILL.md è raccomandato sia dallo standard aperto sia da Microsoft e Anthropic. Non esiste un limite ufficiale in byte, ma superare 500 righe degrada le prestazioni perché il contenuto occupa troppo contesto.


6. Campi del frontmatter: guida completa

Questa sezione descrive in dettaglio ciascun campo del frontmatter YAML secondo lo standard aperto Agent Skills (vedi Riferimenti ufficiali – Microsoft).

6.1 name (obbligatorio)

ProprietàValore
ObbligatorioSì (nello standard). In Claude Code: no, usa il nome della cartella come fallback
Lunghezza massima64 caratteri
Caratteri consentitiLettere minuscole (a-z), numeri (0-9), trattini (-)
RestrizioniNo trattino iniziale/finale; no trattini consecutivi (--)
Regola fondamentaleDeve corrispondere esattamente al nome della cartella

Il campo name serve come identificatore univoco della Skill. In Claude Code, diventa anche il comando di invocazione (/nome-skill).

6.2 description (obbligatorio)

ProprietàValore
ObbligatorioSì (nello standard). In Claude Code: raccomandato (fallback sul primo paragrafo del corpo)
Lunghezza massima (standard/Microsoft)1.024 caratteri
Lunghezza massima (Claude Code)1.536 caratteri (sommando description + when_to_use)
Consiglio praticoUsare il limite di 1.024 caratteri per massima portabilità

La description deve spiegare sia cosa fa la Skill sia quando usarla. Deve contenere parole chiave che aiutino l’agente AI a riconoscere quando la Skill è pertinente.

Esempio di buona descrizione

description: >
  Genera report trimestrali sulle vendite con grafici, tabelle
  e analisi comparativa anno su anno. Usare quando viene chiesto
  un report vendite, un consuntivo trimestrale o un riepilogo
  delle performance commerciali.

Esempio di descrizione insufficiente

description: Fa i report.

Una descrizione troppo corta impedisce all’AI di capire quando usare la Skill.

6.3 license (opzionale)

Specifica la licenza sotto cui la Skill viene distribuita. Può essere un identificatore SPDX (es. Apache-2.0, MIT) o un riferimento a un file LICENSE nella cartella della Skill.

license: MIT

6.4 compatibility (opzionale)

ProprietàValore
Lunghezza massima500 caratteri
ScopoDescrive requisiti ambientali: linguaggi, pacchetti, accesso a rete, sistema operativo
compatibility: >
  Richiede python3 con pandas installato.
  Necessita accesso alla rete per API interne.

6.5 metadata (opzionale)

Mappa chiave-valore arbitraria (chiavi e valori devono essere stringhe) per informazioni aggiuntive come autore, versione, tag, team di appartenenza.

metadata:
  author: team-operations
  version: "2.1"
  department: finance
  tags: report, vendite, trimestrale

6.6 allowed-tools (opzionale, sperimentale)

Elenco di tool (strumenti) che la Skill è pre-autorizzata a usare, senza richiedere conferma all’utente. Accetta una lista separata da spazi oppure un array YAML.

Importante: Questo campo è sperimentale: il supporto varia tra le piattaforme. Non limita i tool disponibili, ma pre-approva quelli elencati. (vedi Riferimenti ufficiali – Microsoft)

# Formato stringa (separata da spazi)
allowed-tools: Read Write Bash

# Formato array YAML
allowed-tools:
  - Read
  - Write
  - Bash

6.7 Riepilogo dei limiti ufficiali

CampoStandard apertoMicrosoftClaude CodeConsiglio portabilità
nameMax 64 car., a-z 0-9 –Max 64 car.Max 64 car. (opzionale)Usare max 64 car., sempre minuscolo
descriptionMax 1.024 car.Max 1.024 car.Troncata a 1.536 car. (con when_to_use)Usare max 1.024 car.
compatibilityMax 500 car.Max 500 car.Max 500 car.Usare max 500 car.
SKILL.mdSotto 500 righeSotto 500 righeSotto 500 righeUsare max 500 righe
Dimensione fileNon specificataNon specificataNon specificataMantenersi sotto 500 righe

Nota: Quando i limiti differiscono tra piattaforme, usare sempre il limite più restrittivo per garantire portabilità. In pratica: max 64 caratteri per name, max 1.024 caratteri per description, max 500 righe per SKILL.md.


7. user-invocable: true – significato e uso

7.1 Cos’è user-invocable

Il campo user-invocable è un’estensione proprietaria di Claude Code che controlla se una Skill appare nel menu dei comandi / (slash commands) dell’utente.

ValoreL’utente può invocarla?L’AI la invoca da sola?Visibile nel menu /?
true (default)
falseNoNo
(campo assente)

7.2 Quando usare user-invocable: false

Imposta user-invocable: false quando la Skill contiene conoscenza di background che l’AI deve usare autonomamente, senza che l’utente debba (o possa) invocarla manualmente. Esempi tipici:

  • Policy aziendali che l’AI deve applicare automaticamente quando rileva il contesto giusto
  • Regole di validazione che devono essere applicate ogni volta che si modifica un certo tipo di file
  • Istruzioni di sicurezza che devono essere sempre attive in certi contesti

7.3 Quando usare user-invocable: true (o lasciare il default)

Lascia il valore predefinito (true, o non specificare il campo) quando:

  • La Skill è una procedura che l’utente vuole avviare consapevolmente (es. /genera-report)
  • La Skill ha bisogno di input dell’utente per funzionare
  • Vuoi che la Skill sia visibile e scopribile nel menu dei comandi

7.4 Interazione con disable-model-invocation

Claude Code offre anche il campo disable-model-invocation che funziona come “opposto” parziale:

CombinazioneUtente invocaAI invocaCaso d’uso
(default)Skill standard
user-invocable: falseNoConoscenza di background per l’AI
disable-model-invocation: trueNoSolo su richiesta esplicita dell’utente

7.5 Compatibilità tra piattaforme

Importante: Il campo user-invocable NON fa parte dello standard aperto Agent Skills (agentskills.io). È un’estensione specifica di Claude Code. Altre piattaforme (GitHub Copilot, Cursor, Gemini CLI) lo ignoreranno silenziosamente. Il concetto esiste anche in VS Code agent mode per i file .agent.md, ma con implementazione diversa. (vedi Riferimenti ufficiali – Anthropic)

Se includi user-invocable nel frontmatter per Claude Code, non causerai errori sulle altre piattaforme: il campo verrà semplicemente ignorato. È quindi sicuro includerlo anche in Skill multi-piattaforma.


8. Cartelle opzionali e cosa inserirci

8.1 scripts/ – Codice eseguibile

La cartella scripts/ contiene codice che l’agente AI può eseguire durante l’uso della Skill. I formati supportati dipendono dalla piattaforma, ma le estensioni standard sono:

EstensioneLinguaggioNote
.pyPythonIl più comune; preferire script self-contained
.jsJavaScript/Node.jsPer manipolazione dati e generazione file
.shBashPer automazioni di sistema (Linux/macOS)
.ps1PowerShellPer ambienti Windows

Best practice per gli script

  • Ogni script deve essere autocontenuto (non dipendere da variabili d’ambiente non documentate)
  • Includere messaggi di errore chiari e leggibili
  • Documentare gli argomenti attesi (es. con commenti in testa al file)
  • Se lo script ha dipendenze, elencarle nel campo compatibility del frontmatter

Esempio di script Python

# scripts/validate_expense.py
"""Valida una nota spese secondo la policy aziendale."""
import sys, json

def validate(data):
    errors = []
    if data['amount'] > 500:
        errors.append("Importo sopra il limite: serve approvazione dirigente")
    if not data.get('receipt'):
        errors.append("Ricevuta mancante")
    return errors

if __name__ == "__main__":
    data = json.loads(sys.argv[1])
    errors = validate(data)
    if errors:
        for e in errors: print(f'ERRORE: {e}')
        sys.exit(1)
    print("Validazione superata")

8.2 references/ – Documentazione aggiuntiva

La cartella references/ contiene documentazione supplementare caricata on-demand dall’agente AI solo quando necessaria. Questo è il cuore del progressive disclosure: le informazioni dettagliate non vengono caricate all’inizio, ma solo quando servono.

Cosa mettere in references/

  • REFERENCE.md – documentazione estesa sulle procedure
  • File JSON/YAML con configurazioni o policy
  • Specifiche tecniche, diagrammi testuali, regole di business

Esempio

references/
├── REFERENCE.md       # Dettagli completi della procedura
├── policy.json        # Limiti di spesa per categoria
└── faq.md             # Domande frequenti e risposte

Nota: Mantenere ogni file in references/ focalizzato su un singolo argomento per minimizzare il consumo di contesto. Un file grande e generico vanifica il vantaggio del progressive disclosure.

8.3 assets/ – Risorse statiche

La cartella assets/ contiene risorse statiche: template, immagini, file di dati, schemi. Questi file non vengono “letti” per il loro contenuto testuale ma usati come input o output di operazioni.

Cosa mettere in assets/

  • Template di documenti (Word, Excel, PowerPoint)
  • Immagini e loghi da inserire nei documenti generati
  • File di dati di esempio o di configurazione
  • Schemi JSON per la validazione

Esempio

assets/
├── template-report.xlsx     # Template Excel per report
├── logo-aziendale.png       # Logo da inserire nei documenti
└── schema-spese.json        # Schema di validazione JSON

9. Come funziona il progressive disclosure

9.1 Il problema del contesto limitato

Ogni assistente AI lavora con una “finestra di contesto” limitata: la quantità di testo che può tenere in memoria durante una conversazione. Caricare tutte le Skill disponibili all’inizio di ogni sessione consumerebbe rapidamente questa risorsa, lasciando poco spazio per la conversazione effettiva.

9.2 La soluzione: caricamento a stadi

Il progressive disclosure risolve il problema caricando le informazioni in quattro stadi successivi, ciascuno con un budget di token dedicato:

StadioBudget tokenCosa viene caricatoQuando
1. Advertise (Annuncio)~100 token per SkillSolo nome e descrizione di ogni SkillSempre, all’inizio di ogni sessione
2. Load (Caricamento)< 5.000 token (raccomandato)Contenuto completo di SKILL.mdQuando l’AI rileva che la Skill è pertinente
3. Read Resources (Risorse)Secondo necessitàFile dalla cartella references/Solo quando servono dettagli aggiuntivi
4. Run Scripts (Esecuzione)Secondo necessitàScript dalla cartella scripts/Solo quando serve eseguire codice

9.3 Esempio pratico

Supponiamo di avere 20 Skill installate. Ecco cosa succede:

  1. Inizio sessione: L’AI riceve la lista delle 20 Skill (20 × ~100 token = ~2.000 token). Sa cosa c’è a disposizione.
  2. L’utente chiede un report vendite: L’AI riconosce che la Skill “sales-report” è pertinente e carica il suo SKILL.md completo (~3.000 token aggiuntivi).
  3. L’AI ha bisogno del template: Legge il file assets/template-report.xlsx.
  4. L’AI genera il report: Esegue lo script scripts/generate_report.py.

Le altre 19 Skill hanno consumato solo ~1.900 token totali (le loro brevi descrizioni) e non hanno impattato sulla capacità dell’AI.

9.4 Motivazione architetturale

Il progressive disclosure è la ragione per cui le Skill hanno limiti precisi:

  • description max 1.024 caratteri: lo stadio Advertise deve restare sotto ~100 token per Skill
  • SKILL.md max 500 righe: lo stadio Load deve restare sotto ~5.000 token
  • references/ con file separati: lo stadio Read Resources carica solo ciò che serve

Violare questi limiti non causa errori ma degrada le prestazioni: più token consuma una Skill, meno spazio resta per le altre Skill e per la conversazione dell’utente. (vedi Riferimenti ufficiali – Microsoft)

9.5 Comportamento post-compattazione (Claude Code)

In Claude Code, quando la conversazione si avvicina al limite di contesto, avviene una compattazione automatica. Dopo la compattazione:

  • Viene ri-allegato il contenuto delle Skill invocate più di recente
  • Di ciascuna Skill vengono mantenuti i primi 5.000 token
  • Il budget combinato per tutte le Skill ri-allegate è di 25.000 token
  • Le Skill più vecchie possono essere eliminate se il budget si esaurisce

(vedi Riferimenti ufficiali – Anthropic)


10. Skill vs Prompt vs MCP: confronto pratico

10.1 Tabella comparativa

CaratteristicaPrompt / CLAUDE.mdSkill (SKILL.md)Server MCP
Tipo di contenutoRegole, preferenze, fattiProcedure, playbook, checklistIntegrazioni con tool/API esterni
Quando viene caricatoSempre (inizio sessione)On-demand (quando serve)Quando il server è connesso
Costo in contestoCostante (sempre in memoria)Quasi zero fino all’usoPer singola chiamata
Come si invocaPassivo (sempre presente)/nome-skill o auto-rilevamentoL’AI chiama il tool via tool_use
PortabilitàSpecifico per piattaformaCross-platform (standard aperto)Cross-platform (standard MCP)
Risorse allegateNoSì (scripts/, references/, assets/)Definite dal server
Quando usareRegole sempre attiveProcedure ripetibiliAccesso a dati/servizi esterni

10.2 Esempi pratici di scelta

Esempio A: Stile di comunicazione

Esigenza: “Tutte le email devono avere tono formale e firmate con il ruolo del mittente.”

Soluzione: CLAUDE.md / prompt di sistema. È una regola sempre attiva, non una procedura.

Esempio B: Generazione report trimestrale

Esigenza: “Ogni trimestre devo generare un report vendite con template standard, dati dal CRM e grafici comparativi.”

Soluzione: Skill. Contiene le istruzioni passo-passo, il template in assets/ e lo script di generazione in scripts/.

Esempio C: Accesso ai dati CRM

Esigenza: “L’AI deve poter leggere i dati aggiornati dal nostro CRM Salesforce.”

Soluzione: Server MCP. L’accesso ad API esterne richiede un’integrazione tool, non semplici istruzioni.

Esempio D: Procedura di code review

Esigenza: “Ogni code review deve seguire la nostra checklist di 30 punti con riferimento alla guida di stile interna.”

Soluzione: Skill. La checklist va nel corpo di SKILL.md, la guida di stile completa in references/.


11. Esempi completi

Di seguito tre esempi completi di Skill, dalla struttura cartelle al file SKILL.md fino alle indicazioni di invocazione.

11.1 Esempio 1: report-vendite (Skill semplice)

Struttura cartelle

report-vendite/
└── SKILL.md

File SKILL.md completo

---
name: report-vendite
description: >
  Genera un report di vendite mensile in formato tabellare con totali
  e variazioni percentuali rispetto al mese precedente. Usare quando
  viene chiesto un "report vendite", "riepilogo mensile vendite"
  o "consuntivo commerciale".
license: MIT
metadata:
  author: team-sales
  version: "1.0"
---

# Report Vendite Mensile

## Obiettivo
Generare un report vendite mensile strutturato e leggibile.

## Dati richiesti
- Periodo di riferimento (mese/anno)
- Dati vendite per prodotto o area geografica
- Dati del mese precedente per il calcolo delle variazioni

## Struttura del report
1. **Intestazione**: titolo, periodo, data generazione
2. **Tabella principale**: prodotto, vendite mese corrente,
   vendite mese precedente, variazione %
3. **Riga totali**: somma vendite e variazione % complessiva
4. **Note**: eventuali anomalie o commenti

## Regole di calcolo
- Variazione % = ((corrente - precedente) / precedente) * 100
- Arrotondare a 1 decimale
- Evidenziare variazioni negative con nota esplicativa

## Formato output
- Tabella Markdown per visualizzazione in chat
- Se richiesto file, generare come foglio Excel (.xlsx)

Invocazione

  • Manuale: l’utente digita /report-vendite nella chat
  • Automatica: l’AI riconosce frasi come “fammi il report vendite di marzo” e carica la Skill

11.2 Esempio 2: data-validator (Skill con script)

Struttura cartelle

data-validator/
├── SKILL.md
├── scripts/
│   └── validate.py
└── references/
    └── validation-rules.md

File SKILL.md completo

---
name: data-validator
description: >
  Valida file CSV e JSON secondo regole di business configurabili.
  Segnala errori con riga/colonna, tipo e suggerimento di correzione.
  Usare quando l'utente carica dati da validare o chiede un controllo
  qualità sui dati.
compatibility: Richiede python3 con pandas
allowed-tools: Bash Read
metadata:
  author: team-data
  version: "2.0"
---

# Validazione Dati

## Quando usare questa Skill
- L'utente carica un file CSV o JSON e chiede di verificarlo
- L'utente menziona "validazione", "controllo dati", "data quality"

## Procedura
1. Identificare il file da validare (chiedere se non chiaro)
2. Caricare le regole da references/validation-rules.md
3. Eseguire: python scripts/validate.py <file>
4. Presentare i risultati in formato tabellare:
   - Riga | Colonna | Errore | Suggerimento
5. Proporre correzioni automatiche se possibile

## Regole base (sempre applicate)
- Nessun campo obbligatorio vuoto
- Formati data coerenti (ISO 8601)
- Valori numerici entro i range definiti
- Nessun duplicato nelle colonne chiave

## Regole avanzate
Vedere references/validation-rules.md per le regole specifiche
per dominio.

File scripts/validate.py (estratto)

#!/usr/bin/env python3
"""Valida file CSV/JSON secondo le regole di business."""
import sys, csv, json

def validate_csv(filepath):
    errors = []
    with open(filepath) as f:
        reader = csv.DictReader(f)
        for i, row in enumerate(reader, start=2):
            for col, val in row.items():
                if val is None or val.strip() == '':
                    errors.append({
                        'row': i, 'col': col,
                        'error': 'Campo vuoto',
                        'fix': 'Compilare il campo obbligatorio'
                    })
    return errors

if __name__ == "__main__":
    filepath = sys.argv[1]
    errors = validate_csv(filepath)
    if errors:
        print(f'Trovati {len(errors)} errori:')
        for e in errors:
            print(f"  Riga {e['row']}, {e['col']}: {e['error']}")
        sys.exit(1)
    print('Validazione superata: nessun errore.')

File references/validation-rules.md (estratto)

# Regole di validazione per dominio

## Dati finanziari
- Importi: sempre positivi, max 2 decimali
- Valuta: deve essere un codice ISO 4217 valido
- Date: formato YYYY-MM-DD

## Dati anagrafici
- Email: formato valido (contiene @ e dominio)
- Codice fiscale: 16 caratteri alfanumerici
- Telefono: prefisso internazionale obbligatorio

Invocazione

  • Manuale: l’utente digita /data-validator e allega il file
  • Automatica: l’AI riconosce “valida questo CSV” e carica la Skill

11.3 Esempio 3: code-reviewer (Skill avanzata con references)

Struttura cartelle

code-reviewer/
├── SKILL.md
├── scripts/
│   └── lint-check.sh
├── references/
│   ├── style-guide.md
│   └── security-checklist.md
└── assets/
    └── review-template.md

File SKILL.md completo

---
name: code-reviewer
description: >
  Esegue code review strutturate seguendo la guida di stile aziendale
  e la checklist di sicurezza. Produce un report con severità,
  posizione nel codice e suggerimento di fix. Usare quando l'utente
  chiede una review, un controllo del codice o una verifica di
  sicurezza sul codice.
compatibility: Richiede bash e shellcheck per script .sh
allowed-tools: Read Grep Bash
metadata:
  author: team-engineering
  version: "3.1"
  scope: backend
---

# Code Review Strutturata

## Procedura di review

### Fase 1: Analisi preliminare
1. Leggere tutti i file modificati (usare Read)
2. Identificare il linguaggio e il contesto
3. Caricare la guida di stile: references/style-guide.md

### Fase 2: Controllo automatico
4. Eseguire scripts/lint-check.sh se sono presenti script
5. Annotare tutti i warning e gli errori

### Fase 3: Review manuale
6. Verificare ogni punto di references/security-checklist.md
7. Controllare leggibilità, naming, struttura del codice
8. Verificare che i test coprano i casi critici

### Fase 4: Report
9. Usare il template da assets/review-template.md
10. Classificare ogni finding:
    - **CRITICO**: blocca il merge
    - **IMPORTANTE**: da correggere, non blocca
    - **SUGGERIMENTO**: miglioramento opzionale
11. Per ogni finding indicare: file, riga, problema, fix

## Tono della review
- Costruttivo e professionale
- Spiegare il PERCHÉ, non solo il COSA
- Riconoscere le parti fatte bene

Invocazione

  • Manuale: l’utente digita /code-reviewer
  • Automatica: l’AI riconosce “fammi una review di questo codice” e carica la Skill
  • Differenza chiave: questa Skill sfrutta tutte e tre le cartelle opzionali (scripts/, references/, assets/), dimostrando il progressive disclosure in azione: le istruzioni in SKILL.md vengono caricate per prime, poi le references e gli assets solo quando serve.

12. Checklist qualità prima di distribuire una Skill

Prima di condividere una Skill con i colleghi, verificare tutti i punti seguenti:

#ControlloCriterio
1Nome validoSolo a-z, 0-9, trattini. Max 64 char. Corrisponde alla cartella.
2Descrizione efficaceSpiega cosa fa E quando usarla. Max 1.024 char.
3SKILL.md sotto 500 righeContenuti dettagliati spostati in references/.
4Frontmatter YAML validoNessun errore di sintassi. Testare con un parser YAML.
5Script funzionantiOgni script in scripts/ è stato testato manualmente.
6Dipendenze documentateSe servono tool/librerie, sono elencate in compatibility.
7Istruzioni chiareUn collega può capire la procedura senza spiegazioni aggiuntive.
8Esempi inclusiAlmeno un esempio di input/output nel corpo Markdown.
9Nessun dato sensibileNessuna password, token API, dato personale nel file.
10Percorsi relativiTutti i riferimenti a file usano percorsi relativi (references/file.md).
11Portabilità testataSe multi-piattaforma: solo campi standard nel frontmatter.
12Versione aggiornataIl campo metadata.version riflette la versione corrente.

13. Errori comuni da evitare

Di seguito i 12 errori più frequenti nella creazione e nell’uso delle Skill, con sintomo, conseguenza e correzione.

Errore 1: Nome con lettere maiuscole o underscore

AspettoDettaglio
SintomoLa Skill non viene riconosciuta o il validatore segnala errore
ConseguenzaLa Skill non appare nella lista dei comandi / non viene mai caricata
CorrezioneUsare solo lettere minuscole, numeri e trattini. Es: report-vendite, non Report_Vendite

Errore 2: Nome cartella diverso dal campo name

AspettoDettaglio
SintomoLa Skill viene ignorata silenziosamente
ConseguenzaL’AI non trova la Skill; nessun errore visibile
CorrezioneAssicurarsi che il nome della cartella sia identico al valore di name nel frontmatter

Errore 3: Descrizione troppo generica

AspettoDettaglio
SintomoL’AI non invoca la Skill quando dovrebbe
ConseguenzaLa Skill viene ignorata anche in contesti pertinenti
CorrezioneScrivere una descrizione che spiega cosa fa E quando usarla, con parole chiave specifiche

Errore 4: SKILL.md troppo lungo (oltre 500 righe)

AspettoDettaglio
SintomoL’AI rallenta, perde il filo della conversazione, risponde in modo impreciso
ConseguenzaConsumo eccessivo di token, possibile troncamento del contenuto della Skill
CorrezioneSpostare dettagli in references/, mantenere SKILL.md focalizzato sulle istruzioni essenziali

Errore 5: YAML frontmatter con errori di sintassi

AspettoDettaglio
SintomoLa Skill non viene caricata; possibile errore di parsing
ConseguenzaLa Skill è completamente non funzionante
CorrezioneVerificare la sintassi YAML: indentazione con spazi (non tab), valori stringa tra virgolette se contengono caratteri speciali

Errore 6: Percorsi assoluti invece di relativi

AspettoDettaglio
SintomoI file referenziati non vengono trovati su altre macchine o piattaforme
ConseguenzaLa Skill funziona solo sulla macchina dell’autore
CorrezioneUsare percorsi relativi dalla root della Skill: references/file.md, non /home/user/skills/mia-skill/references/file.md

Errore 7: Usare campi estensione credendoli standard

AspettoDettaglio
SintomoCampi come user-invocable o when_to_use non funzionano su GitHub Copilot o Cursor
ConseguenzaComportamento diverso da quello atteso su piattaforme diverse da Claude Code
CorrezioneSapere quali campi sono standard (name, description, license, compatibility, metadata, allowed-tools) e quali sono estensioni. Documentare le estensioni come “solo per Claude Code”

Errore 8: Script con dipendenze non documentate

AspettoDettaglio
SintomoLo script fallisce con errore “ModuleNotFoundError” o simile
ConseguenzaLa Skill non può completare la procedura
CorrezioneElencare tutte le dipendenze nel campo compatibility. Esempio: “Richiede python3 con pandas e openpyxl”

Errore 9: Dati sensibili nel repository della Skill

AspettoDettaglio
SintomoPassword, token API, dati personali visibili nel codice della Skill
ConseguenzaRischio di sicurezza grave; violazione potenziale delle normative sulla privacy
CorrezioneMai includere segreti nel file SKILL.md o negli script. Usare variabili d’ambiente o file di configurazione esterni non inclusi nella Skill

Errore 10: Nessun esempio nel corpo Markdown

AspettoDettaglio
SintomoL’AI interpreta le istruzioni in modo troppo libero o impreciso
ConseguenzaOutput non conforme alle aspettative, necessità di correzioni manuali
CorrezioneIncludere almeno un esempio concreto di input e output attesi nel corpo di SKILL.md

Errore 11: Confondere Skill e MCP

AspettoDettaglio
SintomoSi crea una Skill per accedere a un’API esterna, ma non funziona
ConseguenzaLa Skill non può effettuare chiamate di rete o accedere a servizi esterni
CorrezionePer integrazioni con API/servizi esterni, usare un server MCP. Le Skill contengono istruzioni e risorse locali, non connessioni a servizi

Errore 12: Non testare la Skill prima della distribuzione

AspettoDettaglio
SintomoI colleghi segnalano errori, comportamenti inattesi o istruzioni incomplete
ConseguenzaPerdita di tempo per tutto il team, sfiducia nello strumento
CorrezioneTestare sempre la Skill in un ambiente di sviluppo. Verificare: parsing YAML, invocazione manuale (/nome), invocazione automatica (frase naturale), esecuzione degli script

Appendice A1: Standard e vincoli tecnici

A1.1 Lo standard aperto Agent Skills

Lo standard Agent Skills è mantenuto su agentskills.io ed è nato dal repository open-source anthropics/skills. Definisce un formato portabile e basato su filesystem per impacchettare competenze di dominio in directory che gli assistenti AI possono scoprire e utilizzare.

A1.2 Riepilogo dei vincoli

VincoloValoreFonte
Lunghezza campo name1–64 caratteriStandard aperto (vedi Rif. uff. – Microsoft)
Set caratteri namea-z, 0-9, – (no inizio/fine trattino, no --)Standard aperto
Lunghezza description1–1.024 caratteriStandard aperto
Lunghezza compatibilityMax 500 caratteriStandard aperto
Righe SKILL.mdRaccomandato < 500 righeStandard aperto, Microsoft, Anthropic
Budget Advertise~100 token per SkillMicrosoft Agent Framework
Budget Load< 5.000 token raccomandatiMicrosoft Agent Framework
Budget post-compattazione (Claude Code)5.000 token/Skill, 25.000 totaliClaude Code docs (vedi Rif. uff. – Anthropic)
Profondità ricerca cartelle (MS)2 livelliMicrosoft Agent Framework

A1.3 Campi frontmatter: standard vs estensioni

CampoStandard apertoClaude Code
nameObbligatorioOpzionale (fallback su nome cartella)
descriptionObbligatorioRaccomandato (fallback su primo paragrafo)
licenseOpzionaleOpzionale
compatibilityOpzionaleOpzionale
metadataOpzionaleOpzionale
allowed-toolsOpzionale (sperimentale)Opzionale (stringa o lista YAML)
when_to_useNON presenteEstensione Claude Code
user-invocableNON presenteEstensione Claude Code
disable-model-invocationNON presenteEstensione Claude Code
contextNON presenteEstensione Claude Code
modelNON presenteEstensione Claude Code
effortNON presenteEstensione Claude Code
hooksNON presenteEstensione Claude Code
pathsNON presenteEstensione Claude Code
shellNON presenteEstensione Claude Code
argument-hintNON presenteEstensione Claude Code
agentNON presenteEstensione Claude Code

Appendice A2: Note di compatibilità e portabilità

A2.1 Cosa è portabile

I seguenti elementi funzionano su tutte le piattaforme che supportano lo standard Agent Skills:

  • Il formato SKILL.md (frontmatter YAML + corpo Markdown)
  • I sei campi standard: name, description, license, compatibility, metadata, allowed-tools
  • La struttura a cartelle (scripts/, references/, assets/)
  • Il pattern di progressive disclosure

A2.2 Cosa NON è portabile

I seguenti elementi sono specifici di Claude Code e vengono ignorati dalle altre piattaforme:

  • I campi estensione (when_to_use, user-invocable, disable-model-invocation, context, model, effort, hooks, paths, shell, argument-hint, agent)
  • Le variabili di sostituzione ($ARGUMENTS, ${CLAUDE_SESSION_ID}, ${CLAUDE_SKILL_DIR})
  • L’iniezione dinamica di contesto (sintassi !`comando`)

A2.3 Consiglio pratico per la portabilità

Se la Skill deve funzionare su più piattaforme:

  1. Usare solo i sei campi standard nel frontmatter
  2. Non usare variabili di sostituzione o iniezione di contesto nel corpo
  3. Usare il limite più restrittivo per ogni campo (64 char name, 1.024 char description, 500 righe SKILL.md)
  4. Testare su almeno due piattaforme diverse

Se la Skill è esclusivamente per Claude Code, è sicuro usare i campi estensione: le altre piattaforme li ignorano senza errori.

A2.4 Differenze chiave Microsoft vs Anthropic

AspettoMicrosoft / GitHub CopilotAnthropic / Claude Code
Campi name e descriptionObbligatoriOpzionali (con fallback)
Campi estensioneNon supportati (ignorati)11 campi aggiuntivi
Invocazione utenteAutomatica (descrizione)Via /nome-skill o automatica
Compattazione contestoNon documentata5.000 token/Skill, 25.000 totali
Ricerca cartelleFino a 2 livelliSolo livello diretto
Estensioni script.py, .js, .sh, .ps1, .cs, .csxQualsiasi eseguibile
Rilevamento modificheNon documentatoLive (senza restart)

Appendice A3: Suggerimenti per test e manutenzione

A3.1 Come testare una Skill

  1. Validazione YAML: copiare il frontmatter in un validatore YAML online o usare il comando skills-ref validate ./mia-skill se disponibile.
  2. Test di invocazione manuale: digitare /nome-skill nella chat dell’assistente AI e verificare che la Skill venga caricata correttamente.
  3. Test di invocazione automatica: scrivere una frase naturale che dovrebbe attivare la Skill (es. “fammi un report vendite”) e verificare che l’AI la carichi.
  4. Test degli script: eseguire ciascuno script manualmente da terminale con input di test, verificando output ed errori.
  5. Test cross-platform: se la Skill deve essere portabile, testarla su almeno due piattaforme diverse.

A3.2 Versionamento

  • Usare il campo metadata.version per tracciare le versioni della Skill
  • Adottare il versionamento semantico (MAJOR.MINOR): incrementare MAJOR per cambiamenti che rompono la compatibilità, MINOR per aggiunte e correzioni
  • Se si usa un sistema di controllo versione (Git), committare la cartella della Skill nel repository del progetto

A3.3 Manutenzione periodica

  • Rivedere le Skill ogni trimestre per verificare che le istruzioni siano ancora accurate
  • Aggiornare le dipendenze degli script quando cambiano le versioni dei linguaggi
  • Raccogliere feedback dagli utenti e aggiornare la descrizione se le parole chiave di attivazione non sono efficaci
  • Monitorare le dimensioni: se SKILL.md cresce oltre 400 righe, è il momento di spostare contenuti in references/

A3.4 Ciclo di vita di una Skill

FaseAttivitàOutput
1. AnalisiIdentificare l’esigenza e i criteri di successoRequisiti della Skill
2. SviluppoCreare SKILL.md, script, references, assetsSkill completa
3. TestValidazione, invocazione manuale e automaticaReport di test
4. DistribuzionePosizionare nella cartella correttaSkill disponibile
5. MonitoraggioRaccogliere feedback e metriche di utilizzoBacklog di miglioramenti
6. AggiornamentoCorreggere, migliorare, aggiornare versioneNuova release

Appendice A4: Glossario

TermineDefinizione
Agent SkillsStandard aperto per impacchettare competenze, istruzioni e risorse in cartelle che gli assistenti AI possono scoprire e usare. Definito su agentskills.io.
SKILL.mdIl file obbligatorio in ogni cartella Skill. Contiene frontmatter YAML (metadati) e corpo Markdown (istruzioni).
FrontmatterLa sezione iniziale di SKILL.md, racchiusa tra --- e ---. Contiene metadati strutturati in formato YAML (name, description, ecc.).
YAMLYet Another Markup Language. Formato di serializzazione dati basato su indentazione, usato per il frontmatter delle Skill.
MarkdownLinguaggio di markup leggero per la formattazione del testo. Usato per il corpo delle Skill dopo il frontmatter.
MCPModel Context Protocol. Standard aperto per l’integrazione di tool e servizi esterni con gli assistenti AI. Diverso dalle Skill (che sono istruzioni locali).
Progressive disclosurePattern architetturale che carica le informazioni in stadi successivi (annuncio, caricamento, risorse, script) per minimizzare il consumo di contesto.
TokenUnità di testo usata dai modelli AI. Un token corrisponde circa a ¾ di una parola in italiano.
ContestoLa “memoria di lavoro” dell’AI durante una sessione. Ha una dimensione limitata, misurata in token.
user-invocableCampo estensione di Claude Code che controlla se una Skill appare nel menu / dell’utente. Non fa parte dello standard aperto.
CLAUDE.mdFile di configurazione specifico di Claude Code. Contiene regole e preferenze sempre attive (a differenza delle Skill, caricate on-demand).
AGENTS.mdFile standard della Linux Foundation per le istruzioni a livello di progetto (build, stile codice, test). Complementare, non alternativo alle Skill.
CompattazioneProcesso automatico di Claude Code che riduce il contesto quando si avvicina al limite, ri-allegando solo le Skill più recenti.
Slash commandComando invocato dall’utente digitando / seguito dal nome (es. /report-vendite). In Claude Code corrisponde al campo name della Skill.

Riferimenti ufficiali

Microsoft

  1. Agent Skills – Microsoft Agent Framework
    https://learn.microsoft.com/en-us/agent-framework/agents/skills
  2. Azure Agent Skills
    https://learn.microsoft.com/en-us/training/support/agent-skills

Anthropic

  1. Extend Claude with Skills
    https://code.claude.com/docs/en/skills

GitHub

  1. About Agent Skills
    https://docs.github.com/en/copilot/concepts/agents/about-agent-skills
  2. Creating Agent Skills for GitHub Copilot
    https://docs.github.com/en/copilot/how-tos/use-copilot-agents/cloud-agent/create-skills

Nota: Tutti i link sopra puntano a domini ufficiali. Verificare periodicamente che siano ancora validi, poiché la documentazione delle Agent Skills è in evoluzione.


— Fine del documento —