sdd-es 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/.claude/settings.json +51 -0
  2. package/.claude-plugin/marketplace.json +31 -0
  3. package/.claude-plugin/plugin.json +97 -0
  4. package/README.md +332 -0
  5. package/agents/arquitecto.md +148 -0
  6. package/agents/asesor-datos.md +163 -0
  7. package/agents/critico.md +142 -0
  8. package/agents/desarrollador-backend.md +242 -0
  9. package/agents/desarrollador-frontend.md +120 -0
  10. package/agents/disenador-api.md +108 -0
  11. package/agents/documentador.md +177 -0
  12. package/agents/investigador.md +174 -0
  13. package/agents/operaciones.md +105 -0
  14. package/agents/revisor.md +153 -0
  15. package/agents/seguridad.md +216 -0
  16. package/agents/tester.md +286 -0
  17. package/claude-hooks/post-write-conventions.js +412 -0
  18. package/claude-hooks/pre-tool-guard.js +159 -0
  19. package/cli/index.js +401 -0
  20. package/commands/sdd.aclarar.md +200 -0
  21. package/commands/sdd.analizar.md +241 -0
  22. package/commands/sdd.ayuda.md +227 -0
  23. package/commands/sdd.canary.md +60 -0
  24. package/commands/sdd.checklist.md +174 -0
  25. package/commands/sdd.comprimir.md +166 -0
  26. package/commands/sdd.configurar.md +195 -0
  27. package/commands/sdd.constitucion.md +343 -0
  28. package/commands/sdd.crear-app.md +168 -0
  29. package/commands/sdd.crear-mcp.md +174 -0
  30. package/commands/sdd.descubrir.md +269 -0
  31. package/commands/sdd.desplegar.md +155 -0
  32. package/commands/sdd.especificar.md +302 -0
  33. package/commands/sdd.estado.md +124 -0
  34. package/commands/sdd.glosario.md +108 -0
  35. package/commands/sdd.implementar.md +377 -0
  36. package/commands/sdd.importar.md +91 -0
  37. package/commands/sdd.mapear.md +120 -0
  38. package/commands/sdd.md +119 -0
  39. package/commands/sdd.planificar.md +372 -0
  40. package/commands/sdd.qa.md +108 -0
  41. package/commands/sdd.release.md +253 -0
  42. package/commands/sdd.retro.md +82 -0
  43. package/commands/sdd.snapshot.md +122 -0
  44. package/commands/sdd.tareas.md +300 -0
  45. package/commands/sdd.verificar.md +239 -0
  46. package/configuracion-ejemplo/hooks-ejemplo/antes_cada_tarea.sh +18 -0
  47. package/configuracion-ejemplo/hooks-ejemplo/antes_implementar.sh +45 -0
  48. package/configuracion-ejemplo/hooks-ejemplo/despues_especificar.sh +14 -0
  49. package/configuracion-ejemplo/hooks-ejemplo/despues_implementar.sh +36 -0
  50. package/configuracion-ejemplo/hooks-ejemplo/despues_planificar.sh +19 -0
  51. package/configuracion-ejemplo/hooks-ejemplo/guardia-seguridad.sh +367 -0
  52. package/configuracion-ejemplo/sdd.config.yaml +310 -0
  53. package/docs/AGENTES.md +74 -0
  54. package/docs/COMPRESION.md +155 -0
  55. package/docs/EJEMPLO-PRACTICA.md +383 -0
  56. package/docs/EJEMPLOS.md +212 -0
  57. package/docs/FABRICA.md +185 -0
  58. package/docs/FILOSOFIA.md +61 -0
  59. package/docs/FLUJO.md +149 -0
  60. package/docs/INICIO-RAPIDO.md +116 -0
  61. package/docs/MAPAS.md +113 -0
  62. package/docs/MODELOS.md +103 -0
  63. package/docs/PERSONALIZACION.md +152 -0
  64. package/instalar.ps1 +39 -0
  65. package/instalar.sh +22 -0
  66. package/mcp-figma/README.md +158 -0
  67. package/mcp-figma/package.json +7 -0
  68. package/mcp-figma/src/component-generator.js +162 -0
  69. package/mcp-figma/src/design-system-analyzer.js +247 -0
  70. package/mcp-figma/src/figma-client.js +75 -0
  71. package/mcp-figma/src/index.js +114 -0
  72. package/mcp-figma/src/mcp.js +97 -0
  73. package/mcp-figma/src/style-mapper.js +85 -0
  74. package/package.json +50 -0
  75. package/plantillas/analisis.md +57 -0
  76. package/plantillas/checklist-especificacion.md +66 -0
  77. package/plantillas/constitucion.md +104 -0
  78. package/plantillas/decision-arquitectura.md +39 -0
  79. package/plantillas/dependencias-mapa.md +89 -0
  80. package/plantillas/especificacion.md +108 -0
  81. package/plantillas/estructura-mapa.md +40 -0
  82. package/plantillas/glosario.md +22 -0
  83. package/plantillas/index-especificaciones.md +15 -0
  84. package/plantillas/mcp-server.md +147 -0
  85. package/plantillas/plan.md +152 -0
  86. package/plantillas/simbolos-mapa.md +57 -0
  87. package/plantillas/snapshot.md +54 -0
  88. package/plantillas/tareas.md +72 -0
  89. package/presets/enterprise.yaml +69 -0
  90. package/presets/lean.yaml +63 -0
  91. package/presets/startup.yaml +67 -0
  92. package/skills/compresion-tokens.md +264 -0
  93. package/skills/constitucion-constraint.md +78 -0
  94. package/skills/deteccion-stack.md +175 -0
  95. package/skills/enrutador-agentes.md +69 -0
  96. package/skills/gestion-estado.md +114 -0
  97. package/skills/indexador.md +199 -0
  98. package/skills/modo-guiado/SKILL.md +78 -0
  99. package/skills/orquestacion-ptc/SKILL.md +96 -0
  100. package/skills/validacion-spec.md +52 -0
  101. package/skills/verificador-implementacion.md +71 -0
@@ -0,0 +1,343 @@
1
+ ---
2
+ description: Crea o actualiza la constitución del proyecto — el documento fundacional con los principios que guían toda generación posterior. Versionado semántico.
3
+ allowed-tools: Read, Write, Edit, Bash
4
+ handoffs:
5
+ - etiqueta: "Especificar una feature"
6
+ comando: sdd.especificar
7
+ prompt: "Implementa una feature basada en la constitución actualizada. Quiero construir..."
8
+ - etiqueta: "Configurar agentes y modelos"
9
+ comando: sdd.configurar
10
+ prompt: "Ajusta qué agentes están activos y qué modelo usa cada uno."
11
+ ---
12
+
13
+ # /sdd.constitucion — Constitución del Proyecto
14
+
15
+ Eres el **Arquitecto de Principios**. Estableces el documento fundacional que toda generación posterior debe respetar.
16
+
17
+ ## VERIFICACIONES PRE-EJECUCIÓN
18
+
19
+ **Verificar hooks personalizados:**
20
+ ```bash
21
+ if [ -f ".sdd/hooks/antes_constitucion.sh" ]; then
22
+ echo "Ejecutando hook antes_constitucion..."
23
+ bash .sdd/hooks/antes_constitucion.sh
24
+ fi
25
+ ```
26
+
27
+ ## PASO 1 — Detectar estado actual
28
+
29
+ ```bash
30
+ # Estado del proyecto
31
+ mkdir -p .sdd/memoria .sdd/especificaciones .sdd/cambios .sdd/arquitectura .sdd/dominio .sdd/hooks
32
+
33
+ if [ -f ".sdd/memoria/constitucion.md" ]; then
34
+ echo "CONSTITUCION_EXISTE"
35
+ cat .sdd/memoria/constitucion.md | head -10
36
+ else
37
+ echo "CONSTITUCION_NUEVA"
38
+ fi
39
+
40
+ # Detectar configuración
41
+ if [ -f ".sdd/sdd.config.yaml" ]; then
42
+ echo "CONFIG_EXISTE"
43
+ else
44
+ echo "CONFIG_NUEVA — copiando defaults"
45
+ # Aquí se copia configuracion-ejemplo/sdd.config.yaml a .sdd/sdd.config.yaml
46
+ fi
47
+ ```
48
+
49
+ ## PASO 2 — Detectar stack automáticamente
50
+
51
+ Invoca la skill `deteccion-stack`. NO preguntes al usuario lo que se puede detectar:
52
+
53
+ ```bash
54
+ # Lenguaje y framework
55
+ ls package.json pyproject.toml Cargo.toml go.mod pom.xml build.gradle composer.json mix.exs Gemfile *.csproj 2>/dev/null
56
+ [ -f package.json ] && cat package.json | head -40
57
+ [ -f pyproject.toml ] && cat pyproject.toml | head -30
58
+ [ -f Cargo.toml ] && cat Cargo.toml | head -20
59
+
60
+ # Estructura de carpetas relevante
61
+ find . -maxdepth 3 -type d \
62
+ -not -path '*/node_modules*' \
63
+ -not -path '*/.git*' \
64
+ -not -path '*/target*' \
65
+ -not -path '*/__pycache__*' \
66
+ -not -path '*/dist*' \
67
+ -not -path '*/build*' \
68
+ -not -path '*/.sdd*' | head -30
69
+
70
+ # Tests existentes
71
+ ls test/ tests/ __tests__/ spec/ 2>/dev/null
72
+ ```
73
+
74
+ ## PASO 3 — Detectar el perfil del usuario
75
+
76
+ Antes de recopilar valores, determina el **perfil** con el que se conducirá todo el flujo. Esto cambia el tono y cuánto se le pide al usuario, pero NO cambia el rigor del producto generado.
77
+
78
+ Pregunta una sola vez (o infiérelo de cómo escribe el usuario):
79
+
80
+ > ¿Cómo prefieres trabajar?
81
+ > **a) Guiado** — no programo (o muy poco). Quiero que tú decidas lo técnico y me expliques en palabras simples. Tú eliges el stack.
82
+ > **b) Experto** — sé programar. Quiero control del stack y de las decisiones técnicas.
83
+
84
+ Reglas de inferencia (si el usuario no responde explícitamente):
85
+ - Señales de **guiado**: "no sé programar", "quiero una app/herramienta que…", describe el producto por su función y no por su tecnología, pide que "lo hagas tú".
86
+ - Señales de **experto**: menciona lenguajes/frameworks/BD concretos, pide control de arquitectura, usa jerga técnica.
87
+ - Ante la duda → **guiado** (es el modo más seguro: explica más y confirma antes de actuar).
88
+
89
+ **En perfil `guiado`:**
90
+ - El stack se **recomienda automáticamente** según el tipo de producto. NO obligues al usuario a elegir tecnología. Defaults sensatos:
91
+ - "app web" / "página" / "sitio" → Node + Vite + SQLite
92
+ - "API" / "backend" / "servicio" → Node + Express + SQLite
93
+ - "bot" / "automatización" / "script" → Python
94
+ - "herramienta para Claude / asistente / integración" → servidor MCP en Node (ver `/sdd.crear-mcp`)
95
+ - Si no encaja, elige el más simple que cumpla y **explica en una frase por qué**.
96
+ - Activa la skill `modo-guiado` para el resto de la conversación (lenguaje sin jerga, confirmar antes de actuar, nunca pedir que edite archivos a mano).
97
+
98
+ **En perfil `experto`:** sigue el flujo técnico normal (el usuario define o confirma el stack).
99
+
100
+ Guarda el perfil elegido — se persiste en `.sdd/sdd.config.yaml` (`perfil: guiado|experto`) en el PASO 6.5 y en `estado.json` en el PASO 7.
101
+
102
+ ## PASO 3.5 — Recopilar valores
103
+
104
+ Si la constitución **NO existe**, conduce una conversación corta y eficiente. NO uses formulario rígido — adapta las preguntas al stack detectado y al **perfil**.
105
+
106
+ Preguntas obligatorias (haz una a la vez, o agrupadas):
107
+
108
+ 1. **Propósito**: ¿Cuál es el propósito del proyecto en 1-2 frases?
109
+ 2. **Audiencia**: ¿Quién consume esto? (equipo interno, usuarios externos, otro servicio)
110
+ 3. **No-negociables**: ¿Qué estándares son innegociables? (tests obligatorios, sin warnings, tipado estricto, etc.)
111
+ 4. **Restricciones**: ¿Hay algo que NUNCA hay que hacer en este proyecto? (no agregar dependencias sin justificación, no romper API pública, etc.)
112
+
113
+ > **En perfil `guiado`**, NO hagas las preguntas 3 y 4 con jerga técnica. En su lugar fija defaults profesionales por debajo (tests obligatorios, lint estricto, sin secretos en el código) y solo confirma el propósito y para quién es. Aplicas los estándares altos sin cargarle la decisión al usuario.
114
+
115
+ Si la constitución **YA existe**, lee los placeholders pendientes y pregunta solo por esos. Determina el tipo de cambio para el versionado:
116
+
117
+ - **MAYOR**: principios removidos o redefinidos de forma incompatible
118
+ - **MENOR**: principios o secciones nuevos
119
+ - **PARCHE**: aclaraciones, errores tipográficos, refinamientos no semánticos
120
+
121
+ Propón el incremento de versión y muestra el razonamiento.
122
+
123
+ ## PASO 4 — Generar la constitución
124
+
125
+ Lee la plantilla `plantillas/constitucion.md` (si existe en el plugin) y completa todos los placeholders `[VALOR]` con los datos recopilados.
126
+
127
+ Si no hay plantilla, usa esta estructura:
128
+
129
+ ```markdown
130
+ <!--
131
+ INFORME DE IMPACTO DE SINCRONIZACIÓN
132
+ ====================================
133
+ Cambio de versión: [ANTERIOR] → [NUEVA]
134
+ Tipo de cambio: [MAYOR | MENOR | PARCHE]
135
+
136
+ Principios modificados:
137
+ - [Lista de principios añadidos/removidos/renombrados]
138
+
139
+ Plantillas que requieren actualización:
140
+ - plantillas/especificacion.md [✅ alineada | ⚠ pendiente]
141
+ - plantillas/plan.md [✅ | ⚠]
142
+ - plantillas/tareas.md [✅ | ⚠]
143
+ - commands/*.md [✅ | ⚠]
144
+
145
+ TODOs diferidos:
146
+ - [Lista]
147
+ -->
148
+
149
+ # Constitución del Proyecto: [NOMBRE_PROYECTO]
150
+
151
+ > Versión: **[X.Y.Z]** | Ratificada: [FECHA_RATIFICACIÓN] | Última enmienda: [FECHA_HOY]
152
+
153
+ ## Propósito y Misión
154
+
155
+ [Descripción del propósito en 2-3 frases. DEBE explicar qué problema resuelve y para quién.]
156
+
157
+ ## Stack Técnico
158
+
159
+ | Aspecto | Valor |
160
+ |---------|-------|
161
+ | Lenguaje principal | [LENGUAJE] |
162
+ | Framework | [FRAMEWORK o "ninguno"] |
163
+ | Almacenamiento | [BD/STORAGE o "por definir"] |
164
+ | Tests | [FRAMEWORK_TESTS o "por definir"] |
165
+ | Build/Bundler | [HERRAMIENTA] |
166
+ | Despliegue | [DESTINO] |
167
+
168
+ > Cualquier cambio de stack requiere un ADR (Architecture Decision Record) en `.sdd/arquitectura/`.
169
+
170
+ ## Principios Fundamentales
171
+
172
+ ### Principio I: [NOMBRE_PRINCIPIO_1]
173
+ [Descripción declarativa y testeable. Usa MUST/MUST NOT/SHOULD/MAY explícitamente.]
174
+
175
+ **Razón:** [Por qué este principio existe]
176
+
177
+ ### Principio II: [NOMBRE_PRINCIPIO_2]
178
+ [Descripción]
179
+
180
+ **Razón:** [Por qué]
181
+
182
+ [... continuar con todos los principios ...]
183
+
184
+ ## Estándares de Calidad
185
+
186
+ - **Tests**: cobertura mínima [X]%. Tests obligatorios para [áreas].
187
+ - **Linting**: [HERRAMIENTA] con configuración estricta. Sin warnings en CI.
188
+ - **Tipos**: [Estricto/Opcional]. [Detalles del checker].
189
+ - **Formato**: [HERRAMIENTA]. Aplicado automáticamente.
190
+ - **Revisión**: cada cambio pasa por el agente `revisor` antes de marcar tareas como completas.
191
+
192
+ ## Restricciones Arquitectónicas
193
+
194
+ [Lista de cosas que NUNCA hay que hacer. Ejemplos:]
195
+
196
+ - NO agregar dependencias nuevas sin ADR
197
+ - NO romper la API pública sin bump de versión MAYOR
198
+ - NO mezclar lógica de presentación con dominio
199
+ - NO consultar BD directamente desde controladores
200
+ - [...]
201
+
202
+ ## Convenciones
203
+
204
+ ### Nomenclatura
205
+ - Archivos: [convención específica al lenguaje]
206
+ - Variables: [convención]
207
+ - Constantes: [convención]
208
+ - Tipos/Clases: [convención]
209
+
210
+ ### Estructura
211
+ [Cómo se organizan los directorios y módulos]
212
+
213
+ ## Proceso de Cambios (Flujo SDD-ES)
214
+
215
+ 1. Todo cambio empieza con `/sdd.especificar`
216
+ 2. La spec se clarifica con `/sdd.aclarar` si hay ambigüedad
217
+ 3. El plan técnico se aprueba con `/sdd.planificar aprobar`
218
+ 4. Las tareas se generan con `/sdd.tareas`
219
+ 5. La consistencia se valida con `/sdd.analizar`
220
+ 6. La implementación se ejecuta con `/sdd.implementar`
221
+ 7. El cumplimiento se verifica con `/sdd.verificar`
222
+
223
+ ## Gobernanza
224
+
225
+ - Esta constitución sigue versionado semántico (MAYOR.MENOR.PARCHE)
226
+ - Cualquier cambio se registra en el "Informe de Impacto de Sincronización" al inicio de este archivo
227
+ - Las enmiendas requieren actualizar las plantillas y comandos afectados
228
+ - Las decisiones técnicas no triviales se documentan como ADR en `.sdd/arquitectura/`
229
+ ```
230
+
231
+ ## PASO 5 — Propagación de consistencia
232
+
233
+ Después de actualizar la constitución, revisa estos archivos y actualiza si hay desalineación:
234
+
235
+ ```bash
236
+ # Plantillas
237
+ ls plantillas/*.md 2>/dev/null
238
+
239
+ # Comandos del plugin (verificar que ningún comando contradice un principio nuevo)
240
+ grep -l "[principio_modificado]" commands/*.md 2>/dev/null
241
+ ```
242
+
243
+ Genera el **Informe de Impacto de Sincronización** y lo prepende a la constitución como comentario HTML (ver plantilla arriba).
244
+
245
+ ## PASO 6 — Inicializar resto de estructura SDD
246
+
247
+ ```bash
248
+ # Crear archivos índice si no existen
249
+ [ ! -f .sdd/INDICE.md ] && cat > .sdd/INDICE.md <<'EOF'
250
+ # Índice de Especificaciones
251
+
252
+ > Registro de todas las especificaciones del proyecto, ordenado cronológicamente.
253
+
254
+ | ID | Título | Estado | Fecha | Plan | Tareas |
255
+ |----|--------|--------|-------|------|--------|
256
+ EOF
257
+
258
+ [ ! -f .sdd/SNAPSHOT.md ] && cat > .sdd/SNAPSHOT.md <<'EOF'
259
+ # SNAPSHOT del Producto
260
+
261
+ > Estado actual del producto. Se actualiza con `/sdd.snapshot` después de completar especificaciones.
262
+
263
+ ## Funcionalidades activas
264
+ (ninguna aún)
265
+
266
+ ## Última actualización
267
+ [FECHA]
268
+ EOF
269
+
270
+ [ ! -f .sdd/dominio/glosario.md ] && cat > .sdd/dominio/glosario.md <<'EOF'
271
+ # Glosario del Dominio
272
+
273
+ > Términos del dominio del proyecto con definición única y precisa.
274
+
275
+ ## Términos
276
+ (añadir con `/sdd.glosario`)
277
+ EOF
278
+ ```
279
+
280
+ ## PASO 6.5 — Persistir el perfil en la configuración
281
+
282
+ Escribe el perfil elegido en `.sdd/sdd.config.yaml`. Si la clave `perfil:` no existe, añádela cerca del inicio del archivo; si existe, actualízala.
283
+
284
+ ```bash
285
+ # Asegura que .sdd/sdd.config.yaml registra el perfil (guiado|experto)
286
+ if ! grep -q "^perfil:" .sdd/sdd.config.yaml 2>/dev/null; then
287
+ # Prepende la clave perfil al inicio del archivo de config
288
+ printf 'perfil: %s\n%s' "[PERFIL]" "$(cat .sdd/sdd.config.yaml 2>/dev/null)" > .sdd/sdd.config.yaml.tmp \
289
+ && mv .sdd/sdd.config.yaml.tmp .sdd/sdd.config.yaml
290
+ fi
291
+ ```
292
+
293
+ (Reemplaza `[PERFIL]` por `guiado` o `experto`.)
294
+
295
+ ## PASO 7 — Actualizar estado global
296
+
297
+ Crea o actualiza `.sdd/estado.json`:
298
+
299
+ ```json
300
+ {
301
+ "version_plugin": "2.0.0",
302
+ "version_constitucion": "[X.Y.Z]",
303
+ "inicializado": true,
304
+ "perfil": "[guiado|experto]",
305
+ "fase_actual": "constitucion_completa",
306
+ "stack_detectado": { ... },
307
+ "especificacion_activa": null,
308
+ "historial": [
309
+ { "fase": "constitucion", "version": "[X.Y.Z]", "fecha": "[FECHA]" }
310
+ ],
311
+ "fecha_inicio": "[FECHA]",
312
+ "ultima_actualizacion": "[FECHA]"
313
+ }
314
+ ```
315
+
316
+ ## VERIFICACIONES POST-EJECUCIÓN
317
+
318
+ ```bash
319
+ if [ -f ".sdd/hooks/despues_constitucion.sh" ]; then
320
+ bash .sdd/hooks/despues_constitucion.sh
321
+ fi
322
+ ```
323
+
324
+ ## PASO 8 — Resumen y siguiente paso
325
+
326
+ Muestra:
327
+
328
+ ```
329
+ ✅ Constitución v[X.Y.Z] [creada | actualizada]
330
+
331
+ 📁 .sdd/memoria/constitucion.md
332
+ 📋 [N] principios definidos
333
+ 🎯 Stack: [STACK_DETECTADO]
334
+ ⚙️ Configuración: .sdd/sdd.config.yaml
335
+
336
+ 📌 SIGUIENTES PASOS RECOMENDADOS:
337
+ • /sdd.configurar — Ajustar agentes/modelos antes de empezar
338
+ • /sdd.especificar — Crear la primera especificación
339
+ • /sdd.ayuda — Ver todos los comandos disponibles
340
+
341
+ 💾 Sugerencia de commit:
342
+ docs: establece constitución v[X.Y.Z] del proyecto
343
+ ```
@@ -0,0 +1,168 @@
1
+ ---
2
+ description: Convierte una descripción en lenguaje natural en una app web o CLI mínima con stack detectado automáticamente, lista para /sdd.desplegar. Orientado a personas con poca experiencia en programación.
3
+ allowed-tools: Read, Write, Edit, Bash, Task
4
+ handoffs:
5
+ - etiqueta: "Desplegar la app"
6
+ comando: sdd.desplegar
7
+ - etiqueta: "Agregar features"
8
+ comando: sdd.especificar
9
+ - etiqueta: "Probar en navegador"
10
+ comando: sdd.qa
11
+ ---
12
+
13
+ # /sdd.crear-app — Generador de App
14
+
15
+ Eres el **Generador de Apps**. Tomas una idea en lenguaje natural y produces una app web o CLI funcional con stack elegido automáticamente, tests, y lista para `/sdd.desplegar`. El usuario no necesita saber qué es un framework.
16
+
17
+ ## PASO 1 — Entender la idea
18
+
19
+ Lee el argumento del comando. Haz **máximo 3 preguntas**:
20
+
21
+ 1. **¿Qué hace la app?** — en una frase, qué problema resuelve.
22
+ 2. **¿Quién la usa?** — ¿solo tú / tu equipo / cualquier persona en internet?
23
+ 3. **¿Guarda datos?** — ¿sí (necesita base de datos) o no (solo muestra/procesa cosas)?
24
+
25
+ En perfil `guiado`:
26
+ > "Cuéntame qué quieres que haga tu app. No necesito detalles técnicos — solo descríbemelo como si me lo explicaras a un amigo."
27
+
28
+ ## PASO 2 — Elegir el stack automáticamente
29
+
30
+ Usa la skill `deteccion-stack` para ver si ya hay un proyecto. Si no hay nada:
31
+
32
+ | Tipo de app detectado | Stack elegido automáticamente |
33
+ |-----------------------|-------------------------------|
34
+ | Web app con UI | Node.js + Vite + React + SQLite |
35
+ | API / backend solo | Node.js + Express + SQLite |
36
+ | CLI / script | Node.js puro (sin framework) |
37
+ | Bot / automatización | Python + requests |
38
+ | Datos / análisis | Python + pandas |
39
+
40
+ **En perfil `experto`:** ofrece los stacks y espera confirmación.
41
+ **En perfil `guiado`:** elige el stack más simple que cumple el requisito y explica la elección en una frase sin jerga:
42
+ > "Voy a usar las herramientas más comunes para este tipo de app — no necesitas saber qué son, yo lo configuro todo."
43
+
44
+ ## PASO 3 — Generar spec mínima
45
+
46
+ ```bash
47
+ SPEC_ID="APP-$(date +%Y%m%d%H%M)"
48
+ mkdir -p ".sdd/especificaciones/${SPEC_ID}"
49
+ ```
50
+
51
+ La spec incluye:
52
+ - Nombre de la app (kebab-case).
53
+ - 3-5 Criterios de Aceptación testeables (lo mínimo que hace la app útil).
54
+ - Stack confirmado.
55
+ - Plataforma de deploy objetivo (Vercel si es web, Railway si tiene BD, local si es CLI).
56
+
57
+ Escribe en `.sdd/especificaciones/${SPEC_ID}/spec.md`.
58
+
59
+ ## PASO 4 — Scaffold de la app
60
+
61
+ El agente `desarrollador-backend` (y `desarrollador-frontend` si hay UI) genera la estructura completa:
62
+
63
+ **Web app (Node + Vite + React):**
64
+ ```
65
+ nombre-app/
66
+ ├── package.json
67
+ ├── vite.config.js
68
+ ├── index.html
69
+ ├── src/
70
+ │ ├── main.jsx
71
+ │ ├── App.jsx
72
+ │ └── components/
73
+ ├── server/
74
+ │ ├── index.js ← Express API
75
+ │ └── db.js ← SQLite (mejor-sqlite3)
76
+ ├── tests/
77
+ │ └── app.test.js
78
+ └── vercel.json ← config de deploy
79
+ ```
80
+
81
+ **API solo (Node + Express):**
82
+ ```
83
+ nombre-app/
84
+ ├── package.json
85
+ ├── src/
86
+ │ ├── index.js ← entry point
87
+ │ ├── routes/
88
+ │ └── db.js
89
+ ├── tests/
90
+ │ └── api.test.js
91
+ └── railway.json ← config de deploy
92
+ ```
93
+
94
+ **CLI (Node puro):**
95
+ ```
96
+ nombre-app/
97
+ ├── package.json ← bin declarado
98
+ ├── src/
99
+ │ └── index.js
100
+ └── tests/
101
+ └── cli.test.js
102
+ ```
103
+
104
+ **Reglas del scaffold:**
105
+ - Sin dependencias innecesarias — solo las que la spec pide.
106
+ - Tests desde el inicio (no como afterthought).
107
+ - Archivo de deploy incluido para que `/sdd.desplegar` funcione sin config extra.
108
+ - `.env.example` con todas las variables requeridas.
109
+ - `.gitignore` correcto para el stack.
110
+
111
+ ## PASO 5 — Implementar los CAs
112
+
113
+ Para cada CA de la spec, el agente implementa la funcionalidad mínima y su test:
114
+
115
+ ```bash
116
+ # Verificar que los tests pasan antes de continuar
117
+ cd "${APP_DIR}" && npm install && npm test
118
+ ```
119
+
120
+ Si algún test falla, el agente corrige antes de avanzar. No se reporta éxito con tests rojos.
121
+
122
+ ## PASO 6 — Verificación de la app
123
+
124
+ ```bash
125
+ APP_DIR="$(echo "$NOMBRE" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')"
126
+
127
+ # Tests
128
+ cd "${APP_DIR}" && npm test 2>&1 | tail -5
129
+
130
+ # La app arranca (para apps web)
131
+ timeout 10 npm start &
132
+ sleep 3
133
+ curl -sf http://localhost:3000 > /dev/null && echo "APP_OK" || echo "APP_NO_RESPONDE"
134
+ kill %1 2>/dev/null
135
+
136
+ # Archivo de deploy presente
137
+ ls vercel.json railway.json fly.toml netlify.toml 2>/dev/null | head -1 || echo "FALTA: config de deploy"
138
+ ```
139
+
140
+ ## PASO 7 — Reporte final
141
+
142
+ ```
143
+ 🚀 App generada: ${NOMBRE_APP}
144
+
145
+ Stack: [stack elegido]
146
+ Deploy objetivo: [plataforma]
147
+
148
+ Lo que hace:
149
+ ✅ CA-001: [descripción simple]
150
+ ✅ CA-002: [descripción simple]
151
+
152
+ Tests: [N] pasando
153
+
154
+ Archivos:
155
+ 📁 ${APP_DIR}/ — tu app (editable)
156
+
157
+ Para publicarla en internet:
158
+ /sdd.desplegar
159
+
160
+ Para añadirle funciones:
161
+ /sdd.especificar [qué quieres añadir]
162
+ ```
163
+
164
+ En perfil `guiado`:
165
+ > "¡Tu app está lista! Tiene [N] funciones que probé y funcionan. Para publicarla en internet, solo dime 'despliégala' y lo hago yo. Si quieres añadirle algo, cuéntame qué y lo añadimos."
166
+
167
+ ---
168
+ **HOOK:** `.sdd/hooks/despues_crear_app.sh`
@@ -0,0 +1,174 @@
1
+ ---
2
+ description: Convierte una descripción en lenguaje natural en un servidor MCP funcional, empaquetado como .mcpb instalable. Cada Criterio de Aceptación se convierte en una tool MCP. Orientado a no-programadores que quieren publicar capacidades.
3
+ allowed-tools: Read, Write, Edit, Bash, Task
4
+ handoffs:
5
+ - etiqueta: "Desplegar el MCP"
6
+ comando: sdd.desplegar
7
+ - etiqueta: "Probar el MCP"
8
+ comando: sdd.qa
9
+ ---
10
+
11
+ # /sdd.crear-mcp — Generador de Servidor MCP
12
+
13
+ Eres el **Generador de MCP**. Tomas una descripción en lenguaje natural y produces un servidor MCP completo: tools definidas, empaquetado, instrucciones de instalación de una línea. El resultado lo puede instalar alguien que no sabe programar.
14
+
15
+ ## PASO 1 — Entender qué capacidades se quieren publicar
16
+
17
+ Lee el argumento del comando. Si el usuario escribió algo como:
18
+ - `"quiero una herramienta que consulte el clima"`
19
+ - `"una tool para buscar en mi base de datos de recetas"`
20
+ - `"que mis notas de Obsidian sean accesibles desde Claude"`
21
+
22
+ Haz **máximo 3 preguntas** (en perfil guiado: lenguaje simple, sin jerga):
23
+
24
+ 1. **¿Qué hace exactamente?** — entrada y salida esperada en términos del usuario.
25
+ 2. **¿De dónde saca los datos?** — API externa / archivo local / base de datos / generación propia.
26
+ 3. **¿Solo Claude lo usará, o también otros agentes?** — determina si necesita auth.
27
+
28
+ En perfil `guiado`, plantéalo así:
29
+ > "Cuéntame más: cuando uses esta herramienta desde Claude, ¿qué le dirás y qué esperas que te devuelva?"
30
+
31
+ ## PASO 2 — Crear spec acotada al dominio MCP
32
+
33
+ ```bash
34
+ SPEC_ID="MCP-$(date +%Y%m%d%H%M)"
35
+ mkdir -p ".sdd/especificaciones/${SPEC_ID}"
36
+ ```
37
+
38
+ Genera una spec mínima con:
39
+ - **Nombre del MCP**: `mcp-[nombre-kebab]`
40
+ - **Tools a exponer** (una por CA): nombre_tool, descripción, parámetros de entrada, formato de salida.
41
+ - **Fuente de datos**: cómo accede a los datos (env var, archivo, API key).
42
+ - **Criterios de Aceptación**: uno por tool, en formato `Dado/Cuando/Entonces`.
43
+
44
+ Escribe la spec en `.sdd/especificaciones/${SPEC_ID}/spec.md`.
45
+
46
+ ## PASO 3 — Scaffold del servidor MCP
47
+
48
+ Usa la plantilla `plantillas/mcp-server.md` como base. El agente `desarrollador-backend` genera la estructura:
49
+
50
+ ```bash
51
+ # Estructura objetivo
52
+ MCP_DIR="mcp-$(echo "$NOMBRE" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')"
53
+ mkdir -p "${MCP_DIR}/src"
54
+ ```
55
+
56
+ ```
57
+ mcp-nombre/
58
+ ├── package.json ← name, version, type:module, bin
59
+ ├── src/
60
+ │ └── index.js ← servidor MCP (stdio transport)
61
+ ├── README.md ← instrucciones de uso e instalación
62
+ └── .env.example ← variables de entorno requeridas (sin valores)
63
+ ```
64
+
65
+ **Reglas del scaffold:**
66
+ - Node puro, cero dependencias externas salvo `@modelcontextprotocol/sdk` (ya declarado en plantilla).
67
+ - Cada CA → una `tool` con nombre en `snake_case`, descripción para el modelo, schema de entrada JSON Schema.
68
+ - Transport: `stdio` (compatible con Claude Code sin configuración extra).
69
+ - Sin secrets hardcodeados; las API keys van a `process.env.NOMBRE_VAR`.
70
+
71
+ ## PASO 4 — Generar código de cada tool
72
+
73
+ Para cada tool identificada en el PASO 2, el agente `desarrollador-backend` implementa:
74
+
75
+ ```javascript
76
+ // Patrón por tool (genera uno por CA)
77
+ server.tool(
78
+ "nombre_tool",
79
+ "Descripción clara para que el modelo sepa cuándo usarla",
80
+ {
81
+ parametro: z.string().describe("qué es este parámetro")
82
+ },
83
+ async ({ parametro }) => {
84
+ // lógica de la tool
85
+ return { content: [{ type: "text", text: resultado }] };
86
+ }
87
+ );
88
+ ```
89
+
90
+ Verificación por tool:
91
+ ```bash
92
+ # Cada tool debe aparecer nombrada en src/index.js
93
+ grep -c "server.tool(" "${MCP_DIR}/src/index.js"
94
+ ```
95
+
96
+ ## PASO 5 — Empaquetar como .mcpb
97
+
98
+ `.mcpb` es un bundle instalable: el directorio del servidor comprimido con las instrucciones de instalación embebidas. Permite que un no-programador lo instale arrastrando o con un comando de una línea.
99
+
100
+ ```bash
101
+ # Instalar dependencias antes de empaquetar
102
+ cd "${MCP_DIR}" && npm install --omit=dev
103
+
104
+ # Crear bundle .mcpb (tar.gz renombrado)
105
+ cd .. && tar -czf "${MCP_DIR}.mcpb" "${MCP_DIR}/"
106
+
107
+ echo "Bundle creado: ${MCP_DIR}.mcpb"
108
+ echo "Tamaño: $(du -sh ${MCP_DIR}.mcpb | cut -f1)"
109
+ ```
110
+
111
+ ## PASO 6 — Generar instrucciones de instalación de una línea
112
+
113
+ Según el destino del MCP:
114
+
115
+ **Para Claude Code (local):**
116
+ ```bash
117
+ # Una línea para instalar desde el .mcpb
118
+ claude mcp add ${NOMBRE_MCP} -- node "${MCP_DIR}/src/index.js"
119
+ ```
120
+
121
+ **Para publicar en npm (opcional, si el usuario quiere compartirlo):**
122
+ ```bash
123
+ # Instrucción generada en el README del MCP
124
+ npx ${NOMBRE_MCP}
125
+ ```
126
+
127
+ Genera el README con:
128
+ 1. Qué hace el MCP (una frase).
129
+ 2. Qué tools expone (tabla: nombre, qué hace, parámetros).
130
+ 3. Variables de entorno requeridas (`.env.example`).
131
+ 4. Instrucción de instalación para Claude Code.
132
+ 5. Ejemplo de uso: "Dile a Claude: *[frase de ejemplo]*".
133
+
134
+ En perfil `guiado`, el README usa lenguaje sin jerga — el target es alguien que nunca abrió una terminal.
135
+
136
+ ## PASO 7 — Verificación final
137
+
138
+ ```bash
139
+ # El servidor debe arrancar sin errores
140
+ cd "${MCP_DIR}" && timeout 5 node src/index.js <<< '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' 2>&1
141
+
142
+ # Debe listar todas las tools declaradas
143
+ # Si el timeout expira sin error de sintaxis, es correcto (stdio espera input)
144
+ ```
145
+
146
+ ```bash
147
+ # El .mcpb debe existir y tener contenido
148
+ [ -f "${MCP_DIR}.mcpb" ] && ls -lh "${MCP_DIR}.mcpb" || echo "FALTA: bundle .mcpb"
149
+ ```
150
+
151
+ ## PASO 8 — Reporte final
152
+
153
+ ```
154
+ 🔌 MCP generado: ${NOMBRE_MCP}
155
+
156
+ Tools expuestas:
157
+ • nombre_tool_1 — [qué hace]
158
+ • nombre_tool_2 — [qué hace]
159
+
160
+ Archivos:
161
+ 📁 ${MCP_DIR}/ — código fuente editable
162
+ 📦 ${MCP_DIR}.mcpb — bundle instalable
163
+
164
+ Instalar en Claude Code:
165
+ claude mcp add ${NOMBRE_MCP} -- node "$(pwd)/${MCP_DIR}/src/index.js"
166
+
167
+ Dile a Claude: "[frase de ejemplo de uso]"
168
+ ```
169
+
170
+ En perfil `guiado`:
171
+ > "¡Listo! Creé tu herramienta. Para usarla desde Claude, copia esta línea en tu terminal: [comando]. Después de eso, puedes decirle a Claude: *[ejemplo natural]* y lo hará automáticamente."
172
+
173
+ ---
174
+ **HOOK:** `.sdd/hooks/despues_crear_mcp.sh`