speckit-implement
Ejecuta el plan de implementación procesando y ejecutando todas las tareas definidas en tasks.md
SKILL.md.claude/skills/speckit-implement/SKILL.md
GitHubEntrada del usuario
$ARGUMENTS
DEBE considerar la entrada del usuario antes de continuar (si no está vacía).
Verificaciones previas a la ejecución
Verificar hooks de extensión (antes de la implementación):
- Verifica si
.specify/extensions.ymlexiste en la raíz del proyecto. - Si existe, léelo y busca entradas bajo la clave
hooks.before_implement - Si el YAML no se puede analizar o no es válido, omite la verificación de hooks silenciosamente y continúa con normalidad
- Filtra los hooks donde
enabledsea explícitamentefalse. Trata los hooks sin el campoenabledcomo habilitados por defecto. - Para cada hook restante, no intentes interpretar ni evaluar las expresiones
conditiondel hook:- Si el hook no tiene campo
condition, o está vacío/null, trata el hook como ejecutable - Si el hook define un
conditionno vacío, omite el hook y deja la evaluación de la condición a la implementación de HookExecutor
- Si el hook no tiene campo
- Al construir comandos slash a partir de los nombres de comando del hook, reemplaza los puntos (
.) por guiones (-). Por ejemplo,speckit.git.commit→/speckit-git-commit. - Para cada hook ejecutable, muestra lo siguiente según su indicador
optional:- Hook opcional (
optional: true):## Extension Hooks **Optional Pre-Hook**: {extension} Command: `/{command}` Description: {description} Prompt: {prompt} To execute: `/{command}` - Hook obligatorio (
optional: false):
Después de emitir el bloque anterior, DEBE invocar realmente el hook y esperar a que termine antes de continuar. Ejecútalo de la misma forma en que ejecutarías el comando tú mismo en este agente/sesión (la invocación puede diferir del id literal## Extension Hooks **Automatic Pre-Hook**: {extension} Executing: `/{command}` EXECUTE_COMMAND: {command} Wait for the result of the hook command before proceeding to the Outline.{command}mostrado arriba, por ejemplo, un agente en modo skills lo ejecuta como/skill:speckit-...o$speckit-...). Emitir el bloque por sí solo no ejecuta el hook.
- Hook opcional (
- Si no hay hooks registrados o
.specify/extensions.ymlno existe, omite silenciosamente
Esquema
Ejecuta
.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasksdesde la raíz del repositorio y analiza FEATURE_DIR y la lista AVAILABLE_DOCS. Todas las rutas deben ser absolutas. Para comillas simples en argumentos como "I'm Groot", usa la sintaxis de escape: por ejemplo 'I'''m Groot' (o comillas dobles si es posible: "I'm Groot").Verificar el estado de los checklists (si existe FEATURE_DIR/checklists/):
Escanea todos los archivos de checklist en el directorio checklists/
Para cada checklist, cuenta:
- Elementos totales: todas las líneas que coincidan con
- [ ],- [X]o- [x] - Elementos completados: líneas que coincidan con
- [X]o- [x] - Elementos incompletos: líneas que coincidan con
- [ ]
- Elementos totales: todas las líneas que coincidan con
Crea una tabla de estado:
| Checklist | Total | Completed | Incomplete | Status | |-----------|-------|-----------|------------|--------| | ux.md | 12 | 12 | 0 | ✓ PASS | | test.md | 8 | 5 | 3 | ✗ FAIL | | security.md | 6 | 6 | 0 | ✓ PASS |Calcula el estado general:
- PASS: todos los checklists tienen 0 elementos incompletos
- FAIL: uno o más checklists tienen elementos incompletos
Si algún checklist está incompleto:
- Muestra la tabla con los conteos de elementos incompletos
- DETENTE y pregunta: "Algunos checklists están incompletos. ¿Deseas continuar con la implementación de todos modos? (sí/no)"
- Espera la respuesta del usuario antes de continuar
- Si el usuario dice "no" o "espera" o "detente", detén la ejecución
- Si el usuario dice "sí" o "continuar" o "proceder", continúa con el paso 3
Si todos los checklists están completos:
- Muestra la tabla indicando que todos los checklists pasaron
- Continúa automáticamente al paso 3
Carga y analiza el contexto de implementación:
- REQUERIDO: lee tasks.md para obtener la lista completa de tareas y el plan de ejecución
- REQUERIDO: lee plan.md para el stack tecnológico, la arquitectura y la estructura de archivos
- SI EXISTE: lee data-model.md para las entidades y relaciones
- SI EXISTE: lee contracts/ para las especificaciones de API y los requisitos de prueba
- SI EXISTE: lee research.md para las decisiones técnicas y las restricciones
- SI EXISTE: lee .specify/memory/constitution.md para las restricciones de gobernanza
- SI EXISTE: lee quickstart.md para los escenarios de integración
Verificación de la configuración del proyecto:
- REQUERIDO: crea/verifica los archivos ignore según la configuración real del proyecto:
Lógica de detección y creación:
Verifica si el siguiente comando se ejecuta con éxito para determinar si el repositorio es un repo git (crea/verifica .gitignore si es así):
git rev-parse --git-dir 2>/dev/nullVerifica si existe Dockerfile* o si Docker aparece en plan.md → crea/verifica .dockerignore
Verifica si existe .eslintrc* → crea/verifica .eslintignore
Verifica si existe eslint.config.* → asegúrate de que las entradas
ignoresde la configuración cubran los patrones requeridosVerifica si existe .prettierrc* → crea/verifica .prettierignore
Verifica si existe .npmrc o package.json → crea/verifica .npmignore (si se publica)
Verifica si existen archivos terraform (*.tf) → crea/verifica .terraformignore
Verifica si se necesita .helmignore (hay charts de helm presentes) → crea/verifica .helmignore
Si el archivo ignore ya existe: verifica que contenga los patrones esenciales, agrega solo los patrones críticos faltantes Si falta el archivo ignore: créalo con el conjunto completo de patrones para la tecnología detectada
Patrones comunes por tecnología (según el stack tecnológico de plan.md):
- Node.js/JavaScript/TypeScript:
node_modules/,dist/,build/,*.log,.env* - Python:
__pycache__/,*.pyc,.venv/,venv/,dist/,*.egg-info/ - Java:
target/,*.class,*.jar,.gradle/,build/ - C#/.NET:
bin/,obj/,*.user,*.suo,packages/ - Go:
*.exe,*.test,vendor/,*.out - Ruby:
.bundle/,log/,tmp/,*.gem,vendor/bundle/ - PHP:
vendor/,*.log,*.cache,*.env - Rust:
target/,debug/,release/,*.rs.bk,*.rlib,*.prof*,.idea/,*.log,.env* - Kotlin:
build/,out/,.gradle/,.idea/,*.class,*.jar,*.iml,*.log,.env* - C++:
build/,bin/,obj/,out/,*.o,*.so,*.a,*.exe,*.dll,.idea/,*.log,.env* - C:
build/,bin/,obj/,out/,*.o,*.a,*.so,*.exe,*.dll,autom4te.cache/,config.status,config.log,.idea/,*.log,.env* - Swift:
.build/,DerivedData/,*.swiftpm/,Packages/ - R:
.Rproj.user/,.Rhistory,.RData,.Ruserdata,*.Rproj,packrat/,renv/ - Universal:
.DS_Store,Thumbs.db,*.tmp,*.swp,.vscode/,.idea/
Patrones específicos por herramienta:
- Docker:
node_modules/,.git/,Dockerfile*,.dockerignore,*.log*,.env*,coverage/ - ESLint:
node_modules/,dist/,build/,coverage/,*.min.js - Prettier:
node_modules/,dist/,build/,coverage/,package-lock.json,yarn.lock,pnpm-lock.yaml - Terraform:
.terraform/,*.tfstate*,*.tfvars,.terraform.lock.hcl - Kubernetes/k8s:
*.secret.yaml,secrets/,.kube/,kubeconfig*,*.key,*.crt
Analiza la estructura de tasks.md y extrae:
- Fases de las tareas: Setup, Tests, Core, Integration, Polish
- Dependencias de las tareas: reglas de ejecución secuencial vs. paralela
- Detalles de las tareas: ID, descripción, rutas de archivo, marcadores paralelos [P]
- Flujo de ejecución: orden y requisitos de dependencia
Ejecuta la implementación siguiendo el plan de tareas:
- Ejecución fase por fase: completa cada fase antes de pasar a la siguiente
- Respeta las dependencias: ejecuta las tareas secuenciales en orden; las tareas paralelas [P] pueden ejecutarse juntas
- Sigue el enfoque TDD: ejecuta las tareas de prueba antes de sus correspondientes tareas de implementación
- Coordinación basada en archivos: las tareas que afectan a los mismos archivos deben ejecutarse secuencialmente
- Puntos de control de validación: verifica la finalización de cada fase antes de continuar
Reglas de ejecución de la implementación:
- Primero la configuración: inicializa la estructura del proyecto, las dependencias y la configuración
- Pruebas antes que código: si es necesario, escribe pruebas para contratos, entidades y escenarios de integración
- Desarrollo del núcleo: implementa modelos, servicios, comandos CLI, endpoints
- Trabajo de integración: conexiones a bases de datos, middleware, logging, servicios externos
- Pulido y validación: pruebas unitarias, optimización de rendimiento, documentación
Seguimiento del progreso y manejo de errores:
- Informa el progreso después de cada tarea completada
- Detén la ejecución si falla alguna tarea no paralela
- Para las tareas paralelas [P], continúa con las que tuvieron éxito e informa las que fallaron
- Proporciona mensajes de error claros con contexto para depuración
- Sugiere los próximos pasos si la implementación no puede continuar
- IMPORTANTE: para las tareas completadas, asegúrate de marcarlas como [X] en el archivo de tareas.
Validación de finalización:
- Verifica que todas las tareas requeridas estén completadas
- Comprueba que las funcionalidades implementadas coincidan con la especificación original
- Valida que las pruebas pasen y que la cobertura cumpla con los requisitos
- Confirma que la implementación sigue el plan técnico
Nota: este comando asume que existe un desglose completo de tareas en tasks.md. Si las tareas están incompletas o faltan, sugiere ejecutar primero /speckit-tasks para regenerar la lista de tareas.
Hooks obligatorios posteriores a la ejecución
DEBE completar esta sección antes de informar la finalización al usuario.
Verifica si .specify/extensions.yml existe en la raíz del proyecto.
- Si no existe, o no hay hooks registrados bajo
hooks.after_implement, pasa directamente al Informe de finalización. - Si existe, léelo y busca entradas bajo la clave
hooks.after_implement. - Si el YAML no se puede analizar o no es válido, omite la verificación de hooks silenciosamente y continúa hacia el Informe de finalización.
- Filtra los hooks donde
enabledsea explícitamentefalse. Trata los hooks sin el campoenabledcomo habilitados por defecto. - Para cada hook restante, no intentes interpretar ni evaluar las expresiones
conditiondel hook:- Si el hook no tiene campo
condition, o está vacío/null, trata el hook como ejecutable - Si el hook define un
conditionno vacío, omite el hook y deja la evaluación de la condición a la implementación de HookExecutor
- Si el hook no tiene campo
- Al construir comandos slash a partir de los nombres de comando del hook, reemplaza los puntos (
.) por guiones (-). Por ejemplo,speckit.git.commit→/speckit-git-commit. - Para cada hook ejecutable, muestra lo siguiente según su indicador
optional:- Hook obligatorio (
optional: false) — DEBE emitirEXECUTE_COMMAND:para cada hook obligatorio:
Después de emitir el bloque anterior, DEBE invocar realmente el hook y esperar a que termine antes de continuar. Ejecútalo de la misma forma en que ejecutarías el comando tú mismo en este agente/sesión (la invocación puede diferir del id literal## Extension Hooks **Automatic Hook**: {extension} Executing: `/{command}` EXECUTE_COMMAND: {command}{command}mostrado arriba, por ejemplo, un agente en modo skills lo ejecuta como/skill:speckit-...o$speckit-...). Emitir el bloque por sí solo no ejecuta el hook. - Hook opcional (
optional: true):## Extension Hooks **Optional Hook**: {extension} Command: `/{command}` Description: {description} Prompt: {prompt} To execute: `/{command}`
- Hook obligatorio (
Informe de finalización
Informa el estado final con un resumen del trabajo completado.
Se considera hecho cuando
- Todas las tareas en tasks.md están completadas y marcadas como
[X] - La implementación está validada contra la especificación, el plan y la cobertura de pruebas
- Los hooks de extensión se despacharon u omitieron según las reglas de la sección Hooks obligatorios posteriores a la ejecución anterior
- La finalización se informó al usuario con un resumen del trabajo completado