Sistec · skill & marketplace di plugin · ciclo di vita
Cos'è una skill (un comportamento, non un comando), come nasce da un'esigenza
concreta in un progetto, come si crea e si valida con skill-creator, come capire se esiste già
un tool o una skill che fa quel lavoro, i criteri del marketplace, ed esempi reali — per lo sviluppo software
e non.
Questo documento è il §9 di Adozione Claude & Claude Code in
Sistec, sviluppato in un documento autonomo. Leggi prima l'index per il contesto:
ciclo agentico, contesto, prompt, CLAUDE.md, subagent. Qui si approfondisce solo il primo dei due
canali di condivisione — le skill via marketplace. L'altro canale, la conoscenza, vive nella
wiki-LLM. L'analisi delle skill già presenti nel marketplace Sistec è nel
documento complementare audit e criteri di integrazione.
Una skill non è un comando da terminale — non è git merge. È un
comportamento atteso. La sua description dichiara quando va usata, e Claude
la richiama da solo quando la situazione combacia. Non la invochi per nome: la descrivi bene e
lei si attiva al momento giusto. L'interfaccia con l'utente è il linguaggio naturale, non un
vocabolario di comandi da imparare.
---
name: commenti-codice
description: Come scrivere i commenti del codice in questo progetto.
Usare QUANDO Claude sta per scrivere o modificare codice sorgente. // <- il "quando" è la parte che conta
---
... corpo della skill: le istruzioni vere e proprie ...
«Una skill serve quando c'è una decisione da prendere — giudizio semantico che solo un LLM può dare — non un'istruzione meccanica da eseguire.»
Ogni skill è una cartella con un SKILL.md (l'entry point: trigger, invocabilità, istruzioni) più
eventuali file di supporto: script deterministici, checklist, template. Regola d'oro: self-contained
— tutto ciò che serve sta dentro la cartella, niente dipendenze implicite dall'esterno.
| Skill (comportamento) | Script / tool deterministico | |
|---|---|---|
| Natura | giudizio, interpretazione, dominio | procedura fissa, stesso output ogni volta |
| Quando | l'output dipende dal contesto | l'operazione è sempre identica |
| Esempio | «diagnostica perché il device non risponde» | build, copia file, deploy |
| Forma giusta | SKILL.md nel marketplace | bash, Python, GitHub Action |
Se la procedura che stai descrivendo si può scrivere in 30 righe di bash, non è una skill: è
uno script. Mettilo in scripts/ o in una GitHub Action. La skill non è un contenitore per rimediare
alla mancanza di tooling.
I comandi (gli slash-command scriptati) sono deprecati a favore delle skill.
Per i pochi casi che devono restare a scatenamento esplicito (li invoca solo l'umano, mai il modello) si usa
una skill con disable-model-invocation: true.
Una skill non nasce nel marketplace. Nasce da un'esigenza concreta mentre si lavora a un progetto: un compito ripetibile che richiede giudizio e che vorresti non dover rispiegare ogni volta. Il marketplace è l'ultimo passo, non il primo — e non è automatico.
141414 e ti accorgi di ripetere lo stesso
ragionamento — «tradurre le stringhe HMI rispettando le chiavi del DB», «diagnosticare un device muto in rete».
La skill nasce lì, in .claude/skills/ del progetto.skill-creator (§4), che struttura lo
SKILL.md, affina la description per lo scatenamento corretto, e la mette alla prova
con degli eval.main, protetto: niente commit diretti.
La skill viene de-coupled dal workspace privato di chi l'ha scritta (path assoluti → relativi
o $env:CLAUDE_PLUGIN_ROOT) e proposta con una pull request al maintainer.install.
Una sola versione canonica, sempre passata da revisione.Una skill che nasce «per il marketplace» in astratto è quasi sempre sbagliata: manca il banco di prova. Una skill che nasce da un'esigenza reale è già stata usata, corretta, affinata sul campo prima di essere proposta. La condivisione promuove qualcosa che funziona già, non un'ipotesi.
La domanda più importante viene prima di scrivere una riga: quel lavoro lo fa già qualcosa? Due controlli, in quest'ordine.
Git, un linter, un analyzer, docker compose, uno script PowerShell. Se per quel compito esiste già
un tool deterministico che dà risposte certe, un'approssimazione LLM ha valore
negativo: aggiunge non-determinismo, consuma contesto, e azzera il vantaggio di uno strumento che produce
lo stesso risultato ogni volta.
Una skill che «analizza il repo, cerca i metodi definiti e vede se sono chiamati» non ha senso: scrivi mezza riga di prompt — «builda ed elimina i warning di codice morto» — e per il rigore usa un linter, che esiste da quarant'anni.
Esistono skill universalmente note, riusabili, mantenute da altri. Prima di reinventarle, cercale — nel marketplace Sistec e in quelli pubblici:
caveman — comunicazione ultra-compressa per risparmiare token
(sito ·
github).openspec — pattern spec-first per documentare le decisioni prima del codice
(sito ·
github).graphify — qualunque input → knowledge graph
(sito ·
github).ponytail, e in generale il catalogo del marketplace interno.Esempio di skill fatta bene da studiare: karpathy-guidelines.
Se sopravvive ai due controlli sopra, resta la domanda decisiva del marketplace (§5): «Claude farebbe materialmente peggio SENZA questa skill?» Se togliendola Claude se la cava comunque — magari con un prompt un po' più lungo — la skill non merita il marketplace.
skill-creatorLe skill si scrivono bene con una skill: skill-creator. Non è un template statico — è un
assistente che crea una skill da zero, modifica e migliora quelle esistenti,
e soprattutto ne misura le prestazioni.
| Cosa fa | A cosa serve |
|---|---|
| Crea da zero | struttura la cartella e il SKILL.md — frontmatter, corpo,
file di supporto — secondo le convenzioni. |
| Modifica / ottimizza | rifinisce una skill esistente: corpo più chiaro, istruzioni meno ambigue, file di supporto meglio separati. |
Ottimizza la description | è la parte che conta: la description
decide quando la skill scatta. La affina per una precisione di scatenamento più alta. |
| Esegue eval | mette la skill alla prova su casi reali per verificare che si attivi quando deve — e non quando non deve (falsi positivi). |
| Benchmark + variance analysis | misura le prestazioni ripetutamente e ne quantifica la variabilità: una skill che scatta il 60% delle volte non è pronta. |
descriptionUna skill perfetta nel corpo ma con una description vaga è inutile: non scatta mai, o scatta a
sproposito. Il valore di skill-creator è proprio qui — trasformare la description da
«cosa fa la skill» a «quando Claude deve usarla», e verificarlo con gli eval invece di
indovinare.
skill-creator dall'esigenza).description finché la precisione è alta e stabile.Il marketplace non è il posto dove scoprire che una skill non scatta. Una skill entra in PR solo dopo essere
passata dagli eval e dal benchmark di skill-creator. È il controllo di qualità che rende sensata
la revisione umana successiva: il maintainer valuta il merito, non il funzionamento di base.
Fin qui il marketplace è stato «il posto dove vivono le skill condivise». Concretamente è una cosa precisa:
un catalogo — un repository git (o una directory) che contiene un file manifesto
.claude-plugin/marketplace.json. Quel file elenca i plugin; ogni plugin
impacchetta le skill (e altro). Claude Code non installa skill sciolte: installa plugin da un
marketplace registrato.
Marketplace = il catalogo (il repo con marketplace.json). Plugin = un'unità
installabile elencata nel catalogo; impacchetta uno o più componenti. Skill = un componente dentro un
plugin (una cartella con SKILL.md). Si installa il plugin; le sue skill diventano disponibili.
| Marketplace | Plugin | Skill | |
|---|---|---|---|
| Cos'è | catalogo git | unità installabile | comportamento |
| File chiave | .claude-plugin/marketplace.json | .claude-plugin/plugin.json | SKILL.md |
| Contiene | lista di plugin | skill, agent, hook, MCP server… | trigger + istruzioni |
| Azione | si registra (add) | si installa (install) | scatta da sola |
Un plugin non impacchetta solo skill: può portare agent, hook, MCP server, output-style, tema. La skill è il componente più comune, ma il plugin è il contenitore.
// repo del marketplace marketplace-sistec/ ├── .claude-plugin/ │ └── marketplace.json // IL CATALOGO: name, owner, plugins[] └── plugins/ └── hmi-developer/ // un plugin ├── .claude-plugin/ │ └── plugin.json // manifesto del plugin (solo name obbligatorio) ├── skills/ │ ├── translate/ │ │ └── SKILL.md // una skill = una cartella con SKILL.md │ └── dpi-anchor-fix/ │ ├── SKILL.md │ └── assets/probe.ps1 // engine deterministico bundlato ├── agents/ // subagent (opzionale) └── hooks/hooks.json // hook (opzionale)
Il marketplace.json elenca i plugin e da dove prenderli — path relativo nello stesso repo, oppure
un altro repo GitHub/git, un sottoalbero di monorepo, un pacchetto npm:
{
"name": "marketplace-sistec",
"owner": { "name": "Sistec", "email": "..." },
"plugins": [
{ "name": "hmi-developer", "source": "./plugins/hmi-developer" },
{ "name": "technical-writer","source": "./plugins/technical-writer" }
]
}
Due verbi distinti: si registra il marketplace una volta, poi si installa il
plugin che serve. Le skill del plugin diventano subito disponibili — namespaciate col nome del plugin
(/hmi-developer:translate), ma nell'uso normale scattano da sole via description.
# 1. registra il marketplace (una volta) — GitHub, git URL, path locale /plugin marketplace add sistec/marketplace-sistec /plugin marketplace add ./marketplace-sistec # path locale # 2. installa un plugin dal marketplace /plugin install hmi-developer@marketplace-sistec # gestione /plugin marketplace list # marketplace registrati /plugin list --enabled # plugin installati /plugin uninstall hmi-developer@marketplace-sistec /plugin # manager interattivo (Discover/Installed/Marketplaces/Errors)
La sorgente di un plugin può fissare un ramo/tag (ref) o un commit
esatto (sha). Con sha tutti installano lo stesso identico commit,
anche se il ramo a monte cambia. È così che «una sola versione canonica» smette di essere uno slogan e diventa
un fatto verificabile: il commit è l'identità.
È un repo git interno. Espone solo main, con regola di protezione:
niente commit diretti, si entra solo via pull request revisionata. Aggiungere una skill =
aprire una PR che tocca plugins/<plugin>/skills/ e, se è un plugin nuovo, la voce in
marketplace.json. Per il cowork in ufficio stesso meccanismo, marketplace
diverso.
Registrare e installare è meccanica (§5). La domanda vera è cosa merita di entrare nel catalogo.
Il marketplace Sistec espone solo main protetto: si entra solo via pull request revisionata — una
sola versione canonica, niente copie a mano che divergono.
main protetto significa una sola versione, sempre passata da una revisione. La condivisione
diventa un atto tracciabile — esattamente come un merge in git. Per il cowork in ufficio
valgono le stesse regole, ma su un marketplace diverso (interno). Stesso meccanismo, ambito
diverso.
Una skill merita il marketplace solo se passa tutte e tre. Se anche una risposta è «no» o «forse», si scarta.
| Domanda | Se «sì»… |
|---|---|
| 1 · Lo fa già, meglio, un tool deterministico? (git, linter, script) | scartata: l'LLM aggiunge solo non-determinismo. |
2 · È comportamento nativo travestito? (plan mode, /clear, Read/Grep/Glob) |
scartata: ridondante, e rischia di peggiorare ciò che Claude già sa fare. |
| 3 · Claude farebbe materialmente peggio SENZA? | se «no», scartata: deve portare giudizio semantico irrinunciabile. |
Uno script deterministico raccoglie dati grezzi (sonda la configurazione DPI delle form, scandisce le NIC di rete); l'LLM interpreta il risultato e decide l'azione migliore. Il valore è nel giudizio, non nella raccolta.
Un lavoro che nessun tool deterministico sa fare: tradurre testo HMI rispettando le chiavi esatte del database, manutenere un .docx preservando commenti e revisioni, portare l'intento di una feature tra due codebase divergenti.
Il punto comune: l'LLM non sostituisce un tool — fa ciò che il tool non può fare.
.ps1, .py)
bundlati come assets/.C:\Users\Sistec 23\…): relativi o
$env:CLAUDE_PLUGIN_ROOT.skill-creator (§4).A differenza di un marketplace pubblico, la specificità Sistec (lo schema language_spv, le
convenzioni Sistec.Core, i pattern .NET per l'automazione industriale) non
squalifica una skill — anzi, è il motivo per cui esiste: incapsula conoscenza di dominio che un LLM generico
non ha.
L'analisi completa — 6 skill integrate, 14 scartate, con la motivazione di ciascuna — è nel documento audit e criteri di integrazione.
Una skill non serve solo a chi scrive codice. Il criterio è sempre lo stesso — giudizio semantico riusabile — ma il dominio cambia. Ecco esempi reali (e plausibili) su entrambi i fronti.
| Skill | Esigenza | Pattern |
|---|---|---|
hmi-developer/dpi-anchor-fix | form .NET 8 con bug di DPI e ancoraggio: uno script segnala i controlli a rischio, l'LLM decide caso per caso quale correzione è sicura. | bundla + interpreta |
hmi-developer/translate | tradurre stringhe HMI IT↔EN rispettando le chiavi esatte
di language_spv, inferendo il significato dal call-site. |
puro semantico |
hmi-developer/reconcile-solutions | portare l'intento di una feature tra due soluzioni .NET divergenti — un merge semantico, non testuale. | puro semantico |
hmi-developer/add-doc | aggiungere commenti/doc di codice secondo le convenzioni del progetto, dove serve giudizio su cosa vale la pena documentare. | puro semantico |
| Skill | Esigenza | Pattern |
|---|---|---|
technical-writer/maintain-manual | manuali .docx con commenti e
revisioni tracciate: inserire una sezione senza rompere i canali nascosti di Office Open XML. |
puro semantico |
device-spy/network-probe | device industriale muto in rete: uno script sonda NIC/IP/ driver, l'LLM diagnostica (link-flap vs conflitto IP vs driver fermo). | bundla + interpreta |
spec-document | redigere una specifica tecnica nello stile engineering-sheet Sistec: struttura, callout, figure, revisioni — dove il giudizio è nell'organizzare il contenuto. | puro semantico |
graphify | trasformare documenti, appunti o codice in un knowledge graph clusterizzato — utile a chiunque debba mappare relazioni, non solo agli sviluppatori. | puro semantico |
Dev o non-dev, la skill vale quando cattura una competenza — la sensibilità del tecnico di
rete che legge un output di Get-NetAdapterStatistics, la mano del technical writer che non rompe
un .docx, la convenzione di traduzione HMI — e la rende riusabile da chiunque, senza doverla rispiegare.
CLAUDE.md, condivisione (§9 è la panoramica di questo documento)..claude, skill e plugin.marketplace.json/plugin.json, comandi /plugin, sorgenti git.