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).
uv run _bmad/scripts/resolve_customization.py \ --skill .agents/skills/bglad-ticket-mr \ --project-root . \ --key workflow| Layer | File | Contains |
|---|---|---|
| Skill default | .agents/skills/bglad-ticket-mr/customize.toml | Empty hosts, git_forge, squash, commit templates |
| Org overlay | _bmad/custom/bglad-ticket-mr.toml | Hosts, keys, spec_store, git_forge, [workflow.teams] |
| Person | _bmad/custom/bglad-ticket-mr.user.toml | Optional. 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.