Planos · agentic-dev-boilerplate
00 · adoptar una app existente

Una app que ya existe no se reescribe: se lee.

/project-adoption le enseña la capa agéntica a una aplicación que ya tiene código, schema, CI y convenciones propias. Lee la app sin escribir nada, propone un solo plan, espera tu aprobación y recién ahí completa las superficies agénticas, para que cada skill trabaje con el stack real de la app y no con los defaults del boilerplate. El código, el schema, el CI y las dependencias de la app no cambian.

para quien adopta una app viva se corre después de la instalación nada se escribe sin el plan aprobado
Instalar

Con --adopt

La herramienta llega sin pisar nada de la app. Se commitea como un solo cambio.

→
Leer

Sellado

Stack, scripts, schema, CI, hooks, tracker y la línea de base de la app.

→
Proponer

Un plan

Un archivo, PENDING APPROVAL, y la IA espera.

→
Escribir

Y comparar

Solo superficies agénticas, y la app tiene que salir igual que entró.

01 · cuándo usarla

Después de instalar, antes de trabajar historias

Es la puerta de entrada de una app existente. Un proyecto nuevo entra por otra, y cada cosa que viene después tiene su propia skill.

Úsala cuando

La adopción quedó instalada y falta enseñarle la app

  • "Adopta esta app" · "la adopción quedó instalada" · "adoptar la app existente": el instalador con --adopt ya corrió y está commiteado.
  • "La adopción sigue siendo correcta?" · "adoption drift check": modo check, solo lectura.
No la uses para

Lo que pertenece a otra skill o a otro paso

  • Un proyecto desde cero: /project-foundation y después /project-bootstrap.
  • Instalar los archivos en la app: eso es la corrida del updater con --adopt, que esta skill nunca reemplaza.
  • Los mapas de negocio (/project-context), la estrategia de branches (/git-flow-master Strategy Setup), la identidad visual (/design-system extract) o crear campos, workflows o issues de Jira (/jira-administration, /product-management).
02 · instalar y entender

Dos capas, dos momentos

Instalar la herramienta y entender la app son trabajos distintos. El primero lo hace un comando que no pregunta nada sobre la app; el segundo lo hace esta skill, que pregunta todo lo que los archivos no contestan.

Capa de instalación

El updater con --adopt

  • Entrega lo que la app no tiene y nunca pisa lo que tiene: un archivo propio de la app en la misma ruta queda como está, aparece como fila merge y entra en updater.protected_paths.
  • package.json solo suma las devDependencies de la herramienta y los scripts que la app no declara. Un nombre de script que ya existe se conserva y se reporta.
  • No reescribe la historia de git, no renombra, no hace git init y no toca ninguna base de datos.
Capa de entendimiento

Esta skill

  • Lee la app y escribe identidad, el bloque stack:, entornos, catálogos del tracker y rutas protegidas.
  • Con eso, el resto de las skills lee el stack real de la app en vez de los defaults del boilerplate.
  • Nunca reemplaza al instalador: sin su lock, se detiene.
# desde la raíz del repo de la app, con el árbol limpio
bunx create-agentic-dev@latest --doctor --preflight   # solo lectura: se puede adoptar?
bunx create-agentic-dev@latest --adopt   # le pasa la posta al updater con --adopt

# con pantalla, el updater abre su página local (la terminal sigue con el log completo);
# revisar la tabla de paridad de su reporte final, bun install, commitear la adopción;
# después, en una sesión:
/project-adoption
Qué soporta la primera versión. Una app Next.js sobre la familia Postgres (Supabase o Postgres plano) que usa bun, una app por adopción. El conjunto vive en V1_SUPPORTED (cli/lib/stack-descriptor.ts): algo afuera detiene el preflight o el análisis con el campo y el valor que fallaron, y no se escribe nada. Detalle de la instalación: INSTALLER.md, sección "Adopt an existing app".
03 · el mapa

Una caja sellada y una caja de escritura

Entre las dos hay una sola puerta: tu aprobación explícita del plan, dentro de la misma corrida. Un plan de una corrida anterior se retoma, nunca se reescribe.

Modo Frases que lo disparan Escribe
adopt "adopta esta app" · "adopción" · "after --adopt" · "project adoption" solo después de aprobar el plan, solo superficies agénticas
check "adoption drift check" · "is the adoption still accurate" nada: tabla de señales más la sección de stack de setup:doctor

un modo por corrida; check con señales pendientes termina nombrando adopt, nunca lo arranca

04 · fases 0 a 2

Leer todo antes de tocar nada

El sello se mide, no se promete: después de la fase 2, git status --porcelain solo puede diferir del de la fase 0 por el archivo del plan.

Fase 0 · reanudar, puerta y señales

Si hay una corrida a medias, ofrece reanudar, reiniciar o abortar, y espera. La puerta exige que .template/installer.lock.json diga adopted: true y que el árbol esté limpio. Sin lock, los archivos nunca se instalaron; con un lock greenfield, el repo fue scaffoldeado y le toca a /project-bootstrap.

Después corre las señales de detección: cada subsistema queda PENDING o ADOPTED. Las pendientes son la lista de trabajo de esta corrida.

Fase 1 · análisis

La huella del stack sale de bun run agents:setup --stack --dry-run --non-interactive: cada valor trae el archivo de donde se leyó, y lo que no se detecta queda ausente, nunca adivinado. Fuera de V1_SUPPORTED, la corrida para aquí sin escribir ni siquiera el plan.

Lee las convenciones del repo (paridad de la adopción, hooks, aislamiento de la herramienta, archivos de entorno solo por nombre, CI, branches), prueba el tracker en solo lectura y corre los scripts de la app para la línea de base. Lo que los archivos no contestan va en un solo cuestionario.

Fase 2 · el plan

Escribe .context/reports/project-adoption-plan.md con cabecera Status: PENDING APPROVAL, verifica el sello y se detiene. Un cambio que pidas edita el plan y vuelve a preguntar.

La IA hace

Corre las señales, despacha tres analistas de solo lectura y mide la línea de base.

Arma el plan con los hechos de los analistas y tus respuestas.

Tú decides

Identidad del proyecto, entornos, tracker y qué app cubre la adopción en un monorepo.

Si el test de la app es seguro de correr para la línea de base.

El sí que pasa el plan a APPROVED.

Sale

La tabla de señales y el plan en .context/reports/, que lee todo el equipo.

Lo que quedó sin respuesta, como ## Discovery Gaps.

Gate el plan aprobado en esta corrida, con quién lo aprobó y la fecha en la cabecera.
Detectar no es adivinarUn valor sin evidencia en la app es una pregunta o una brecha, nunca un default del boilerplate.
Un script que escribeSi la línea de base cambia archivos versionados, la IA lo registra, no revierte nada por su cuenta y pregunta.
Varias apps Next.jsEn un monorepo pregunta cuál cubre esta adopción y la fija en stack.app_root. Nunca dos en una corrida.
05 · fases 3 a 7

Escribir solo lo que el plan aprobó

Un escritor por fase, cada uno con las filas aprobadas de su fase y nada más. Cada escritura se verifica leyendo el destino.

Fase 3 · identidad, stack, entornos, rutas protegidas

bun run agents:setup --stack escribe el bloque stack: con los valores del plan; bun run agents:setup completa identidad y entornos. Cada colisión que la app ya poseía entra en updater.protected_paths, con un empalme que deja el resto del yaml byte por byte. Una skill del framework que la app había copiado a mano se reemplaza por la copia de upstream que guardó la adopción (.agents/prompts/adopt-upstream/), solo si su fila tiene su propia línea de aprobación y con respaldo previo en .backups/project-adoption/; si el equipo la conserva, queda en las rutas protegidas.

Fase 4 · credenciales

Solo .env, solo valores que tú das en esta corrida, sin repetirlos nunca. Después, reiniciar la sesión: cada servidor MCP lee el .env con su loader cuando arranca.

Fase 5 · catálogos del tracker

Carga /acli y sincroniza los catálogos contra la instancia propia de la app, nunca con la bandera de referencia de UPEX. Un campo faltante no se crea: el plan nombra el fallback y que crearlo es decisión de un admin de Jira. Y la adopción no hidrata el proyecto entero: el caché del backlog se llena por historia.

Fases 6 y 7 · instrucciones y contrato de API

Si el instalador dejó una fusión de instrucciones pendiente, se aplica tal cual, con su propia línea de aprobación y respaldo previo; el texto de la app nunca se resume ni se reordena. La skill <app>-context que escribió la adopción solo cambia en su description, reescrita desde el análisis para que enrute por el dominio real de la app; el texto preservado de la app nunca se toca. El contrato de API se sincroniza solo si la app sirve una spec y las rutas de salida no existían antes.

La IA hace

Relee el plan aprobado antes de cada fase y escribe solo sus filas.

Re-lee el yaml, re-corre la señal, re-parsea el archivo: un "listo" no alcanza.

Tú decides

Los valores de credenciales, que se tipean solo en .env.

La fusión de instrucciones, con una aprobación aparte de la del plan.

Sale

.agents/project.yaml con la app descrita, los catálogos .agents/jira-*.json y el AGENTS.md fusionado.

Gate cada fase verificada en el destino antes de pasar a la siguiente.
06 · fases 8 y 9

La app tiene que salir como entró

La verificación es fail-fast y en orden: para en el primer fallo, lo reporta con su salida, propone el arreglo y espera. Nunca arregla sola.

# fase 8, en este orden
bun run agents:compat:check
bun run vars:check
bun run vars:env:check
bun run harness:env:check
bun run jira:check                 # salteado si el plan registró "sin tracker"
bun run setup:doctor               # sección stack: sin issues, sin drift
bun run tooling:types:check        # el alcance propio de la herramienta, nunca el tsconfig de la app
bun run tooling:lint:check
build / lint / types / test de la app   # exit codes == línea de base de la fase 1
El fallo que más importa

Un script de la app que cambió

  • Si el build, el lint, los types o el test de la app no dan el mismo exit code que en la línea de base, la corrida no terminó.
  • El reporte nombra el script, los dos códigos y el primer error nuevo.
Fase 9 · cierre

Las señales como reporte

  • Re-corre las señales de la fase 0 e imprime la tabla final.
  • Marca el plan Status: COMPLETED con su bloque de resultados.
  • Propone el commit a través de /git-flow-master. Nunca lo hace en silencio.
Idempotente. Las mismas señales son la lista de trabajo al entrar y el reporte al salir. Una segunda corrida sobre una app ya adoptada dice que no hay nada que hacer.
07 · rieles

Una lista de rechazos y una lista de permisos

La capa agéntica vive dentro del árbol de la app, así que no alcanza con "el repo destino es de solo lectura". La lista de rechazos viaja literal en cada briefing de subagente.

Nunca escribe ni borra un archivo de la app bajo stack.app_root que existía antes de la adopción.
Nunca toca una base de datos: ni migraciones, ni SQL, ni RLS, ni seeds, ni una conexión, en ningún entorno. El schema vivo lo lee después /project-context data.
Nunca cambia dependencias, el package manager ni el lockfile.
Nunca edita el CI, el README.md, el tsconfig.json, la config de eslint o prettier, .gitattributes, el middleware ni un script del package.json de la app.
Nunca toca git ni Jira por su cuenta: ni historia, remotos, protección de branches o rulesets, ni proyectos, campos, workflows o issues. Nunca hace push.
Una credencial solo va a .env, nunca al plan, a un reporte o a un commit.
Puede escribir

Solo con su fila aprobada

  • .agents/project.yaml, .env y los catálogos .agents/jira-*.json.
  • AGENTS.md + CLAUDE.md, solo a través de la fusión que guardó el instalador.
  • Las carpetas de skills del framework que la app había copiado, reemplazadas por la copia de upstream guardada (con su propia aprobación), api/openapi* cuando no existían antes, y la description de la skill <app>-context.
  • El plan, .session/project-adoption/ y las copias en texto plano de credenciales MCP que retira bun run harness:env.
lista completa: references/adoption-workflow.md §Refusal list
Lo que debe el equipo

Se reporta, nunca se crea

  • Una identidad dedicada para la automatización (testing.automation_identity).
  • La cuenta de GitHub de la entrega autónoma (autonomous_delivery.automation_gh_account).
  • Un rol de base de datos dedicado para chequeos de solo lectura.
el plan nombra la skill que lo necesita y qué tiene que aportar el equipo
Sin PRD inventado. Los documentos de producto de una app adoptada son los mapas de negocio y el glosario. /sprint-development los acepta en lugar de un PRD o un SRS, y ninguna skill escribe uno para pasar una puerta.
08 · qué le dices a la IA

Invocarla en las tres terminales

Sin modo, la skill lo saca de la frase y, si no puede, corre adopt.

Claude Code

/project-adoption

Barra de la skill. Para el chequeo de drift: /project-adoption check.

OpenCode

carga la skill project-adoption, modo check

Sin barra: nombras la skill y el modo en la frase.

Codex

carga la skill project-adoption, modo adopt

Mismo patrón que OpenCode, CLI o Desktop.

09 · después de adoptar

El hand-off, en orden y nunca encadenado solo

Al cerrar, la skill te deja cada paso siguiente con la frase que lo dispara. Ninguno arranca por su cuenta.

Primero · sesión nueva

/project-context refresh-all

Los mapas de negocio leídos del código y el schema de la app. Van en una sesión aparte porque pesan en tokens. Deck: Project context.

Después de los mapas

/project-foundation, solo Discovery

La guía de desarrollo y el glosario del dominio, que completan los documentos de producto de la app. Deck: Project foundation.

Su propia sesión

/git-flow-master Strategy Setup

La estrategia de branches propia del proyecto y la protección del host, en solo lectura primero. Deck: Git flow master.

Opcional

/design-system extract

DESIGN.md escrito desde el tema vivo de la app. Deck: Design system.

Opcional

/testability-guide

La página /qa dentro de la app y el artefacto de credenciales. Deck: Testability guide.

Opcional

/project-bootstrap, add-on de tipos

Los tipos de la base en stack.database.types_path cuando faltan. Las fases base de bootstrap no corren sobre una app adoptada. Deck: Project bootstrap.

Para leer más: .agents/skills/project-adoption/SKILL.md y sus referencias: references/adoption-workflow.md (las fases, las señales y la lista de rechazos) y references/plan-template.md (las secciones del plan). La instalación está en README.md, sección "Adopt an existing app".