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,163 @@
1
+ ---
2
+ description: Audita los archivos de agentes (.claude/agents/*.md) para detectar bloques estables susceptibles de cache_control y los 3 patrones que invalidan caché silenciosamente (timestamps dinámicos, UUIDs, contenido JSONL embebido). Produce una lista de oportunidades de caché ordenadas por impacto.
3
+ model: haiku
4
+ allowed-tools: Read, Bash
5
+ ---
6
+
7
+ # Skill: Cache Audit
8
+
9
+ ## Propósito
10
+
11
+ El prompt caching de Claude reduce el costo de tokens de entrada hasta un 90% para bloques de contexto que no cambian entre invocaciones. Sin embargo, tres patrones comunes invalidan el caché silenciosamente — el modelo re-paga el precio completo sin que nadie se dé cuenta.
12
+
13
+ Esta skill detecta esos patrones en los archivos de agentes del proyecto activo y produce recomendaciones concretas.
14
+
15
+ ---
16
+
17
+ ## Lo que lees
18
+
19
+ ```bash
20
+ # Agentes instalados en el proyecto (instalados localmente, no en el plugin)
21
+ ls .claude/agents/ 2>/dev/null || echo "SIN_AGENTES_LOCALES"
22
+
23
+ # Agentes del plugin (si existe {PLUGIN_DIR})
24
+ ls {PLUGIN_DIR}/agents/ 2>/dev/null | head -20
25
+
26
+ # Contenido de cada archivo de agente
27
+ for f in .claude/agents/*.md {PLUGIN_DIR}/agents/*.md; do
28
+ [ -f "$f" ] || continue
29
+ echo "=== AGENTE: $f ==="
30
+ cat "$f"
31
+ echo "---"
32
+ done
33
+ ```
34
+
35
+ ---
36
+
37
+ ## Los 3 invalidadores de caché
38
+
39
+ ### Invalidador 1 — Timestamps dinámicos en el system prompt
40
+
41
+ Un timestamp que cambia en cada sesión rompe el caché de todo el bloque que lo contiene y todos los bloques siguientes.
42
+
43
+ **Patrones a detectar:**
44
+ ```bash
45
+ grep -n "\b[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\b" .claude/agents/*.md {PLUGIN_DIR}/agents/*.md 2>/dev/null
46
+ ```
47
+
48
+ **Severidad:** ALTA — invalida el caché en cada nueva sesión (cada día).
49
+
50
+ **Fix:** Mover el timestamp al final del prompt, en un bloque marcado como dinámico separado del bloque estable. O eliminarlo si no es necesario.
51
+
52
+ ---
53
+
54
+ ### Invalidador 2 — UUIDs / IDs únicos por sesión
55
+
56
+ Hashes o IDs generados en cada invocación invalidan todo el bloque donde aparecen.
57
+
58
+ **Patrones a detectar:**
59
+ ```bash
60
+ grep -nE "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" \
61
+ .claude/agents/*.md {PLUGIN_DIR}/agents/*.md 2>/dev/null
62
+ ```
63
+
64
+ **Severidad:** ALTA — invalida en cada invocación.
65
+
66
+ **Fix:** Sacar el ID del bloque estable. Si el agente necesita el ID, inyectarlo como variable de entorno o como argumento de la invocación, no como parte del system prompt fijo.
67
+
68
+ ---
69
+
70
+ ### Invalidador 3 — Contenido JSONL o ledger embebido directamente
71
+
72
+ Si el system prompt incluye el contenido del `consumo.jsonl` u otro archivo que cambia frecuentemente, el bloque se invalida en cada escritura del hook.
73
+
74
+ **Patrones a detectar:**
75
+ ```bash
76
+ grep -n "consumo\.jsonl\|\.jsonl\|\"ts\":\|\"agente\":\|\"bytes\":" \
77
+ .claude/agents/*.md {PLUGIN_DIR}/agents/*.md 2>/dev/null
78
+ ```
79
+
80
+ **Severidad:** MEDIA — invalida con cada invocación de agente.
81
+
82
+ **Fix:** En lugar de embeber el JSONL en el prompt, hacer que el agente lo lea con la tool `Read` cuando necesite esa información.
83
+
84
+ ---
85
+
86
+ ## Análisis de ratio estable/dinámico
87
+
88
+ Para cada archivo de agente, calcular:
89
+
90
+ ```bash
91
+ node -e "
92
+ const fs = require('fs');
93
+ const archivos = process.argv.slice(1);
94
+
95
+ for (const f of archivos) {
96
+ if (!fs.existsSync(f)) continue;
97
+ const contenido = fs.readFileSync(f, 'utf8');
98
+ const lineas = contenido.split('\n');
99
+ const total = lineas.length;
100
+
101
+ // Líneas sospechosas de ser dinámicas
102
+ const dinamicas = lineas.filter(l =>
103
+ /\d{4}-\d{2}-\d{2}/.test(l) || // fechas
104
+ /[0-9a-f]{8}-[0-9a-f]{4}/.test(l) || // UUIDs
105
+ /\"ts\":/.test(l) || // JSONL
106
+ /consumo\.jsonl/.test(l)
107
+ ).length;
108
+
109
+ const pct_estatico = Math.round((1 - dinamicas/total) * 100);
110
+ console.log(f + ': ' + pct_estatico + '% estático (' + dinamicas + '/' + total + ' líneas dinámicas)');
111
+ }
112
+ " .claude/agents/*.md {PLUGIN_DIR}/agents/*.md 2>/dev/null || echo "node no disponible"
113
+ ```
114
+
115
+ ---
116
+
117
+ ## Output que produces
118
+
119
+ ```
120
+ ╔══════════════════════════════════════════════════════════════════╗
121
+ ║ 🔄 CACHE AUDIT — Oportunidades de Caché ║
122
+ ╠══════════════════════════════════════════════════════════════════╣
123
+ ║ AGENTE | % ESTÁTICO | INVALIDADORES | SEVERIDAD ║
124
+ ║ ────────────────────┼────────────┼───────────────┼──────────── ║
125
+ ║ arquitecto | 98% | Ninguno | ✅ OK ║
126
+ ║ desarrollador-back | 95% | Ninguno | ✅ OK ║
127
+ ║ {agente con prob} | 72% | Timestamp L34 | ⚠️ MEDIO ║
128
+ ║ {agente con prob} | 45% | UUID L12, L67 | 🔴 ALTO ║
129
+ ╠══════════════════════════════════════════════════════════════════╣
130
+ ║ HALLAZGOS CONCRETOS ║
131
+ ║ ║
132
+ ║ 🔴 {agente}.md:12 — UUID detectado en bloque estable ║
133
+ ║ Fix: mover a argumento de invocación o variable de entorno ║
134
+ ║ ║
135
+ ║ ⚠️ {agente}.md:34 — Timestamp 2026-06-14 en system prompt ║
136
+ ║ Fix: mover al final del prompt, separar en bloque dinámico ║
137
+ ╠══════════════════════════════════════════════════════════════════╣
138
+ ║ 💰 AHORRO POTENCIAL ║
139
+ ║ ║
140
+ ║ Los agentes con >90% contenido estático son candidatos ║
141
+ ║ para cache_control: la primera invocación escribe el caché ║
142
+ ║ y las siguientes pagan ~10% del costo original de input. ║
143
+ ║ ║
144
+ ║ Para activar: separar el system prompt en bloque estable ║
145
+ ║ (primero) + bloque dinámico (al final). El modelo detecta ║
146
+ ║ automáticamente el prefijo estable y lo cachea. ║
147
+ ╚══════════════════════════════════════════════════════════════════╝
148
+ ```
149
+
150
+ ---
151
+
152
+ ## Cuándo usar esta skill
153
+
154
+ - Antes de `/sdd.implementar` en proyectos con >5 tareas (sesiones largas = más valor del caché)
155
+ - Cuando `/sdd.estado consumo` reporta >1MB de bytes escritos (la sesión es larga)
156
+ - Cuando un agente tarda más de lo esperado en responder (el caché podría no estar activo)
157
+ - Desde `/sdd.optimizar tokens` (se ejecuta automáticamente como parte del ciclo)
158
+
159
+ ## Notas
160
+
161
+ - El prompt caching es automático en Claude Code — no requiere cambios en el código del hook.
162
+ - Lo que sí requiere intervención manual son los invalidadores: un UUID en línea 1 del prompt hace que el modelo no pueda cachear nada de lo que sigue.
163
+ - Esta skill audita; no modifica archivos. Los fixes los aplica el usuario (o un agente dedicado con permiso de Edit).
@@ -0,0 +1,193 @@
1
+ ---
2
+ description: Auto-crítica del wireframe generado. Evalúa en 5 dimensiones con score 1-5. Si score < 4 y iteraciones < 3, refina el artefacto y repite. Adaptado de critique-theater de open-design.
3
+ model: sonnet
4
+ allowed-tools: Read, Write
5
+ ---
6
+
7
+ # Skill: Crítica de Diseño
8
+
9
+ ## Propósito
10
+
11
+ Después de generar el wireframe, esta skill lo evalúa en **5 dimensiones** y da un **score 1–5**. Si el score es bajo, refina el wireframe automáticamente y lo re-evalúa. El ciclo se repite hasta score ≥ 4 o 3 iteraciones.
12
+
13
+ Inspirado en `critique-theater` de open-design (nexu-io).
14
+
15
+ ---
16
+
17
+ ## Lo que lees antes de empezar
18
+
19
+ ```bash
20
+ # El wireframe generado
21
+ cat .sdd/diseño/wireframe-pantalla-principal.html
22
+
23
+ # El DESIGN.md activo (para verificar fidelidad)
24
+ cat "$(cat .sdd/estado.json | node -e "
25
+ const d = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
26
+ console.log(d.design_system_path || '{PLUGIN_DIR}/design-systems/neutral-modern/DESIGN.md');
27
+ ")"
28
+
29
+ # Las reglas anti-slop
30
+ cat "{PLUGIN_DIR}/craft/anti-ai-slop.md"
31
+ ```
32
+
33
+ ---
34
+
35
+ ## Las 5 Dimensiones de Evaluación
36
+
37
+ ### Dimensión 1: Jerarquía Visual (1–5)
38
+ ¿El ojo del usuario sabe a dónde ir primero?
39
+
40
+ | Score | Criterio |
41
+ |-------|----------|
42
+ | 5 | Jerarquía clara: un elemento domina, luego soporte, luego detalle |
43
+ | 4 | Jerarquía buena con algún elemento secundario algo fuerte |
44
+ | 3 | Dos elementos compiten por atención principal |
45
+ | 2 | Múltiples elementos con el mismo peso visual |
46
+ | 1 | Sin jerarquía — todo tiene el mismo peso |
47
+
48
+ ### Dimensión 2: Fidelidad al DESIGN.md (1–5)
49
+ ¿El wireframe usa los tokens del sistema activo?
50
+
51
+ | Score | Criterio |
52
+ |-------|----------|
53
+ | 5 | Todos los colores, fuentes y componentes corresponden exactamente al DESIGN.md |
54
+ | 4 | Pequeñas desviaciones (un color ligeramente diferente, borde-radius incorrecto) |
55
+ | 3 | Usa el sistema general pero con elementos fuera del DESIGN.md |
56
+ | 2 | Sistema visual mixto — algunos tokens del DESIGN.md, otros no |
57
+ | 1 | Ignora el DESIGN.md activo completamente |
58
+
59
+ ### Dimensión 3: Funcionalidad del MVP (1–5)
60
+ ¿La pantalla permite hacer la acción principal del MVP?
61
+
62
+ | Score | Criterio |
63
+ |-------|----------|
64
+ | 5 | El usuario puede realizar la acción principal en ≤3 clicks desde esta pantalla |
65
+ | 4 | La acción principal está presente, quizás con un paso de más |
66
+ | 3 | La acción existe pero no es el elemento más prominente |
67
+ | 2 | La acción existe pero está perdida entre otros elementos |
68
+ | 1 | La pantalla no permite realizar la acción principal |
69
+
70
+ ### Dimensión 4: Ausencia de AI-Slop (1–5)
71
+ ¿El wireframe evita los patrones genéricos de IA?
72
+
73
+ | Score | Criterio |
74
+ |-------|----------|
75
+ | 5 | Cero violaciones de las 7 reglas cardinales + cero patrones P1 |
76
+ | 4 | Sin violaciones P0, máximo 1 patrón P1 |
77
+ | 3 | Sin violaciones P0, 2–3 patrones P1 |
78
+ | 2 | 1 violación P0 |
79
+ | 1 | 2+ violaciones P0 |
80
+
81
+ ### Dimensión 5: Innovación Contextual (1–5)
82
+ ¿El diseño tiene algo específico de este producto, o es completamente genérico?
83
+
84
+ | Score | Criterio |
85
+ |-------|----------|
86
+ | 5 | El copy, los datos de ejemplo y los elementos reflejan exactamente el dominio del producto |
87
+ | 4 | Mayoría de elementos son específicos del dominio, alguno genérico |
88
+ | 3 | Mezcla: algunos elementos específicos, otros genéricos |
89
+ | 2 | Solo el nombre del producto es específico — el resto es genérico |
90
+ | 1 | El wireframe podría ser de cualquier producto |
91
+
92
+ ---
93
+
94
+ ## Flujo de Crítica
95
+
96
+ ### Iteración 1
97
+
98
+ 1. Lee el wireframe
99
+ 2. Evalúa las 5 dimensiones
100
+ 3. Calcula el score promedio: `(D1 + D2 + D3 + D4 + D5) / 5`
101
+ 4. Muestra el resultado:
102
+
103
+ ```
104
+ CRÍTICA DEL DISEÑO (iteración 1/3)
105
+ ─────────────────────────────────
106
+ Jerarquía visual: [score]/5 [comentario breve]
107
+ Fidelidad al sistema: [score]/5 [comentario breve]
108
+ Funcionalidad MVP: [score]/5 [comentario breve]
109
+ Ausencia de AI-slop: [score]/5 [comentario breve]
110
+ Innovación contextual: [score]/5 [comentario breve]
111
+ ─────────────────────────────────
112
+ SCORE TOTAL: [promedio]/5
113
+
114
+ [Si score ≥ 4]: ✅ El diseño está listo.
115
+ [Si score < 4]: 🔄 Refinando... (iteración 1 → 2)
116
+ ```
117
+
118
+ ### Si score < 4 y iteraciones < 3
119
+
120
+ Genera una versión mejorada del wireframe corrigiendo los problemas detectados:
121
+
122
+ ```
123
+ Mejoras aplicadas:
124
+ → [problema D1 → solución aplicada]
125
+ → [problema D4 → corrección aplicada]
126
+ ```
127
+
128
+ Luego re-evalúa. Repite el proceso.
129
+
130
+ ### Si score ≥ 4 (en cualquier iteración)
131
+
132
+ ```
133
+ ✅ DISEÑO APROBADO (score [X]/5, iteración [N]/3)
134
+
135
+ El wireframe de [screen.name] está listo.
136
+ ```
137
+
138
+ ### Si iteración 3 y aún < 4
139
+
140
+ ```
141
+ ⚠️ Score final: [X]/5 (después de 3 iteraciones)
142
+
143
+ El diseño es funcional pero tiene áreas de mejora.
144
+ Puedes continuar o decirme qué cambiar manualmente.
145
+ ```
146
+
147
+ Continúa de todos modos — no bloquea el pipeline.
148
+
149
+ ---
150
+
151
+ ## Output del wireframe refinado
152
+
153
+ Si se hicieron mejoras, el wireframe refinado **reemplaza** el anterior usando la tool `Write`:
154
+ - Ruta: `.sdd/diseño/wireframe-pantalla-principal.html` (sobreescribe el anterior)
155
+ - Contenido: HTML completo refinado
156
+
157
+ ---
158
+
159
+ ## Guardar resultado de la crítica
160
+
161
+ ```bash
162
+ cat > .sdd/diseño/critica-wireframe.md << 'CRITICA'
163
+ # Crítica del Wireframe — [product.name]
164
+
165
+ **Fecha**: [timestamp]
166
+ **Iteraciones**: [N]
167
+ **Score final**: [X]/5
168
+
169
+ ## Dimensiones
170
+
171
+ | Dimensión | Score | Comentario |
172
+ |-----------|-------|-----------|
173
+ | Jerarquía visual | [N]/5 | [texto] |
174
+ | Fidelidad DESIGN.md | [N]/5 | [texto] |
175
+ | Funcionalidad MVP | [N]/5 | [texto] |
176
+ | Ausencia AI-slop | [N]/5 | [texto] |
177
+ | Innovación contextual | [N]/5 | [texto] |
178
+
179
+ ## Mejoras aplicadas
180
+
181
+ [lista de mejoras si hubo iteraciones]
182
+ CRITICA
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Notas
188
+
189
+ - **No hay evaluación de colores "bonitos"** — solo fidelidad al DESIGN.md
190
+ - **No hay evaluación de creatividad** — solo funcionalidad y ausencia de slop
191
+ - La dimensión "Innovación Contextual" evalúa especificidad del dominio, no creatividad artística
192
+ - El score mínimo para continuar sin comentario es 4/5
193
+ - Si el usuario quiere saltarse la crítica: `/sdd.diseñar --sin-critica` (disponible en el comando)
@@ -0,0 +1,133 @@
1
+ ---
2
+ description: Discovery form de 5 preguntas para entender la idea del usuario antes de interpretar. Genera contexto estructurado que alimenta el Interpreter.
3
+ model: opus
4
+ allowed-tools: Write
5
+ ---
6
+
7
+ # Skill: Descubrir Idea
8
+
9
+ ## Propósito
10
+
11
+ Antes de generar ningún IR, necesitamos entender el contexto de la idea. Esta skill hace **5 preguntas clave** en lenguaje natural — sin jerga técnica — y guarda las respuestas en `.sdd/descubrimiento.md`.
12
+
13
+ El objetivo no es un interrogatorio. Es una conversación breve (2–3 minutos) que permite al Interpreter generar un IR con confidence ≥ 0.8 en lugar de ≤ 0.6.
14
+
15
+ ---
16
+
17
+ ## Flujo
18
+
19
+ ### Paso 1: Presentación
20
+
21
+ Antes de las preguntas, muestra esto:
22
+
23
+ ```
24
+ Antes de entender tu idea en detalle, tengo 5 preguntas rápidas.
25
+ No hay respuestas correctas — contesta lo que se te ocurra.
26
+ ```
27
+
28
+ ### Paso 2: Las 5 preguntas (una a la vez)
29
+
30
+ Haz cada pregunta de forma conversacional. Espera la respuesta antes de hacer la siguiente.
31
+
32
+ **Pregunta 1 — Superficie**
33
+ ```
34
+ ¿Dónde va a vivir esto?
35
+ Por ejemplo: en un navegador web, en el celular, como programa de escritorio, o es algo más técnico (una API, una herramienta de línea de comandos)?
36
+ ```
37
+ Acepta respuestas vagas: "web", "móvil", "app", "no sé" — todas son válidas.
38
+
39
+ **Pregunta 2 — Audiencia**
40
+ ```
41
+ ¿Quién lo va a usar?
42
+ Puede ser tú mismo, tus clientes, tu equipo, o el público en general.
43
+ ```
44
+ No pidas detalles. Cualquier respuesta sirve.
45
+
46
+ **Pregunta 3 — Tono**
47
+ ```
48
+ ¿Qué sensación quieres que tenga?
49
+ Por ejemplo: profesional y sobrio, moderno y tecnológico, cálido y amigable, simple y directo...
50
+ ```
51
+ Si el usuario no sabe, anota "no definido".
52
+
53
+ **Pregunta 4 — Restricciones**
54
+ ```
55
+ ¿Hay algo importante que debamos tener en cuenta?
56
+ Por ejemplo: presupuesto ajustado, necesita estar listo pronto, solo un desarrollador, no quieres depender de servicios de pago...
57
+ ```
58
+ Si no hay restricciones, registra "ninguna mencionada".
59
+
60
+ **Pregunta 5 — Inspiración**
61
+ ```
62
+ ¿Hay algún producto o app que te guste y que se parezca a lo que quieres hacer?
63
+ No tiene que ser exactamente igual — solo para entender el estilo o la dirección.
64
+ ```
65
+ Si el usuario no tiene referencia, anota "sin referencia".
66
+
67
+ ### Paso 3: Guardar contexto
68
+
69
+ Después de las 5 respuestas, guarda en `.sdd/descubrimiento.md`:
70
+
71
+ ```markdown
72
+ # Contexto de Descubrimiento
73
+
74
+ **Fecha**: [fecha actual]
75
+ **Idea original**: [texto que dio el usuario antes de la skill]
76
+
77
+ ## Respuestas
78
+
79
+ **Superficie**: [respuesta 1]
80
+ **Audiencia**: [respuesta 2]
81
+ **Tono**: [respuesta 3]
82
+ **Restricciones**: [respuesta 4]
83
+ **Inspiración**: [respuesta 5]
84
+
85
+ ## Notas del sistema
86
+
87
+ [Cualquier observación relevante: contradicciones, pistas, contexto adicional]
88
+ ```
89
+
90
+ ### Paso 4: Confirmar y pasar al Interpreter
91
+
92
+ Muestra un resumen de una línea:
93
+ ```
94
+ Entendido. Voy a interpretar tu idea teniendo esto en cuenta.
95
+ ```
96
+
97
+ No pidas confirmación — pasa directo al Interpreter.
98
+
99
+ ---
100
+
101
+ ## Reglas
102
+
103
+ - **Una pregunta a la vez** — nunca hagas 2 preguntas en el mismo mensaje
104
+ - **Sin jerga técnica** — nunca uses "frontend", "backend", "API REST", "deployment", etc.
105
+ - **Sin juzgar** — cualquier respuesta es válida, incluso "no sé"
106
+ - **Máximo 5 preguntas** — nunca hagas preguntas de seguimiento
107
+ - **Tono conversacional** — no formal, no robótico
108
+
109
+ ---
110
+
111
+ ## Ejemplos de respuestas aceptables
112
+
113
+ **Pregunta 1 - Superficie:**
114
+ - ✅ "web" → `web`
115
+ - ✅ "en el celular" → `mobile`
116
+ - ✅ "no sé, lo que sea más fácil" → `web` (default)
117
+ - ✅ "quiero que se use desde el navegador" → `web`
118
+
119
+ **Pregunta 2 - Audiencia:**
120
+ - ✅ "mis clientes" → `clientes del negocio`
121
+ - ✅ "yo solo" → `uso personal`
122
+ - ✅ "cualquier persona" → `público general`
123
+
124
+ **Pregunta 3 - Tono:**
125
+ - ✅ "profesional" → `profesional`
126
+ - ✅ "no sé, que se vea bien" → `moderno y limpio`
127
+ - ✅ "como Airbnb" → `cálido, accesible`
128
+
129
+ ---
130
+
131
+ ## Output esperado
132
+
133
+ `.sdd/descubrimiento.md` con las 5 respuestas estructuradas, listo para que `interpretar-idea` lo lea como contexto adicional.
@@ -0,0 +1,128 @@
1
+ ---
2
+ description: Dado el nombre de la fase SDD actual, recomienda effort (low/medium/high/max) y modelo (Haiku/Sonnet/Opus) para cada agente. Evita pagar Opus cuando Sonnet o Haiku son suficientes — ahorro típico del 60-75% en fases mecánicas.
3
+ model: haiku
4
+ allowed-tools: Read
5
+ ---
6
+
7
+ # Skill: Effort Router
8
+
9
+ ## Propósito
10
+
11
+ Los agentes de FORGE usan modelos fijos declarados en su frontmatter. Pero no toda fase requiere el mismo nivel de razonamiento. Esta skill lee la fase actual del proyecto y produce una tabla de configuración recomendada: qué modelo usar en cada agente y con qué nivel de `effort`, para evitar gastar Opus donde Haiku es suficiente.
12
+
13
+ **Ahorro estimado por fase:**
14
+ - Fases mecánicas (tests, docs, deploy): 75-80% vs. Opus en todo
15
+ - Fases de verificación: 50-60%
16
+ - Fases de decisión (spec, plan, análisis): 0% — estas SÍ necesitan Opus
17
+
18
+ ---
19
+
20
+ ## Lo que lees primero
21
+
22
+ ```bash
23
+ # Fase actual y spec activa
24
+ cat .sdd/estado.json 2>/dev/null | head -20 || echo "SIN_ESTADO"
25
+ ```
26
+
27
+ ---
28
+
29
+ ## Tabla de routing por fase
30
+
31
+ ### GRUPO A — Siempre Opus (decisiones críticas, no degradar)
32
+
33
+ | Fase SDD | Agente principal | Effort | Modelo | Razón |
34
+ |---|---|---|---|---|
35
+ | `especificacion` | arquitecto | high | claude-opus-4-8 | Define restricciones del sistema entero |
36
+ | `planificacion` | arquitecto, critico | high | claude-opus-4-8 | Decisiones de arquitectura irreversibles |
37
+ | `analisis` (7 dimensiones) | critico, seguridad | high | claude-opus-4-8 | Auditoría de riesgos — falsos negativos son costosos |
38
+ | `aclaracion` (cuando hay `[MARCADOR]`) | arquitecto | high | claude-opus-4-8 | Ambigüedades de spec → decisiones de arquitectura |
39
+
40
+ ### GRUPO B — Sonnet suficiente (trabajo técnico estándar)
41
+
42
+ | Fase SDD | Agente principal | Effort | Modelo | Razón |
43
+ |---|---|---|---|---|
44
+ | `checklist` | (sin agente dedicado) | medium | claude-sonnet-4-6 | Verificación mecánica contra criterios conocidos |
45
+ | `tareas` | (sin agente dedicado) | medium | claude-sonnet-4-6 | Descomposición mecánica de plan → tareas |
46
+ | `implementacion` (backend/API) | desarrollador-backend, disenador-api | medium | claude-sonnet-4-6 | Implementación con spec clara |
47
+ | `implementacion` (frontend) | desarrollador-frontend | medium | claude-sonnet-4-6 | Implementación con spec clara |
48
+ | `verificacion` | verificador-implementacion | medium | claude-sonnet-4-6 | Cruzar CAs — bien definido |
49
+ | `qa` | tester | medium | claude-sonnet-4-6 | Orquestar Playwright — mecánico pero con estado |
50
+ | `snapshot` | (sin agente dedicado) | low | claude-sonnet-4-6 | Serializar estado actual |
51
+
52
+ ### GRUPO C — Haiku suficiente (operaciones mecánicas puras)
53
+
54
+ | Fase SDD | Agente principal | Effort | Modelo | Razón |
55
+ |---|---|---|---|---|
56
+ | `aclaracion` (sin marcadores) | (sin agente dedicado) | low | claude-haiku-4-5-20251001 | Solo formatear preguntas conocidas |
57
+ | `implementacion` (tests) | tester | low | claude-haiku-4-5-20251001 | Tests unitarios con spec y código claros |
58
+ | `implementacion` (docs) | documentador | low | claude-haiku-4-5-20251001 | Documentar código ya escrito |
59
+ | `deploy` | operaciones | low | claude-haiku-4-5-20251001 | Ejecutar scripts CI/CD predefinidos |
60
+ | `canary` | operaciones | low | claude-haiku-4-5-20251001 | Igual que deploy |
61
+ | `release` | (sin agente dedicado) | low | claude-haiku-4-5-20251001 | Actualizar versiones y CHANGELOG |
62
+ | `retro` | (sin agente dedicado) | low | claude-haiku-4-5-20251001 | Formato de retrospectiva estructurado |
63
+
64
+ ---
65
+
66
+ ## Output que produces
67
+
68
+ Dado el JSON de `.sdd/estado.json`, imprime el bloque de configuración recomendada:
69
+
70
+ ```
71
+ ╔══════════════════════════════════════════════════════════════╗
72
+ ║ 🎯 EFFORT ROUTER — Configuración recomendada ║
73
+ ╠══════════════════════════════════════════════════════════════╣
74
+ ║ Fase detectada: {FASE} ║
75
+ ╠══════════════════════════════════════════════════════════════╣
76
+ ║ AGENTE | MODELO | EFFORT | GRUPO ║
77
+ ║ ─────────────────────┼─────────────────┼──────────┼─────── ║
78
+ ║ {agente} | {modelo} | {effort} | {A/B/C}║
79
+ ╠══════════════════════════════════════════════════════════════╣
80
+ ║ 💰 AHORRO ESTIMADO vs. Opus-en-todo ║
81
+ ║ ║
82
+ ║ Agentes en Grupo B: {N} × ~60% ahorro por token ║
83
+ ║ Agentes en Grupo C: {N} × ~80% ahorro por token ║
84
+ ║ Ahorro total estimado de la fase: ~{%}% ║
85
+ ╠══════════════════════════════════════════════════════════════╣
86
+ ║ ⚠️ ATENCIÓN ║
87
+ ║ ║
88
+ ║ Estos son defaults para la fase "{FASE}". ║
89
+ ║ Si la tarea actual tiene ambigüedad estructural → ║
90
+ ║ sube a Opus para el agente afectado. ║
91
+ ╚══════════════════════════════════════════════════════════════╝
92
+ ```
93
+
94
+ ### Cálculo del ahorro estimado
95
+
96
+ Precios de referencia (por millón de tokens):
97
+ - Opus 4.8: $5 input / $25 output
98
+ - Sonnet 4.6: $3 input / $15 output ← 40% más barato en input, 40% en output
99
+ - Haiku 4.5: $1 input / $5 output ← 80% más barato en input, 80% en output
100
+
101
+ Para la fase actual, suma los agentes activos y calcula el delta respecto a "todos Opus".
102
+
103
+ **Ejemplo — fase `implementacion`:**
104
+ ```
105
+ Grupo A (Opus): 0 agentes
106
+ Grupo B (Sonnet): 3 agentes (backend, frontend, disenador-api) → ~40% ahorro c/u
107
+ Grupo C (Haiku): 2 agentes (tester, documentador) → ~80% ahorro c/u
108
+
109
+ Ahorro total estimado: ((3×0.40) + (2×0.80)) / 5 = ~56%
110
+ ```
111
+
112
+ ---
113
+
114
+ ## Cómo aplicar las recomendaciones
115
+
116
+ Las recomendaciones son de sesión (no tocan los archivos `.md` de los agentes). Para aplicar en la sesión actual:
117
+
118
+ 1. Cuando Claude Code invoca un agente vía `/sdd.implementar`, puedes prefixar la invocación con el modelo sugerido si el runtime lo permite.
119
+ 2. Para cambios permanentes en el frontmatter del agente, edita `{PLUGIN_DIR}/agents/{nombre}.md` y cambia la línea `model:` del frontmatter.
120
+ 3. Para registrar que usaste el router en esta sesión, añadir al ledger: `/sdd.estado consumo`.
121
+
122
+ ---
123
+
124
+ ## Notas
125
+
126
+ - Esta skill se invoca automáticamente desde `/sdd.optimizar` como PASO 2 cuando hay alertas de fan-out.
127
+ - Para proyectos con presupuesto de tokens restringido, usa junto con `token-budget` para ver el impacto económico real.
128
+ - La regla de oro: **si el agente toma una decisión que no se puede deshacer → Opus. Si ejecuta una decisión ya tomada → Sonnet o Haiku.**