# bmad-plus intake

> Den Fragebogen eines Packs prüfen, die nächsten Fragen planen, Antworten mit Status festhalten und das Briefing erzeugen. Optionen, Exit-Codes, echte Ausgabe und Fehler.

Canonical: https://bmad-plus.rochetta.fr/de/docs/reference/cli-intake/
Language: de
BMAD+ version: 0.23.1
Documentation reviewed: 2026-10-19
Author: Laurent Rochetta
License: MIT

BMAD+ Dokumentation › [Referenz](https://bmad-plus.rochetta.fr/de/docs/reference/) › bmad-plus intake

Ein Intake ist die Liste der Fragen, die ein Pack beantwortet haben muss, bevor es handelt. `bmad-plus intake` führt das Protokoll: Es prüft die Fragebogen-Datei, sagt dem Assistenten, welche Fragen als Nächstes zu stellen sind, hält deine Antworten fest und erzeugt ein Briefing, das zum Vertrag für die weiteren Schritte des Packs wird. Es fragt nie selbst und ruft kein Modell auf: Dein Assistent (der Host-Assistent) fragt dich in deiner Sprache, der Befehl führt die Aufzeichnung. Wer ein Pack mit Intake bedient, braucht ihn; in 0.23.0 ist das das Design-Pack (`.agents/skills/pack-design/intake.yaml`, Intake `design-read`).

<a id="synopsis"></a>
## Syntax

**Im Terminal deines Projekts**

```sh
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]
```

**Optionen von bmad-plus intake**

| Option | Argument | Standard | Wirkung |
| --- | --- | --- | --- |
| `<action>` | `check`, `plan`, `record`, `render` | Pflicht | Der auszuführende Schritt. |
| `[file]` | Pfad | keiner | Zu prüfende Intake-Datei. Nur für `check`. |
| `-d, --directory <path>` | Pfad | aktuelles Verzeichnis | Projektverzeichnis. Alle anderen Pfade sind relativ dazu und müssen darin bleiben. |
| `--intake <file>` | Pfad | keiner | Intake-Datei (der Fragebogen). Pflicht bei `plan`, `record`, `render`. |
| `--answers <file>` | Pfad | keiner | Antwortdatei. Wird von `record` angelegt; Pflicht bei `plan`, `record`, `render`. |
| `--set <id=VALUE>` | id=WERT | keiner | Hält eine Antwort fest. `id=UNKNOWN` markiert die Frage als unbekannt und übernimmt ihr Risiko. Wiederholbar, einmal je Frage und Aufruf. |
| `--default <id>` | Frage-ID | keiner | Hält den vorgeschlagenen Standardwert einer Frage als `defaulted` fest. Wiederholbar. |
| `--reset` | keiner | aus | Beginnt für diesen Intake mit einer leeren Antwortdatei und wendet danach `--set` und `--default` desselben Aufrufs an. |
| `--out <file>` | Pfad | keiner | Zu schreibendes Briefing. Pflicht bei `render`. |
| `--json` | keiner | aus | Maschinenlesbare Ausgabe mit `schemaVersion: 1` und einem Feld `status`. |

<a id="actions"></a>
## Die vier Aktionen

**Was jede Aktion tut**

| Aktion | Aufgabe | Gibt aus (Textausgabe) |
| --- | --- | --- |
| `check FILE` | Prüft eine Intake-Datei gegen den Vertrag. | `<file>: valid intake <id> (<pack>), N questions, M must-have.` oder `<file>: not a valid intake`, danach je Problem eine Zeile `  - problem`. |
| `plan` | Liest Intake und Antworten; sagt, ob das Pack starten darf und welche Fragen als Nächstes zu stellen sind (Pflichtangaben zuerst, nie mehr als `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):` und eine Zeile je Frage. |
| `record` | Schreibt Antworten durch den Validator: Art, Grenzen und Auswahl werden geprüft, ein unpassender Wert wird abgelehnt. | `Recorded a, b in <answers>.` (oder `Reset <answers>…`), danach dieselben Zeilen wie bei `plan`. |
| `render` | Schreibt das Briefing aus Intake und Antworten. | `Brief written to <out> (N bytes); the intake is ready.` oder `…; a must-have is still open.` |

<a id="statuses"></a>
### Antwortstatus

- `answered`: Du hast den Wert genannt (`--set id=VALUE`). Ein Wert, den du gewählt hast, ist `answered`, auch wenn er dem Standard entspricht.
- `defaulted`: Du lässt den vorgeschlagenen Standardwert stehen (`--default id`). Das Briefing kennzeichnet ihn als Vorschlag, der nicht vom Nutzer bestätigt wurde.
- `unknown`: Du weißt es nicht (`--set id=UNKNOWN`). Das `risk_if_unknown` der Frage wird in die Antworten kopiert und im Briefing unter „Open questions“ aufgeführt.
- Eine Pflichtfrage gilt als erledigt, sobald sie `answered` oder `unknown` mit ihrem Risiko ist. Eine Pflichtfrage darf keinen Standardwert tragen; der Fragebogen-Validator lehnt ihn ab.

<a id="intake-file"></a>
### Die Intake-Datei

Der Fragebogen ist eine YAML-Datei, die mit dem Pack ausgeliefert wird. Felder der obersten Ebene: `schema_version` (muss 1 sein), `id` und `pack` (Slugs in Kleinbuchstaben), `title`, optional `language` (`user` oder ein Tag wie `fr`), optional `max_per_message` (ganze Zahl 1 bis 20, ohne Angabe 6) und `sections`. Jeder Abschnitt hat `id`, `title` und `questions`. Eine Frage hat eine `id` in snake_case, ein `ask`, ein `kind` (`text`, `choice` mit mindestens zwei verschiedenen `choices`, `number` mit optionalem `min` und `max`, `boolean`, `list`) und optional `must_have`, `default`, `feeds` (Artefakt-Anker wie `brief.md#surface`) und `risk_if_unknown`. Eine Pflichtfrage braucht `risk_if_unknown` und verbietet `default`. Unbekannte Felder werden abgelehnt.

<a id="reads-writes"></a>
## Was gelesen und geschrieben wird

- Liest: die Intake-Datei und, bei `plan`, `record` und `render`, die Antwortdatei. Jede Datei ist auf 1 MiB (1.048.576 Bytes) begrenzt und muss eine reguläre Datei sein.
- Schreibt: `record` schreibt die Antwortdatei (JSON, atomar über eine temporäre Datei); `render` schreibt das Briefing. Sonst nichts.
- Schreibt nie in: `.git/`, `_bmad/`, `.bmad-plus/` und `node_modules/` in beliebiger Tiefe; in einen Pfad außerhalb des Projekts; über einen Symlink.
- `record` überschreibt nur eine Antwortdatei derselben Intake-ID. `render` überschreibt nur ein Briefing, das es selbst für denselben Intake geschrieben hat (die zweite Zeile der Datei ist die Besitzmarke).
- Kein Netzwerkzugriff, kein gestarteter Prozess, kein Modellaufruf.

<a id="exit-codes"></a>
## Exit-Codes

**Exit-Codes von bmad-plus intake**

| Code | Bedeutung |
| --- | --- |
| 0 | `check`: Datei gültig. `plan`: bereit, jede Pflichtfrage ist beantwortet oder unbekannt mit Risiko. `record` und `render`: erledigt. |
| 1 | Jeder Fehler (ausgegeben als `Intake: <message>`) oder `check` hat die Datei als ungültig erkannt. |
| 2 | Nur `plan`: nicht bereit, mindestens eine Pflichtfrage ist noch offen. |

<a id="real-output"></a>
## Echte Ausgabe

Diese vier Mitschnitte stammen aus dem menschlichen Abnahmelauf von 0.23.0 (Design-Pack in einer Demo-App). Die `npm notice`-Zeilen und der Shell-Prompt sind entfernt; die Ausgabe ist sonst unverändert. Der `plan` vor der ersten Antwort endet mit Code 2.

**Den Fragebogen des Design-Packs prüfen**

```text
$ 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.
```

Ausgabe eines echten Laufs. Quelle: Aufgezeichnet im Abnahmelauf der 0.23.0 am 2026-10-18 (Schritt 4)

**Plan vor jeder Antwort (Exit-Code 2)**

```text
$ 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")
```

Ausgabe eines echten Laufs. Quelle: Aufgezeichnet im Abnahmelauf der 0.23.0 am 2026-10-18 (Schritt 5)

**Drei Antworten festhalten**

```text
$ 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.
```

Ausgabe eines echten Laufs. Quelle: Aufgezeichnet im Abnahmelauf der 0.23.0 am 2026-10-18 (Schritt 5)

**Das Briefing erzeugen und seine ersten Zeilen lesen**

```text
$ 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 -->
```

Ausgabe eines echten Laufs. Quelle: Aufgezeichnet im Abnahmelauf der 0.23.0 am 2026-10-18 (Schritt 5)

So liest du es: Nach drei Antworten meldet `plan` `ready`, weil nur die drei Pflichtfragen (`surface_kind`, `audience`, `job`) das Pack blockieren; die übrigen zehn bleiben optional, und `plan` bietet sie weiter an, jeweils sechs. Die zweite Zeile des Briefings ist die Besitzmarke: `render` darf diese Datei erneut überschreiben und lehnt jede andere Datei an diesem Pfad ab.

<a id="errors"></a>
## Fehler und was zu tun ist

**Meldungen von bmad-plus intake**

| Meldung | Ursache | Was tun |
| --- | --- | --- |
| `Intake: --intake is required for intake plan` (ebenso für `--answers`, `--out`) | Eine Pflichtoption fehlt. | Die in der Meldung genannte Option ergänzen. |
| `Intake: Use intake check FILE.` | `check` ohne Datei aufgerufen. | Die Intake-Datei angeben: `intake check .agents/skills/pack-design/intake.yaml`. |
| `Intake: Use intake check FILE, plan, record or render.` | Unbekannte Aktion. | Eine der vier Aktionen verwenden. |
| `<file>: not a valid intake` + Zeilen `  - …` (Code 1) | Der Fragebogen verletzt den Vertrag, etwa ein unbekanntes Feld oder eine Pflichtfrage ohne `risk_if_unknown`. | Jedes aufgelistete Problem in der Intake-Datei beheben, dann `check` erneut ausführen. Bei der Datei eines ausgelieferten Packs: Pack neu installieren oder aktualisieren. |
| `Intake: nothing to record: pass --set id=VALUE, --default id or --reset` | `record` ohne etwas zum Festhalten. | `--set`, `--default` oder `--reset` angeben. |
| `Intake: --set expects id=VALUE, got "…"` | Der Zuweisung fehlt das `=`. | `--set id=VALUE` schreiben. |
| `Intake: question "x" is set twice in one call` | Dieselbe Frage kommt zweimal in `--set`/`--default` vor. | Jede Frage nur einmal pro Aufruf angeben. |
| `Intake: no question "x" in intake "y"` | Die ID steht nicht im Fragebogen. | Die ID aus der Ausgabe von `plan` übernehmen. |
| `Intake: question "x" has no default` | `--default` bei einer Frage ohne Standardwert. | `--set x=VALUE` oder `--set x=UNKNOWN` verwenden. |
| `Intake: x: value must be one of …` (oder `needs a finite number`, `must be at least N`, `needs true or false`, …) | Der Wert passt nicht zu Art oder Grenzen der Frage. | Erneut fragen und einen passenden Wert festhalten. Es wurde nichts geschrieben. |
| `Intake: <answers> does not answer this intake: …` + `Record again with --reset to start over.` | Die Antwortdatei passt nicht mehr zum Fragebogen (nach dem Festhalten der Antworten geändert). | `record --reset` ausführen und die Fragen erneut stellen. |
| `Intake: <file>: exists and belongs to "other", not to intake "y"; move it away or pick another path` | Am Antwortpfad liegt die Datei eines anderen Intakes. | Einen anderen `--answers`-Pfad wählen. |
| `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 path` | `render` weigert sich, eine Datei zu überschreiben, die es nicht geschrieben hat. | Einen anderen `--out`-Pfad wählen oder die Datei verschieben. |
| `Intake: <file>: the intake never writes under _bmad/` (auch `.git/`, `.bmad-plus/`, `node_modules/`) | Der Ausgabepfad liegt in einem reservierten Baum. | Antworten und Briefing anderswo ablegen, etwa unter `_bmad-output/`. |
| `Intake: <file>: outside the project directory <root>` | Der Pfad verlässt das Projekt. | Einen Pfad im Projekt verwenden oder `--directory` ändern. |

<a id="examples"></a>
## Beispiele

<a id="example-cli-intake-design-read"></a>
### Erst fragen, dann bauen: die Design-Analyse

Design-Pack installiert. Der Agent Atelier führt den Intake mit diesem Befehl durch: Du antwortest in normaler Sprache und tippst die Befehle nie selbst.

**In deinem KI-Assistenten**

```text
Atelier, mach die Design-Analyse für die Rechnungsliste meiner App und baue danach den Bildschirm.
```

**Das solltest du erhalten** Der Assistent führt `intake plan` aus, erhält Code 2 mit den drei offenen Pflichtfragen (`surface_kind`, `audience`, `job`) und stellt dir zuerst diese, höchstens sechs Fragen pro Nachricht. Er hält deine Antworten mit `intake record` fest, prüft, dass `plan` nun `ready` meldet, und erzeugt `_bmad-output/design/brief.md` mit `intake render`. Das Briefing listet jede Antwort mit ihrem Status; was du offen gelassen hast, steht mit seinem Risiko unter „Open questions“. Der Bau startet dann aus diesem Briefing.

<a id="example-cli-intake-unknown-risk"></a>
### Bewusst „weiß ich nicht“ sagen

Du kannst ohne Antwort auf eine Pflichtfrage weitermachen, aber das Risiko bleibt an ihr hängen.

**In deinem KI-Assistenten**

```text
Atelier, ich weiß noch nicht, wer diesen Bildschirm nutzen wird. Halte es als unbekannt fest und mach weiter.
```

**Das solltest du erhalten** Der Assistent hält die Frage mit `--set audience=UNKNOWN` fest. Die Antwortdatei speichert den Status `unknown` und kopiert das `risk_if_unknown` der Frage; `plan` zählt diese Pflichtfrage als erledigt, aber das Pack startet erst, wenn auch die beiden anderen Pflichtfragen, `surface_kind` und `job`, beantwortet oder unknown mit ihrem Risiko sind. Das Briefing zeigt „Answer: unknown“ mit dem Risiko und wiederholt es unter „Open questions“. Eine Zielgruppe wird nicht erfunden.

**Siehe auch**

- [bmad-plus swarm: einen Schwarm nach dem Intake starten](https://bmad-plus.rochetta.fr/de/docs/reference/cli-swarm/)
- [bmad-plus nexus: dauerhafte Läufe](https://bmad-plus.rochetta.fr/de/docs/reference/cli-nexus/)
- [CLI-Überblick und Exit-Codes](https://bmad-plus.rochetta.fr/de/docs/reference/cli-overview/)
- [Projektstruktur: wo Antworten und Briefings liegen](https://bmad-plus.rochetta.fr/de/docs/reference/project-layout/)

[BMAD+ Dokumentation](https://bmad-plus.rochetta.fr/de/docs/) · [Referenz](https://bmad-plus.rochetta.fr/de/docs/reference/)

[Quellcode auf GitHub](https://github.com/lrochetta/BMAD-PLUS)
