name: checklist description: Checklist di avanzamento in chat per qualunque progetto. Installa ciò che manca (registro documenti/lavori.yaml, script strumenti-locali/avanzamento/stato.mjs, regola nel CLAUDE.md, righe in .git/info/exclude) e apre la chat «Checklist: nome del progetto» con il widget. Usa quando l'utente scrive /checklist o chiede di installare la checklist in un progetto. Per mostrare la checklist in un progetto che ce l'ha già basta la regola del suo CLAUDE.md.
/checklist: la checklist di avanzamento nel progetto
/checklist installa nella cartella corrente ciò che manca per la checklist, poi la mostra in una chat dedicata. Non sovrascrive e non cambia nulla di ciò che c'è già.
Come lavori:
- La cartella del progetto è la cartella corrente. Tutti i comandi partono da lì.
<base>è la «Base directory» stampata in cima a questa skill. I modelli sono in<base>/modelli/.- Ogni percorso nei comandi va tra virgolette: la base e la cartella del progetto possono contenere spazi.
- Esegui i passi in ordine, senza chiedere conferme, salvo dove il passo lo dice.
- Ogni
grepusa-a: in Claude Codegreppuò trattare come binario un file non UTF-8 e non trovare righe che ci sono.
Passo 1: controlli preliminari
- Esegui
command -v node. Se non stampa nulla, scrivi una riga («Serve Node.js 18 o successivo: installalo e rilancia /checklist») e fermati. - Esegui
git rev-parse --path-format=absolute --git-diregit rev-parse --path-format=absolute --git-common-dir. Se danno due risultati diversi, sei in un worktree secondario: scrivi una riga («Sei in un worktree: il registro sparirebbe con lui. Lancia /checklist dalla cartella principale del progetto») e fermati. Se entrambi i comandi falliscono, non c'è git: vai avanti. - Esegui
pwd -Pe(cd ~ && pwd -P). Se danno lo stesso risultato, sei nella cartella home: scrivi una riga («Sei nella cartella home: il blocco nel CLAUDE.md varrebbe per tutti i progetti. Lancia /checklist nella cartella del progetto») e fermati.
Il passo è finito quando node c'è e la cartella non è né un worktree secondario né la cartella home.
Passo 2: controllo dei quattro pezzi
Non scrivere nulla. Annota per ciascuno se c'è o manca:
- il registro: esiste
documenti/lavori.yaml; - lo script: esiste
strumenti-locali/avanzamento/stato.mjs; - il blocco:
grep -aqx '## Checklist di avanzamento' CLAUDE.mdriesce (seCLAUDE.mdnon esiste, il blocco manca); - le righe di esclusione, solo con git (
git rev-parse --is-inside-work-treestampatrue): il file stampato dagit rev-parse --git-path info/excludecontiene le righe esatte**/documenti/lavori.yamle**/strumenti-locali/avanzamento/. Sono solo i file della skill: le altre cartelledocumenti/del progetto restano visibili a git. Controlla ciascuna congrep -aqxF '**/documenti/lavori.yaml' "<file exclude>"egrep -aqxF '**/strumenti-locali/avanzamento/' "<file exclude>". Se il file non esiste, mancano entrambe.
Il passo è finito quando sai quali pezzi mancano.
Passo 3: nome del progetto
- Se il blocco c'è nel
CLAUDE.md, il nome è ciò che segue «Aggiorna la checklist di » fino alla virgoletta di chiusura», alla prima occorrenza. Comando:grep -ao 'Aggiorna la checklist di [^»]*' CLAUDE.md | head -1, senza il prefisso. Se il nome c'è, non fare domande. Se il comando non stampa nulla o il nome resta vuoto (riga modificata dall'utente), passa al punto 2. - Altrimenti fai una domanda con AskUserQuestion. Prima opzione, consigliata: il nome della cartella. Seconda opzione: una variante, cioè il titolo
#del README se c'è ed è diverso dal nome della cartella, altrimenti il nome della cartella con maiuscole o spazi diversi. L'utente può sempre scrivere un altro nome. - Se non puoi fare domande (per esempio in modalità non interattiva), usa il nome della cartella e scrivi una riga che lo dice.
Il passo è finito quando hai il nome, che qui sotto si chiama <PROGETTO>.
Passo 4: installazione di ciò che manca
Fai solo ciò che il passo 2 ha trovato mancante. Mai sovrascrivere né modificare ciò che c'è.
- Registro. Se manca:
mkdir -p documentie[ -e documenti/lavori.yaml ] || sed "s/<OGGI>/$(date +%F)/g" "<base>/modelli/lavori.yaml" > documenti/lavori.yaml(la guardia protegge un registro esistente anche se il passo 2 ha sbagliato). Se però lo script c'è già, il progetto può avere una checklist sua che legge un altro registro (per esempiolavori.json): prima chiedi con AskUserQuestion se crearedocumenti/lavori.yaml. Prima opzione, consigliata: non crearlo. Se la risposta è no, o se non puoi fare domande, non crearlo, scrivi una riga che lo dice e salta anche le righe di esclusione (punto 4), che nasconderebbero a git i file della checklist del progetto. - Script. Se manca:
mkdir -p strumenti-locali/avanzamentoecp -n "<base>/modelli/stato.mjs" strumenti-locali/avanzamento/stato.mjs. - Blocco nel CLAUDE.md. Se manca:
- leggi
<base>/modelli/claude-md.mde sostituisci ogni<PROGETTO>con il nome; - esegui
mktemp -de scrivi il blocco già sostituito, con lo strumento di scrittura di file, in<tmp>/blocco.md(<tmp>è la cartella stampata); - se
CLAUDE.mdesiste e non è vuoto, prepara la coda con questi due comandi (non leggere né riscrivere il file):if [ -s CLAUDE.md ] && [ -n "$(tail -c1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(aggiunge l'a capo finale se manca)if [ -s CLAUDE.md ] && [ -n "$(tail -n1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(aggiunge la riga vuota se l'ultima riga non è vuota) - accoda il blocco:
cat "<tmp>/blocco.md" >> CLAUDE.md(crea il file se non esiste). Il testo dell'utente non si riscrive mai. - Non usare
sed: il nome può contenere/o&.
- leggi
- Righe di esclusione, solo con git. Sia
<exclude>il percorso stampato dagit rev-parse --git-path info/exclude.mkdir -p "$(dirname "<exclude>")".- Aggiungi l'a capo finale se manca:
if [ -s "<exclude>" ] && [ -n "$(tail -c1 "<exclude>")" ]; then printf '\n' >> "<exclude>"; fi. - Per ciascuna riga che manca tra
**/documenti/lavori.yamle**/strumenti-locali/avanzamento/:printf '%s\n' '**/documenti/lavori.yaml' >> "<exclude>"(o'**/strumenti-locali/avanzamento/').
- Senza git, scrivi una riga di avviso: «Qui non c'è git: la riga del repo nel widget resterà vuota».
Il passo è finito quando ogni pezzo mancante è stato creato. Se non mancava nulla, il passo è finito subito.
Passo 5: apertura della chat della checklist
Fallo sia dopo un'installazione sia quando c'era già tutto.
- Se
mcp__ccd_session__start_sessionemcp__ccd_session_mgmt__detach_sessionsono tra gli strumenti differiti, caricali con ToolSearch. - Chiama
start_sessioncon:initiation:user_askedcontext:freshuse_worktree:falseeffort:low(la chat esegue uno script e compone un widget: non serve lo sforzo della sessione da cui parte)title: «Checklist: »prompt: «Eseguinode strumenti-locali/avanzamento/stato.mjse mostra la checklist come dice il CLAUDE.md»background: «Checklist di avanzamento del progetto : lo script èstrumenti-locali/avanzamento/stato.mjs. Il CLAUDE.md del progetto dice qual è il registro, come mostrare la checklist e quando aggiornare il registro.»
- Subito dopo chiama
detach_sessioncon l'id restituito: è una chat principale, non una sottochat. - Se
start_sessionmanca (CLI) o rifiuta: eseguinode strumenti-locali/avanzamento/stato.mjse mostra la checklist in questa chat, come dice<base>/modelli/claude-md.md: conshow_widget, oppure in tabella markdown seshow_widgetmanca. - Se
start_sessionriesce ma lo stacco manca o rifiuta, scrivi una riga: «Staccala dalla barra laterale con Detach to top level». - Ogni lancio apre una chat nuova: non cercare chat precedenti.
Il passo è finito quando la chat è aperta e staccata, oppure la checklist è stata mostrata in questa chat.
Passo 6: messaggio finale
Scrivi due o tre righe:
- cosa hai aggiunto, oppure «C'era già tutto»;
- gli avvisi, se ce ne sono;
- dove trovare la chat della checklist.
Scrivi anche che per aggiungere o chiudere lavori basta dirlo in chat: la regola nel CLAUDE.md fa aggiornare il registro.
Il passo è finito quando il messaggio è scritto.