name: checklist description: Checklist de progreso en chat para cualquier proyecto. Instala lo que falta (registro documenti/lavori.yaml, script strumenti-locali/avanzamento/stato.mjs, regla en CLAUDE.md, líneas en .git/info/exclude) y abre el chat «Checklist: nombre del proyecto» con el widget. Úsalo cuando el usuario escriba /checklist o pida instalar la checklist en un proyecto. Para mostrar la checklist en un proyecto que ya la tiene, basta la regla de su CLAUDE.md.
/checklist: la checklist de progreso en el proyecto
/checklist instala en la carpeta actual lo que falta para la checklist, y la muestra en un chat dedicado. No sobrescribe ni cambia nada de lo que ya existe.
Cómo trabajas:
- La carpeta del proyecto es la carpeta actual. Todos los comandos parten de allí.
<base>es la «Directorio base» impresa al inicio de este skill. Los modelos están en<base>/modelos/.- Cada ruta en los comandos va entre comillas: la base y la carpeta del proyecto pueden contener espacios.
- Ejecuta los pasos en orden, sin pedir confirmaciones, salvo donde el paso lo indique.
- Cada
grepusa-a: en Claude Codegreppuede tratar como binario un archivo no UTF-8 y no encontrar líneas que existen.
Paso 1: comprobaciones preliminares
- Ejecuta
command -v node. Si no imprime nada, escribe una línea («Se requiere Node.js 18 o superior: instálalo y vuelve a ejecutar /checklist») y detente. - Ejecuta
git rev-parse --path-format=absolute --git-dirygit rev-parse --path-format=absolute --git-common-dir. Si dan dos resultados diferentes, estás en un worktree secundario: escribe una línea («Estás en un worktree: el registro desaparecería con él. Ejecuta /checklist desde la carpeta principal del proyecto») y detente. Si ambos comandos fallan, no hay git: continúa. - Ejecuta
pwd -Py(cd ~ && pwd -P). Si dan el mismo resultado, estás en la carpeta home: escribe una línea («Estás en la carpeta home: el bloque en CLAUDE.md aplicaría a todos los proyectos. Ejecuta /checklist en la carpeta del proyecto») y detente.
El paso termina cuando node está presente y la carpeta no es ni un worktree secundario ni la carpeta home.
Paso 2: comprobación de las cuatro piezas
No escribas nada. Anota para cada una si existe o falta:
- el registro: existe
documenti/lavori.yaml; - el script: existe
strumenti-locali/avanzamento/stato.mjs; - el bloque:
grep -aqx '## Checklist de progreso' CLAUDE.mdtiene éxito (siCLAUDE.mdno existe, el bloque falta); - las líneas de exclusión, solo con git (
git rev-parse --is-inside-work-treeimprimetrue): el archivo impreso porgit rev-parse --git-path info/excludecontiene las líneas exactas**/documenti/lavori.yamly**/strumenti-locali/avanzamento/. Son solo los archivos del skill: las demás carpetasdocumenti/del proyecto siguen visibles para git. Comprueba cada una congrep -aqxF '**/documenti/lavori.yaml' "<archivo exclude>"ygrep -aqxF '**/strumenti-locali/avanzamento/' "<archivo exclude>". Si el archivo no existe, faltan ambas.
El paso termina cuando sabes qué piezas faltan.
Paso 3: nombre del proyecto
- Si el bloque existe en
CLAUDE.md, el nombre es lo que sigue a «Actualiza la checklist de » hasta la comilla de cierre», en la primera ocurrencia. Comando:grep -ao 'Actualiza la checklist de [^»]*' CLAUDE.md | head -1, sin el prefijo. Si el nombre existe, no hagas preguntas. Si el comando no imprime nada o el nombre queda vacío (línea modificada por el usuario), pasa al punto 2. - Si no, haz una pregunta con AskUserQuestion. Primera opción, recomendada: el nombre de la carpeta. Segunda opción: una variante, es decir, el título
#del README si existe y es diferente del nombre de la carpeta; si no, el nombre de la carpeta con mayúsculas o espacios diferentes. El usuario siempre puede escribir otro nombre. - Si no puedes hacer preguntas (por ejemplo, en modo no interactivo), usa el nombre de la carpeta y escribe una línea que lo indique.
El paso termina cuando tienes el nombre, que aquí se llama <PROYECTO>.
Paso 4: instalación de lo que falta
Haz solo lo que el paso 2 encontró faltante. Nunca sobrescribas ni modifiques lo que existe.
- Registro. Si falta:
mkdir -p documentiy[ -e documenti/lavori.yaml ] || sed "s/<HOY>/$(date +%F)/g" "<base>/modelos/lavori.yaml" > documenti/lavori.yaml(la guardia protege un registro existente incluso si el paso 2 se equivocó). Sin embargo, si el script ya existe, el proyecto puede tener su propia checklist que lee otro registro (por ejemplo,lavori.json): primero pregunta con AskUserQuestion si creardocumenti/lavori.yaml. Primera opción, recomendada: no crearlo. Si la respuesta es no, o si no puedes hacer preguntas, no lo crees, escribe una línea que lo indique y salta también las líneas de exclusión (punto 4), que ocultarían a git los archivos de la checklist del proyecto. - Script. Si falta:
mkdir -p strumenti-locali/avanzamentoycp -n "<base>/modelos/stato.mjs" strumenti-locali/avanzamento/stato.mjs. - Bloque en CLAUDE.md. Si falta:
- lee
<base>/modelos/claude-md.mdy reemplaza cada<PROYECTO>con el nombre; - ejecuta
mktemp -dy escribe el bloque ya reemplazado, con la herramienta de escritura de archivos, en<tmp>/bloque.md(<tmp>es la carpeta impresa); - si
CLAUDE.mdexiste y no está vacío, prepara la cola con estos dos comandos (no leas ni reescribas el archivo):if [ -s CLAUDE.md ] && [ -n "$(tail -c1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(añade el salto de línea final si falta)if [ -s CLAUDE.md ] && [ -n "$(tail -n1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(añade la línea vacía si la última línea no está vacía) - añade el bloque:
cat "<tmp>/bloque.md" >> CLAUDE.md(crea el archivo si no existe). El texto del usuario nunca se reescribe. - No uses
sed: el nombre puede contener/o&.
- lee
- Líneas de exclusión, solo con git. Sea
<exclude>la ruta impresa porgit rev-parse --git-path info/exclude.mkdir -p "$(dirname "<exclude>")".- Añade el salto de línea final si falta:
if [ -s "<exclude>" ] && [ -n "$(tail -c1 "<exclude>")" ]; then printf '\n' >> "<exclude>"; fi. - Para cada línea que falte entre
**/documenti/lavori.yamly**/strumenti-locali/avanzamento/:printf '%s\n' '**/documenti/lavori.yaml' >> "<exclude>"(o'**/strumenti-locali/avanzamento/').
- Sin git, escribe una línea de advertencia: «Aquí no hay git: la línea del repositorio en el widget quedará vacía».
El paso termina cuando cada pieza faltante ha sido creada. Si no faltaba nada, el paso termina de inmediato.
Paso 5: apertura del chat de la checklist
Hazlo tanto después de una instalación como cuando ya estaba todo.
- Si
mcp__ccd_session__start_sessionymcp__ccd_session_mgmt__detach_sessionestán entre las herramientas diferidas, cárgalas con ToolSearch. - Llama a
start_sessioncon:initiation:user_askedcontext:freshuse_worktree:falseeffort:low(el chat ejecuta un script y compone un widget: no se necesita el esfuerzo de la sesión desde la que parte)title: «Checklist: »prompt: «Ejecutanode strumenti-locali/avanzamento/stato.mjsy muestra la checklist como dice el CLAUDE.md»background: «Checklist de progreso del proyecto : el script esstrumenti-locali/avanzamento/stato.mjs. El CLAUDE.md del proyecto dice cuál es el registro, cómo mostrar la checklist y cuándo actualizar el registro.»
- Inmediatamente después llama a
detach_sessioncon el id devuelto: es un chat principal, no un subchat. - Si
start_sessionfalta (CLI) o rechaza: ejecutanode strumenti-locali/avanzamento/stato.mjsy muestra la checklist en este chat, como dice<base>/modelos/claude-md.md: conshow_widget, o en una tabla markdown sishow_widgetfalta. - Si
start_sessiontiene éxito pero el desacople falta o rechaza, escribe una línea: «Desacóplalo desde la barra lateral con Detach to top level». - Cada lanzamiento abre un chat nuevo: no busques chats anteriores.
El paso termina cuando el chat está abierto y desacoplado, o la checklist se ha mostrado en este chat.
Paso 6: mensaje final
Escribe dos o tres líneas:
- qué agregaste, o «Ya estaba todo»;
- las advertencias, si las hay;
- dónde encontrar el chat de la checklist.
Escribe también que para agregar o cerrar tareas basta decirlo en el chat: la regla en CLAUDE.md se encarga de actualizar el registro.
El paso termina cuando el mensaje está escrito.