sdd-es 2.0.0 → 2.6.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 (127) hide show
  1. package/.claude/settings.json +29 -29
  2. package/.claude/settings.local.json +10 -0
  3. package/.claude-plugin/marketplace.json +10 -7
  4. package/.claude-plugin/plugin.json +59 -37
  5. package/.gitignore +20 -0
  6. package/.mcp.json +8 -0
  7. package/LICENSE +21 -0
  8. package/README.md +77 -40
  9. package/agents/architecture-designer.md +211 -0
  10. package/agents/arquitecto.md +16 -1
  11. package/agents/asesor-datos.md +15 -1
  12. package/agents/critico.md +37 -1
  13. package/agents/desarrollador-backend.md +3 -1
  14. package/agents/desarrollador-frontend.md +11 -16
  15. package/agents/disenador-api.md +13 -1
  16. package/agents/documentador.md +3 -1
  17. package/agents/investigador.md +3 -1
  18. package/agents/operaciones.md +3 -1
  19. package/agents/product-designer.md +268 -0
  20. package/agents/revisor.md +25 -1
  21. package/agents/seguridad.md +5 -1
  22. package/agents/tester.md +3 -1
  23. package/claude-hooks/agent-memory.js +288 -0
  24. package/claude-hooks/pre-tool-guard.js +61 -9
  25. package/cli/index.js +1 -2
  26. package/commands/sdd.adr.md +196 -0
  27. package/commands/sdd.analizar.md +23 -2
  28. package/commands/sdd.ayuda.md +13 -0
  29. package/commands/sdd.compliance.md +521 -0
  30. package/commands/sdd.configurar.md +34 -1
  31. package/commands/sdd.constitucion.md +198 -23
  32. package/commands/sdd.construir.md +210 -0
  33. package/commands/sdd.crear-mcp.md +2 -0
  34. package/commands/sdd.defect-report.md +134 -0
  35. package/commands/sdd.descubrir.md +19 -0
  36. package/commands/sdd.dise/303/261ar.md +188 -0
  37. package/commands/sdd.estado.md +120 -3
  38. package/commands/sdd.exportar.md +344 -0
  39. package/commands/sdd.implementar.md +272 -52
  40. package/commands/sdd.interpretar.md +239 -0
  41. package/commands/sdd.md +93 -4
  42. package/commands/sdd.optimizar-memoria.md +47 -0
  43. package/commands/sdd.optimizar.md +164 -0
  44. package/commands/sdd.planificar.md +64 -0
  45. package/commands/sdd.retro.md +74 -0
  46. package/commands/sdd.verificar.md +81 -0
  47. package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
  48. package/configuracion-ejemplo/sdd.config.yaml +10 -0
  49. package/craft/accessibility-baseline.md +216 -0
  50. package/craft/anti-ai-slop.md +158 -0
  51. package/craft/color.md +160 -0
  52. package/craft/typography.md +121 -0
  53. package/design-systems/bold-brutalist/DESIGN.md +239 -0
  54. package/design-systems/editorial-minimal/DESIGN.md +205 -0
  55. package/design-systems/neutral-modern/DESIGN.md +227 -0
  56. package/design-systems/vibrant-consumer/DESIGN.md +257 -0
  57. package/design-systems/warm-editorial/DESIGN.md +221 -0
  58. package/docs/AGENTES.md +4 -1
  59. package/docs/CASO-COMPLETO.md +206 -0
  60. package/docs/EJEMPLOS.md +61 -185
  61. package/docs/FABRICA.md +163 -115
  62. package/docs/INICIO-RAPIDO.md +27 -79
  63. package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
  64. package/docs/MODELOS.md +3 -0
  65. package/docs/QUE-PASA-SI-FALLA.md +404 -0
  66. package/docs/README.md +43 -0
  67. package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
  68. package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
  69. package/package.json +15 -10
  70. package/plantillas/job-story-mejorar-prompt.md +107 -0
  71. package/presets/enterprise.yaml +6 -0
  72. package/presets/lean.yaml +4 -0
  73. package/presets/startup.yaml +6 -0
  74. package/skills/adr-indexer/SKILL.md +181 -0
  75. package/skills/cache-audit/SKILL.md +163 -0
  76. package/skills/critica-diseno/SKILL.md +193 -0
  77. package/skills/descubrir-idea/SKILL.md +133 -0
  78. package/skills/effort-router/SKILL.md +128 -0
  79. package/skills/elegir-direccion/SKILL.md +184 -0
  80. package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
  81. package/skills/github-connect/INDEX.md +223 -0
  82. package/skills/github-connect/INTEGRATION.md +361 -0
  83. package/skills/github-connect/QUICK-START.md +168 -0
  84. package/skills/github-connect/README.md +414 -0
  85. package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
  86. package/skills/github-connect/SKILL.md +343 -0
  87. package/skills/github-connect/STRUCTURE.txt +252 -0
  88. package/skills/github-connect/example-config.yaml +41 -0
  89. package/skills/github-connect/github-connect.sh +419 -0
  90. package/skills/interpretar-idea/SKILL.md +254 -0
  91. package/skills/mejorar-prompt/SKILL.md +237 -0
  92. package/skills/memory-compactor/SKILL.md +68 -0
  93. package/skills/modo-guiado/SKILL.md +12 -2
  94. package/skills/mutation-detector/SKILL.md +134 -0
  95. package/skills/observabilidad-consumo/SKILL.md +164 -0
  96. package/skills/token-budget/SKILL.md +177 -0
  97. package/skills/vercel-deploy/00-START-HERE.txt +364 -0
  98. package/skills/vercel-deploy/CHECKLIST.md +205 -0
  99. package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
  100. package/skills/vercel-deploy/FLOW.txt +334 -0
  101. package/skills/vercel-deploy/INDEX.md +276 -0
  102. package/skills/vercel-deploy/INTEGRATION.md +328 -0
  103. package/skills/vercel-deploy/MANIFEST.md +310 -0
  104. package/skills/vercel-deploy/README.md +65 -0
  105. package/skills/vercel-deploy/SKILL.md +356 -0
  106. package/skills/vercel-deploy/deploy.sh +298 -0
  107. package/skills/vercel-deploy/estado.json.example +205 -0
  108. package/skills/vercel-deploy/skill.yaml +323 -0
  109. package/skills/vercel-deploy/vercel-deploy.sh +216 -0
  110. package/skills/wireframe-mvp/SKILL.md +157 -0
  111. package/docs/EJEMPLO-PRACTICA.md +0 -383
  112. package/mcp-figma/README.md +0 -158
  113. package/mcp-figma/package.json +0 -7
  114. package/mcp-figma/src/component-generator.js +0 -162
  115. package/mcp-figma/src/design-system-analyzer.js +0 -247
  116. package/mcp-figma/src/figma-client.js +0 -75
  117. package/mcp-figma/src/index.js +0 -114
  118. package/mcp-figma/src/mcp.js +0 -97
  119. package/mcp-figma/src/style-mapper.js +0 -85
  120. /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
  121. /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
  122. /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
  123. /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
  124. /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
  125. /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
  126. /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
  127. /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
@@ -0,0 +1,239 @@
1
+ ---
2
+ description: Punto de entrada de FORGE. Convierte una idea en texto libre a un IR JSON validado. Orquesta discovery + interpreter + validación. Primer comando para cualquier proyecto nuevo.
3
+ allowed-tools: Read, Write, Bash
4
+ ---
5
+
6
+ # /sdd.interpretar — Entrada a FORGE
7
+
8
+ **Uso:**
9
+ ```
10
+ /sdd.interpretar [idea en texto libre]
11
+ ```
12
+
13
+ **Ejemplos:**
14
+ ```
15
+ /sdd.interpretar Quiero una app para que mis clientes reserven citas
16
+ /sdd.interpretar Necesito algo para organizar los pedidos de mi restaurante
17
+ /sdd.interpretar Plataforma de cursos online con pagos y certificados
18
+ /sdd.interpretar confirmar
19
+ /sdd.interpretar corregir "es para múltiples negocios, no solo uno"
20
+ ```
21
+
22
+ ---
23
+
24
+ ## PASO 1 — Detectar modo de invocación
25
+
26
+ ```bash
27
+ ARGS="$*"
28
+ ```
29
+
30
+ Detecta el caso:
31
+
32
+ | Argumento | Modo |
33
+ |-----------|------|
34
+ | `confirmar` o `sí` | Confirmar IR pendiente → guardar |
35
+ | `corregir [qué]` | Corregir campo del IR pendiente |
36
+ | `ver` | Mostrar IR actual en `.sdd/ir.json` |
37
+ | `[texto libre]` | Nueva idea → flujo completo |
38
+ | *(vacío)* | Pedir que escriba su idea |
39
+
40
+ ---
41
+
42
+ ## PASO 2 — Si es texto libre: flujo completo
43
+
44
+ ### 2.1 — Verificar si hay IR anterior
45
+
46
+ ```bash
47
+ if [ -f ".sdd/ir.json" ]; then
48
+ echo "HAY_IR_ANTERIOR"
49
+ cat .sdd/ir.json | grep '"name"' | head -1
50
+ fi
51
+ ```
52
+
53
+ Si hay IR anterior, pregunta:
54
+ ```
55
+ Ya tienes un proyecto en curso: [product.name]
56
+
57
+ ¿Qué quieres hacer?
58
+ 1) Continuar con ese proyecto → escribe /sdd.diseñar
59
+ 2) Actualizar la idea de ese proyecto → escribe /sdd.interpretar corregir [qué]
60
+ 3) Empezar un proyecto nuevo → escribe /sdd.interpretar nuevo [idea]
61
+ ```
62
+
63
+ Si no hay IR anterior, continúa.
64
+
65
+ ### 2.2 — Crear carpeta .sdd/
66
+
67
+ ```bash
68
+ mkdir -p .sdd
69
+ ```
70
+
71
+ ### 2.3 — Invocar skill `descubrir-idea`
72
+
73
+ Activa la skill de discovery. La skill hace las 5 preguntas y guarda `.sdd/descubrimiento.md`.
74
+
75
+ Después de que el usuario responda las 5 preguntas, continúa al paso 2.4.
76
+
77
+ ### 2.4 — Invocar skill `interpretar-idea`
78
+
79
+ Activa la skill con la idea original del usuario + contexto de `.sdd/descubrimiento.md`.
80
+
81
+ La skill genera el IR JSON en 2 fases (razonamiento libre + extracción JSON) y lo muestra al usuario.
82
+
83
+ **Si la skill requiere clarificación** (`confidence < 0.7`): el usuario responde la pregunta, y la skill re-genera el IR. Luego continúa.
84
+
85
+ ---
86
+
87
+ ## PASO 3 — Si es `confirmar` o `sí`
88
+
89
+ ```bash
90
+ # Verificar que hay un IR pendiente de confirmar
91
+ if [ ! -f ".sdd/ir-pendiente.json" ] && [ ! -f ".sdd/ir.json" ]; then
92
+ echo "No hay ningún IR pendiente. Escribe tu idea primero:"
93
+ echo " /sdd.interpretar [tu idea]"
94
+ exit 0
95
+ fi
96
+ ```
97
+
98
+ Guarda el IR:
99
+
100
+ ```bash
101
+ cp .sdd/ir-pendiente.json .sdd/ir.json 2>/dev/null || true
102
+ ```
103
+
104
+ Actualiza `.sdd/estado.json`:
105
+
106
+ ```bash
107
+ # Leer estado actual o crear si no existe
108
+ if [ -f ".sdd/estado.json" ]; then
109
+ # Agregar campo ir_generado: true
110
+ node -e "
111
+ const fs = require('fs');
112
+ const estado = JSON.parse(fs.readFileSync('.sdd/estado.json', 'utf8'));
113
+ estado.ir_generado = true;
114
+ estado.ir_id = JSON.parse(fs.readFileSync('.sdd/ir.json', 'utf8')).id;
115
+ estado.ultima_actualizacion = new Date().toISOString();
116
+ fs.writeFileSync('.sdd/estado.json', JSON.stringify(estado, null, 2));
117
+ " 2>/dev/null || echo "{ \"ir_generado\": true, \"ultima_actualizacion\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" }" > .sdd/estado.json
118
+ fi
119
+ ```
120
+
121
+ Muestra confirmación y siguiente paso:
122
+
123
+ ```
124
+ ✅ IR guardado en .sdd/ir.json
125
+
126
+ Siguiente paso → Diseño de pantallas y arquitectura:
127
+ /sdd.diseñar
128
+
129
+ O si quieres ir directo al código (diseño automático):
130
+ /sdd.construir
131
+ ```
132
+
133
+ ---
134
+
135
+ ## PASO 4 — Si es `corregir [qué]`
136
+
137
+ Extrae la corrección del argumento. Por ejemplo:
138
+ - `/sdd.interpretar corregir "es para múltiples negocios"` → actualizar `product.target_users` y/o `assumptions`
139
+
140
+ Lee el IR actual:
141
+
142
+ ```bash
143
+ cat .sdd/ir.json 2>/dev/null || cat .sdd/ir-pendiente.json 2>/dev/null
144
+ ```
145
+
146
+ Aplica la corrección al campo correspondiente del IR. Re-valida. Muestra el IR actualizado y pide confirmación de nuevo.
147
+
148
+ ---
149
+
150
+ ## PASO 5 — Si es `ver`
151
+
152
+ ```bash
153
+ cat .sdd/ir.json 2>/dev/null || echo "No hay IR guardado todavía."
154
+ ```
155
+
156
+ Muestra el IR en formato legible (igual que la skill `interpretar-idea`).
157
+
158
+ ---
159
+
160
+ ## PASO 6 — Si argumento vacío
161
+
162
+ ```
163
+ ¿Cuál es tu idea?
164
+
165
+ Cuéntamela en una frase o párrafo. No te preocupes por el formato.
166
+
167
+ Ejemplos:
168
+ /sdd.interpretar Quiero una app para gestionar turnos de mi peluquería
169
+ /sdd.interpretar Sistema para que mis empleados registren sus horas de trabajo
170
+ /sdd.interpretar Marketplace de servicios para freelancers
171
+ ```
172
+
173
+ ---
174
+
175
+ ## Estructura de archivos generados
176
+
177
+ ```
178
+ .sdd/
179
+ descubrimiento.md ← Respuestas del discovery (5 preguntas)
180
+ ir-analysis.md ← Análisis libre de la Fase A del Interpreter
181
+ ir-pendiente.json ← IR generado, esperando confirmación del usuario
182
+ ir.json ← IR confirmado (se crea solo tras "confirmar")
183
+ estado.json ← Estado global del proyecto (ir_generado: true)
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Integración con el pipeline
189
+
190
+ Después de `/sdd.interpretar confirmar`:
191
+
192
+ ```
193
+ /sdd.diseñar → Diseña pantallas, elige dirección visual, genera wireframe
194
+ /sdd.construir → Pipeline completo: diseño + spec + plan + tareas + código
195
+ /sdd.estado → Ver estado actual del proyecto
196
+ ```
197
+
198
+ ---
199
+
200
+ ## Opciones avanzadas
201
+
202
+ ### Modo silencioso (sin discovery)
203
+
204
+ Si el usuario ya dio suficiente contexto en la idea:
205
+
206
+ ```
207
+ /sdd.interpretar --rapido [idea detallada]
208
+ ```
209
+
210
+ Salta el discovery y va directo al Interpreter.
211
+
212
+ ### Actualizar proyecto existente
213
+
214
+ ```
215
+ /sdd.interpretar actualizar "quiero agregar pagos en línea"
216
+ ```
217
+
218
+ 1. Lee IR actual
219
+ 2. Interpreta el cambio
220
+ 3. Fusiona (agrega feature, actualiza assumptions)
221
+ 4. Re-valida y pide confirmación
222
+
223
+ ### Nuevo proyecto (ignorar IR anterior)
224
+
225
+ ```
226
+ /sdd.interpretar nuevo [idea]
227
+ ```
228
+
229
+ Archiva el IR anterior en `.sdd/ir-anterior-[timestamp].json` y empieza desde cero.
230
+
231
+ ---
232
+
233
+ ## Notas de implementación
234
+
235
+ - Este comando es el **único punto de entrada** para usuarios no técnicos
236
+ - El IR es la **fuente de verdad** del proyecto — todo lo demás se deriva de él
237
+ - La skill `descubrir-idea` y la skill `interpretar-idea` son los módulos reales — este comando las orquesta
238
+ - Si el usuario dice "sí" o "confirmar" en cualquier momento durante el flujo, se guarda el IR actual
239
+ - El modelo **nunca inventa** datos del usuario — todo en `assumptions[]` debe ser explícito
package/commands/sdd.md CHANGED
@@ -20,6 +20,38 @@ else
20
20
  fi
21
21
  ```
22
22
 
23
+ **Recuperación de contexto automática:** Si existe `.sdd/estado.json`, antes de pedir nada al usuario muestra un resumen de **exactamente 3 líneas** con:
24
+
25
+ 1. `pipeline_step` actual (campo `pipeline_step` del estado).
26
+ 2. Spec activa (campo `spec_activa` o equivalente).
27
+ 3. Número de tareas pendientes.
28
+
29
+ Ejemplo:
30
+
31
+ ```
32
+ Paso del pipeline: implementar
33
+ Spec activa: 2026-06-14-auth
34
+ Tareas pendientes: 3
35
+ ```
36
+
37
+ ## PASO 1.2 — Detectar modo de output
38
+
39
+ Si el argumento del comando contiene un modo de output (`pm`, `arq`, `dev`), actívalo globalmente para esta sesión:
40
+
41
+ | Argumento | Modo | Descripción |
42
+ |-----------|------|-------------|
43
+ | `pm` o `producto` | **Product Manager** | Lenguaje de negocio, sin código, bullets ejecutivos. Oculta detalles técnicos. |
44
+ | `arq` o `arquitectura` | **Arquitecto** | Diagramas, decisiones técnicas, trade-offs. Para revisiones de diseño. |
45
+ | `dev` o `desarrollo` | **Desarrollador** | Código, diffs, comandos. Modo por defecto. |
46
+
47
+ Ejemplos:
48
+ - `/sdd.estado pm` → dashboard en lenguaje de negocio
49
+ - `/sdd.verificar arq` → reporte técnico con diagramas
50
+ - `/sdd.analizar dev` → análisis con código y rutas de archivo
51
+
52
+ El modo se guarda en `MODO_OUTPUT` y lo usan todos los comandos que producen reportes.
53
+ Si no se especifica, usa `dev` (comportamiento actual).
54
+
23
55
  ## PASO 1.5 — Detectar el perfil y ajustar el modo de conducción
24
56
 
25
57
  Lee el perfil desde el estado o la configuración:
@@ -27,10 +59,11 @@ Lee el perfil desde el estado o la configuración:
27
59
  ```bash
28
60
  PERFIL=$(grep -o '"perfil": *"[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
29
61
  [ -z "$PERFIL" ] && PERFIL=$(grep '^perfil:' .sdd/sdd.config.yaml 2>/dev/null | cut -d':' -f2 | tr -d ' ')
30
- echo "PERFIL=${PERFIL:-experto}"
62
+ # Por defecto: modo guiado (sin jerga) — si sdd.config.yaml declara explícitamente "perfil: experto", se respeta
63
+ echo "PERFIL=${PERFIL:-guiado}"
31
64
  ```
32
65
 
33
- **Si `PERFIL=guiado`:** activa la skill `modo-guiado` y conduce TODO el resto de la interacción según sus 6 reglas (sin jerga, confirmar antes de actuar, una pregunta a la vez, nunca pedir que edite archivos). En este modo:
66
+ **Si `PERFIL=guiado` (o no hay perfil configurado):** activa la skill `modo-guiado` y conduce TODO el resto de la interacción según sus 6 reglas (sin jerga, confirmar antes de actuar, una pregunta a la vez, nunca pedir que edite archivos). En este modo:
34
67
 
35
68
  - **Encadenas automáticamente** los pasos del flujo (especificar → planificar → tareas → implementar) pidiendo solo una confirmación simple entre fases, sin exponer los nombres de los comandos. El usuario dice "sí" y tú avanzas.
36
69
  - Traduces cada fase a lenguaje natural (ver tabla en la skill `modo-guiado`).
@@ -40,7 +73,7 @@ Ejemplo de conducción en modo guiado:
40
73
 
41
74
  > Entendido, quieres una lista de tareas. Primero voy a entender bien los detalles, luego lo construyo y lo pruebo. ¿Arrancamos? (responde *sí*)
42
75
 
43
- **Si `PERFIL=experto` (o no hay perfil):** sigue el enrutamiento normal del PASO 2, exponiendo comandos.
76
+ **Si `PERFIL=experto`:** sigue el enrutamiento normal del PASO 2, exponiendo comandos técnicos. Este modo se activa SOLO cuando el archivo `sdd.config.yaml` incluye explícitamente `perfil: experto`.
44
77
 
45
78
  ## PASO 2 — Interpretar la intención del usuario
46
79
 
@@ -48,6 +81,11 @@ El usuario invocó este comando con argumentos en lenguaje natural. Mapea su int
48
81
 
49
82
  | Intención del usuario | Comando a ejecutar |
50
83
  |----------------------|--------------------|
84
+ | "tengo una idea", "quiero crear", "quiero construir X desde cero", "dame una app de X" | `/sdd.interpretar [idea]` |
85
+ | "interpreta mi idea", "analiza lo que quiero hacer" | `/sdd.interpretar` |
86
+ | "diseña el producto", "elige el estilo", "quiero ver el wireframe" | `/sdd.diseñar` |
87
+ | "construye todo", "haz el código completo", "pipeline completo" | `/sdd.construir` |
88
+ | "exporta el bundle", "empaqueta el proyecto" | `/sdd.exportar` |
51
89
  | "quiero inicializar", "configurar el proyecto", "empezar" | `/sdd.constitucion` |
52
90
  | "quiero crear una feature", "nueva spec", "voy a hacer X" | `/sdd.especificar [resto]` |
53
91
  | "quiero importar una spec externa" | `/sdd.importar [resto]` |
@@ -69,15 +107,56 @@ El usuario invocó este comando con argumentos en lenguaje natural. Mapea su int
69
107
  | "cambia configuración", "ajusta agentes/modelos" | `/sdd.configurar` |
70
108
  | "indexa el proyecto", "genera mapa de símbolos" | `/sdd.mapear` |
71
109
  | "comprime", "ahorra tokens", "compacta memoria" | `/sdd.comprimir` |
110
+ | "optimiza artefactos", "reduce contexto" | `/sdd.optimizar` |
111
+ | "optimiza memoria", "compacta agente" | `/sdd.optimizar-memoria` |
112
+ | "compliance", "reporte regulatorio", "GDPR", "SOC2" | `/sdd.compliance` |
113
+ | "registra decisión", "ADR", "architecture decision" | `/sdd.adr` |
114
+ | "reporte de bugs", "defect rate", "tasa de defectos" | `/sdd.defect-report` |
72
115
  | "haz un release", "nueva versión", "changelog" | `/sdd.release` |
73
116
  | "descubre el proyecto", "tengo una idea vaga" | `/sdd.descubrir` |
74
117
  | "crea una app", "construye una app", "quiero una app de X" | `/sdd.crear-app [resto]` |
75
118
  | "crea un MCP", "quiero una herramienta para Claude", "genera un servidor MCP" | `/sdd.crear-mcp [resto]` |
76
119
  | "ayuda", "qué puedes hacer" | `/sdd.ayuda` |
77
120
 
121
+ ## PASO 2.5 — Detectar IR sin spec activa (FORGE)
122
+
123
+ Si hay `.sdd/ir.json` pero NO hay spec activa, sugiere el siguiente paso del pipeline de FORGE:
124
+
125
+ ```bash
126
+ HAS_IR=$([ -f ".sdd/ir.json" ] && echo "yes" || echo "no")
127
+ HAS_DESIGN=$([ -f ".sdd/product-design.json" ] && echo "yes" || echo "no")
128
+ SPEC_ACTIVA=$(cat .sdd/estado.json 2>/dev/null | grep -o '"spec_activa": *"[^"]*"' | cut -d'"' -f4)
129
+ ```
130
+
131
+ Si `HAS_IR=yes` y sin spec activa:
132
+
133
+ > Ya tienes una idea interpretada: **[product.name]**.
134
+ >
135
+ > ¿Qué quieres hacer?
136
+ > - `/sdd.diseñar` → elegir estilo visual y generar wireframe
137
+ > - `/sdd.construir` → pipeline completo automático (diseño + código)
138
+ > - `/sdd.exportar` → empaquetar lo que hay ahora
139
+
140
+ ---
141
+
78
142
  ## PASO 3 — Si no está inicializado
79
143
 
80
- Si el proyecto NO está inicializado, no importa qué pidió el usuario responde:
144
+ Si el proyecto NO está inicializado, primero verifica si la intención del usuario es FORGE (idea → MVP):
145
+
146
+ ```bash
147
+ TIENE_IDEA=$(echo "$ARGS" | grep -iE "tengo una idea|quiero crear|quiero construir|quiero una app|necesito|idea" && echo "yes" || echo "no")
148
+ TIENE_INTERPRETAR=$(echo "$ARGS" | grep -iE "interpreta|interpretar" && echo "yes" || echo "no")
149
+ ```
150
+
151
+ **Si la intención es FORGE** (tiene idea, quiere crear algo desde cero):
152
+
153
+ > 👋 Empecemos. No necesitas inicializar nada primero.
154
+ >
155
+ > Cuéntame tu idea y FORGE la convierte en un producto.
156
+
157
+ Llama directamente a `/sdd.interpretar [idea del usuario]`. FORGE crea `.sdd/` automáticamente.
158
+
159
+ **Si la intención NO es FORGE** (quiere usar sdd-lite para una feature de código existente):
81
160
 
82
161
  > 👋 Bienvenido a SDD-ES.
83
162
  >
@@ -87,6 +166,16 @@ Si el proyecto NO está inicializado, no importa qué pidió el usuario — resp
87
166
 
88
167
  Luego llama internamente a `/sdd.constitucion`.
89
168
 
169
+ **Si no hay argumentos** (usuario escribió solo `/sdd` en proyecto no inicializado):
170
+
171
+ > 👋 Bienvenido. ¿Qué quieres hacer?
172
+ >
173
+ > **Tengo una idea y quiero construirla**
174
+ > → `/sdd.interpretar [tu idea]`
175
+ >
176
+ > **Tengo un proyecto de código y quiero especificar features**
177
+ > → `/sdd.constitucion` (configura el proyecto primero)
178
+
90
179
  ## PASO 4 — Si ya está inicializado pero hay una spec activa incompleta
91
180
 
92
181
  Lee `estado.json` y `.estado-tareas.json` de la spec activa.
@@ -0,0 +1,47 @@
1
+ ---
2
+ description: Comprimir manualmente la memoria de agentes (deduplicación + compresión)
3
+ allowed-tools: Read, Write, Bash
4
+ ---
5
+
6
+ # /sdd.optimizar memoria
7
+
8
+ Comprime automáticamente los archivos de memoria de agentes (`.sdd/memoria/agente-*.md`) cuando superan 50KB.
9
+
10
+ ## Uso
11
+
12
+ ```
13
+ /sdd.optimizar memoria
14
+ ```
15
+
16
+ ## Qué Hace
17
+
18
+ 1. **Lee** archivos en `.sdd/memoria/`
19
+ 2. **Deduplica** entradas por filepath (guarda solo la más reciente)
20
+ 3. **Comprime** aplicando diccionario Caveman Level Full
21
+ 4. **Crea backup** `.original.md` antes de sobrescribir
22
+ 5. **Reporta** bytes salvados
23
+
24
+ ## Ejemplo
25
+
26
+ ```
27
+ ANTES: agente-arquitecto.md = 150KB (80 entradas)
28
+
29
+ /sdd.optimizar memoria
30
+
31
+ ✨ [compress] arquitecto: 150KB → 15KB (10%), backup en .original.md
32
+ ✨ [compress] critico: 87KB → 8.7KB (10%)
33
+
34
+ DESPUÉS: memoria total = 24KB
35
+ ```
36
+
37
+ ## Seguridad
38
+
39
+ - Nunca pierdes datos (backup siempre)
40
+ - Idempotente (ejecutar 2 veces = mismo resultado)
41
+ - Reversible: `.original.md` contiene datos originales
42
+
43
+ ## Notas
44
+
45
+ - Se ejecuta automáticamente vía hook cuando memoria > 50KB
46
+ - Puedes ejecutarla manualmente cuando quieras
47
+ - Segura para ejecutar frecuentemente (sin riesgos)
@@ -0,0 +1,164 @@
1
+ ---
2
+ description: Ciclo completo de optimización de tokens para la sesión actual — detecta fan-out, recomienda modelos por fase, comprime memoria si supera umbral, audita oportunidades de caché y proyecta presupuesto. Punto de entrada unificado para uso eficiente de tokens en FORGE.
3
+ allowed-tools: Read, Bash
4
+ ---
5
+
6
+ # /sdd.optimizar — Optimización de Tokens
7
+
8
+ ## Subcomandos disponibles
9
+
10
+ | Subcomando | Qué ejecuta |
11
+ |---|---|
12
+ | `/sdd.optimizar` | Ciclo completo (PASOes 1-6) |
13
+ | `/sdd.optimizar tokens` | Solo effort-router + cache-audit |
14
+ | `/sdd.optimizar memoria` | Solo memory-compactor |
15
+ | `/sdd.optimizar presupuesto` | Solo token-budget |
16
+
17
+ ---
18
+
19
+ ## PASO 1 — Verificar que el proyecto está inicializado
20
+
21
+ ```bash
22
+ [ ! -d .sdd ] && echo "NO_INICIALIZADO" && exit 0
23
+ [ ! -f .sdd/estado.json ] && echo "SIN_ESTADO" && exit 0
24
+ cat .sdd/estado.json
25
+ ```
26
+
27
+ Si no está inicializado: mostrar `🚫 SDD-ES no inicializado. Ejecuta: /sdd.constitucion` y terminar.
28
+
29
+ ---
30
+
31
+ ## PASO 2 — Leer ledger de consumo (observabilidad)
32
+
33
+ ```bash
34
+ if [ -f .sdd/observabilidad/consumo.jsonl ]; then
35
+ wc -l .sdd/observabilidad/consumo.jsonl
36
+ cat .sdd/observabilidad/consumo.jsonl
37
+ else
38
+ echo "SIN_LEDGER"
39
+ fi
40
+ ```
41
+
42
+ Si `SIN_LEDGER`: marcar PASO 2 como "Sin datos de sesión — ledger vacío" y continuar.
43
+
44
+ Si hay datos: invocar la skill `observabilidad-consumo` para obtener:
45
+ - Tabla por agente (invocaciones, bytes, archivos únicos)
46
+ - Alertas de fan-out (>5 agentes distintos, >20 invocaciones de un agente, >500KB total)
47
+
48
+ ---
49
+
50
+ ## PASO 3 — Routing de effort (si hay fase activa o alertas de fan-out)
51
+
52
+ Invocar la skill `effort-router` con la fase del `estado.json`.
53
+
54
+ Si el subcomando es `/sdd.optimizar presupuesto` o `/sdd.optimizar memoria`, saltar este paso.
55
+
56
+ Mostrar la tabla de modelos recomendados y el ahorro estimado.
57
+
58
+ ---
59
+
60
+ ## PASO 4 — Comprimir memoria si supera umbral
61
+
62
+ ```bash
63
+ # Verificar tamaño de archivos de memoria
64
+ for f in .sdd/memoria/agente-*.md; do
65
+ [ -f "$f" ] || continue
66
+ entradas=$(grep -c "^## " "$f" 2>/dev/null || echo 0)
67
+ bytes=$(wc -c < "$f" 2>/dev/null || echo 0)
68
+ echo "MEMORIA:$f:$entradas:$bytes"
69
+ done
70
+ ```
71
+
72
+ Si algún archivo supera **80 entradas** o **50 000 bytes**: invocar la skill `memory-compactor`.
73
+
74
+ Si el subcomando es `/sdd.optimizar tokens` o `/sdd.optimizar presupuesto`, saltar este paso.
75
+
76
+ Si ningún archivo supera el umbral: marcar "✅ Memoria dentro del umbral".
77
+
78
+ ---
79
+
80
+ ## PASO 5 — Auditar oportunidades de caché
81
+
82
+ ```bash
83
+ # Detectar agentes instalados en el proyecto
84
+ ls .claude/agents/ 2>/dev/null || echo "SIN_AGENTES_LOCALES"
85
+
86
+ # Detectar patterns que invalidan caché silenciosamente
87
+ grep -rn "$(date +%Y-%m-%d)\|[0-9a-f]\{8\}-[0-9a-f]\{4\}\|consumo\.jsonl" .claude/agents/ 2>/dev/null || echo "SIN_INVALIDADORES"
88
+ ```
89
+
90
+ Invocar la skill `cache-audit` con los resultados.
91
+
92
+ Si el subcomando es `/sdd.optimizar memoria` o `/sdd.optimizar presupuesto`, saltar este paso.
93
+
94
+ ---
95
+
96
+ ## PASO 6 — Proyectar presupuesto de fases restantes
97
+
98
+ ```bash
99
+ # Tareas pendientes de la spec activa
100
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
101
+ if [ -n "$SPEC_ID" ]; then
102
+ cat ".sdd/especificaciones/${SPEC_ID}/.estado-tareas.json" 2>/dev/null || echo "SIN_TAREAS"
103
+ fi
104
+ ```
105
+
106
+ Invocar la skill `token-budget` con el estado, tareas pendientes y datos del ledger.
107
+
108
+ Si el subcomando es `/sdd.optimizar tokens` o `/sdd.optimizar memoria`, saltar este paso.
109
+
110
+ ---
111
+
112
+ ## PASO 7 — Reporte unificado
113
+
114
+ Generar el reporte final ordenando las acciones por impacto decreciente:
115
+
116
+ ```
117
+ ╔══════════════════════════════════════════════════════════════════╗
118
+ ║ ⚡ SDD.OPTIMIZAR — Reporte de Eficiencia ║
119
+ ╠══════════════════════════════════════════════════════════════════╣
120
+ ║ Proyecto: {nombre} | Fase: {fase} | {fecha} ║
121
+ ╠══════════════════════════════════════════════════════════════════╣
122
+ ║ 📊 CONSUMO DE SESIÓN ║
123
+ ║ ║
124
+ ║ {tabla por agente o "Sin datos de sesión"} ║
125
+ ║ {alertas de fan-out o "✅ Sin alertas"} ║
126
+ ╠══════════════════════════════════════════════════════════════════╣
127
+ ║ 🎯 ROUTING DE MODELOS (fase: {fase}) ║
128
+ ║ ║
129
+ ║ {tabla effort-router} ║
130
+ ║ Ahorro estimado vs. Opus-en-todo: ~{%}% ║
131
+ ╠══════════════════════════════════════════════════════════════════╣
132
+ ║ 🧠 MEMORIA DE AGENTES ║
133
+ ║ ║
134
+ ║ {estado por agente: OK / comprimido / pendiente} ║
135
+ ╠══════════════════════════════════════════════════════════════════╣
136
+ ║ 🔄 CACHÉ ║
137
+ ║ ║
138
+ ║ {oportunidades detectadas o "✅ Sin invalidadores detectados"} ║
139
+ ╠══════════════════════════════════════════════════════════════════╣
140
+ ║ 💰 PRESUPUESTO DE FASES RESTANTES ║
141
+ ║ ║
142
+ ║ {tabla por fase: costo estimado y recomendación PTC} ║
143
+ ╠══════════════════════════════════════════════════════════════════╣
144
+ ║ 🚀 ACCIONES RECOMENDADAS (por impacto) ║
145
+ ║ ║
146
+ ║ 1. {acción de mayor impacto con comando concreto} ║
147
+ ║ 2. {segunda acción} ║
148
+ ║ 3. {tercera acción} ║
149
+ ╚══════════════════════════════════════════════════════════════════╝
150
+ ```
151
+
152
+ ### Lógica de priorización de acciones
153
+
154
+ Ordenar las recomendaciones así:
155
+ 1. **Fan-out activo** (>5 agentes o >20 invocaciones) → acción inmediata con `effort-router`
156
+ 2. **Memoria sobre umbral** (>50KB) → `memory-compactor`
157
+ 3. **Invalidadores de caché detectados** → `cache-audit` con fix sugerido
158
+ 4. **Fases costosas por delante** → `token-budget` + sugerencia de PTC
159
+
160
+ Si no hay ninguna de estas condiciones:
161
+ ```
162
+ ✅ La sesión está optimizada. No se detectan acciones de alto impacto.
163
+ Próximo paso sugerido según fase: {COMANDO_SDD}
164
+ ```
@@ -21,6 +21,8 @@ Eres el **Orquestador del Plan**. Coordinas a los agentes especializados configu
21
21
 
22
22
  **Si el usuario escribió `/sdd.planificar revisar`**: muestra el plan actual y pide cambios específicos.
23
23
 
24
+ **Si el usuario escribió `/sdd.planificar cambios [descripción]`**: registra feedback específico, edita el plan, y regresa al PASO 9 (aprobación explícita).
25
+
24
26
  ## VERIFICACIONES PRE-EJECUCIÓN
25
27
 
26
28
  ```bash
@@ -296,6 +298,68 @@ EOF
296
298
  # Actualizar entrada de INDICE.md: "plan: ✅"
297
299
  ```
298
300
 
301
+ ## PASO 8 — Presentar el plan (resumen ejecutivo)
302
+
303
+ No muestres el plan técnico completo. En su lugar, presenta un **resumen ejecutivo** adaptado al perfil:
304
+
305
+ **Si perfil == "guiado":**
306
+
307
+ ```
308
+ ✅ PLAN LISTO PARA CONSTRUIR
309
+
310
+ Lo que voy a hacer:
311
+ → [3-5 frases en lenguaje simple de lo que se construye]
312
+
313
+ Tecnología que usaré:
314
+ → [stack elegido, explicado sin jerga. Ej: "JavaScript (lenguaje web), SQLite (base de datos simple y gratis), Node.js (servidor web)"]
315
+
316
+ Tiempo aproximado:
317
+ → [estimación legible: "unos 30-45 minutos"]
318
+
319
+ Archivos que cambiarán:
320
+ → [lista simple de carpetas/conceptos afectados, no rutas técnicas]
321
+
322
+ Lo que queda por hacer después:
323
+ → [QA, deploy, etc.]
324
+ ```
325
+
326
+ **Si perfil == "experto":**
327
+
328
+ Muestra el plan técnico completo (todas las 17 secciones) con decisiones, riesgos y justificaciones.
329
+
330
+ ## PASO 9 — Solicitar aprobación EXPLÍCITA
331
+
332
+ **Gate humano:** No avances a tareas sin aprobación clara.
333
+
334
+ ```
335
+ ¿Está bien este plan?
336
+
337
+ Responde:
338
+ ✅ "sí" → Avanzamos con /sdd.tareas
339
+ 🔄 "cambio [descripción]" → Edito el plan y pregunto de nuevo
340
+ ❌ "rechazar" → Abortamos y revisamos la especificación
341
+ ```
342
+
343
+ Si usuario responde "cambio X":
344
+ 1. Edita solo la sección relevante del plan
345
+ 2. Vuelve al PASO 8 (resumen ejecutivo)
346
+ 3. Solicita aprobación explícita nuevamente
347
+
348
+ **Guardar aprobación:**
349
+
350
+ ```bash
351
+ # Si aprobación == "sí"
352
+ cat >> .sdd/estado.json << 'EOF'
353
+ "plan_aprobado": true,
354
+ "plan_aprobacion_timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
355
+ "plan_aprobacion_usuario": "usuario",
356
+ EOF
357
+
358
+ # Mensaje de confirmación
359
+ echo "✅ Plan aprobado. Siguiente: /sdd.tareas"
360
+ echo "💾 Tu aprobación se guardó automáticamente."
361
+ ```
362
+
299
363
  ## PASO 8 — Pedir aprobación del plan
300
364
 
301
365
  Si `comportamiento.requerir_aprobacion_plan: true` en config: