Ejercicio 01: construye un skill de despliegue personalizado
Construye un skill de despliegue adaptado a un proyecto de tu elección. Este ejercicio reúne los campos cubiertos en las lecciones 02, 03, 04 y 05 en un único skill funcional.
Requisitos
Tu skill debe:
- Poner
disable-model-invocation: true— desplegar nunca debería ocurrir automáticamente. - Incluir un
argument-hintque muestre qué argumento debe proporcionar el usuario (típicamente el nombre de un entorno: staging, production, etc.). - Poner
allowed-toolssolo con los comandos que tu flujo de despliegue realmente necesita. No usesBash(*). - Usar al menos una inyección
!`cmd`para una comprobación previa que se ejecute antes de que Claude haga nada más.
Elige tu stack
Elige uno de estos o adáptalo a tu propio proyecto:
Node.js / npm
Comprobación previa: git status, git log --oneline -3
Build: npm run build
Tests: npm test
Publicar: git tag + git push
Python / pip
Comprobación previa: git status, git log --oneline -3
Tests: pytest
Build: python -m build
Publicar: git tag + git push
Docker
Comprobación previa: git status, docker info
Build: docker build
Push: docker push
Desplegar: docker compose up -d (o tu herramienta de orquestación)
Sitio estático (Netlify, Vercel, etc.)
Comprobación previa: git status, git log --oneline -3
Build: npm run build
Desplegar: netlify deploy --prod o vercel --prod
Validación
Tras escribir el skill, instálalo en tu directorio personal de skills:
mkdir -p ~/.claude/skills/my-deploycp SKILL.md ~/.claude/skills/my-deploy/Luego abre Claude Code en un proyecto y prueba estos dos escenarios:
Escenario A: cambios sin commitear
- Edita cualquier archivo sin commitearlo.
- Invoca el skill:
/my-deploy staging - Confirma que el skill detecta los cambios sin commitear a partir de la salida de
!`git status`y aborta con un mensaje de error claro. No debería pasar a ejecutar tests ni build.
Escenario B: árbol de trabajo limpio
- Commitea todos los cambios pendientes.
- Invoca el skill:
/my-deploy staging - Confirma que el skill ejecuta el flujo completo en orden.
Checklist
-
disable-model-invocation: trueestá activado -
argument-hintestá presente -
allowed-toolslista comandos específicos, noBash(*) - Al menos una inyección
!`cmd`está en el cuerpo - Escenario A: el skill aborta con cambios sin commitear
- Escenario B: el skill ejecuta el flujo completo en un árbol limpio
Solución
Una solución desarrollada para un proyecto Python está en solutions/01-deploy-skill/SKILL.md. Lee el ejercicio antes de mirar la solución.