====== Kiro: comandos SDD ====== [[https://kiro.dev|Kiro]] es el IDE de AWS que popularizó un flujo de //spec-driven development// por fases: primero requisitos, luego diseño, luego tareas y solo al final código, con una aprobación humana en cada salto. Ese mismo flujo se puede usar desde la terminal, sin el IDE, con **cc-sdd**: un paquete npm que instala las //skills// de Kiro dentro del agente que ya estés usando. Es un proyecto independiente de terceros, no un producto de AWS, pero reproduce las mismas fases y los mismos documentos. **En este tema, «Kiro» significa cc-sdd.** * Proyecto: [[https://github.com/gotalab/cc-sdd|github.com/gotalab/cc-sdd]] (v3.0.2, MIT) ---- ===== 1. Instalación ===== Hace falta **Node.js** y ejecutar el comando **en la raíz del proyecto**, porque instala ficheros dentro de él. ==== 1.1. En Claude Code ==== cd mi-proyecto npx cc-sdd@latest --claude-skills --lang es mi-proyecto/ ├── .claude/skills/ # las skills de Kiro │ ├── kiro-steering/ │ ├── kiro-spec-init/ │ ├── kiro-spec-requirements/ │ ├── kiro-spec-design/ │ ├── kiro-spec-tasks/ │ └── kiro-impl/ ├── .kiro/ │ ├── settings/ # plantillas y reglas, personalizables │ ├── steering/ # memoria del proyecto <- la crea /kiro-steering │ └── specs/ # una carpeta por funcionalidad <- la crea /kiro-spec-init └── CLAUDE.md ==== 1.2. En OpenCode ==== cd mi-proyecto npx cc-sdd@latest --opencode-skills --lang es mi-proyecto/ ├── .opencode/skills/ # las skills de Kiro │ ├── kiro-steering/ │ ├── kiro-spec-init/ │ ├── kiro-spec-requirements/ │ ├── kiro-spec-design/ │ ├── kiro-spec-tasks/ │ └── kiro-impl/ ├── .kiro/ │ ├── settings/ # plantillas y reglas, personalizables │ ├── steering/ # memoria del proyecto <- la crea /kiro-steering │ └── specs/ # una carpeta por funcionalidad <- la crea /kiro-spec-init └── AGENTS.md Cambia la carpeta de las //skills// y el fichero de configuración del agente; el contenido de ''.kiro/'' y los comandos son idénticos a los de Claude Code. ---- ===== 2. Comandos iniciales en el proyecto ===== Estos son los pasos que se dan **una sola vez**, al empezar con el proyecto. A partir de ahí, lo único que se repite es el ciclo de la sección siguiente. start :npx cc-sdd; :kiro-steering; repeat :kiro-spec-init; :kiro-spec-requirements; :kiro-spec-design -y; :kiro-spec-tasks -y; :kiro-impl; repeat while (otra funcionalidad?) stop Los dos primeros pasos se dan una sola vez. El resto se repite por cada funcionalidad nueva, y de ahí la flecha de vuelta de ''kiro-impl'' a ''kiro-spec-init''. ^ Paso ^ Comando ^ Resultado ^ | Instalar | ''npx cc-sdd@latest --claude-skills --lang es'' | ''.claude/skills/'', ''.kiro/'' | | Crear la memoria del proyecto | ''/kiro-steering'' | ''.kiro/steering/'' con tres documentos | ==== 2.1. La memoria del proyecto ==== ''/kiro-steering'' crea lo que en cc-sdd se llama //steering//: la **memoria del proyecto**, lo que todos los demás comandos leen antes de hacer nada. Son tres documentos en ''.kiro/steering/'': ^ Fichero ^ Qué recoge ^ | ''product.md'' | Para qué sirve el producto, qué valor aporta, capacidades principales | | ''tech.md'' | Stack tecnológico, frameworks, decisiones técnicas y restricciones | | ''structure.md'' | Organización de directorios, patrones de arquitectura, convenciones de nombres | Sin //steering//, cada especificación arranca a ciegas y el agente reinventa las convenciones del proyecto en cada funcionalidad. Con él, todas parten del mismo contexto. Es lo primero que hay que ejecutar, y conviene **revisar los tres documentos antes de seguir**: pasan a ser la fuente de verdad del agente, así que un error aquí se propaga a todas las especificaciones. ---- ===== 3. Creación de una nueva especificación ===== Esto es lo que se repite **una vez por cada funcionalidad** que quieras construir. ==== 3.1. Las cinco fases ==== ^ Fase ^ Comando ^ Documento que produce ^ | Inicializar | ''/kiro-spec-init '' | ''spec.json'' | | Requisitos (el QUÉ) | ''/kiro-spec-requirements '' | ''requirements.md'' | | Diseño (el CÓMO) | ''/kiro-spec-design -y'' | ''design.md'' | | Tareas | ''/kiro-spec-tasks -y'' | ''tasks.md'' | | Implementación | ''/kiro-impl '' | **código** y //commits// | Los documentos viven juntos, uno por funcionalidad: .kiro/specs/user-auth-oauth/ ├── spec.json # metadatos y estado de aprobación de cada fase ├── requirements.md # QUÉ ├── design.md # CÓMO └── tasks.md # tareas ==== 3.2. Entre fase y fase está el humano ==== ''spec.json'' guarda si cada fase está generada y si está **aprobada**. Un comando se niega a arrancar si la fase anterior no lo está: Requirements not yet approved. Approval required before design generation. **Hay que pasar ''-y'' en dos de los cinco comandos.** ''/kiro-spec-requirements'' y ''/kiro-spec-design'' generan su documento pero **no** preguntan si lo apruebas, así que la aprobación la registra el comando siguiente con ''-y''. ''/kiro-spec-tasks'' sí pregunta al terminar, y por eso ''/kiro-impl'' no necesita nada. ^ Comando ^ ¿Necesita ''-y''? ^ Qué aprueba ese ''-y'' ^ | ''/kiro-spec-init'' | No | — | | ''/kiro-spec-requirements'' | No | — | | ''/kiro-spec-design'' | **Sí** | los **requisitos** de la fase anterior | | ''/kiro-spec-tasks'' | **Sí** | el **diseño** de la fase anterior | | ''/kiro-impl'' | No | las tareas ya quedaron aprobadas al final de ''/kiro-spec-tasks'' | Sin ''-y'' el comando se para con el mensaje de arriba. **''-y'' no es un atajo para ir más deprisa: es la forma de decir «ya he leído el documento anterior y me vale».** Léelo de verdad antes de escribirlo. ==== 3.3. Una funcionalidad de principio a fin ==== /kiro-spec-init Álbumes de fotos con subida, etiquetado y compartición /kiro-spec-requirements photo-albums /kiro-spec-design photo-albums -y /kiro-spec-tasks photo-albums -y /kiro-impl photo-albums Leyendo y aprobando el documento de cada fase antes de lanzar la siguiente. ---- ===== 4. Referencia de comandos ===== ==== 4.1. /kiro-steering ==== /kiro-steering Crea o actualiza la memoria del proyecto. No lleva argumentos. **Produce** tres documentos en ''.kiro/steering/'': ''product.md'' (para qué sirve el producto), ''tech.md'' (stack y decisiones técnicas) y ''structure.md'' (organización y convenciones). La primera vez los escribe desde cero leyendo README, dependencias y árbol de directorios. Las siguientes veces compara con el código y reporta lo que se ha desviado, respetando lo que hayas editado a mano. * **Captura patrones, no inventarios.** «Así se nombran los servicios aquí», no una lista de los 200 ficheros del proyecto. * **Relánzalo de vez en cuando** para que no se quede desfasado respecto al código ya escrito. ==== 4.2. /kiro-spec-init ==== /kiro-spec-init /kiro-spec-init Autenticación de usuarios con OAuth 2.0 y tokens JWT para una aplicación Next.js Crea el esqueleto de la especificación de **una** funcionalidad. **Produce** ''.kiro/specs//'' con ''spec.json'' y un ''requirements.md'' vacío. El nombre lo genera él en ''kebab-case'' a partir de la descripción: aquí, ''user-auth-oauth''. * Comprueba que la descripción dice **quién tiene el problema**, **cuál es la situación actual** y **qué debería cambiar**. Si falta algo, pregunta en lugar de suponerlo. * No escribe requisitos, ni diseño, ni tareas: solo la estructura. Por eso es instantáneo. * Cuanto más concreta sea la descripción —stack, restricciones, requisitos clave—, mejor arranca todo lo demás. ==== 4.3. /kiro-spec-requirements ==== /kiro-spec-requirements user-auth-oauth Convierte la descripción en un documento de requisitos **verificable**. El argumento es el nombre de la carpeta, no la descripción. **Produce** ''requirements.md'' con los criterios de aceptación en formato EARS. === Formato EARS === EARS (//Easy Approach to Requirements Syntax//) es una sintaxis acotada para escribir criterios que no admitan dos lecturas: WHEN THE SHALL IF THEN THE SHALL THE SHALL Un fragmento del documento resultante: ### 1.1 Autenticación de usuarios **FR-1.1.1**: Login con OAuth - WHEN el usuario pulsa "Entrar con Google" THE sistema SHALL redirigir a la pantalla de consentimiento - WHEN se recibe el callback de OAuth THE sistema SHALL validar el código de autorización - IF la validación es correcta THEN THE sistema SHALL crear una sesión con token JWT Cada línea es directamente un caso de prueba: hay un disparador, un sujeto y un resultado observable. === Requisitos son el QUÉ, no el CÓMO === Es la regla que más cuesta respetar: ^ Sí va en requisitos ^ No: eso es diseño ^ | Alcance: qué entra y qué queda fuera | Elección de stack (base de datos, //framework//, lenguaje) | | Comportamiento visible: «cuando pasa X, qué ve el usuario» | Patrones de arquitectura | | Reglas de negocio y casos límite | Diseño de la API, modelos de datos, componentes internos | | Tiempos de respuesta, disponibilidad, nivel de seguridad | Cómo se consiguen: caché, escalado | **Prueba del algodón**: si el criterio se puede escribir sin nombrar ninguna tecnología, es un requisito. Si necesita nombrarla, es diseño. Es un comando **iterativo**: puedes lanzarlo varias veces para refinar, y respeta lo que edites a mano. Si los requisitos salen genéricos, casi siempre falta //steering//. ==== 4.4. /kiro-spec-design ==== /kiro-spec-design user-auth-oauth -y Traduce el QUÉ al CÓMO. El ''-y'' aprueba los requisitos de la fase anterior; sin él, el comando se para. **Produce** ''design.md'' con: * **La frontera, primero de todo**: qué posee esta especificación, qué **no** posee y de qué dependencias puede tirar. * **Componentes e interfaces** con tipado explícito. * **Diagramas** cuando la arquitectura lo pide. * **Plan de ficheros**: rutas concretas, cuáles se crean y cuáles se modifican, una responsabilidad por fichero. De aquí salen las fronteras de las tareas del paso siguiente, así que un plan vago produce una implementación vaga. * **Estrategia de pruebas** derivada de los criterios de aceptación concretos. Nada de «probar que el login funciona»: qué se verifica y por qué importa. Antes de escribir nada investiga: en funcionalidades nuevas busca patrones de arquitectura y verifica versiones de dependencias; en extensiones recorre el código existente buscando los patrones que ya se usan. Si al revisar el diseño aparece un hueco real en los requisitos, **se para y te manda de vuelta** en lugar de taparlo aquí. ==== 4.5. /kiro-spec-tasks ==== /kiro-spec-tasks user-auth-oauth -y Convierte el diseño en una lista de tareas ejecutables. El ''-y'' aprueba el diseño de la fase anterior. **Produce** ''tasks.md''. Cómo son las tareas: * **De 1 a 3 horas cada una.** Ni «implementar la autenticación» ni «crear el fichero». * **Numeradas**: ''1.'', ''2.'' son cabeceras de grupo; ''1.1'', ''1.2'' son lo que realmente se ejecuta. * **Con entregable verificable**: un fichero, un //endpoint//, un componente. Cada tarea dice **cómo se ve que está hecha**, en términos observables. * **Anotadas** con la parte del sistema a la que pertenecen y con sus dependencias. * **Sin prerrequisitos implícitos**: si una tarea necesita un //runtime// o un fichero de configuración, montar eso es una tarea previa explícita. Antes de escribir ''tasks.md'' comprueba que cada requisito está en alguna tarea y que cada componente del diseño está representado. Al terminar muestra un resumen y **pregunta si apruebas**. Es la última oportunidad de detectar un problema de diseño antes de que se convierta en código. ==== 4.6. /kiro-impl ==== /kiro-impl user-auth-oauth Ejecuta las tareas aprobadas. Es donde por fin se escribe código. No necesita ''-y'': las tareas se aprobaron al final de ''/kiro-spec-tasks''. **Produce** código y //commits//, trabajando **una tarea por iteración**: - Programa con TDD: primero la prueba que falla, luego el código que la pasa. - Revisa el resultado de forma independiente: ejecuta ''git diff'', lanza las pruebas y comprueba que no se ha salido de la frontera de la tarea. - Marca la tarea como hecha en ''tasks.md'' y hace //commit// **solo de los ficheros de esa tarea** —nunca ''git add -A''— con el mensaje ''feat(): ''. Que sea una tarea por iteración es lo que hace que ''/kiro-impl'' sea **seguro de relanzar** si se interrumpe: al reanudar relee ''tasks.md'' y sigue por donde iba. ''/kiro-impl'' escribe código y hace //commits// sin preguntar tarea a tarea. Lánzalo en una rama propia y con el árbol de trabajo limpio. ---- ===== 5. Enlaces ===== * [[https://github.com/gotalab/cc-sdd|Repositorio de cc-sdd]] * [[https://github.com/gotalab/cc-sdd/blob/main/docs/guides/spec-driven.md|Spec-Driven Guide]] — la metodología completa * [[https://kiro.dev|Kiro IDE]]