Valider le questionnaire d’un pack, planifier les prochaines questions, enregistrer les réponses avec leur statut et rédiger le brief. Options, codes de sortie, sortie réelle et erreurs.
Un intake est la liste des questions auxquelles un pack doit avoir une réponse avant d’agir. bmad-plus intake tient les comptes : il vérifie le fichier de questions, indique à l’assistant quelles questions poser ensuite, enregistre vos réponses et rédige un brief qui devient le contrat des étapes suivantes du pack. Il ne pose jamais rien lui-même et n’appelle aucun modèle : c’est votre assistant (l’assistant hôte) qui vous interroge dans votre langue, la commande tient le registre. Il concerne quiconque pilote un pack qui livre un intake ; en 0.23.0, c’est le pack Design (.agents/skills/pack-design/intake.yaml, intake design-read).
<file>: valid intake <id> (<pack>), N questions, M must-have. ou <file>: not a valid intake suivi d’une ligne - problem par défaut.
plan
Lit l’intake et les réponses ; dit si le pack peut démarrer et quelles questions poser ensuite (indispensables d’abord, jamais plus 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): et une ligne par question.
record
Écrit les réponses à travers le validateur : type, bornes et choix sont contrôlés, une valeur qui ne convient pas est refusée.
Recorded a, b in <answers>. (ou Reset <answers>…), puis les mêmes lignes que plan.
render
Écrit le brief à partir de l’intake et des réponses.
Brief written to <out> (N bytes); the intake is ready. ou …; a must-have is still open.
answered : vous avez donné la valeur (--set id=VALUE). Une valeur que vous avez choisie est answered, même si elle égale la valeur par défaut.
defaulted : vous laissez la valeur par défaut proposée (--default id). Le brief l’indique comme une proposition non confirmée par l’utilisateur.
unknown : vous ne savez pas (--set id=UNKNOWN). Le risk_if_unknown de la question est copié dans les réponses et listé sous « Open questions » dans le brief.
Une question indispensable est traitée dès qu’elle est answered ou unknown avec son risque. Une question indispensable ne peut pas avoir de valeur par défaut ; le validateur du questionnaire la refuse.
Le questionnaire est un fichier YAML livré avec le pack. Champs de premier niveau : schema_version (doit valoir 1), id et pack (slugs en minuscules), title, language facultatif (user ou une étiquette comme fr), max_per_message facultatif (entier de 1 à 20, 6 par défaut) et sections. Chaque section a un id, un title et des questions. Une question a un id en snake_case, un ask, un kind (text, choice avec au moins deux choices distincts, number avec min et max facultatifs, boolean, list), et éventuellement must_have, default, feeds (ancres d’artefacts comme brief.md#surface) et risk_if_unknown. Une question indispensable exige risk_if_unknown et refuse default. Les champs inconnus sont refusés.
Lit : le fichier intake et, pour plan, record et render, le fichier de réponses. Chaque fichier est limité à 1 Mio (1 048 576 octets) et doit être un fichier ordinaire.
Écrit : record écrit le fichier de réponses (JSON, écriture atomique via un fichier temporaire) ; render écrit le brief. Rien d’autre.
N’écrit jamais dans : .git/, _bmad/, .bmad-plus/ et node_modules/, à n’importe quelle profondeur ; un chemin qui sort du projet ; tout chemin passant par un lien symbolique.
record n’écrase qu’un fichier de réponses du même identifiant d’intake. render n’écrase qu’un brief qu’il a lui-même écrit pour le même intake (la deuxième ligne du fichier est la marque de propriété).
Ces quatre transcriptions viennent de la recette humaine de 0.23.0 (pack Design installé dans une application de démonstration). Les lignes npm notice et l’invite du shell sont retirées ; le reste de la sortie est inchangé. Le plan avant toute réponse se termine par le code 2.
Sortie capturée lors d’une exécution réelle. Source: Capturé pendant la recette d’acceptation de la 0.23.0, le 2026-10-18 (étape 4)
Plan avant toute réponse (code de sortie 2)
$ npx bmad-plus intake plan --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json --directory .\demo-appdesign-read (design): not ready — 0 answered, 0 defaulted, 0 unknown, 13 not asked yet.Must-haves still open: surface_kind, audience, jobAsk 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")
npx bmad-plus intake plan --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json --directory .\demo-app
Sortie capturée lors d’une exécution réelle. Source: Capturé pendant la recette d’acceptation de la 0.23.0, le 2026-10-18 (étape 5)
Enregistrer trois réponses
$ 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-appRecorded 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.
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
Sortie capturée lors d’une exécution réelle. Source: Capturé pendant la recette d’acceptation de la 0.23.0, le 2026-10-18 (étape 5)
Rédiger le brief et lire ses premières lignes
$ 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-appBrief 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 -->
Sortie capturée lors d’une exécution réelle. Source: Capturé pendant la recette d’acceptation de la 0.23.0, le 2026-10-18 (étape 5)
Comment le lire : après trois réponses, plan annonce ready parce que seules les trois questions indispensables (surface_kind, audience, job) bloquent le pack ; les dix autres restent facultatives et plan continue de les proposer, six à la fois. La deuxième ligne du brief est la marque de propriété : render pourra réécrire ce fichier, et refusera tout autre fichier à cet emplacement.
Demander d’abord, puis construire : la lecture design#
Pack Design installé. L’agent Atelier déroule l’intake avec cette commande : vous répondez en langage courant et ne tapez jamais les commandes vous-même.
Dans votre assistant IA
Atelier, fais la lecture design de la liste des factures de mon application, puis construis l’écran.
Ce que vous devriez obtenir L’assistant lance intake plan, obtient le code 2 avec les trois questions indispensables ouvertes (surface_kind, audience, job) et vous pose d’abord celles-là, six questions au plus par message. Il enregistre vos réponses avec intake record, vérifie que plan dit maintenant ready, puis rédige _bmad-output/design/brief.md avec intake render. Le brief liste chaque réponse avec son statut ; ce que vous avez laissé ouvert apparaît sous « Open questions » avec son risque. La construction part ensuite de ce brief.
Vous pouvez avancer sans réponse à une question indispensable, mais le risque reste attaché à celle-ci.
Dans votre assistant IA
Atelier, je ne sais pas encore qui utilisera cet écran. Note-le comme inconnu et continue.
Ce que vous devriez obtenir L’assistant enregistre la question avec --set audience=UNKNOWN. Le fichier de réponses stocke le statut unknown et copie le risk_if_unknown de la question ; plan compte cette question indispensable comme traitée, mais le pack ne démarre qu’une fois les deux autres indispensables, surface_kind et job, elles aussi répondues ou unknown avec leur risque. Le brief affiche « Answer: unknown » avec le risque, et le répète dans « Open questions ». Il n’invente pas de public.