Skip to content

Config layers

Stock BMad already merges three files per skill. BGlad uses that stack for Jira and git-host fields (GitLab or GitHub).

flowchart TD
  skill["Skill customize.toml<br/>generic empty hosts"] --> company["_bmad/custom/bglad-ticket-mr.toml<br/>org overlay, committed"]
  company --> user["_bmad/custom/bglad-ticket-mr.user.toml<br/>identity, gitignored"]
  user --> run["Resolved workflow for this run"]

Merge rules: scalars replace, arrays append, tables deep-merge. A list in *.user.toml appends.

Run this from the directory that contains _bmad/ (the product folder, not a parent git root that has no _bmad).

Terminal window
uv run _bmad/scripts/resolve_customization.py \
--skill .agents/skills/bglad-ticket-mr \
--project-root . \
--key workflow
LayerFileContains
Skill default.agents/skills/bglad-ticket-mr/customize.tomlEmpty hosts, git_forge, squash, commit templates
Org overlay_bmad/custom/bglad-ticket-mr.tomlHosts, keys, spec_store, git_forge, [workflow.teams]
Person_bmad/custom/bglad-ticket-mr.user.tomlOptional. Install does not ask. “Me” is the Jira MCP or jira CLI, and glab or gh.

Install writes the org overlay when missing and never overwrites one that exists.

If Jira or git-host fields the current intent needs are empty, the ticket skill asks (it does not invent field ids or assume GitLab vs GitHub). Knowledge folder default is knowledge/ (bglad-knowledge knowledge_dir); override in bglad-how-we-work.local.md.

spec_store is on the org overlay. Jira specs need a Jira MCP or jira CLI; Confluence specs need a Confluence MCP or CLI. Markdown specs need neither.

Analysis/Dev clarify knobs on the same overlay: clarify_ping (description / comment / both), clarify_reassign_reporter, jira_waiting_status, jira_waiting_label. An empty label means do not add one.

When someone corrects an org or team value mid-session, the ticket skill asks once to write that key into the org overlay. A forge username goes in the user overlay. Do not also store it in personal memory. The org file needs a commit before the rest of the team gets it.

validate on the installer checks an existing overlay and does not change it: jira_host is a base URL, each team’s component and development team are non-empty, and configured doc paths exist.

git_forge is gitlab or github. Install infers github.com and gitlab.com from origin when it can. Other remotes stay empty until you set them.

A squad that needs different reviewers or extra facts uses Override defaults — same BMad merge, plus BGlad squad tables and bglad-how-we-work.local.md.