Registry
Crea un registry git di Agent Skills con mestiere, organizzalo in namespace, condividi file tra le skill e validalo con registry lint.
Un registry è un repository git di skill da cui i progetti installano. Può essere pubblico o privato e non richiede un server: mestiere lo legge con git.
Crea un registry
mkdir skills && cd skills && git init
mestiere registry init --name polarity --description "Polarity's team skills"
mestiere registry new-namespace frontend --description "Frontend practices" --owners web-team
mestiere registry new-skill frontend/forms --description "Build accessible forms"
mestiere registry lint
Fai commit e push. I progetti lo aggiungono con mestiere registry add polarity <git-url>.
Struttura
skills/ # repository del registry
├── registry.yaml # schemaVersion, name, description
└── skills/
├── frontend/
│ ├── namespace.yaml # description, owners
│ ├── _shared/ # file a cui puntano più skill
│ │ ├── scripts/lint-a11y.sh
│ │ └── references/design-tokens.md
│ ├── forms/
│ │ ├── SKILL.md # name: frontend-forms
│ │ ├── references/
│ │ │ └── design-tokens.md -> ../../_shared/references/design-tokens.md
│ │ └── scripts/
│ │ └── lint-a11y.sh -> ../../_shared/scripts/lint-a11y.sh
│ └── tables/
│ ├── SKILL.md
│ └── scripts -> ../_shared/scripts
└── backend/
└── db-migrations/
├── SKILL.md
└── scripts/migrate.sh
Regole per i nomi
- I namespace usano solo lettere minuscole e cifre, senza trattini:
frontend,payments,infra2. Sceglili per dominio o per team. - Le skill usano lettere minuscole, cifre e trattini singoli:
forms,db-migrations. - Il nome installato è
<namespace>-<skill>, ad esempiofrontend-forms, al massimo 64 caratteri. Dato che i namespace non hanno trattini, la corrispondenza funziona sempre in entrambe le direzioni.
Scrivere SKILL.md
new-skill genera un SKILL.md con il frontmatter. Poi:
- Mantieni il
namegenerato: deve essere uguale al nome installato,<namespace>-<skill>. - Scrivi una
descriptionda 1 a 1024 caratteri. Decide quando un agente attiva la skill: di' cosa fa la skill e quando usarla, con le parole che un utente userebbe davvero. - Tieni
SKILL.mdfocalizzato. Sposta il materiale lungo inreferences/e collegalo con un percorso relativo. - Riferisciti ai file inclusi con percorsi relativi alla cartella della skill, ad esempio
scripts/check.sh. - Rendi gli script eseguibili (
chmod +x) e dagli uno shebang.
Condividere file tra le skill
Metti un file nella cartella _shared/ del namespace e collegalo da ogni skill con un symlink relativo, a un singolo file o a un'intera cartella:
cd skills/frontend/forms
mkdir -p scripts
ln -s ../../_shared/scripts/lint-a11y.sh scripts/lint-a11y.sh # un file
ln -s ../_shared/references references # un'intera cartella
Durante l'installazione, mestiere sostituisce ogni link con una copia reale della sua destinazione. Ogni skill installata è autonoma, e il suo SKILL.md continua a usare percorsi come scripts/lint-a11y.sh. Quando un file condiviso cambia, vengono segnalate come aggiornate solo le skill che lo collegano.
I link possono puntare solo dentro la skill o dentro _shared/ dello stesso namespace. I file dentro _shared/ devono essere file reali, non link.
Cosa controlla lint
mestiere registry lint fallisce su qualsiasi riga error::
- I nomi di namespace, skill e nomi installati rispettano le regole per i nomi.
SKILL.mdha un frontmatter il cuinameè uguale al nome installato, e una descrizione da 1 a 1024 caratteri.- I link restano dentro la skill o puntano dentro
_shared/dello stesso namespace, e i link verso_shared/arrivano a un file reale. - Le skill e
_shared/non contengono file nascosti. I file nascosti vengono saltati quando le copie installate sono confrontate con il registry, quindi un file nascosto pubblicato non potrebbe mai corrispondere.
I file condivisi che nessuna skill collega producono un warning, che non fa fallire lint.
| Errore | Soluzione |
|---|---|
name must be "<ns>-<skill>" |
Imposta il name del frontmatter al nome installato |
invalid namespace / invalid skill name |
Rinomina la cartella secondo le regole per i nomi |
hidden files aren't installed |
Cancella il file, o rinominalo senza il punto iniziale (.env.example → env.example) |
links outside the skill and skills/<ns>/_shared/ |
Sposta la destinazione in _shared/ e collegala da lì |
which is itself a link / links aren't allowed inside _shared |
Sostituisci il link in _shared/ con il file reale |
Prova una skill prima di pubblicarla
Da un progetto, aggiungi la tua copia locale come registry e installa da lì. Viene installato solo il contenuto con commit, quindi prima fai commit su un branch:
mestiere registry add local /path/to/registry --ref my-branch
mestiere add frontend/forms
mestiere registry remove local
Rinominare e rimuovere skill
- I progetti che hanno installato l'intero namespace perdono una skill rimossa al loro prossimo
mestiere update. - I progetti che hanno installato la skill singolarmente ricevono un errore e devono rimuoverla, quindi annuncia le rimozioni.
- Una rinomina è una rimozione più un'aggiunta.
Esegui lint in CI
- uses: actions/setup-go@v7
with:
go-version: stable
- run: go install github.com/polarity-dev/mestiere/cmd/mestiere@latest
- run: mestiere registry lint
Altre configurazioni di CI: CI.