Come funziona

Come mestiere fissa le skill a commit del registry, rileva gli aggiornamenti per skill con gli hash dei tree git e non sovrascrive mai una skill modificata.

Come funzionano gli aggiornamenti

mestiere fissa ogni skill a un commit del registry, come fanno i lockfile dei pacchetti. Chi scrive un registry non deve taggare le versioni.

  • add risolve il ref del registry e fissa le nuove skill a quel commit.
  • outdated scarica il registry ed elenca le skill il cui contenuto è cambiato. Un nuovo commit che non tocca una skill non viene segnalato.
  • update sposta in avanti il lock, per tutto o solo per i target che indichi. Aggiornare un namespace prende anche le skill aggiunte e toglie quelle cancellate.
  • sync installa esattamente quello che dice il lock. sync --frozen fallisce se install e lock non coincidono, ed è quello che deve eseguire la CI.

Fissa un intero progetto con ref: v2026.10 (un tag) o con l'ID di un commit.

Modello di sicurezza

Il lock è l'unico stato che mestiere conserva. Non ci sono database nascosti o file marker che possono andare fuori sync. Prima di sostituire o cancellare una cartella, mestiere controlla la cartella stessa:

  1. Calcola l'hash del tree git della cartella su disco, saltando i file nascosti come .DS_Store e i file di swap degli editor.
  2. Cerca la skill del registry che corrisponde al nome della cartella, e ogni versione che quella skill ha avuto nella storia del registry.
  3. Solo se l'hash corrisponde a una di quelle versioni la cartella è un'installazione intatta, e solo allora si può sostituire o rimuovere senza rischi.

Per ogni cartella in una directory di skill:

  • Nel lock, l'hash corrisponde alla versione nel lock: niente da fare.
  • Nel lock, l'hash corrisponde a una versione pubblicata più vecchia: aggiornata alla versione nel lock.
  • Nel lock, l'hash non corrisponde a nessuna versione pubblicata: sync si ferma. La cartella ha modifiche locali; usa --force o eject.
  • Non nel lock, nome e contenuto corrispondono a una skill pubblicata: rimossa, perché è stata tolta da skills.yaml.
  • Non nel lock, qualsiasi altro caso: lasciata com'è. È una tua skill.

--force è sempre una scelta esplicita. Lo stesso controllo fa funzionare i flussi di lavoro abituali del team senza passaggi in più:

Situazione Risultato
Un collega aggiorna una skill; fai pull ed esegui sync La tua copia più vecchia e non modificata viene aggiornata
Un collega rimuove una skill; fai pull ed esegui sync La cartella rimasta viene rimossa
Hai modificato una skill installata sync si ferma e suggerisce --force o eject
Hai copiato una skill per farne una tua La copia non viene mai toccata
Offline, con un registry in cache sync installa dalla cache

Architettura

  • Registry (git): skills/<namespace>/<skill>/SKILL.md e skills/<namespace>/_shared/.
  • Cache locale: un mirror git bare per ogni registry, riempito con git fetch.
  • Progetto: skills.yaml (install e lock), .agents/skills/<namespace>-<skill>/ con i file veri, e symlink da .claude/skills/ e .kiro/skills/.

add e update risolvono install sul mirror del registry e scrivono lock. sync confronta il lock con le cartelle delle skill su disco e applica solo i passaggi che può dimostrare sicuri: install, upgrade, link, unlink, remove.

Scelte di progettazione

  • Il binario git di sistema, non una libreria git in Go, così l'autenticazione funziona esattamente come per il tuo git.
  • Gli hash dei tree git come identità del contenuto. L'identità di una skill è il tree ID della sua cartella installata, quindi le modifiche si rilevano per singola skill. Per le skill senza link condivisi è il tree ID del registry stesso.
  • La storia come prova di proprietà. La proprietà non viene mai registrata in un file di stato. Si decide in base al fatto che il contenuto di una cartella sia mai stato pubblicato.
  • Installazioni piatte, registry con namespace. Gli harness trovano le skill a un solo livello di profondità, quindi i namespace esistono nel registry e nei nomi installati, non come cartelle.
  • Le scritture passano per una cartella temporanea accanto a quella finale, che poi viene rinominata al suo posto, così un'esecuzione interrotta non lascia mai una skill scritta a metà.

Aggiornata il · Versione Markdown