SDD Devkit
version license
SDD Devkit es un framework de SDD (Spec-Driven Development), distribuido como Agent Plugin, cuyo objetivo es ayudarte en la preparación, planificación e implementación de proyectos de desarrollo. Su flujo:
- Prepara el harness del proyecto: los archivos base, el stack tecnológico, las decisiones de arquitectura (ADRs), los estándares y una compuerta de calidad para que los agentes trabajen con contexto.
- Refina el requerimiento y lo descompone hasta el detalle que pide una implementación sin ambigüedades: modelos, diagramas, flujos, wireframes y planes de implementación (historias de usuario o tareas de mantenimiento).
- Orquesta la implementación con worktrees, de modo que cada plan se implementa de forma independiente.
- Cierra con puertas de calidad: revisión de código, pruebas, cobertura de los criterios de aceptación e integración o Pull Request.
Instalación
Instala el plugin completo, no skills sueltos. Es compatible con cualquier agente que soporte el estándar abierto Agent Plugins, entre ellos:
Cursor:
/add-plugin https://github.com/juanca202/sdd-devkit
VS Code:
Paleta de comandos (Ctrl/Cmd+Shift+P) → Chat: Install Plugin From Source → pega https://github.com/juanca202/sdd-devkit
Kiro:
Panel de Powers → Add Custom Power → Import power from GitHub → pega https://github.com/juanca202/sdd-devkit
Claude Code (tiene su propio sistema de plugins, no usa el estándar Agent Plugins):
/plugin marketplace add juanca202/sdd-devkit
/plugin install sdd-devkit@juanca202
Configuración del proyecto
La primera vez que uses el plugin en un proyecto, /arch-init crea .sdd-devkit/settings.json en la raíz principal (en una solución multi-repo, la del repo de especificaciones: es un único archivo para toda la solución, nunca uno por submódulo). Ahí eliges el idioma de los documentos, dónde viven tus especificaciones, cuánto te pregunta el agente antes de commitear, implementar o corregir algo, y cuántos intentos hace sobre un problema que no logra resolver antes de devolvértelo. Puedes dejarlo todo en sus valores por defecto y ajustarlo cuando quieras.
Detalle de cada opción en SETTINGS.md.
Empezar desde un repositorio
/arch-init puede recibir las URLs (o rutas) de los repositorios con los que arranca el proyecto, cada una con un indicador que dice qué es:
/arch-init base https://github.com/mi-org/plantilla-api.git # proyecto base: se clona y queda como remote upstream
/arch-init existing https://github.com/mi-org/pedidos-api.git # repo existente: se clona tal cual, origin intacto
/arch-init existing <url-backend> base <url-plantilla-frontend> # varios repos → multirepo
base: una plantilla, starter o semilla corporativa. No es el repo del proyecto, solo su punto de partida; queda como remoteupstreamyoriginse agrega cuando exista el remoto propio.existing: el repositorio del proyecto ya existe; se usa sin reconfigurar remotos.- Una URL → monorepo. Dos o más → multirepo: se crea un repositorio de especificaciones y cada URL se agrega como submódulo.
- Sin indicador, el skill pregunta si la URL es un proyecto base o el repo existente. Sin URLs, pregunta la topología (monorepo / multirepo) y trabaja sobre el directorio actual.
Más detalle en SKILLS.md.
Skills incluidos
Detalle de uso, opciones y ejemplos de cada skill: SKILLS.md.
Harness
Skills que preparan y mantienen la base del proyecto — arquitectura y control de versiones — independientes del requerimiento en el que estés trabajando.
| Skill | Uso |
|---|---|
| arch‑init | Prepara el proyecto para trabajar con el plugin: repositorio git (el actual, o clonado desde un proyecto base base o un repo existente existing), archivos base, stack tecnológico y una compuerta de calidad mínima. Funciona con uno o varios repositorios. |
| plugin‑migrate | Normaliza el contenido producido con versiones anteriores del plugin a la estructura vigente: rutas, plantillas y formatos, con confirmación y mapeo de cambios. |
| arch‑manage | Crea o actualiza decisiones de arquitectura (ADRs) y estándares del proyecto (docs/adr/, docs/standards/). |
| arch‑discover | Analiza un repositorio existente y propone qué decisiones y estándares documentar a partir de lo que ya está implementado. |
| arch‑audit | Audita si el código cumple los estándares definidos y genera un informe con hallazgos priorizados (docs/audits/). |
| git‑commit | Prepara commits con mensajes claros, inferidos de los cambios pendientes. |
Flujo del harness
arch-init es el punto de entrada: detecta en qué estado está el proyecto, prepara la base y te lleva a la compuerta de calidad. Desde ahí se pasa al flujo de implementación de requerimientos.
flowchart TD
INIT["Inicialización<br/>**/arch-init**"]
subgraph BF["Proyecto con código existente"]
BA["Descubrimiento de arquitectura<br/>**/arch-discover**"]
BA -.-> WR["Descubrimiento de funcionalidades<br/>**/work-research**"]
WR -.-> TD["Casos de prueba<br/>**/test-define**"]
end
INIT --> BA
INIT --> T["Compuerta de calidad<br/>(vía **/arch-init**)"]
BA --> T
WR -.-> T
TD -.-> T
T --> S["Arquitectura: ADRs y estándares<br/>**/arch-manage**"]
S -.-> AUD["Auditoría<br/>**/arch-audit**"]
subgraph NESTED["Implementación de requerimientos"]
IMPL["ver diagrama siguiente"]
end
S --> IMPL
IMPL --> DONE(["Entregable"])
classDef nestedFlow fill:#fff7ed,stroke:#ea580c,stroke-width:2px,stroke-dasharray:5 5,color:#9a3412
classDef entryPoint fill:#dcfce7,stroke:#15803d,stroke-width:3px,color:#14532d
classDef exitPoint fill:#fee2e2,stroke:#b91c1c,stroke-width:3px,color:#7f1d1d
class IMPL nestedFlow
class INIT entryPoint
class DONE exitPoint
- Todo empieza con
arch-init: prepara la base y el stack, partiendo del directorio actual o de los repositorios que le pases (base/existing; si hay varios, uno de especificaciones agrupa a los demás como submódulos). - Si el proyecto ya tiene código,
arch-initte lleva a descubrir su arquitectura (arch-discover) y, si quieres, sus funcionalidades (work-research) y casos de prueba (test-define). - Se configura la compuerta de calidad.
- Se documentan o actualizan los ADRs/estándares (
arch-manage); opcionalmente se audita el cumplimiento (arch-audit). - Con la base lista, entras al flujo de implementación de requerimientos (siguiente sección).
Specs
Skills del ciclo de vida de un requerimiento: de la idea al Pull Request mergeado.
| Skill | Uso |
|---|---|
| work‑research | Investiga y resume hallazgos en un informe: viabilidad de una idea, decisiones pendientes, diagnóstico de un bug, análisis de código legado o de una migración. |
| requirement‑refine | Punto de entrada de todo requerimiento: lo formaliza como RQ (solo certificar lo que un tercero definió), PRD (aprobar producto, sin decisiones técnicas) o SRS (especificación completa: alcance, stack, repositorios). Un PRD se promueve a SRS. Paso opcional antes de work-define. |
| work‑define | Crea o actualiza historias de usuario. |
| design‑define | Documenta el diseño técnico de una historia: modelos de datos, endpoints, diagramas. |
| test‑define | Crea casos de prueba a partir de los criterios de aceptación de una historia, funcionalidad o requerimiento (RQ/PRD/SRS). Un requerimiento crudo lo deriva a requirement-refine. |
| work‑plan | Planifica las tareas técnicas de una historia o una tarea de mantenimiento independiente, y registra incidentes (BUG-XXX: qué está mal, con evidencia; sin plan). |
| work‑implement | Implementa una tarea planificada, o automatiza los casos de prueba ya definidos. |
| quality‑check | Corre las verificaciones automáticas del proyecto (tipado, linter, pruebas, build, etc.) antes de integrar. |
| code‑review | Revisión de código antes de integrar: intención, diseño y feedback accionable. |
| coverage‑verify | Verifica que el código cubra los criterios de aceptación del artefacto implementado —con pruebas o casos de prueba— y emite un reporte con veredicto. |
| work‑integrate | Cierra e integra el trabajo directamente a la rama de desarrollo. |
| pr‑create | Crea el Pull Request (o Merge Request) con las puertas de calidad ya verificadas. |
Flujo de implementación
Seguir este flujo te da trazabilidad de punta a punta (cada línea de código rastreable hasta su historia y su criterio de aceptación), calidad consistente en cada entrega, y la posibilidad de pausar y retomar el trabajo sin perder contexto. Los pasos con línea punteada son opcionales.
flowchart TD
A[Requerimiento] --> B["Historias de usuario<br/>**/work-define**"]
A -.-> Z["Refinar el requerimiento<br/>**/requirement-refine**"]
Z -.-> B
B -.-> C["Casos de prueba<br/>**/test-define**"]
B -.-> D["Diseño técnico<br/>**/design-define**"]
B --> E["Planificación de tareas<br/>**/work-plan**"]
A -.->|tareas de mantenimiento| E
E -.-> F["Investigación<br/>**/work-research**"]
E -.-> D
E --> G["Implementación<br/>**/work-implement**"]
C -.->|automatizar pruebas| G
G --> H["Integración directa<br/>**/work-integrate**"]
G --> I["Creación de PR<br/>**/pr-create**"]
H --> J(["Entregable"])
I --> J
classDef main fill:#dbeafe,stroke:#2563eb,color:#1e3a8a
classDef entryPoint fill:#dcfce7,stroke:#15803d,stroke-width:3px,color:#14532d
classDef exitPoint fill:#fee2e2,stroke:#b91c1c,stroke-width:3px,color:#7f1d1d
class B,E,G,I main
class A entryPoint
class J exitPoint
- Un requerimiento se convierte en historias de usuario (
work-define). Si llega ambiguo, puedes refinarlo primero conrequirement-refine. Si es una tarea de mantenimiento sin historia, pasa directo a planificación. - Opcionalmente, desde la historia se definen casos de prueba (
test-define) y/o diseño técnico (design-define). - Se planifican las tareas técnicas de la historia, o la tarea de mantenimiento (
work-plan). - Las tareas se implementan (
work-implement); los casos de prueba también pueden automatizarse ahí. - El trabajo se cierra integrándolo directo a tu rama de desarrollo (
work-integrate) o mediante un Pull Request (pr-create) — ambos verifican calidad, revisan el código y validan la cobertura de pruebas antes de dar por cerrado el trabajo.
Integración con otros frameworks de implementación
¿Ya usas Speckit, OpenSpec, AgentOS u otro framework de specs para implementar? SDD Devkit puede cubrir solo hasta las historias de usuario (y, si quieres, investigación, casos de prueba y diseño técnico) y dejarte el resto a tu framework — el cierre sigue siendo el mismo.
flowchart TD
A[Requerimiento] --> B["Historias de usuario<br/>**/work-define**"]
A -.-> Z["Refinar el requerimiento<br/>**/requirement-refine**"]
Z -.-> B
B -.-> R["Investigación<br/>**/work-research**"]
B -.-> C["Casos de prueba<br/>**/test-define**"]
B -.-> D["Diseño técnico<br/>**/design-define**"]
subgraph NESTED["Tu framework · Speckit / OpenSpec / AgentOS…"]
S["Specs e implementación"]
end
B --> S
S --> H["Integración directa<br/>**/work-integrate**"]
S --> I["Creación de PR<br/>**/pr-create**"]
H --> J(["Entregable"])
I --> J
classDef main fill:#dbeafe,stroke:#2563eb,color:#1e3a8a
classDef nestedFlow fill:#fff7ed,stroke:#ea580c,stroke-width:2px,stroke-dasharray:5 5,color:#9a3412
classDef entryPoint fill:#dcfce7,stroke:#15803d,stroke-width:3px,color:#14532d
classDef exitPoint fill:#fee2e2,stroke:#b91c1c,stroke-width:3px,color:#7f1d1d
class B,H,I main
class S nestedFlow
class A entryPoint
class J exitPoint
Las historias alimentan tu framework de terceros; al cerrar, work-integrate/pr-create corren igual las puertas de calidad sobre el entregable. Lo que genere tu framework (sus propias specs, planes o tareas) no lo toca SDD Devkit — solo archiva sus propios artefactos (requisitos, historias, tareas de mantenimiento e investigaciones), y solo cuando tú lo pides al skill que los produjo con el modificador archive.
Nivel de responsabilidades
Tú defines la intención, las restricciones y las decisiones importantes; el agente resuelve los detalles dentro de esos límites.
| Nivel | Lo defines tú | Te asiste |
|---|---|---|
| Formalizar el requerimiento (RQ · PRD · SRS) | Product Owner, Arquitecto, Diseñador UI/UX | /requirement-refine |
| Problema de negocio | Product Owner | /work-define |
| Comportamiento esperado | Desarrollador | /work-plan |
| Casos de prueba | QA | /test-define |
| UX/UI (cómo debe verse) | Diseñador | — |
| Modelo de dominio / datos | Arquitecto | /design-define |
| Arquitectura | Arquitecto | /arch-manage |
| Validación de criterios de aceptación | QA | /coverage-verify |
| Implementación detallada | — | /work-implement |
Casos de uso
Recorridos completos que combinan varios skills para una situación concreta.
| Caso de uso | Descripción |
|---|---|
| Corregir un bug | Diagnóstico → planificación e implementación de la corrección → puertas de calidad → integración/PR |
| Refactorizar código | Investigación de factibilidad e impacto → planificación e implementación → puertas de calidad → integración/PR |
| Tarea de mantenimiento | Planificación directa (sin historia de usuario) → implementación → puertas de calidad → integración/PR |
| Spike | Experimento con timebox (WI de tipo spike) → informe de resultados → formalización en historia o work item definitivo → ciclo normal; la rama del spike nunca se integra |
| Cobertura de pruebas en código existente | Descubrir funcionalidades existentes → definir casos de prueba → automatizarlas → puertas de calidad → PR |
| Automatización de pruebas desde historias | Sincronizar la historia del gestor → definir casos de prueba → automatizarlos → puertas de calidad → PR/integración |
Contribuir
Las contribuciones son bienvenidas. Antes de abrir un issue o un Pull Request, lee la guía de contribución.
Licencia
Este proyecto es de código abierto y se distribuye bajo la licencia MIT.