Parcourir la documentation

bmad-plus intake

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.

Sur cette page
  1. Synopsis
  2. Les quatre actions
  3. Ce qu’elle lit et écrit
  4. Codes de sortie
  5. Sortie réelle
  6. Erreurs et que faire
  7. Exemples

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).

Synopsis

Dans le terminal de votre projet
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]

Options de bmad-plus intake
OptionArgumentDéfautEffet
<action>check, plan, record, renderobligatoireL’étape à exécuter.
[file]cheminaucunFichier intake à valider. Utilisé par check uniquement.
-d, --directory <path>chemindossier courantDossier du projet. Tous les autres chemins sont relatifs à lui et doivent rester à l’intérieur.
--intake <file>cheminaucunFichier intake (le questionnaire). Obligatoire pour plan, record, render.
--answers <file>cheminaucunFichier de réponses. Créé par record ; obligatoire pour plan, record, render.
--set <id=VALUE>id=VALEURaucunEnregistre une réponse. id=UNKNOWN marque la question comme inconnue et copie son risque. Répétable, une fois par question et par appel.
--default <id>id de questionaucunEnregistre la valeur par défaut proposée d’une question avec le statut defaulted. Répétable.
--resetaucundésactivéRepart d’un fichier de réponses vide pour cet intake, puis applique les --set et --default du même appel.
--out <file>cheminaucunBrief à écrire. Obligatoire pour render.
--jsonaucundésactivéSortie lisible par machine, avec schemaVersion: 1 et un champ status.

Les quatre actions

Ce que fait chaque action
ActionRôleAffiche (sortie texte)
check FILEValide un fichier intake selon le contrat.<file>: valid intake <id> (<pack>), N questions, M must-have. ou <file>: not a valid intake suivi d’une ligne - problem par défaut.
planLit 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.

Statuts des réponses

  • 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 fichier intake

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.

Ce qu’elle lit et écrit

  • 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é).
  • Aucun accès réseau, aucun processus lancé, aucun modèle appelé.

Codes de sortie

Codes de sortie de bmad-plus intake
CodeSignification
0check : le fichier est valide. plan : prêt, chaque question indispensable est répondue ou inconnue avec son risque. record et render : fait.
1Toute erreur (affichée Intake: <message>), ou check a trouvé le fichier invalide.
2plan uniquement : pas prêt, au moins une question indispensable reste ouverte.

Sortie réelle

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.

Valider le questionnaire du 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.

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-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")

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-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.

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-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 -->

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.

Erreurs et que faire

Messages affichés par bmad-plus intake
MessageCauseQue faire
Intake: --intake is required for intake plan (idem pour --answers, --out)Une option obligatoire manque.Ajoutez l’option citée dans le message.
Intake: Use intake check FILE.check lancé sans fichier.Passez le fichier intake : intake check .agents/skills/pack-design/intake.yaml.
Intake: Use intake check FILE, plan, record or render.Action inconnue.Utilisez l’une des quatre actions.
<file>: not a valid intake + lignes - … (code 1)Le questionnaire enfreint le contrat, par exemple un champ inconnu ou une question indispensable sans risk_if_unknown.Corrigez chaque problème listé dans le fichier intake, puis relancez check. Pour le fichier d’un pack livré, réinstallez ou mettez à jour le pack.
Intake: nothing to record: pass --set id=VALUE, --default id or --resetrecord sans rien à enregistrer.Passez --set, --default ou --reset.
Intake: --set expects id=VALUE, got "…"L’affectation n’a pas de =.Écrivez --set id=VALUE.
Intake: question "x" is set twice in one callLa même question apparaît deux fois dans --set/--default.Donnez chaque question une seule fois par appel.
Intake: no question "x" in intake "y"L’identifiant n’est pas dans le questionnaire.Copiez l’identifiant depuis la sortie de plan.
Intake: question "x" has no default--default sur une question sans valeur par défaut.Utilisez --set x=VALUE ou --set x=UNKNOWN.
Intake: x: value must be one of … (ou needs a finite number, must be at least N, needs true or false, …)La valeur ne convient pas au type ou aux bornes de la question.Reposez la question et enregistrez une valeur qui convient. Rien n’a été écrit.
Intake: <answers> does not answer this intake: … + Record again with --reset to start over.Le fichier de réponses ne correspond plus au questionnaire (modifié après l’enregistrement des réponses).Lancez record --reset, puis reposez les questions.
Intake: <file>: exists and belongs to "other", not to intake "y"; move it away or pick another pathLe chemin des réponses contient le fichier d’un autre intake.Choisissez un autre chemin pour --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 refuse d’écraser un fichier qu’il n’a pas écrit.Choisissez un autre chemin pour --out ou déplacez le fichier.
Intake: <file>: the intake never writes under _bmad/ (aussi .git/, .bmad-plus/, node_modules/)Le chemin de sortie est dans une arborescence réservée.Écrivez les réponses et le brief ailleurs, par exemple sous _bmad-output/.
Intake: <file>: outside the project directory <root>Le chemin sort du projet.Utilisez un chemin dans le projet, ou changez --directory.

Exemples

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.

Dire « je ne sais pas » en connaissance de cause

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.