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.
- package/.claude/settings.json +29 -29
- package/.claude/settings.local.json +10 -0
- package/.claude-plugin/marketplace.json +10 -7
- package/.claude-plugin/plugin.json +59 -37
- package/.gitignore +20 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +77 -40
- package/agents/architecture-designer.md +211 -0
- package/agents/arquitecto.md +16 -1
- package/agents/asesor-datos.md +15 -1
- package/agents/critico.md +37 -1
- package/agents/desarrollador-backend.md +3 -1
- package/agents/desarrollador-frontend.md +11 -16
- package/agents/disenador-api.md +13 -1
- package/agents/documentador.md +3 -1
- package/agents/investigador.md +3 -1
- package/agents/operaciones.md +3 -1
- package/agents/product-designer.md +268 -0
- package/agents/revisor.md +25 -1
- package/agents/seguridad.md +5 -1
- package/agents/tester.md +3 -1
- package/claude-hooks/agent-memory.js +288 -0
- package/claude-hooks/pre-tool-guard.js +61 -9
- package/cli/index.js +1 -2
- package/commands/sdd.adr.md +196 -0
- package/commands/sdd.analizar.md +23 -2
- package/commands/sdd.ayuda.md +13 -0
- package/commands/sdd.compliance.md +521 -0
- package/commands/sdd.configurar.md +34 -1
- package/commands/sdd.constitucion.md +198 -23
- package/commands/sdd.construir.md +210 -0
- package/commands/sdd.crear-mcp.md +2 -0
- package/commands/sdd.defect-report.md +134 -0
- package/commands/sdd.descubrir.md +19 -0
- package/commands/sdd.dise/303/261ar.md +188 -0
- package/commands/sdd.estado.md +120 -3
- package/commands/sdd.exportar.md +344 -0
- package/commands/sdd.implementar.md +272 -52
- package/commands/sdd.interpretar.md +239 -0
- package/commands/sdd.md +93 -4
- package/commands/sdd.optimizar-memoria.md +47 -0
- package/commands/sdd.optimizar.md +164 -0
- package/commands/sdd.planificar.md +64 -0
- package/commands/sdd.retro.md +74 -0
- package/commands/sdd.verificar.md +81 -0
- package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
- package/configuracion-ejemplo/sdd.config.yaml +10 -0
- package/craft/accessibility-baseline.md +216 -0
- package/craft/anti-ai-slop.md +158 -0
- package/craft/color.md +160 -0
- package/craft/typography.md +121 -0
- package/design-systems/bold-brutalist/DESIGN.md +239 -0
- package/design-systems/editorial-minimal/DESIGN.md +205 -0
- package/design-systems/neutral-modern/DESIGN.md +227 -0
- package/design-systems/vibrant-consumer/DESIGN.md +257 -0
- package/design-systems/warm-editorial/DESIGN.md +221 -0
- package/docs/AGENTES.md +4 -1
- package/docs/CASO-COMPLETO.md +206 -0
- package/docs/EJEMPLOS.md +61 -185
- package/docs/FABRICA.md +163 -115
- package/docs/INICIO-RAPIDO.md +27 -79
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
- package/docs/MODELOS.md +3 -0
- package/docs/QUE-PASA-SI-FALLA.md +404 -0
- package/docs/README.md +43 -0
- package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
- package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
- package/package.json +15 -10
- package/plantillas/job-story-mejorar-prompt.md +107 -0
- package/presets/enterprise.yaml +6 -0
- package/presets/lean.yaml +4 -0
- package/presets/startup.yaml +6 -0
- package/skills/adr-indexer/SKILL.md +181 -0
- package/skills/cache-audit/SKILL.md +163 -0
- package/skills/critica-diseno/SKILL.md +193 -0
- package/skills/descubrir-idea/SKILL.md +133 -0
- package/skills/effort-router/SKILL.md +128 -0
- package/skills/elegir-direccion/SKILL.md +184 -0
- package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
- package/skills/github-connect/INDEX.md +223 -0
- package/skills/github-connect/INTEGRATION.md +361 -0
- package/skills/github-connect/QUICK-START.md +168 -0
- package/skills/github-connect/README.md +414 -0
- package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
- package/skills/github-connect/SKILL.md +343 -0
- package/skills/github-connect/STRUCTURE.txt +252 -0
- package/skills/github-connect/example-config.yaml +41 -0
- package/skills/github-connect/github-connect.sh +419 -0
- package/skills/interpretar-idea/SKILL.md +254 -0
- package/skills/mejorar-prompt/SKILL.md +237 -0
- package/skills/memory-compactor/SKILL.md +68 -0
- package/skills/modo-guiado/SKILL.md +12 -2
- package/skills/mutation-detector/SKILL.md +134 -0
- package/skills/observabilidad-consumo/SKILL.md +164 -0
- package/skills/token-budget/SKILL.md +177 -0
- package/skills/vercel-deploy/00-START-HERE.txt +364 -0
- package/skills/vercel-deploy/CHECKLIST.md +205 -0
- package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
- package/skills/vercel-deploy/FLOW.txt +334 -0
- package/skills/vercel-deploy/INDEX.md +276 -0
- package/skills/vercel-deploy/INTEGRATION.md +328 -0
- package/skills/vercel-deploy/MANIFEST.md +310 -0
- package/skills/vercel-deploy/README.md +65 -0
- package/skills/vercel-deploy/SKILL.md +356 -0
- package/skills/vercel-deploy/deploy.sh +298 -0
- package/skills/vercel-deploy/estado.json.example +205 -0
- package/skills/vercel-deploy/skill.yaml +323 -0
- package/skills/vercel-deploy/vercel-deploy.sh +216 -0
- package/skills/wireframe-mvp/SKILL.md +157 -0
- package/docs/EJEMPLO-PRACTICA.md +0 -383
- package/mcp-figma/README.md +0 -158
- package/mcp-figma/package.json +0 -7
- package/mcp-figma/src/component-generator.js +0 -162
- package/mcp-figma/src/design-system-analyzer.js +0 -247
- package/mcp-figma/src/figma-client.js +0 -75
- package/mcp-figma/src/index.js +0 -114
- package/mcp-figma/src/mcp.js +0 -97
- package/mcp-figma/src/style-mapper.js +0 -85
- /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
- /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
- /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
- /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
- /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
- /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
- /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
- /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.**
|