Skill Tracer
Skills › BMAD Method › bmad-ux › headless.md

headless.md

37 lines · skills/bmad-ux/references/headless.md at bd70c64

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Headless Mode
2
3Load this file when invoked headless. Follow it for the whole run.
4

Headless Mode

Load this file when invoked headless. Follow it for the whole run.

Raw lines 1 to 4
5## Detection
6
7Headless when any of: caller sets `headless: true` (or harness equivalent); invocation is from another skill or non-interactive runner; `{workflow.activation_steps_prepend}` declares it; first message is an automation context pre-supplying inputs. Ambiguous → default interactive.
8

Detection

Headless when any of: caller sets headless: true (or harness equivalent); invocation is from another skill or non-interactive runner; {workflow.activation_steps_prepend} declares it; first message is an automation context pre-supplying inputs. Ambiguous → default interactive.

Raw lines 5 to 8
9## Inputs
11Free-form structured payload in the first message:
13- `intent` — `"create"`, `"update"`, or `"validate"`. If absent, infer from the artifact set.
14- **Create**: the ticket path (`initiative-*.md`, `epic-*.md`, `story-*.md`, `bug-*.md`, `spike-*.md`), read in full, or with no ticket a PRD, brief, requirements list, design-thinking output, or prior UX (text, path, or URL); plus brand / platform / accessibility notes; `doc_workspace` if a specific run folder is required.
15- **Update**: existing workspace containing `DESIGN.md` + `EXPERIENCE.md` (or path to either) + change signal.
16- **Validate**: existing workspace containing `DESIGN.md` + `EXPERIENCE.md` (or path to either). Workspace defaults to the spines' containing directory.
18Inferences → `assumptions[]`. Gaps needing a human decision → `open_questions[]`. Do not invent persona, brand, accessibility, or scope detail.
20Creative tools default off in headless. Caller can override; artifacts land in `.working/` and are not promoted unless the caller signals.

Inputs

Free-form structured payload in the first message:

  • intent — "create", "update", or "validate". If absent, infer from the artifact set.
  • Create: the ticket path (initiative-*.md, epic-*.md, story-*.md, bug-*.md, spike-*.md), read in full, or with no ticket a PRD, brief, requirements list, design-thinking output, or prior UX (text, path, or URL); plus brand / platform / accessibility notes; doc_workspace if a specific run folder is required.
  • Update: existing workspace containing DESIGN.md + EXPERIENCE.md (or path to either) + change signal.
  • Validate: existing workspace containing DESIGN.md + EXPERIENCE.md (or path to either). Workspace defaults to the spines' containing directory.

Inferences → assumptions[]. Gaps needing a human decision → open_questions[]. Do not invent persona, brand, accessibility, or scope detail.

Creative tools default off in headless. Caller can override; artifacts land in .working/ and are not promoted unless the caller signals.

Raw lines 9 to 21
22## Behavior
24Do not ask. Do not greet. Complete the intent from what's provided, what exists in `{doc_workspace}`, and any ticket under `{output_folder}/{active_initiative}/`, read in full. If intent stays ambiguous after inference, halt with `status: "blocked"` and a one-sentence `reason`.
26`status`:
27- `"complete"` — stands on its own.
28- `"partial"` — artifact produced but `open_questions[]` non-empty or critical inputs inferred.
29- `"blocked"` — no artifact produced.
31End with the JSON response (an example of each payload is in `assets/headless-schemas.md`). `intent` reflects detected intent. Omit keys for artifacts not produced.

Behavior

Do not ask. Do not greet. Complete the intent from what's provided, what exists in {doc_workspace}, and any ticket under {output_folder}/{active_initiative}/, read in full. If intent stays ambiguous after inference, halt with status: "blocked" and a one-sentence reason.

status:

  • "complete" — stands on its own.
  • "partial" — artifact produced but open_questions[] non-empty or critical inputs inferred.
  • "blocked" — no artifact produced.

End with the JSON response (an example of each payload is in assets/headless-schemas.md). intent reflects detected intent. Omit keys for artifacts not produced.

Raw lines 22 to 32
33## Mode-specific overrides
35**Update.** Apply the change. Log it via `uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type change --text "<change + rationale>"`. Surface conflicts in `conflicts_with_prior_decisions[]`.
37**Validate.** Always write both `validation-report.html` and `validation-report.md` regardless of finding count. Always include `"offer_to_update": true`. Skip the browser-open step.

Mode-specific overrides

Update. Apply the change. Log it via uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type change --text "<change + rationale>". Surface conflicts in conflicts_with_prior_decisions[].

Validate. Always write both validation-report.html and validation-report.md regardless of finding count. Always include "offer_to_update": true. Skip the browser-open step.

Raw lines 33 to 37
Runs code scripts/memlog.py :35