# DO NOT EDIT -- overwritten on every update. # # Workflow customization surface for bmad-prd. # # Override files (not edited here): # {project-root}/_bmad/custom/bmad-prd.toml (team) # {project-root}/_bmad/custom/bmad-prd.user.toml (personal) [workflow] # --- Configurable below. Overrides merge per BMad structural rules: --- # scalars: override wins • arrays: append # Steps to run before the standard activation (config load, greet). # Use for pre-flight loads, compliance checks, etc. activation_steps_prepend = [] # Steps to run after greet but before the workflow begins. # Use for context-heavy setup that should happen once the user has been acknowledged. activation_steps_append = [] # Persistent facts the workflow keeps in mind for the whole run # (standards, compliance constraints, stylistic guardrails). # Each entry is either a literal sentence, a skill prefixed with `skill:`, or a `file:`-prefixed path/glob # whose contents are loaded as facts. # # Default loads project-context.md if bmad-generate-project-context has produced one — this gives # the facilitator persistent awareness of the project's tech, domain, and constraints without # re-asking. Common opt-ins (set in team/user override TOML): # "skill:acme-co:terms-and-conditions" # a skill that contains some relevant info # "Investor PRDs must include a market sizing section." # generic agent instruction persistent_facts = [ "file:{project-root}/**/project-context.md", ] # Executed when the workflow completes (after the user has been told the # PRD is ready). Accepts either a string scalar (single instruction) # or an array of instructions executed in order. Empty for none. on_complete = "" # Default PRD structure. Treated as a starting point — the LLM adapts it # to the product, project type, and domain. Override the path in team/user TOML # to enforce a different structure (e.g. regulated-industry, internal-tool, investor-input). prd_template = "assets/prd-template.md" # PRD quality rubric used at the Validate intent and at Finalize step 3. # A subagent walks the rubric against prd.md and writes a substantive review # organized by quality dimensions (decision-readiness, substance, strategic # coherence, etc.). Override the path in team/user TOML to enforce an # org-specific rubric (regulated-industry compliance, investor-pitch standards, # etc.). The filename "checklist" is retained for back-compat with override # files; the content is a judgment rubric, not a boolean checklist. validation_checklist_template = "assets/prd-validation-checklist.md" # HTML skeleton the synthesis pass fills directly when consolidating reviewer # outputs into a validation report. No substitution engine — the parent LLM # reads every {doc_workspace}/review-*.md, fills the skeleton's TEMPLATE_* # placeholders, and writes the result. Fully overridable to match org branding. # Uses inline CSS, no external dependencies, and native HTML
for # collapse — no JS. validation_report_template = "assets/validation-report-template.html" # Run folder location. The PRD, optional addendum, decision log, and optional # validation report all land inside `{prd_output_path}/{run_folder_pattern}/`. # Resume-check scans `{prd_output_path}` for prior unfinished runs. prd_output_path = "{planning_artifacts}/prds" run_folder_pattern = "prd-{project_name}-{date}" # Document standards applied to human-consumed docs at finalize. Each entry is # a `skill:`, `file:`, or plain-text directive; the parent LLM applies the # findings before the user sees the draft. Encodes standards, not options. # # Examples: # "skill:bmad-editorial-review-prose" # "file:{project-root}/_bmad/style-guides/company-voice.md" # "Convert all dates to ISO 8601 format." # # Suggested order (broader passes first, narrower last): # 1. Structural (cuts, reorganization, section sizing) # 2. Content/voice/conventions (org standards, tone, terminology, compliance) # 3. Prose mechanics (grammar, clarity, typos) # # Override the array in team/user TOML to add additional standards. Append-only: # base entries cannot be removed or replaced (resolver has no removal mechanism). doc_standards = [ "skill:bmad-editorial-review-structure", "skill:bmad-editorial-review-prose", ] # External-source registry. Natural-language directives describing knowledge # bases, MCP tools, or internal systems the LLM may consult during the workflow # when a relevant need surfaces. The LLM does NOT query these preemptively — # it consults them on demand (during Discovery, validation, drafting, etc.). # Each entry names the tool, the conditions for using it, and any fields the # tool needs. If a named MCP tool is unavailable at runtime, the LLM falls # back to standard behavior and notes the gap. Empty by default. # # Lifecycle note: distinct from persistent_facts. persistent_facts are loaded # once at activation and kept in mind for the whole run; external_sources are # a registry consulted on demand and only when the conversation surfaces a # matching need. # # Examples (set in team/user override TOML): # "When researching internal product context, consult corp:kb_search (database='product-docs') before web search." # "For competitive landscape during Discovery, query corp:competitive_db with category={project_name}." # "When validating domain-compliance claims, cross-check against corp:hipaa_reference for healthcare or corp:pci_reference for fintech." external_sources = [] # External-handoff routing. Natural-language directives the LLM applies at # Finalize to route outputs beyond local files (Confluence, Notion, Google # Drive, ticket systems, etc.). Each entry names the MCP tool, the destination, # and the fields the tool needs. Handoffs run after the artifact is polished # and before the final user-facing message. URLs or IDs returned by the # destination are captured and surfaced to the user. If a named tool is # unavailable at runtime, the handoff is skipped and flagged in the JSON # status; local files always exist regardless. Fires automatically — users # can opt out in their prompt for a specific run. Empty by default. # # Lifecycle note: distinct from persistent_facts and external_sources. # Fired once at Finalize step 6, never during Discovery or drafting. # # Examples (set in team/user override TOML): # "After finalize, upload prd.md and addendum.md to Confluence via corp:confluence_upload (space_key='PROD', parent_page='PRDs', label='prd', author={user_name})." # "Mirror the PRD to Notion via notion:create_page (database_id='abc123', title='PRD: '+{project_name})." # "When the PRD references a parent initiative, link via corp:jira_link on the epic key in frontmatter." external_handoffs = [] # --- Finalize reviewers --- # Reviewers spawned at Finalize step 3 (and at the Validate intent) alongside # the structural checklist validator. The authoring skill assembles the gate # menu (validator + these reviewers + any ad-hoc reviewers it judges warranted # by the artifact content) and lets the user pick all, a subset, or skip. Gate # UX is stakes-calibrated: hobby/solo scope may run defaults quietly or skip; # higher stakes get the explicit menu. # # Entries follow the standard prefix convention (same as persistent_facts and # doc_standards): # "skill:NAME" invoke the named review skill as a subagent against prd.md # "file:PATH" load the file as a review prompt; spawn an adversarial # subagent applying that prompt to prd.md # plain text use the text directly as the subagent's review prompt # # Override TOML may append additional reviewers. Arrays append per BMad rules. # # Resolved on-demand by the authoring skill (not pulled at activation): only # when entering the Validate intent or assembling the gate at Finalize step 3. finalize_reviewers = []