Planos · agentic-dev-boilerplate
00 · de la especificación al repo

Un repo que arranca antes de la primera historia.

/project-bootstrap toma lo que dejó /project-foundation (PRD, SRS) y el DESIGN.md, y levanta la base técnica: backend con base de datos, auth y tipos, frontend con el design system, y las piezas de integración que el proyecto pida. Corre una vez por proyecto; después, cada historia construye encima.

para quien codea y para el tech lead orden fijo: backend primero, frontend después sale listo para features, no para producción
Entrada

PRD + SRS + DESIGN.md

Producto, arquitectura y tokens visuales.

→
Fase 0.5

Plan

Qué se monta y qué features suma. Lo apruebas tú.

→
Fase 1

Backend

Esquema, RLS, auth, clientes y tipos.

→
Fase 2

Frontend

Design system desde DESIGN.md, layout, páginas demo.

→
Fase 3

Incrementales

OpenAPI, rutas, bearer, URLs, tipos. Solo las que hagan falta.

01 · cuándo usarla

Después de definir el producto, antes de la primera historia

/project-foundation responde qué se construye. Esta skill responde cómo se para el repo para empezar a construirlo.

Úsala cuando

Hay especificación y no hay código

  • Un repo nuevo ya tiene su fundación (/project-foundation corrió) pero todavía no tiene código.
  • Un repo existente necesita una pieza de infraestructura más: "agrega OpenAPI a la API", "suma auth por bearer token", "conecta los tipos de Supabase al frontend". Solo las piezas incrementales: la base no corre sobre una app que ya existe (§01·b).
No la uses para

Lo que pertenece a otra skill

  • Definir el producto (PRD, journeys, decisiones de arquitectura): eso es /project-foundation.
  • Sembrar el backlog en Jira: eso es /product-management.
  • Implementar una historia de punta a punta: eso es /sprint-development.
  • Tests unitarios y su framework: eso es /unit-testing.
Antes de arrancar: el stack del backend, el del frontend y el motor de base de datos se leen de .agents/project.yaml. Si esos valores están vacíos, la skill te manda primero a /project-foundation, porque las decisiones de infraestructura salen de la arquitectura del SRS.
01·b · solo greenfield para la base

La base no corre sobre una app que ya existe

Las fases base (backend y frontend) crean: tablas, RLS, seeds, clientes, middleware, layout, tema, la config de Tailwind, páginas y credenciales de demo. Sobre una app viva, cada uno de esos pasos pisaría algo. Por eso el veredicto lo da un script, nunca la IA mirando el árbol: un gate que el agente puede satisfacer escribiendo un valor creíble no es un gate.

# al entrar, antes del plan de la sesión; el veredicto y el exit code van a plan.md
bun run bootstrap:guard   # exit 0 = greenfield · exit 2 = app existente (con las señales) · --json
exit 0 · greenfield

Todo corre como está escrito

  • Las fases base y las piezas incrementales.
  • Una corrida retomada conserva el veredicto que registró su plan: para entonces, lo que el guard vería es la propia salida de la skill.
exit 2 · app existente

La base se rechaza

  • Cualquier señal alcanza: el lock de adopción, un package.json que declara next o react, o archivos de app (rutas, middleware, config de Tailwind, components.json, migraciones).
  • La IA cita las señales, nombra qué habría pisado y te manda a /project-adoption (y a /design-system extract si el pedido era sobre cómo se ve la UI).
  • Las piezas incrementales siguen disponibles y leen el bloque stack:.
Fail-closed. Sin veredicto registrado, o con uno ilegible, la base no corre. Decir "esto es greenfield" no lo destraba: el arreglo de una lectura equivocada es quitar la señal que el script citó y volver a correrlo. Deck de la otra puerta: Project adoption.
02 · el mapa

Una base en orden, y piezas que se suman encima

La base (backend y después frontend) se monta siempre y en ese orden. Las piezas incrementales son independientes entre sí: se eligen por necesidad y el resto se salta.

El hilo principal no escribe código. Coordina: cada fase de la base y cada pieza incremental va a su propio subagente, con un briefing de siete componentes que nombra la referencia exacta que tiene que leer. Al entrar, la skill además resuelve qué skills complementarias tienes instaladas para las categorías que declara su frontmatter: las del repo se cargan solas, las de tu usuario te las pregunta una vez.
03 · qué lee

Lo que lee, en este orden

Es el orden canónico para una IA que arranca en frío. Cada una alimenta una decisión distinta del scaffolding.

.context/PRD/

El inventario de features y el alcance del MVP: deciden qué se monta.

.context/SRS/

Las decisiones de infraestructura: base de datos, hosting, proveedor de auth, runtime. El esquema de la base sale del ERD de la arquitectura.

DESIGN.md en la raíz

Paleta, tipografía y tokens. Es la entrada obligatoria del frontend: tiene que existir antes de la fase 2.

.agents/project.yaml

Identidad del proyecto, stack del backend y del frontend, motor de base de datos y las URLs de cada ambiente.

Lo que ya existe en app/, lib/, db/

Si hay scaffolding previo, se detecta y se parchea en el lugar. Nunca se pisa lo que alguien ya editó.

04 · fases 0 y 0.5

Primero se fija si hay trabajo a medias, después escribe el plan

Las dos corren en el hilo principal, sin subagentes, incluso la primera vez: así "retomar o empezar" es siempre una decisión explícita.

La IA hace

Busca .session/project-bootstrap/progress.md. Si existe, lee el plan y las últimas entradas y te muestra el objetivo, la última fase cerrada y la próxima.

Si no existe, redacta plan.md: objetivo, entradas, enfoque, fases, riesgos y checklist de verificación.

Tú decides

Con sesión previa: retomar, reiniciar (lo anterior se archiva) o abortar (no se toca nada).

Con plan nuevo: qué piezas incrementales se suman sobre la base. Sin tu aprobación, no arranca la fase 1.

Sale

.session/project-bootstrap/plan.md en estado draft, que pasa a approved cuando lo apruebas.

Cada fase que termina deja una entrada en progress.md: si la sesión se corta, se retoma desde ahí.

Gate plan aprobado, con las piezas incrementales elegidas.
05 · fase 1

Backend: la base que reusan todas las historias

Levanta la base de datos, la auth y la capa de acceso, y fija las convenciones que va a seguir cada endpoint futuro. Se hace una sola vez, antes de los sprints.

La IA hace

Verifica el estado de git y las herramientas. Sin el MCP de Supabase se detiene todo: crea tablas y políticas con él, no con scripts SQL a mano.

Crea las tablas fundacionales (no el ERD entero), índices, RLS por tabla y datos semilla realistas. Arma los clientes de Supabase, el middleware de sesión y la configuración centralizada. Consulta la documentación oficial antes de instalar cada dependencia.

Tú decides

El proyecto de Supabase: uno existente (das su ID) o uno nuevo.

Cómo se manejan los archivos de entorno: la IA no crea un .env sin consultarte. Los commits los haces tú.

Sale

Tablas con RLS en la base, clientes en src/lib/supabase/, configuración en src/lib/config.ts, tipos generados en src/types/supabase.ts.

Documentación en .context/backend-setup.md y .context/api-auth.md.

Gate tipos generados del esquema vivo, TypeScript sin errores y build completo en verde.
Capas que no se colapsan

api/ · schemas/ · db/

  • Los límites entre capas son arquitectura del framework, no abstracción especulativa: la regla de simplicidad de AGENTS.md los exime a propósito.
  • api/schemas/ son las fachadas de tipos de OpenAPI: una sola fuente de verdad por dominio.
  • Después, en review, una violación de capa es un hallazgo citable: /pr-review-lead las revisa contra esta doctrina.
Secretos y configuración

Dos lugares, nunca el código

  • Credenciales en .env; configuración no secreta en .agents/project.yaml.
  • .env.example no se reescribe: está en paridad con cli/lib/variables-manifest.ts. Una variable nueva va en los dos, en el mismo commit.
  • Las variables se validan al arrancar con un esquema (Zod o equivalente).
06 · fase 2

Frontend: el design system sale de DESIGN.md

Monta el proyecto, el design system, el layout y unas pocas páginas demo que prueban que todo encaja. No implementa features: eso queda para cada historia.

La IA hace

Antes de nada, confirma que el backend existe: lee src/types/supabase.ts y los clientes de Supabase, y se detiene si faltan. Con ellos arma helpers de tipos para los componentes.

Mapea los tokens de DESIGN.md a la configuración de Tailwind y a variables CSS sin preguntarte colores: el archivo ya es la fuente. Monta el proyecto en el directorio actual, sin generadores que crean subcarpetas.

Tú decides

El package manager.

La estrategia de componentes: shadcn/ui, componentes desde cero o Headless UI con estilos propios. Esa pregunta sigue en pie aunque haya DESIGN.md.

Qué páginas demo se construyen (dos o tres, las más representativas del dominio).

Sale

Componentes en src/components/ui/, layout en src/components/layout/, páginas demo, estilos globales.

.context/design-system.md documenta paleta, componentes y uso.

Gate build en verde y revisión visual: con /playwright-cli en una sesión con nombre, o la haces tú con el servidor corriendo.
Sin DESIGN.md, no hay fase 2. Los tokens de diseño son el contrato de entrada del frontend. Si el archivo no existe, primero se corre /design-system y después se vuelve aquí. La ruta por defecto es la raíz del repo; un proyecto con otra estructura la declara en .agents/project.yaml.
07 · fase 3

Piezas incrementales: se elige, no se instala todo

Cada pieza suma una capacidad sobre la base. Son independientes entre sí y cada una corre en su propio subagente. Antes de escribir, cada una mira qué hay en el repo y decide su alcance: completo si ya hay endpoints o estructura previa, parcial si el terreno está vacío.

Pieza Qué agrega Dónde queda Requiere
OpenAPI Spec generada desde schemas Zod en /api/openapi y la UI de Scalar en /api/docs. El schema se define una vez, junto al tipo: la documentación no se duplica. src/lib/openapi/ backend base
Rutas de API Carpetas por dominio, validación con Zod, errores estandarizados y un endpoint de ejemplo; con OpenAPI presente, los endpoints del SRS quedan registrados en la spec. src/app/api/ backend base
Bearer token Auth por header Authorization para Postman, curl o apps externas, sin romper la auth por cookies del navegador. src/lib/supabase/server.ts y las rutas protegidas backend base
URLs por ambiente Un helper que detecta el ambiente (development, staging, production) y arma la URL base correcta. Te pregunta las URLs de staging y producción. src/lib/urls.ts backend base
Tipos de Supabase El pipeline esquema → TypeScript, un script de regeneración en package.json y los clientes tipados con Database. src/types/supabase.ts frontend base
OpenAPI siempre con su UILa spec sin la ruta de Scalar en /api/docs no se entrega: el contrato tiene que poder recorrerse desde el primer día. Ni Redoc ni Swagger en su lugar.
Bearer token nunca a mediasLa auth por token viaja junto con rate limiting y una guía de rotación del secreto. Sin esas dos, la feature está incompleta.
Tipos que siguen al esquema vivoSi el esquema de la base cambia, se regeneran los tipos y TypeScript marca dónde ajustar. Saltarse la generación deja una deriva silenciosa.
08 · cierre de cada fase

Verificar en el destino, después archivar

Cada fase cierra con el verificador liviano de etapa y la sesión termina con el pie de herramientas usadas. Un chequeo que falla se reporta tal cual: nada de arreglos inventados para un stack desconocido, la IA te pregunta.

Build en verde. El build del stack elegido termina sin error.
Servidor arriba. Responde la home del frontend y la ruta de salud del backend.
TypeScript compila sin errores en todo el repo.
Variables documentadas. Cada variable nueva figura en .env.example.
Artefactos generados commiteados (spec de OpenAPI, tipos de Supabase). La skill recomienda el commit; lo haces tú o /git-flow-master.
Con el checklist del plan en verde, la carpeta .session/project-bootstrap/ se mueve a .session/.archive/ y queda un resumen en la memoria persistente con la ruta del archivo, para encontrarlo después.
09 · rieles de seguridad

Lo que la skill nunca hace

Los antipatrones completos viven en SKILL.md y viajan en el registro compacto que reciben los subagentes (.agents/skills/REGISTRY.md).

No pisa scaffolding existente. Detecta lo que hay y parchea en el lugar, preservando lo que editaste.
No hardcodea credenciales, URLs ni valores de un ambiente en el código generado.
No se saltea la validación de variables al arrancar: una variable faltante silenciosa explota en producción, lejos de la causa.
No colapsa las capas del backend ni la estructura del design system en el frontend.
No arranca el frontend sin DESIGN.md, ni la base de datos sin generar sus tipos.
No sigue sin la documentación oficial cuando la necesita: si no hay herramienta de documentación de librerías disponible, se detiene y te dice cuál falta, sin un sustituto silencioso.
No escribe la capa de base de datos ni la de UI sin sus skills de stack cargadas: supabase y supabase-postgres-best-practices antes de instalar, de tocar esquema, RLS o migraciones por el MCP, o de generar tipos; el set de diseño (frontend-design, ui-ux-pro-max, impeccable, emil-design-eng) más shadcn y tailwind-css-patterns antes de la estrategia de componentes. Si no están instaladas lo dice una vez, apunta a bun setup y sigue; nunca se saltea en silencio.
No cambia la base fuera de la doctrina de cambios. Todo pasa por el MCP de la base: primero lee list_migrations, el DDL va solo por apply_migration, se verifica en el destino y una migración que cambia la arquitectura deja su ADR.
Sale listo para features, no para producción. Deploy, CI y endurecimiento de observabilidad se suman después, con otras skills, a medida que el producto madura.
10 · qué le dices a la IA

Invocarla en las tres terminales

Esta skill no tiene modos con nombre: lo que pides elige la referencia. Nombras la skill y describes la pieza, en español o en inglés.

Claude Code

/project-bootstrap scaffolding del proyecto

La barra carga la skill; el resto de la frase elige la fase o la pieza.

OpenCode

carga la skill project-bootstrap: configurar OpenAPI

Sin barra: nombras la skill en la frase.

Codex

carga la skill project-bootstrap: bearer token authentication

Mismo patrón que OpenCode, CLI o Desktop.

Si dices algo como… La IA lee
"setup del backend" · "scaffold the server" backend-setup.md
"inicializar el frontend" · "design system + project skeleton" frontend-setup.md
"configurar OpenAPI" · "API docs UI" openapi-setup.md
"API routes setup" · "middleware" api-routes-setup.md
"bearer token authentication" · "protect routes" bearer-token-support.md
"env vars setup" · "URL builder" env-url-setup.md
"supabase types generation" supabase-types-setup.md

las referencias viven en .agents/skills/project-bootstrap/references/ · si el pedido no coincide con ninguna fila, la IA cae en backend o frontend según el lado del stack, y te lo avisa

11 · antes y después de esta skill

A quién le pasa la posta

Antes · producto

/project-foundation

Deja el PRD y el SRS con las decisiones de arquitectura de las que sale el stack.

Antes · diseño

/design-system

Produce el DESIGN.md que el frontend necesita. El flujo de pantallas por historia está en el deck Del plano al producto.

Después · backlog

/product-management

Convierte el PRD en épicas e historias en Jira. Deck: Product management.

Después · historias

/sprint-development

Lleva cada historia de plan a código, review y deploy, sobre esta base.

Cuando quieras

/unit-testing

Un tema aparte; puede correr en cualquier momento después de la base.

Opcional · QA

/testability-guide

Con la infraestructura arriba, genera la página /qa y un artefacto de credenciales para probar la app por base de datos, API y UI.

Para leer más: .agents/skills/project-bootstrap/SKILL.md y su carpeta references/, una referencia por fase y por pieza incremental.