Explorar la documentación

bmad-plus intake

Valida el cuestionario de un pack, planifica las siguientes preguntas, registra las respuestas con su estado y redacta el brief. Opciones, códigos de salida, salida real y errores.

En esta página
  1. Sinopsis
  2. Las cuatro acciones
  3. Qué lee y qué escribe
  4. Códigos de salida
  5. Salida real
  6. Errores y qué hacer
  7. Ejemplos

Un intake es la lista de preguntas que un pack necesita ver respondidas antes de actuar. bmad-plus intake lleva la contabilidad: comprueba el archivo de preguntas, indica al asistente qué preguntar a continuación, registra lo que respondes y redacta un brief que pasa a ser el contrato de los siguientes pasos del pack. Nunca pregunta nada por sí mismo ni llama a ningún modelo: tu asistente (el asistente anfitrión) te pregunta en tu idioma y el comando guarda el registro. Lo necesita quien maneje un pack que incluya un intake; en 0.23.0 es el pack Design (.agents/skills/pack-design/intake.yaml, intake design-read).

Sinopsis

En el terminal de tu proyecto
npx bmad-plus intake check FILE [--json]
npx bmad-plus intake plan   --intake FILE --answers FILE [--json]
npx bmad-plus intake record --intake FILE --answers FILE [--set id=VALUE]... [--default id]... [--reset] [--json]
npx bmad-plus intake render --intake FILE --answers FILE --out FILE [--json]

Opciones de bmad-plus intake
OpciónArgumentoPor defectoQué hace
<action>check, plan, record, renderobligatorioEl paso que se ejecuta.
[file]rutaningunoArchivo intake que se valida. Solo lo usa check.
-d, --directory <path>rutacarpeta actualCarpeta del proyecto. Las demás rutas son relativas a ella y deben quedarse dentro.
--intake <file>rutaningunoArchivo intake (el cuestionario). Obligatorio en plan, record, render.
--answers <file>rutaningunoArchivo de respuestas. Lo crea record; obligatorio en plan, record, render.
--set <id=VALUE>id=VALORningunoRegistra una respuesta. id=UNKNOWN marca la pregunta como desconocida y copia su riesgo. Repetible, una vez por pregunta y llamada.
--default <id>id de preguntaningunoRegistra el valor por defecto propuesto de una pregunta como defaulted. Repetible.
--resetningunodesactivadoEmpieza de nuevo con un archivo de respuestas vacío para este intake y aplica los --set y --default de la misma llamada.
--out <file>rutaningunoBrief que se escribe. Obligatorio en render.
--jsonningunodesactivadoSalida legible por máquinas, con schemaVersion: 1 y un campo status.

Las cuatro acciones

Qué hace cada acción
AcciónFunciónMuestra (salida de texto)
check FILEValida un archivo intake según el contrato.<file>: valid intake <id> (<pack>), N questions, M must-have. o <file>: not a valid intake seguido de una línea - problem por fallo.
planLee el intake y las respuestas; dice si el pack puede empezar y qué preguntar a continuación (primero las imprescindibles, nunca más de max_per_message).<id> (<pack>): ready|not ready — A answered, D defaulted, U unknown, P not asked yet., Must-haves still open: …, Ask next (at most N per message): y una línea por pregunta.
recordEscribe las respuestas a través del validador: se comprueban tipo, límites y opciones, y un valor que no encaja se rechaza.Recorded a, b in <answers>. (o Reset <answers>…), y luego las mismas líneas que plan.
renderEscribe el brief a partir del intake y las respuestas.Brief written to <out> (N bytes); the intake is ready. o …; a must-have is still open.

Estados de las respuestas

  • answered: diste el valor (--set id=VALUE). Un valor que elegiste es answered, incluso si coincide con el valor por defecto.
  • defaulted: dejas que se mantenga el valor por defecto propuesto (--default id). El brief lo etiqueta como propuesta no confirmada por el usuario.
  • unknown: no lo sabes (--set id=UNKNOWN). El risk_if_unknown de la pregunta se copia en las respuestas y aparece en «Open questions» del brief.
  • Una pregunta imprescindible queda resuelta cuando está answered o unknown con su riesgo. Una imprescindible no puede llevar valor por defecto; el validador del cuestionario lo rechaza.

El archivo intake

El cuestionario es un archivo YAML que se entrega con el pack. Campos de primer nivel: schema_version (debe ser 1), id y pack (slugs en minúsculas), title, language opcional (user o una etiqueta como fr), max_per_message opcional (entero de 1 a 20, 6 si falta) y sections. Cada sección tiene un id, un title y questions. Una pregunta tiene un id en snake_case, un ask, un kind (text, choice con al menos dos choices distintos, number con min y max opcionales, boolean, list) y, opcionalmente, must_have, default, feeds (anclas de artefactos como brief.md#surface) y risk_if_unknown. Una imprescindible exige risk_if_unknown y rechaza default. Los campos desconocidos se rechazan.

Qué lee y qué escribe

  • Lee: el archivo intake y, en plan, record y render, el archivo de respuestas. Cada archivo está limitado a 1 MiB (1.048.576 bytes) y debe ser un archivo normal.
  • Escribe: record escribe el archivo de respuestas (JSON, escritura atómica mediante un archivo temporal); render escribe el brief. Nada más.
  • Nunca escribe en: .git/, _bmad/, .bmad-plus/ ni node_modules/, a cualquier profundidad; una ruta que salga del proyecto; ninguna ruta que pase por un enlace simbólico.
  • record solo sobrescribe un archivo de respuestas del mismo id de intake. render solo sobrescribe un brief que él mismo escribió antes para el mismo intake (la segunda línea del archivo es la marca de propiedad).
  • Sin acceso a la red, sin procesos lanzados, sin llamar a ningún modelo.

Códigos de salida

Códigos de salida de bmad-plus intake
CódigoSignificado
0check: el archivo es válido. plan: listo, cada pregunta imprescindible está respondida o desconocida con su riesgo. record y render: hecho.
1Cualquier error (se muestra como Intake: <message>), o check encontró el archivo inválido.
2Solo plan: no está listo, queda abierta al menos una pregunta imprescindible.

Salida real

Estas cuatro transcripciones proceden de la receta de aceptación humana de 0.23.0 (pack Design instalado en una aplicación de demostración). Se han quitado las líneas npm notice y el prompt del shell; el resto de la salida no se ha modificado. El plan previo a cualquier respuesta termina con el código 2.

Validar el cuestionario del pack Design
npx bmad-plus intake check .agents/skills/pack-design/intake.yaml --directory .\demo-app
.agents/skills/pack-design/intake.yaml: valid intake design-read (design), 13 questions, 3 must-have.

Salida capturada de una ejecución real. Fuente: Capturado durante la receta de aceptación de la 0.23.0, el 2026-10-18 (paso 4)

Plan antes de cualquier respuesta (código de salida 2)
npx bmad-plus intake plan --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json --directory .\demo-app
design-read (design): not ready — 0 answered, 0 defaulted, 0 unknown, 13 not asked yet.
Must-haves still open: surface_kind, audience, job
Ask next (at most 6 per message):
  - surface_kind [choice] Which surface is this? A marketing landing page, a dashboard, a data table, a form, an auth or onboarding flow, a mobile screen, an email, a chat or AI surface, a checkout, a settings page, or something else? (must-have; choices: landing, dashboard, table, form, auth, onboarding, mobile, email, ai-chat, checkout, settings, other)
  - audience [text] Who uses it, and in what situation (device, time pressure, expertise, frequency)? (must-have)
  - job [text] What is the one job this page must get done, and how will you know it did? (must-have)
  - brand_assets [choice] Which brand assets exist already? None, a partial set (a logo and a colour or two), or a full kit (logo, palette, type, voice)? (choices: none, partial, full)
  - design_system [choice] Is a design system or component library already in use? (choices: none, shadcn, radix, mantine, material, fluent, carbon, polaris, other; default: "none")
  - aesthetic_family [choice] Does the brief imply an aesthetic family? Minimalist, brutalist, soft editorial, premium dense, or none in particular? (choices: minimalist, brutalist, soft-editorial, premium-dense, none; default: "none")

Salida capturada de una ejecución real. Fuente: Capturado durante la receta de aceptación de la 0.23.0, el 2026-10-18 (paso 5)

Registrar tres respuestas
npx bmad-plus intake record --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json --set surface_kind=dashboard --set "audience=Comptables en cabinet, sur ordinateur, en fin de mois" --set "job=Repérer les factures en retard et relancer en un clic" --directory .\demo-app
Recorded surface_kind, audience, job in _bmad-output/design/intake.json.
design-read (design): ready — 3 answered, 0 defaulted, 0 unknown, 10 not asked yet.
Ask next (at most 6 per message):
  - brand_assets [choice] Which brand assets exist already? None, a partial set (a logo and a colour or two), or a full kit (logo, palette, type, voice)? (choices: none, partial, full)
  - design_system [choice] Is a design system or component library already in use? (choices: none, shadcn, radix, mantine, material, fluent, carbon, polaris, other; default: "none")
  - aesthetic_family [choice] Does the brief imply an aesthetic family? Minimalist, brutalist, soft editorial, premium dense, or none in particular? (choices: minimalist, brutalist, soft-editorial, premium-dense, none; default: "none")
  - variance [number] Layout variance, from 1 (symmetric and safe) to 10 (asymmetric and bold)? Leave it open and Atelier sets it from the surface.
  - motion [number] Motion, from 1 (static) to 10 (choreographed)? Leave it open and Atelier sets it from the surface.
  - density [number] Density, from 1 (gallery-sparse) to 10 (cockpit-packed)? Leave it open and Atelier sets it from the surface.

Salida capturada de una ejecución real. Fuente: Capturado durante la receta de aceptación de la 0.23.0, el 2026-10-18 (paso 5)

Redactar el brief y leer sus primeras líneas
npx bmad-plus intake render --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json --out _bmad-output/design/brief.md --directory .\demo-app
Brief written to _bmad-output/design/brief.md (3022 bytes); the intake is ready.
Get-Content .\demo-app\_bmad-output\design\brief.md -TotalCount 3
# Design read
<!-- owned by bmad-plus intake design-read; written by bmad-plus intake render, do not edit -->

Salida capturada de una ejecución real. Fuente: Capturado durante la receta de aceptación de la 0.23.0, el 2026-10-18 (paso 5)

Cómo leerlo: tras tres respuestas, plan dice ready porque solo las tres imprescindibles (surface_kind, audience, job) bloquean el pack; las otras diez son opcionales y plan sigue ofreciéndolas, de seis en seis. La segunda línea del brief es la marca de propiedad: render podrá volver a sobrescribir este archivo y rechazará cualquier otro en esa ruta.

Errores y qué hacer

Mensajes que muestra bmad-plus intake
MensajeCausaQué hacer
Intake: --intake is required for intake plan (igual con --answers, --out)Falta una opción obligatoria.Añade la opción que nombra el mensaje.
Intake: Use intake check FILE.check se ejecutó sin archivo.Pasa el archivo intake: intake check .agents/skills/pack-design/intake.yaml.
Intake: Use intake check FILE, plan, record or render.Acción desconocida.Usa una de las cuatro acciones.
<file>: not a valid intake + líneas - … (código 1)El cuestionario incumple el contrato, por ejemplo un campo desconocido o una imprescindible sin risk_if_unknown.Corrige cada problema listado en el archivo intake y vuelve a ejecutar check. Si es el archivo de un pack entregado, reinstala o actualiza el pack.
Intake: nothing to record: pass --set id=VALUE, --default id or --resetrecord sin nada que registrar.Pasa --set, --default o --reset.
Intake: --set expects id=VALUE, got "…"La asignación no lleva =.Escribe --set id=VALUE.
Intake: question "x" is set twice in one callLa misma pregunta aparece dos veces en --set/--default.Da cada pregunta una sola vez por llamada.
Intake: no question "x" in intake "y"El id no está en el cuestionario.Copia el id de la salida de plan.
Intake: question "x" has no default--default sobre una pregunta sin valor por defecto.Usa --set x=VALUE o --set x=UNKNOWN.
Intake: x: value must be one of … (o needs a finite number, must be at least N, needs true or false, …)El valor no encaja con el tipo o los límites de la pregunta.Vuelve a preguntar y registra un valor que encaje. No se escribió nada.
Intake: <answers> does not answer this intake: … + Record again with --reset to start over.El archivo de respuestas ya no encaja con el cuestionario (cambió tras registrar respuestas).Ejecuta record --reset y vuelve a hacer las preguntas.
Intake: <file>: exists and belongs to "other", not to intake "y"; move it away or pick another pathLa ruta de respuestas contiene el archivo de otro intake.Elige otra ruta para --answers.
Intake: <file>: exists and is not a brief of intake "y" (its second line is not the ownership marker); move it away or pick another pathrender se niega a sobrescribir un archivo que no escribió.Elige otra ruta para --out o mueve el archivo.
Intake: <file>: the intake never writes under _bmad/ (también .git/, .bmad-plus/, node_modules/)La ruta de salida está en un árbol reservado.Escribe las respuestas y el brief en otro sitio, por ejemplo bajo _bmad-output/.
Intake: <file>: outside the project directory <root>La ruta sale del proyecto.Usa una ruta dentro del proyecto o cambia --directory.

Ejemplos

Preguntar primero, construir después: la lectura de diseño

Pack Design instalado. El agente Atelier ejecuta el intake con este comando: tú respondes en lenguaje normal y nunca escribes los comandos.

En tu asistente de IA
Atelier, haz la lectura de diseño de la lista de facturas de mi aplicación y luego construye la pantalla.

Lo que deberías obtener El asistente ejecuta intake plan, obtiene el código 2 con las tres imprescindibles abiertas (surface_kind, audience, job) y te pregunta primero esas, con un máximo de seis preguntas por mensaje. Registra tus respuestas con intake record, comprueba que plan ya dice ready y redacta _bmad-output/design/brief.md con intake render. El brief lista cada respuesta con su estado; lo que dejaste abierto aparece en «Open questions» con su riesgo. La construcción parte después de ese brief.

Decir «no lo sé» a propósito

Puedes avanzar sin respuesta a una imprescindible, pero el riesgo queda asociado a ella.

En tu asistente de IA
Atelier, todavía no sé quién usará esta pantalla. Anótalo como desconocido y continúa.

Lo que deberías obtener El asistente registra la pregunta con --set audience=UNKNOWN. El archivo de respuestas guarda el estado unknown y copia el risk_if_unknown de la pregunta; plan cuenta esa pregunta imprescindible como resuelta, pero el pack solo arranca cuando las otras dos imprescindibles, surface_kind y job, también están respondidas o son unknown con su riesgo. El brief muestra «Answer: unknown» con el riesgo y lo repite en «Open questions». No se inventa un público.