Tabla de Contenidos
¡Esta es una revisión vieja del documento!
Kiro: comandos SDD
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 el conjunto de skills y comandos de Kiro dentro del agente que ya estés usando (Claude Code, OpenCode, Codex, Cursor…). Es un proyecto independiente de terceros, no un producto de AWS —el IDE es cerrado—, pero reproduce las mismas fases y los mismos documentos, y las especificaciones son compatibles y portables entre los dos.
En este tema, «Kiro» significa cc-sdd. Todo lo que sigue se ejecuta en la terminal.
- Proyecto: github.com/gotalab/cc-sdd
- Paquete: npm: cc-sdd (v3.0.2, MIT)
1. Instalación
Requisitos: Node.js (para poder usar npx) y ejecutar el comando en la raíz del proyecto, porque instala ficheros dentro de él.
1.1. En Claude Code
Es el destino por defecto, así que basta con:
cd mi-proyecto npx cc-sdd@latest
Para elegir idioma y ser explícito con el agente:
npx cc-sdd@latest --claude-skills --lang es
Esto deja en el proyecto:
.claude/skills/— las 17 skillskiro-*.kiro/— plantillas, steering y especificacionesCLAUDE.md— configuración del proyecto para el agente
1.2. En OpenCode
cd mi-proyecto npx cc-sdd@latest --opencode-skills --lang es
Esto deja en el proyecto:
.opencode/skills/— las mismas 17 skills.kiro/— plantillas, steering y especificacionesAGENTS.md— configuración del proyecto para el agente
SKILL.md) está menos rodada que en Claude Code y Codex.
1.3. Otros agentes y opciones
| Agente | Opción | Estado |
|---|---|---|
| Claude Code | –claude-skills (por defecto) | Estable |
| Codex | –codex-skills | Estable |
| Cursor | –cursor-skills | Beta |
| GitHub Copilot | –copilot-skills | Beta |
| Windsurf | –windsurf-skills | Beta |
| OpenCode | –opencode-skills | Beta |
| Gemini CLI | –gemini-skills | Beta |
| Antigravity | –antigravity | Beta experimental |
Opciones útiles:
npx cc-sdd@latest --lang es # idioma de los documentos (en, es, ja, zh-TW, pt, de, fr...) npx cc-sdd@latest --dry-run # ver qué ficheros tocaría, sin escribir nada npx cc-sdd@latest --kiro-dir docs # usar otro directorio en lugar de .kiro
Conviene lanzar primero –dry-run sobre un proyecto que ya tenga contenido, para ver qué se va a crear o sobrescribir.
1.4. Estructura resultante
mi-proyecto/ ├── .claude/skills/ # (o .opencode/skills/) las 17 skills kiro-* ├── .kiro/ │ ├── settings/templates/ # plantillas de requirements, design, tasks, steering │ ├── settings/rules/ # reglas y criterios de generación │ ├── steering/ # memoria del proyecto <- la crea /kiro-steering │ └── specs/ # una carpeta por funcionalidad <- la crea /kiro-spec-init └── CLAUDE.md # o AGENTS.md
2. Los dos ciclos: qué se hace una vez y qué se repite
Antes de ver los comandos uno a uno conviene tener el mapa, porque cc-sdd tiene dos ritmos distintos y es fácil confundirlos.
2.1. Pasos iniciales: una sola vez por proyecto
| # | Paso | Comando | Deja en el proyecto |
|---|---|---|---|
| 1 | Instalar las skills | npx cc-sdd@latest –claude-skills –lang es | .claude/skills/, .kiro/settings/, CLAUDE.md |
| 2 | Crear la memoria del proyecto | /kiro-steering | .kiro/steering/product.md, tech.md, structure.md |
| 3 | Opcional: conocimiento de dominio | /kiro-steering-custom | .kiro/steering/api-standards.md, testing.md… |
Terminado esto, el proyecto ya «sabe de sí mismo»: cualquier comando posterior arranca leyendo ese steering.
2.2. Pasos por cada nueva especificación
Esto es lo que se repite una vez por cada funcionalidad que quieras construir:
| # | Fase | Comando | Documento que produce |
|---|---|---|---|
| 1 | Opcional: enrutar la idea | /kiro-discovery <idea> | brief.md (y roadmap.md) |
| 2 | Inicializar | /kiro-spec-init <descripción> | spec.json + requirements.md vacío |
| 3 | Requisitos (QUÉ) | /kiro-spec-requirements <nombre> | requirements.md en formato EARS |
| 4 | Opcional: hueco con lo existente | /kiro-validate-gap <nombre> | research.md |
| 5 | Diseño (CÓMO) | /kiro-spec-design <nombre> | design.md (+ research.md) |
| 6 | Opcional: revisar el diseño | /kiro-validate-design <nombre> | — |
| 7 | Tareas | /kiro-spec-tasks <nombre> | tasks.md |
| 8 | Implementación | /kiro-impl <nombre> | código + commits |
| 9 | Opcional: validar la funcionalidad | /kiro-validate-impl <nombre> | veredicto GO / NO-GO |
Los cuatro 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É, en EARS ├── design.md # CÓMO, con diagramas y plan de ficheros ├── research.md # hallazgos de la investigación (si hubo) └── tasks.md # tareas, fronteras y dependencias
2.3. Dónde está el humano
Entre fase y fase hay una puerta de aprobación. spec.json guarda, para cada fase, si está generated y si está approved; un comando se niega a arrancar si la fase anterior no está aprobada:
Requirements not yet approved. Approval required before design generation.
Aprobar consiste en leer el documento y lanzar el comando siguiente. La opción -y aprueba la fase anterior automáticamente y se salta esa lectura: es cómoda para prototipos y peligrosa para lo demás, porque la revisión humana entre fases es justo lo que distingue este método de pedirle a la IA que «hazme el login».
/kiro-discovery para que la descomponga, o /kiro-spec-batch para generar varias especificaciones coordinadas a partir de una roadmap.
2.4. Mantenimiento
/kiro-steeringse vuelve a lanzar de vez en cuando (modo sync) para que la memoria del proyecto no se quede desfasada respecto al código que ya se ha escrito.- Las especificaciones no se borran al terminar: quedan como documentación de por qué el código es como es, y
/kiro-validate-gaplas usa para saber qué hay ya implementado.
3. Inicializar el proyecto: /kiro-steering
El steering es la memoria persistente del proyecto: lo que todos los demás comandos leen antes de hacer nada. Es el primer comando que hay que ejecutar, sobre todo en un proyecto que ya tiene código.
/kiro-steering
No lleva argumentos. Analiza el repositorio y genera tres documentos en .kiro/steering/:
| Fichero | Qué recoge |
|---|---|
product.md | Contexto de negocio: 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 e imports |
Funciona en dos modos, y decide solo cuál aplica mirando si ya existen los tres ficheros:
- Bootstrap (primera vez): lee README,
package.json, configuración, dependencias y árbol de directorios, y redacta los tres documentos a partir de las plantillas. - Sync (mantenimiento): compara el steering existente con el código y reporta la deriva (code drift), por ejemplo «
tech.md: React 18 → 19».
Reglas importantes:
- Lo que edites a mano se respeta. Las actualizaciones son aditivas: sync no pisa tus personalizaciones.
- Captura patrones, no inventarios. El objetivo es «así se nombran los servicios aquí», no una lista de los 200 ficheros del proyecto. Lo específico de una funcionalidad va en su especificación, no en el steering.
- Revisa lo que genera antes de seguir. El steering pasa a ser la fuente de verdad para el agente, así que un error aquí se propaga a todas las especificaciones.
- Conviene re-ejecutarlo periódicamente para que el contexto no se quede obsoleto.
Para conocimiento de dominio más específico existe /kiro-steering-custom, que es interactivo y crea documentos adicionales en la misma carpeta a partir de plantillas: api-standards.md, testing.md, security.md, database.md, error-handling.md, authentication.md, deployment.md…
4. Empezar una especificación: /kiro-spec-init
Crea el esqueleto de la especificación de una funcionalidad.
/kiro-spec-init <descripción del proyecto>
Ejemplo:
/kiro-spec-init Autenticación de usuarios con OAuth 2.0 y tokens JWT para una aplicación Next.js
Qué hace, por pasos:
- Genera un nombre de funcionalidad único en
kebab-casea partir de la descripción (aquí,user-auth-oauth). Si la descripción es ambigua, propone 2-3 opciones y te deja elegir; si el nombre ya existe, añade un sufijo numérico (-2,-3). - Comprueba que la descripción contiene los tres elementos obligatorios: quién tiene el problema, cuál es la situación actual y qué debería cambiar. Si falta alguno, pregunta en lugar de rellenarlo con suposiciones propias.
- Crea el directorio
.kiro/specs/<nombre>/. - Escribe dos ficheros a partir de las plantillas:
spec.json(metadatos: nombre, timestamp, idioma, estado de aprobación de cada fase) yrequirements.md(solo el esqueleto con la descripción).
Salida típica:
## Generated Feature Name `user-auth-oauth` ## Created Files - ✓ .kiro/specs/user-auth-oauth/spec.json - ✓ .kiro/specs/user-auth-oauth/requirements.md ## Next Step /kiro-spec-requirements user-auth-oauth
/kiro-spec-init no escribe los requisitos, ni el diseño, ni las tareas: solo inicializa la estructura. Es deliberado —cada fase se genera en su propio comando, con su propia revisión— y es lo que hace que el comando sea instantáneo.
Consejos:
- Cuanto más concreta sea la descripción (stack, restricciones, requisitos clave), mejor sale el nombre y mejor arrancan los requisitos.
- Revisa
spec.jsondespués de crearlo, sobre todo el campo de idioma. - En un proyecto existente, ejecuta antes
/kiro-steering.
5. Generar los requisitos: /kiro-spec-requirements
Es el paso siguiente a /kiro-spec-init: convierte la descripción en un documento de requisitos completo y verificable.
/kiro-spec-requirements <nombre-funcionalidad>
El argumento es el nombre de la carpeta que creó /kiro-spec-init, no la descripción:
/kiro-spec-requirements user-auth-oauth
5.1. Qué hace
- Carga el contexto:
spec.json(idioma y metadatos), los tres ficheros de steering (product.md,tech.md,structure.md), elbrief.mdsi existe, y la descripción que quedó enrequirements.md. - Investiga en paralelo, delegando en subagentes para no ensuciar el contexto principal: qué hay ya implementado en el repositorio (en proyectos brownfield), investigación de dominio con búsqueda web si hace falta, y el steering adicional que sea relevante.
- Redacta un borrador agrupando la funcionalidad en áreas lógicas, con todos los criterios de aceptación en formato EARS.
- Pasa el borrador por una puerta de revisión (review gate): cobertura, cumplimiento de EARS, ambigüedades y límites de alcance. Corrige y vuelve a revisar, con un máximo de dos pasadas. Si aparece una ambigüedad real, se para y pregunta en lugar de inventarse el requisito.
- Escribe
requirements.mdsolo cuando la revisión pasa, y actualizaspec.jsonaphase: requirements-generated.
5.2. Formato EARS
EARS (Easy Approach to Requirements Syntax) es una sintaxis acotada para escribir criterios de aceptación que no se puedan interpretar de dos maneras:
WHEN <disparador> THE <sistema> SHALL <acción> IF <condición> THEN THE <sistema> SHALL <acción> WHERE <característica> THE <sistema> SHALL <acción> THE <sistema> SHALL <acción>
Un fragmento del requirements.md 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 de Google - 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
La gracia de EARS es que cada línea es directamente un caso de prueba: hay un disparador, un sujeto y un resultado observable.
5.3. Requisitos son el QUÉ, no el CÓMO
Es la regla que más cuesta respetar. El comando pregunta —y escribe— solo sobre comportamiento observable:
| Sí va en requisitos | No: eso es diseño |
|---|---|
| Alcance funcional: 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 (monolito, microservicios, eventos) |
| Reglas de negocio y casos límite | Diseño de la API, modelos de datos, componentes internos |
| Requisitos no funcionales perceptibles: tiempos de respuesta, disponibilidad, nivel de seguridad | Cómo se consiguen: estrategia de caché, escalado |
Prueba del algodón: si el criterio de aceptación se puede escribir sin nombrar ninguna tecnología, es un requisito. Si necesita nombrarla, es diseño.
5.4. Consejos y problemas frecuentes
- Es un comando iterativo: puedes lanzarlo varias veces para refinar, y respeta lo que hayas editado a mano en
requirements.md. - Revisa el documento antes de aprobarlo. El diseño y las tareas se generan a partir de aquí, así que un requisito mal puesto se arrastra hasta el código.
- Si los requisitos salen genéricos, casi siempre es que falta steering: ejecuta
/kiro-steeringy vuelve a lanzarlo. - Si da «Spec not found», el nombre no coincide: mira qué carpetas hay en
.kiro/specs/. - Las reglas de formato están en
.kiro/settings/rules/ears-format.mdy la plantilla del documento en.kiro/settings/templates/specs/requirements.md; ambas se pueden personalizar.
5.5. Siguiente paso
Con los requisitos aprobados:
/kiro-validate-gap user-auth-oauth # opcional, solo en proyectos con código existente /kiro-spec-design user-auth-oauth # diseño técnico /kiro-spec-design user-auth-oauth -y # ...aprobando los requisitos automáticamente
La opción -y salta la confirmación humana de la fase anterior. Cómoda, pero es justo la puerta de control que da sentido al método: úsala solo cuando ya hayas leído el documento.
6. El diseño técnico: /kiro-spec-design
Traduce el QUÉ de los requisitos al CÓMO: arquitectura, componentes, interfaces y plan de ficheros.
/kiro-spec-design <nombre-funcionalidad> [-y]
6.1. Investigación antes de diseñar
Es el comando más caro de los cuatro, porque antes de escribir nada clasifica la funcionalidad y ajusta cuánto investiga:
| Tipo de funcionalidad | Investigación | Qué hace |
|---|---|---|
| Nueva, greenfield o compleja | Completa | Busca en la web patrones de arquitectura, verifica APIs y versiones de dependencias, lee documentación oficial y problemas conocidos |
| Extensión de algo existente | Ligera | Se centra en los puntos de integración: recorre el código con grep buscando los patrones que ya se usan |
| Añadido simple (CRUD, una pantalla) | Mínima | Comprobación rápida del patrón y a escribir |
La investigación se reparte entre subagentes en paralelo (uno para el código existente, otro para la búsqueda web) que devuelven un resumen, no datos en bruto, para no ensuciar el contexto principal. Los hallazgos quedan escritos en research.md: qué se investigó, con qué fuentes y qué implicaciones tuvo. Es el registro que permite entender meses después por qué se eligió una librería y no otra.
6.2. Qué contiene design.md
- La frontera, primero de todo (boundary-first): qué posee esta especificación, qué no posee, de qué dependencias puede tirar y qué cambios obligarían a revalidar a los de al lado. Es la sección que da sentido a todo lo demás.
- Componentes e interfaces, con tipado explícito. En TypeScript, prohibido
any; en lenguajes dinámicos, anotaciones de tipo y validación en los bordes. - Diagramas Mermaid cuando la arquitectura lo pide.
- Plan de ficheros (File Structure Plan): rutas concretas, cuáles se crean y cuáles se modifican, y una responsabilidad clara por fichero. No es decoración: de aquí salen directamente las fronteras de las tareas del paso siguiente, así que un plan de ficheros vago produce una implementación vaga.
- Estrategia de pruebas derivada de los criterios de aceptación concretos, no de plantillas genéricas. Nada de «probar que el login funciona»: qué se verifica y por qué importa.
- Trazabilidad: cada componente referencia los IDs numéricos de los requisitos que cubre.
Igual que los requisitos, el borrador pasa por una puerta de revisión (cobertura de requisitos, madurez de la arquitectura, ejecutabilidad) con un máximo de dos pasadas de reparación. Si la revisión destapa un hueco real en los requisitos, se para y te manda de vuelta a la fase anterior en lugar de tapar el agujero en el diseño.
Al terminar: phase: design-generated y approvals.requirements.approved: true.
7. Descomponer en tareas: /kiro-spec-tasks
Convierte el diseño en una lista de tareas ejecutables.
/kiro-spec-tasks <nombre-funcionalidad> [-y] [--sequential]
7.1. Cómo son las tareas
- De 1 a 3 horas cada una. Ni un «implementar la autenticación» ni un «crear el fichero».
- Numeradas jerárquicamente:
1.,2.son cabeceras de grupo;1.1,1.2son las unidades que realmente se ejecutan. - Con entregable verificable: un fichero, un endpoint, un componente, una configuración. Cada subtarea incluye al menos una línea que describe cómo se ve que está hecha, en términos observables.
- Anotadas:
_Boundary: NombreComponente_— a qué parte del sistema pertenece._Depends: 1.2_— dependencias no evidentes entre tareas.(P)— la tarea se puede ejecutar en paralelo con otras sin riesgo. Con–sequentialno se marca ninguna.
- Sin prerrequisitos implícitos: si una tarea necesita que exista un runtime, un SDK o un fichero de configuración, montar eso es una tarea previa explícita. Nada de dar por hecho el andamiaje.
- Todas conectadas al sistema: no se permiten tareas huérfanas cuyo resultado no se integre en ninguna parte.
7.2. La doble revisión
Antes de escribir tasks.md hay dos filtros:
- Puerta de revisión del plan: ¿está cada requisito en alguna tarea? ¿está cada componente del diseño representado? ¿son todas ejecutables y verificables? ¿cuadran las dependencias y las fronteras?
- Revisión independiente del grafo de tareas: un subagente nuevo, que lee
requirements.mdydesign.mdpor su cuenta en lugar de fiarse del resumen del padre, busca prerrequisitos ocultos, errores de orden, solapamiento de fronteras y tareas demasiado grandes o vagas. Devuelve un veredicto:PASS,NEEDS_FIXESoRETURN_TO_DESIGN.
Si sale RETURN_TO_DESIGN, el comando no escribe tasks.md y te señala el hueco exacto que hay que arreglar antes. Es la última oportunidad de detectar un problema de diseño antes de que se convierta en código.
Al final muestra un resumen (cuántas tareas, cuántos requisitos cubiertos, marcas de paralelismo) y pregunta si apruebas. Solo entonces marca approvals.tasks.approved.
8. Implementar: /kiro-impl
Ejecuta las tareas aprobadas. Es donde por fin se escribe código.
/kiro-impl <nombre-funcionalidad> # modo autónomo: todas las tareas pendientes /kiro-impl <nombre-funcionalidad> 1.1,1.2 # modo manual: solo esas tareas /kiro-impl <nombre-funcionalidad> --review off # sin revisión por tarea (no recomendado)
8.1. Antes de empezar
- Comprueba que las tareas están aprobadas en
spec.json; si no, se para. - Descubre los comandos de validación del repositorio mirando, por este orden,
package.json/pyproject.toml/go.mod/Cargo.toml, luegoMakefileojustfile, luego los ficheros de CI, luego el README. De ahí saca el conjunto de comandos de test, de build y de smoke test. Prefiere los que ya usa la automatización del proyecto antes que inventarse una tubería de shell. - Anota el estado inicial con
git status –porcelainpara no mezclar cambios previos con los suyos.
8.2. El ciclo por tarea
Una tarea por iteración, nunca varias a la vez. En cada iteración vuelve a leer tasks.md desde cero en lugar de fiarse de lo que recuerda, y al terminar se queda solo con un resumen de una línea. Ese es el truco que permite que una ejecución larga no se degrade, y que /kiro-impl sea seguro de relanzar si se interrumpe.
Cada tarea pasa por hasta tres papeles, cada uno en un subagente con contexto limpio:
| Papel | Qué hace |
|---|---|
| Implementador | Construye su propio Task Brief leyendo la especificación y programa con TDD: primero la prueba que falla (RED), luego el código que la pasa (GREEN), detrás de un feature flag si el cambio es de comportamiento. Devuelve READY_FOR_REVIEW, BLOCKED o NEEDS_CONTEXT |
| Revisor | Pasada independiente: ejecuta git diff por su cuenta —el código real es la fuente de verdad, no el informe del implementador—, busca TODOs, lanza las pruebas y comprueba que no se ha salido de su frontera. Veredicto: APPROVED o REJECTED |
| Depurador | Se lanza si el implementador está bloqueado o si el revisor rechaza dos veces. Recibe solo el error, no el historial de intentos fallidos —eso es lo que rompe los bucles de reintento infinito—, investiga la causa raíz (con búsqueda web si hace falta) y entrega un plan de arreglo a un implementador nuevo. Máximo 2 rondas |
Con la tarea aprobada, antes de cantar victoria aplica kiro-verify-completion: una comprobación con evidencia fresca del estado actual del código. Solo entonces marca la tarea [x] y hace commit.
8.3. Commits y aprendizajes
- El commit lo hace el proceso padre y es selectivo:
git addcon las rutas exactas que ha tocado esa tarea, mástasks.md. Nuncagit add -Anigit add .. - Formato del mensaje:
feat(<nombre-funcionalidad>): <descripción de la tarea>. - Si una tarea descubre algo transversal («esta librería necesita recompilarse para Electron»), se anota en la sección
## Implementation Notesdetasks.mdy se inyecta en el prompt de las tareas siguientes. Así el error no se repite quince veces. - Si el depurador se rinde, la tarea queda marcada con
_Blocked: <causa>_y se pasa a la siguiente, o se para el proceso pidiendo revisión humana.
/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.
Terminadas las tareas, /kiro-validate-impl <nombre> valida la funcionalidad completa —integración entre tareas, cobertura de requisitos, alineación con el diseño, evidencia de la suite entera— y devuelve GO, NO-GO o MANUAL_VERIFY_REQUIRED.
9. Resumen y comandos auxiliares
Una funcionalidad de principio a fin, sobre un proyecto ya inicializado:
/kiro-discovery Álbumes de fotos con subida, etiquetado y compartición /kiro-spec-init photo-albums /kiro-spec-requirements photo-albums /kiro-spec-design photo-albums /kiro-spec-tasks photo-albums /kiro-impl photo-albums /kiro-validate-impl photo-albums
Si no sabes por dónde empezar, /kiro-discovery analiza la petición y te dice cuál es el siguiente comando: extender una especificación existente, implementar directamente sin spec, crear una, o descomponer en varias.
Comandos de apoyo:
| Comando | Para qué |
|---|---|
/kiro-discovery <idea> | Punto de entrada: enruta el trabajo y escribe brief.md |
/kiro-spec-batch | Genera varias especificaciones en paralelo a partir de una roadmap, con revisión cruzada para detectar contradicciones |
/kiro-validate-gap <nombre> | Qué falta respecto a lo ya implementado (proyectos con código existente) |
/kiro-validate-design <nombre> | Revisión interactiva de la calidad del diseño |
/kiro-validate-impl <nombre> | Validación de la funcionalidad completa: GO / NO-GO |
/kiro-spec-status <nombre> | En qué fase está una especificación y qué toca hacer |
/kiro-steering-custom | Documentos de steering de dominio |
Y tres skills que no se invocan a mano, pero que conviene conocer porque son las que dan las garantías: kiro-review (protocolo de revisión adversaria), kiro-debug (depuración por causa raíz) y kiro-verify-completion (exigir evidencia fresca antes de dar algo por terminado).
/kiro:steering y /kiro:spec-init, con dos puntos. Desde la 3.0 el modo recomendado es el de skills, con guion: /kiro-steering, /kiro-spec-init. Los comandos con dos puntos siguen funcionando (opciones –claude, –opencode…) pero están obsoletos.
10. Enlaces
- Skill Reference — referencia del modo skills (v3)
- Command Reference — referencia de los comandos
/kiro:*antiguos - Spec-Driven Guide — la metodología completa
