sdd-es 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +51 -0
- package/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +97 -0
- package/README.md +332 -0
- package/agents/arquitecto.md +148 -0
- package/agents/asesor-datos.md +163 -0
- package/agents/critico.md +142 -0
- package/agents/desarrollador-backend.md +242 -0
- package/agents/desarrollador-frontend.md +120 -0
- package/agents/disenador-api.md +108 -0
- package/agents/documentador.md +177 -0
- package/agents/investigador.md +174 -0
- package/agents/operaciones.md +105 -0
- package/agents/revisor.md +153 -0
- package/agents/seguridad.md +216 -0
- package/agents/tester.md +286 -0
- package/claude-hooks/post-write-conventions.js +412 -0
- package/claude-hooks/pre-tool-guard.js +159 -0
- package/cli/index.js +401 -0
- package/commands/sdd.aclarar.md +200 -0
- package/commands/sdd.analizar.md +241 -0
- package/commands/sdd.ayuda.md +227 -0
- package/commands/sdd.canary.md +60 -0
- package/commands/sdd.checklist.md +174 -0
- package/commands/sdd.comprimir.md +166 -0
- package/commands/sdd.configurar.md +195 -0
- package/commands/sdd.constitucion.md +343 -0
- package/commands/sdd.crear-app.md +168 -0
- package/commands/sdd.crear-mcp.md +174 -0
- package/commands/sdd.descubrir.md +269 -0
- package/commands/sdd.desplegar.md +155 -0
- package/commands/sdd.especificar.md +302 -0
- package/commands/sdd.estado.md +124 -0
- package/commands/sdd.glosario.md +108 -0
- package/commands/sdd.implementar.md +377 -0
- package/commands/sdd.importar.md +91 -0
- package/commands/sdd.mapear.md +120 -0
- package/commands/sdd.md +119 -0
- package/commands/sdd.planificar.md +372 -0
- package/commands/sdd.qa.md +108 -0
- package/commands/sdd.release.md +253 -0
- package/commands/sdd.retro.md +82 -0
- package/commands/sdd.snapshot.md +122 -0
- package/commands/sdd.tareas.md +300 -0
- package/commands/sdd.verificar.md +239 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_cada_tarea.sh +18 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_implementar.sh +45 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_especificar.sh +14 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_implementar.sh +36 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_planificar.sh +19 -0
- package/configuracion-ejemplo/hooks-ejemplo/guardia-seguridad.sh +367 -0
- package/configuracion-ejemplo/sdd.config.yaml +310 -0
- package/docs/AGENTES.md +74 -0
- package/docs/COMPRESION.md +155 -0
- package/docs/EJEMPLO-PRACTICA.md +383 -0
- package/docs/EJEMPLOS.md +212 -0
- package/docs/FABRICA.md +185 -0
- package/docs/FILOSOFIA.md +61 -0
- package/docs/FLUJO.md +149 -0
- package/docs/INICIO-RAPIDO.md +116 -0
- package/docs/MAPAS.md +113 -0
- package/docs/MODELOS.md +103 -0
- package/docs/PERSONALIZACION.md +152 -0
- package/instalar.ps1 +39 -0
- package/instalar.sh +22 -0
- package/mcp-figma/README.md +158 -0
- package/mcp-figma/package.json +7 -0
- package/mcp-figma/src/component-generator.js +162 -0
- package/mcp-figma/src/design-system-analyzer.js +247 -0
- package/mcp-figma/src/figma-client.js +75 -0
- package/mcp-figma/src/index.js +114 -0
- package/mcp-figma/src/mcp.js +97 -0
- package/mcp-figma/src/style-mapper.js +85 -0
- package/package.json +50 -0
- package/plantillas/analisis.md +57 -0
- package/plantillas/checklist-especificacion.md +66 -0
- package/plantillas/constitucion.md +104 -0
- package/plantillas/decision-arquitectura.md +39 -0
- package/plantillas/dependencias-mapa.md +89 -0
- package/plantillas/especificacion.md +108 -0
- package/plantillas/estructura-mapa.md +40 -0
- package/plantillas/glosario.md +22 -0
- package/plantillas/index-especificaciones.md +15 -0
- package/plantillas/mcp-server.md +147 -0
- package/plantillas/plan.md +152 -0
- package/plantillas/simbolos-mapa.md +57 -0
- package/plantillas/snapshot.md +54 -0
- package/plantillas/tareas.md +72 -0
- package/presets/enterprise.yaml +69 -0
- package/presets/lean.yaml +63 -0
- package/presets/startup.yaml +67 -0
- package/skills/compresion-tokens.md +264 -0
- package/skills/constitucion-constraint.md +78 -0
- package/skills/deteccion-stack.md +175 -0
- package/skills/enrutador-agentes.md +69 -0
- package/skills/gestion-estado.md +114 -0
- package/skills/indexador.md +199 -0
- package/skills/modo-guiado/SKILL.md +78 -0
- package/skills/orquestacion-ptc/SKILL.md +96 -0
- package/skills/validacion-spec.md +52 -0
- package/skills/verificador-implementacion.md +71 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Inicio Rápido — SDD-ES
|
|
2
|
+
|
|
3
|
+
SDD-ES es un plugin para Claude Code que añade un flujo estructurado para convertir ideas en código verificado. En lugar de pedirle a Claude "implementa X", defines primero qué quieres y por qué, y el sistema coordina agentes especializados para construirlo con trazabilidad completa.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Instalación
|
|
8
|
+
|
|
9
|
+
Requiere **Node.js >= 18**. El instalador funciona igual en Windows, macOS y Linux.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# 1. Ve a tu proyecto
|
|
13
|
+
cd mi-proyecto
|
|
14
|
+
|
|
15
|
+
# 2. Instala (camino recomendado, multiplataforma)
|
|
16
|
+
npx sdd-es init
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Windows (PowerShell)** — atajo equivalente:
|
|
20
|
+
|
|
21
|
+
```powershell
|
|
22
|
+
.\instalar.ps1
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**macOS / Linux / Git Bash** — atajo equivalente:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
bash /ruta/a/sdd-es/instalar.sh
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
El instalador crea la carpeta `.sdd/` en tu proyecto y copia los comandos, agentes, skills y hooks de seguridad al `.claude/` local. Comprueba que todo quedó bien con:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx sdd-es doctor
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Primera vez en un proyecto
|
|
40
|
+
|
|
41
|
+
Abre Claude Code en tu proyecto y ejecuta:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
/sdd.constitucion
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Claude te hace preguntas sobre tu proyecto (stack, principios, estándares de calidad) y genera `.sdd/memoria/constitucion.md` — la ley del proyecto que todos los agentes respetan.
|
|
48
|
+
|
|
49
|
+
Solo se hace una vez por proyecto.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Flujo diario
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
/sdd.especificar [descripción de lo que quieres]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Desde ahí el sistema te guía paso a paso. No necesitas memorizar el resto de comandos — `/sdd` solo te pregunta qué quieres y enruta automáticamente.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Los 4 comandos que más usarás
|
|
64
|
+
|
|
65
|
+
| Comando | Para qué |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `/sdd` | Punto de entrada — di lo que quieres en lenguaje natural |
|
|
68
|
+
| `/sdd.especificar [idea]` | Convertir una idea en spec con criterios de aceptación |
|
|
69
|
+
| `/sdd.implementar` | Ejecutar las tareas con los agentes especializados |
|
|
70
|
+
| `/sdd.estado` | Ver dashboard del proyecto |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## ¿Eres nuevo en programación?
|
|
75
|
+
|
|
76
|
+
SDD-ES tiene un **perfil guiado** para personas con poca o ninguna experiencia. Durante `/sdd.constitucion` puedes elegirlo (o el sistema lo detecta automáticamente por la forma en que hablas).
|
|
77
|
+
|
|
78
|
+
En perfil guiado:
|
|
79
|
+
- No ves comandos ni tecnicismos — solo preguntas en lenguaje normal
|
|
80
|
+
- El sistema elige el stack por ti
|
|
81
|
+
- Confirmas con "sí" entre cada paso
|
|
82
|
+
- Al final, Claude publica tu app en internet
|
|
83
|
+
|
|
84
|
+
**Atajo directo para no-programadores:**
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
/sdd.crear-app [describe tu idea]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Ver el recorrido completo en [FABRICA.md](FABRICA.md).
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Crear una herramienta para Claude
|
|
95
|
+
|
|
96
|
+
Si quieres que Claude pueda hacer algo nuevo (consultar una API, acceder a tus archivos, etc.):
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
/sdd.crear-mcp [describe qué hace la herramienta]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Genera un servidor MCP funcional empaquetado como `.mcpb` instalable con una línea.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Si algo sale mal o quieres retomar
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
/sdd.estado # ¿dónde estoy?
|
|
110
|
+
/sdd.implementar continuar # retomar desde la última tarea
|
|
111
|
+
/sdd.ayuda # lista completa de comandos
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Ejemplo completo → ver [EJEMPLO-PRACTICA.md](EJEMPLO-PRACTICA.md)
|
package/docs/MAPAS.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Mapas del Proyecto — Ahorrar 50-65k tokens por sesión
|
|
2
|
+
|
|
3
|
+
## El problema
|
|
4
|
+
|
|
5
|
+
Una sesión típica de SDD-ES (`constitucion → especificar → planificar → implementar → verificar`):
|
|
6
|
+
|
|
7
|
+
- Claude necesita entender la estructura del proyecto
|
|
8
|
+
- Corre `find . -type f` → 50-100 archivos
|
|
9
|
+
- Lee cada archivo para entender qué hace → ~50k tokens
|
|
10
|
+
- Esto se repite cada sesión
|
|
11
|
+
|
|
12
|
+
## La solución: Mapas estáticos
|
|
13
|
+
|
|
14
|
+
En lugar de que Claude lea archivos, consulta 3 archivos Markdown pequeños:
|
|
15
|
+
|
|
16
|
+
1. **estructura.md** — árbol + 1 línea por archivo
|
|
17
|
+
2. **simbolos.md** — funciones, clases, tipos exportados
|
|
18
|
+
3. **dependencias.md** — quién depende de quién
|
|
19
|
+
|
|
20
|
+
Total: ~10k tokens. Ahorro: 80-85%.
|
|
21
|
+
|
|
22
|
+
## Cómo usarlo
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Primera vez: genera todos los mapas
|
|
26
|
+
/sdd.mapear
|
|
27
|
+
|
|
28
|
+
# Después: detecta cambios, actualiza automáticamente
|
|
29
|
+
/sdd.mapear
|
|
30
|
+
|
|
31
|
+
# Forzar regeneración completa (casi nunca)
|
|
32
|
+
/sdd.mapear regenerar
|
|
33
|
+
|
|
34
|
+
# Verificar estado sin actualizar
|
|
35
|
+
/sdd.mapear validar
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Dónde van
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
.sdd/mapa/
|
|
42
|
+
├── estructura.md (~5KB)
|
|
43
|
+
├── simbolos.md (~8KB)
|
|
44
|
+
├── dependencias.md (~3KB)
|
|
45
|
+
├── .estado-mapeo (timestamp)
|
|
46
|
+
└── .checksums (md5 de archivos)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Cómo Claude los usa
|
|
50
|
+
|
|
51
|
+
Durante `/sdd.planificar`:
|
|
52
|
+
1. Busca si existen mapas
|
|
53
|
+
2. Los lee (rápido, 10k tokens)
|
|
54
|
+
3. Entiende la estructura sin leer código
|
|
55
|
+
4. Si necesita más detalle: entonces corre `/Read archivo.ts`
|
|
56
|
+
|
|
57
|
+
Result: típicamente **no necesita leer nada** — el mapa le alcanza.
|
|
58
|
+
|
|
59
|
+
## Actualización automática
|
|
60
|
+
|
|
61
|
+
- **Hook `despues_implementar`** actualiza mapas después de que ejecutas una tarea
|
|
62
|
+
- **Validación perezosa** — al inicio de comandos SDD, verifica si hay archivos nuevos y actualiza silenciosamente
|
|
63
|
+
- **Backup** — `.estructura.md.backup`, etc.
|
|
64
|
+
|
|
65
|
+
## Manual vs Auto-descripción
|
|
66
|
+
|
|
67
|
+
Cada archivo en `estructura.md` tiene una descripción:
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
src/
|
|
71
|
+
├── auth/
|
|
72
|
+
│ ├── login.service.ts — Servicio: autenticación local+JWT
|
|
73
|
+
│ │ ^ puedes editar esto manualmente
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Si editas la descripción, la próxima ejecución de `/sdd.mapear` respeta tus cambios.
|
|
77
|
+
|
|
78
|
+
## Lenguajes soportados
|
|
79
|
+
|
|
80
|
+
Detección automática: TypeScript, JavaScript, Python, Rust, Go, Java, C#, Ruby, PHP.
|
|
81
|
+
|
|
82
|
+
Otros lenguajes: edita manualmente el mapa o ejecuta desde proyecto raíz con esos lenguajes presentes.
|
|
83
|
+
|
|
84
|
+
## Ignorar directorios
|
|
85
|
+
|
|
86
|
+
Edita `.sdd/.mapeoignore`:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
node_modules/
|
|
90
|
+
dist/
|
|
91
|
+
.git/
|
|
92
|
+
vendor/
|
|
93
|
+
__pycache__/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Próxima ejecución los salta.
|
|
97
|
+
|
|
98
|
+
## Limitaciones honestas
|
|
99
|
+
|
|
100
|
+
- ❌ Imports dinámicos (`require(variable)`) no se detectan
|
|
101
|
+
- ⚠️ Proyectos >5000 archivos: capa un máximo de 2000 (avisa al usuario)
|
|
102
|
+
- ❌ No sigue tipos a través de funciones (solo detecta firmas)
|
|
103
|
+
|
|
104
|
+
Son trade-offs aceptables para una solución sin dependencias.
|
|
105
|
+
|
|
106
|
+
## ROI
|
|
107
|
+
|
|
108
|
+
Si una sesión típica carga 200k tokens:
|
|
109
|
+
- Sin mapas: ~200k
|
|
110
|
+
- Con mapas: ~140k (30% ahorro)
|
|
111
|
+
- Multiplicado por 20 sesiones/mes: **1.2M tokens ahorrados/mes**
|
|
112
|
+
|
|
113
|
+
En pesos: ~USD 5 de ahorro al mes por usuario (con Claude Pro).
|
package/docs/MODELOS.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Guía de Modelos por Agente
|
|
2
|
+
|
|
3
|
+
## Tabla maestra de recomendaciones
|
|
4
|
+
|
|
5
|
+
| Agente | Recomendado | Aceptable | Evitar | Razón principal |
|
|
6
|
+
|--------|-------------|-----------|--------|-----------------|
|
|
7
|
+
| arquitecto | **opus** | sonnet (proyectos pequeños) | haiku | Decisiones difíciles de revertir |
|
|
8
|
+
| disenador-api | **sonnet** | opus (APIs complejas) | haiku | Diseño estructurado pero acotado |
|
|
9
|
+
| asesor-datos | **opus** | sonnet (BD simple) | haiku | Errores de BD son costosos |
|
|
10
|
+
| desarrollador-backend | **sonnet** | opus (lógica compleja), haiku (CRUD simple) | — | Codificación general |
|
|
11
|
+
| desarrollador-frontend | **sonnet** | opus (UI compleja), haiku (componentes simples) | — | Codificación general |
|
|
12
|
+
| operaciones | **sonnet** | haiku (scripts simples), opus (infra crítica) | — | Configuración |
|
|
13
|
+
| tester | **sonnet** | haiku (tests simples) | opus (overkill) | Generación con patrones |
|
|
14
|
+
| revisor | **opus** | sonnet | haiku | Revisión profunda atrapa más bugs |
|
|
15
|
+
| critico | **opus** | sonnet | haiku | Requiere razonamiento abstracto |
|
|
16
|
+
| seguridad | **opus** | — | sonnet, haiku | Auditoría debe ser exhaustiva |
|
|
17
|
+
| documentador | **sonnet** | haiku | opus (overkill) | Generación estructurada |
|
|
18
|
+
|
|
19
|
+
## Filosofía
|
|
20
|
+
|
|
21
|
+
**Usa el modelo más pequeño que resuelva el problema bien.** Subir de tier solo si el agente falla repetidamente.
|
|
22
|
+
|
|
23
|
+
### ¿Cuándo subir a opus?
|
|
24
|
+
|
|
25
|
+
- El agente da respuestas inconsistentes
|
|
26
|
+
- La tarea requiere considerar múltiples restricciones simultáneamente
|
|
27
|
+
- El costo de un error es alto (BD, seguridad, arquitectura)
|
|
28
|
+
- El razonamiento requiere abstracción profunda
|
|
29
|
+
|
|
30
|
+
### ¿Cuándo bajar a haiku?
|
|
31
|
+
|
|
32
|
+
- La tarea es muy estructurada (rellenar plantilla)
|
|
33
|
+
- El agente funciona bien con sonnet y quieres ahorrar
|
|
34
|
+
- Tareas en lote (muchas similares)
|
|
35
|
+
|
|
36
|
+
## Combinaciones efectivas
|
|
37
|
+
|
|
38
|
+
### Combinación "alta calidad"
|
|
39
|
+
```yaml
|
|
40
|
+
# Diseño con opus, implementación con sonnet, calidad con opus
|
|
41
|
+
arquitecto: opus
|
|
42
|
+
disenador-api: sonnet
|
|
43
|
+
asesor-datos: opus
|
|
44
|
+
desarrollador-backend: sonnet
|
|
45
|
+
desarrollador-frontend: sonnet
|
|
46
|
+
operaciones: sonnet
|
|
47
|
+
tester: sonnet
|
|
48
|
+
revisor: opus
|
|
49
|
+
critico: opus
|
|
50
|
+
seguridad: opus
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Combinación "rápida y económica" (para MVPs)
|
|
54
|
+
```yaml
|
|
55
|
+
arquitecto: sonnet
|
|
56
|
+
disenador-api: sonnet
|
|
57
|
+
asesor-datos: sonnet
|
|
58
|
+
desarrollador-backend: sonnet
|
|
59
|
+
desarrollador-frontend: sonnet
|
|
60
|
+
operaciones: haiku
|
|
61
|
+
tester: haiku
|
|
62
|
+
revisor: sonnet
|
|
63
|
+
critico: sonnet
|
|
64
|
+
seguridad: sonnet
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Combinación "máxima calidad" (enterprise)
|
|
68
|
+
```yaml
|
|
69
|
+
# Todo opus en agentes de decisión, sonnet en implementación rápida
|
|
70
|
+
arquitecto: opus
|
|
71
|
+
disenador-api: opus
|
|
72
|
+
asesor-datos: opus
|
|
73
|
+
desarrollador-backend: sonnet
|
|
74
|
+
desarrollador-frontend: sonnet
|
|
75
|
+
operaciones: opus # infra crítica
|
|
76
|
+
tester: sonnet
|
|
77
|
+
revisor: opus
|
|
78
|
+
critico: opus
|
|
79
|
+
seguridad: opus
|
|
80
|
+
documentador: sonnet
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Cambiar modelos
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
/sdd.configurar modelos
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
O edita `.sdd/sdd.config.yaml`:
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
agentes:
|
|
93
|
+
arquitecto:
|
|
94
|
+
modelo: opus # cambiar aquí
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Los cambios aplican a la próxima invocación.
|
|
98
|
+
|
|
99
|
+
## Notas
|
|
100
|
+
|
|
101
|
+
- Esta guía se basa en la familia Claude (opus/sonnet/haiku) al momento de escribir esto.
|
|
102
|
+
- Si Anthropic publica un nuevo modelo, actualiza esta tabla en tu proyecto.
|
|
103
|
+
- Otros proveedores: si usas Claude Code con otros modelos, ajusta las recomendaciones.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Guía Exhaustiva de Personalización
|
|
2
|
+
|
|
3
|
+
SDD-ES está diseñado para ser **completamente personalizable**. Cada archivo es Markdown plano que puedes editar.
|
|
4
|
+
|
|
5
|
+
## Niveles de personalización
|
|
6
|
+
|
|
7
|
+
### Nivel 1: Configuración (`.sdd/sdd.config.yaml`)
|
|
8
|
+
|
|
9
|
+
Cambios sin tocar lógica del plugin.
|
|
10
|
+
|
|
11
|
+
- Activar/desactivar agentes
|
|
12
|
+
- Cambiar modelos por agente
|
|
13
|
+
- Cambiar rutas de archivos
|
|
14
|
+
- Ajustar umbrales de calidad
|
|
15
|
+
- Modificar comportamientos (numeración de specs, ruta rápida, etc.)
|
|
16
|
+
- Definir protecciones (archivos no tocar, comandos prohibidos)
|
|
17
|
+
|
|
18
|
+
### Nivel 2: Plantillas (`plantillas/*.md`)
|
|
19
|
+
|
|
20
|
+
Cambios en el formato de los artefactos generados.
|
|
21
|
+
|
|
22
|
+
- Modificar secciones de la spec
|
|
23
|
+
- Cambiar el formato del plan
|
|
24
|
+
- Personalizar el ADR
|
|
25
|
+
- Añadir/quitar secciones del snapshot
|
|
26
|
+
|
|
27
|
+
Las plantillas se leen al generar cada artefacto. Cambia un campo aquí y todos los artefactos futuros lo respetarán.
|
|
28
|
+
|
|
29
|
+
### Nivel 3: Comandos (`commands/sdd.*.md`)
|
|
30
|
+
|
|
31
|
+
Cambios en el comportamiento del flujo.
|
|
32
|
+
|
|
33
|
+
- Modificar el orden de pasos en un comando
|
|
34
|
+
- Cambiar las preguntas que se hacen
|
|
35
|
+
- Ajustar criterios de detección automática
|
|
36
|
+
- Personalizar mensajes y outputs
|
|
37
|
+
|
|
38
|
+
### Nivel 4: Agentes (`agents/*.md`)
|
|
39
|
+
|
|
40
|
+
Cambios en la personalidad y reglas de los expertos.
|
|
41
|
+
|
|
42
|
+
- Añadir restricciones específicas del proyecto
|
|
43
|
+
- Cambiar el formato de salida
|
|
44
|
+
- Definir conocimiento de dominio
|
|
45
|
+
- Ajustar criterios de aceptación de su trabajo
|
|
46
|
+
|
|
47
|
+
### Nivel 5: Hooks (`.sdd/hooks/*.sh`)
|
|
48
|
+
|
|
49
|
+
Integración con tus sistemas externos.
|
|
50
|
+
|
|
51
|
+
- Git/GitLab/GitHub workflows
|
|
52
|
+
- Notificaciones (Slack, Teams, Discord)
|
|
53
|
+
- Triggers de CI/CD
|
|
54
|
+
- Linters/formatters automáticos
|
|
55
|
+
- Backups
|
|
56
|
+
- Sync con sistemas de tickets (Jira, Linear, etc.)
|
|
57
|
+
|
|
58
|
+
## Casos de personalización comunes
|
|
59
|
+
|
|
60
|
+
### Caso 1: Agregar una sección obligatoria a las specs
|
|
61
|
+
|
|
62
|
+
Edita `plantillas/especificacion.md` y añade tu sección. Luego edita `commands/sdd.especificar.md` para mencionarla en el PASO 4.
|
|
63
|
+
|
|
64
|
+
Opcional: edita `commands/sdd.checklist.md` para añadir un check sobre esa sección.
|
|
65
|
+
|
|
66
|
+
### Caso 2: Cambiar el formato de los ADRs
|
|
67
|
+
|
|
68
|
+
Edita `plantillas/decision-arquitectura.md`.
|
|
69
|
+
|
|
70
|
+
### Caso 3: Integrar con tu workflow de Git (sin que SDD lo haga directamente)
|
|
71
|
+
|
|
72
|
+
Crea `.sdd/hooks/despues_especificar.sh`:
|
|
73
|
+
```bash
|
|
74
|
+
#!/bin/bash
|
|
75
|
+
# Crear branch automáticamente al crear una spec
|
|
76
|
+
SPEC_ID="$1"
|
|
77
|
+
git checkout -b "spec/${SPEC_ID}"
|
|
78
|
+
echo "✅ Branch creada: spec/${SPEC_ID}"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Y `.sdd/hooks/despues_implementar.sh`:
|
|
82
|
+
```bash
|
|
83
|
+
#!/bin/bash
|
|
84
|
+
# Hacer commit y abrir PR
|
|
85
|
+
SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
|
|
86
|
+
git add -A
|
|
87
|
+
git commit -m "feat(${SPEC_ID}): implementación completada"
|
|
88
|
+
gh pr create --title "${SPEC_ID}" --body "$(cat .sdd/especificaciones/${SPEC_ID}/spec.md | head -20)"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Caso 4: Notificar al equipo cuando se aprueba un plan
|
|
92
|
+
|
|
93
|
+
Crea `.sdd/hooks/despues_planificar.sh`:
|
|
94
|
+
```bash
|
|
95
|
+
#!/bin/bash
|
|
96
|
+
SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
|
|
97
|
+
TITULO=$(grep "^titulo:" ".sdd/especificaciones/${SPEC_ID}/spec.md" | cut -d'"' -f2)
|
|
98
|
+
|
|
99
|
+
curl -X POST https://hooks.slack.com/services/XXX/YYY/ZZZ \
|
|
100
|
+
-H 'Content-type: application/json' \
|
|
101
|
+
--data "{\"text\":\"📋 Plan aprobado: ${TITULO}\"}"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Caso 5: Añadir un agente nuevo (ej: "mobile-developer")
|
|
105
|
+
|
|
106
|
+
1. Crea `agents/desarrollador-mobile.md` con el frontmatter y el rol
|
|
107
|
+
2. Añádelo a `.claude-plugin/plugin.json` en `agents:`
|
|
108
|
+
3. Añade entrada en `.sdd/sdd.config.yaml`:
|
|
109
|
+
```yaml
|
|
110
|
+
agentes:
|
|
111
|
+
desarrollador-mobile:
|
|
112
|
+
activo: true
|
|
113
|
+
modelo: sonnet
|
|
114
|
+
descripcion: "Desarrollo de apps móviles."
|
|
115
|
+
```
|
|
116
|
+
4. Edita `skills/enrutador-agentes.md` para incluir reglas de cuándo invocarlo
|
|
117
|
+
5. (Opcional) Edita `commands/sdd.tareas.md` para asignarle tareas específicas
|
|
118
|
+
|
|
119
|
+
### Caso 6: Soportar otro idioma además de español
|
|
120
|
+
|
|
121
|
+
Aunque SDD-ES está en español, puedes:
|
|
122
|
+
- Duplicar los archivos `commands/sdd.*.md` con sufijo `.en.md` y traducirlos
|
|
123
|
+
- Mantener variables como `.sdd/idioma` y leer condicionalmente
|
|
124
|
+
- Más simple: forkea el repo y traduce todo
|
|
125
|
+
|
|
126
|
+
### Caso 7: Bloquear ciertos archivos
|
|
127
|
+
|
|
128
|
+
En `.sdd/sdd.config.yaml`:
|
|
129
|
+
```yaml
|
|
130
|
+
protecciones:
|
|
131
|
+
no_tocar_archivos:
|
|
132
|
+
- ".env*"
|
|
133
|
+
- "src/legacy/**" ← añade tus rutas
|
|
134
|
+
- "vendor/**"
|
|
135
|
+
- "secrets/**"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Caso 8: Numeración secuencial en lugar de fecha
|
|
139
|
+
|
|
140
|
+
En `.sdd/sdd.config.yaml`:
|
|
141
|
+
```yaml
|
|
142
|
+
comportamiento:
|
|
143
|
+
numeracion_especificaciones: "secuencial" # 001-, 002-, ...
|
|
144
|
+
# o "ambos": 2026-06-08-001-feature-x
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Filosofía de personalización
|
|
148
|
+
|
|
149
|
+
- **Empieza simple**: usa los defaults, personaliza solo cuando los necesites
|
|
150
|
+
- **Documenta tus cambios**: si cambias una plantilla, deja un comentario explicando por qué
|
|
151
|
+
- **No olvides el equipo**: si trabajas en equipo, commitea las personalizaciones
|
|
152
|
+
- **Versiona la constitución**: cuando cambias principios, sube versión MAYOR/MENOR/PARCHE
|
package/instalar.ps1
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SDD-ES — Atajo de instalación para Windows (PowerShell).
|
|
2
|
+
#
|
|
3
|
+
# Delega en el CLI Node multiplataforma (cli\index.js), que es la fuente
|
|
4
|
+
# de verdad única de la lógica de instalación. Si no hay Node, avisa.
|
|
5
|
+
#
|
|
6
|
+
# Uso:
|
|
7
|
+
# .\instalar.ps1 Instala en el proyecto actual
|
|
8
|
+
# .\instalar.ps1 -Global Instala para todos tus proyectos ($HOME\.claude)
|
|
9
|
+
#
|
|
10
|
+
# El camino canónico recomendado es: npx sdd-es init [--global]
|
|
11
|
+
#
|
|
12
|
+
# Si PowerShell bloquea el script por la política de ejecución, corre:
|
|
13
|
+
# powershell -ExecutionPolicy Bypass -File .\instalar.ps1
|
|
14
|
+
|
|
15
|
+
param(
|
|
16
|
+
[switch]$Global
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
$ErrorActionPreference = "Stop"
|
|
20
|
+
$PluginDir = $PSScriptRoot
|
|
21
|
+
|
|
22
|
+
# Verificar Node
|
|
23
|
+
$node = Get-Command node -ErrorAction SilentlyContinue
|
|
24
|
+
if ($null -eq $node) {
|
|
25
|
+
Write-Host "✗ Node.js no está instalado." -ForegroundColor Red
|
|
26
|
+
Write-Host " SDD-ES necesita Node >=18 para instalarse."
|
|
27
|
+
Write-Host " Instala Node desde https://nodejs.org y reintenta."
|
|
28
|
+
exit 1
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Construir argumentos para el CLI
|
|
32
|
+
$cliArgs = @("init")
|
|
33
|
+
if ($Global) {
|
|
34
|
+
$cliArgs += "--global"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Delegar al CLI Node (misma lógica que instalar.sh y npx sdd-es)
|
|
38
|
+
& node (Join-Path $PluginDir "cli\index.js") @cliArgs
|
|
39
|
+
exit $LASTEXITCODE
|
package/instalar.sh
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# SDD-ES — Atajo de instalación para Unix (macOS / Linux / Git Bash).
|
|
3
|
+
#
|
|
4
|
+
# Delega en el CLI Node multiplataforma (cli/index.js), que es la fuente
|
|
5
|
+
# de verdad única de la lógica de instalación. Si no hay Node, avisa.
|
|
6
|
+
#
|
|
7
|
+
# Uso: bash instalar.sh [--global]
|
|
8
|
+
# El camino canónico recomendado es: npx sdd-es init [--global]
|
|
9
|
+
|
|
10
|
+
set -e
|
|
11
|
+
|
|
12
|
+
PLUGIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
+
|
|
14
|
+
if ! command -v node &> /dev/null; then
|
|
15
|
+
echo "✗ Node.js no está instalado." >&2
|
|
16
|
+
echo " SDD-ES necesita Node >=18 para instalarse." >&2
|
|
17
|
+
echo " Instala Node desde https://nodejs.org y reintenta." >&2
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Pasa todos los argumentos (p. ej. --global) al subcomando init del CLI
|
|
22
|
+
exec node "${PLUGIN_DIR}/cli/index.js" init "$@"
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# sdd-figma-mcp
|
|
2
|
+
|
|
3
|
+
MCP server local para integración de Figma con proyectos que usan SDD-ES. Lo usa el agente `desarrollador-frontend` para analizar el sistema de diseño del proyecto, traer componentes de Figma y generar código adaptado — sin romper lo que ya existe.
|
|
4
|
+
|
|
5
|
+
## Qué hace
|
|
6
|
+
|
|
7
|
+
| Herramienta | Qué resuelve |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `analizar_sistema_diseño` | Lee tokens, colores, tipografía y componentes del proyecto local |
|
|
10
|
+
| `evaluar_ui_existente` | Score 0-100 + problemas + sugerencias de mejora |
|
|
11
|
+
| `conectar_figma` | Verifica PAT y metadata del archivo |
|
|
12
|
+
| `listar_componentes` | Lista componentes publicados en el archivo Figma |
|
|
13
|
+
| `traer_componente` | Detalle completo de un nodo: estructura, fills, texto, dimensiones |
|
|
14
|
+
| `mapear_estilos` | Cruza colores/tipografía de Figma con tokens del proyecto |
|
|
15
|
+
| `generar_componente` | Código React/Vue adaptado al sistema de diseño local |
|
|
16
|
+
| `sugerir_mejoras` | Lista priorizada de mejoras al design system |
|
|
17
|
+
|
|
18
|
+
## Instalación
|
|
19
|
+
|
|
20
|
+
### 1. Sin dependencias — listo para ejecutar
|
|
21
|
+
|
|
22
|
+
No hay `npm install`. El servidor usa exclusivamente módulos built-in de Node.js (`readline`, `fs`, `path`) y `fetch` nativo (disponible desde Node 18). El `package.json` es solo un descriptor — no instala nada.
|
|
23
|
+
|
|
24
|
+
### 2. Obtener el Personal Access Token de Figma
|
|
25
|
+
|
|
26
|
+
1. Abre Figma → Menú de usuario (esquina superior derecha) → **Settings**
|
|
27
|
+
2. Pestaña **Security** → **Personal access tokens** → **Generate new token**
|
|
28
|
+
3. Dale un nombre (ej. `sdd-figma-mcp`) y copia el token
|
|
29
|
+
|
|
30
|
+
### 3. Definir FIGMA_PAT como variable de entorno del sistema
|
|
31
|
+
|
|
32
|
+
El MCP lee el token desde `process.env.FIGMA_PAT` — **no está hardcodeado en ningún archivo de configuración** para evitar que quede en el repositorio.
|
|
33
|
+
|
|
34
|
+
Claude Code hereda las variables de entorno de la sesión donde se lanza, así que basta con definirla una vez en el sistema:
|
|
35
|
+
|
|
36
|
+
**Windows (PowerShell, permanente para el usuario):**
|
|
37
|
+
```powershell
|
|
38
|
+
[System.Environment]::SetEnvironmentVariable("FIGMA_PAT", "tu-token-aqui", "User")
|
|
39
|
+
# Cierra y vuelve a abrir la terminal para que tome efecto
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Windows (solo sesión actual):**
|
|
43
|
+
```powershell
|
|
44
|
+
$env:FIGMA_PAT = "tu-token-aqui"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**macOS / Linux (permanente):**
|
|
48
|
+
```bash
|
|
49
|
+
echo 'export FIGMA_PAT="tu-token-aqui"' >> ~/.zshrc # o ~/.bashrc
|
|
50
|
+
source ~/.zshrc
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
> Si el proyecto tiene un `.env` que Claude Code carga automáticamente, también puedes agregar `FIGMA_PAT=tu-token` ahí — el proceso Node lo hereda igual.
|
|
54
|
+
|
|
55
|
+
### 4. Registrar el MCP en Claude Code
|
|
56
|
+
|
|
57
|
+
Agrega esto a tu `.claude/settings.json` (o `~/.claude/settings.json` para uso global):
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"mcpServers": {
|
|
62
|
+
"sdd-figma": {
|
|
63
|
+
"command": "node",
|
|
64
|
+
"args": ["/ruta/absoluta/al/sdd-lite/mcp-figma/src/index.js"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
No hay campo `env` — el servidor hereda `FIGMA_PAT` directamente del entorno del sistema (paso 3). Así el token nunca queda registrado en ningún archivo de configuración del repositorio.
|
|
71
|
+
|
|
72
|
+
> Reemplaza `/ruta/absoluta/al/sdd-lite` con la ruta real donde instalaste SDD-ES.
|
|
73
|
+
> En Windows usa barras invertidas dobles: `"c:\\\\Users\\\\usuario\\\\sdd-lite\\\\mcp-figma\\\\src\\\\index.js"`
|
|
74
|
+
|
|
75
|
+
### 5. Verificar
|
|
76
|
+
|
|
77
|
+
Reinicia Claude Code y ejecuta en cualquier proyecto frontend:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
analizar_sistema_diseño({ project_root: "." })
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Deberías ver el perfil del sistema de diseño del proyecto.
|
|
84
|
+
|
|
85
|
+
## Cómo encontrar el file_key de Figma
|
|
86
|
+
|
|
87
|
+
La URL de Figma tiene este formato:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
https://www.figma.com/file/ABCDEF123456/nombre-del-archivo?node-id=0:1
|
|
91
|
+
^^^^^^^^^^^^
|
|
92
|
+
este es el file_key
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Cómo encontrar el node_id
|
|
96
|
+
|
|
97
|
+
1. Selecciona el frame o componente en Figma
|
|
98
|
+
2. La URL cambia a: `?node-id=123:456`
|
|
99
|
+
3. Ese valor (`123:456` o en formato `123-456`) es el `node_id`
|
|
100
|
+
|
|
101
|
+
## Flujo típico de uso
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
# 1. Analiza lo que ya tiene el proyecto
|
|
105
|
+
analizar_sistema_diseño({ project_root: "/mi/proyecto" })
|
|
106
|
+
|
|
107
|
+
# 2. Conecta con el archivo de Figma
|
|
108
|
+
conectar_figma({ file_key: "ABCDEF123456" })
|
|
109
|
+
|
|
110
|
+
# 3. Lista los componentes disponibles
|
|
111
|
+
listar_componentes({ file_key: "ABCDEF123456", filter: "Button" })
|
|
112
|
+
|
|
113
|
+
# 4. Trae el componente que quieres implementar
|
|
114
|
+
traer_componente({ file_key: "ABCDEF123456", node_id: "123:456" })
|
|
115
|
+
|
|
116
|
+
# 5. Verifica que los estilos tienen equivalente en el proyecto
|
|
117
|
+
mapear_estilos({ file_key: "ABCDEF123456", node_id: "123:456", project_root: "/mi/proyecto" })
|
|
118
|
+
|
|
119
|
+
# 6. Genera el código adaptado
|
|
120
|
+
generar_componente({ file_key: "ABCDEF123456", node_id: "123:456", project_root: "/mi/proyecto" })
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Stacks soportados
|
|
124
|
+
|
|
125
|
+
| Framework | CSS | Estado |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| React / Next.js | Tailwind CSS | ✅ Completo |
|
|
128
|
+
| React / Next.js | CSS Modules | ✅ Completo |
|
|
129
|
+
| Vue 3 | Tailwind / Scoped CSS | ✅ Completo |
|
|
130
|
+
| React / Next.js | styled-components | ⚠️ Parcial (genera CSS Module) |
|
|
131
|
+
| Angular | Cualquiera | ⚠️ Genera React, ajusta manualmente |
|
|
132
|
+
| Svelte | Cualquiera | 🔜 En roadmap |
|
|
133
|
+
|
|
134
|
+
## Variables de entorno
|
|
135
|
+
|
|
136
|
+
| Variable | Requerida | Descripción |
|
|
137
|
+
|---|---|---|
|
|
138
|
+
| `FIGMA_PAT` | Sí | Personal Access Token de Figma |
|
|
139
|
+
|
|
140
|
+
## Estructura del proyecto
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
mcp-figma/
|
|
144
|
+
├── src/
|
|
145
|
+
│ ├── index.js ← Servidor MCP + definición de tools
|
|
146
|
+
│ ├── mcp.js ← Protocolo JSON-RPC 2.0 sobre stdio (sin deps)
|
|
147
|
+
│ ├── figma-client.js ← Cliente HTTP de la API de Figma
|
|
148
|
+
│ ├── design-system-analyzer.js ← Análisis del sistema de diseño local
|
|
149
|
+
│ ├── style-mapper.js ← Mapeo de estilos Figma ↔ tokens locales
|
|
150
|
+
│ └── component-generator.js ← Generación de código por framework
|
|
151
|
+
└── package.json ← Cero dependencias — solo descriptor
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Limitaciones conocidas
|
|
155
|
+
|
|
156
|
+
- La detección de tokens en Tailwind usa análisis estático de texto (no ejecuta el módulo), por lo que configs muy dinámicas pueden no detectarse completamente
|
|
157
|
+
- La generación de componentes es un punto de partida — siempre revisa accesibilidad, props faltantes y manejo de estado
|
|
158
|
+
- La API de Figma Variables (tokens del sistema de diseño de Figma) requiere plan Professional o superior
|