Summary
When installing a custom module via --custom-source ./my-module, the installer deploys skills from the module's skills/ directory but ignores the custom/ directory. Team TOML overrides (agent/workflow customizations) are not copied to _bmad/custom/.
Current behavior
npx bmad-method install --custom-source ./ea-sdlc
Deploys: ea-sdlc/skills/* to IDE skill directories (OK)
Does NOT deploy: ea-sdlc/custom/*.toml to _bmad/custom/ (missing)
Expected behavior
If the custom-source module contains a custom/ directory with .toml files, the installer should copy them to _bmad/custom/ (without overwriting .user.toml files).
Workaround
Custom modules must ship their own post-install script that copies TOML overrides manually. For example, ea-sdlc has a deployTomlOverrides() function in its setup script for this purpose.
Why it matters
The three-layer customization system ({skill-root}/customize.toml -> _bmad/custom/{name}.toml -> .user.toml) works correctly at runtime via resolve_customization.py. But there is no built-in mechanism to populate the team layer from a custom module - this is a gap in the installer's responsibility.
Modules that need to override agent behavior (activation_steps_prepend, persistent_facts, finalize_reviewers, etc.) currently have no way to deploy those overrides without a separate post-install step.
Summary
When installing a custom module via
--custom-source ./my-module, the installer deploys skills from the module'sskills/directory but ignores thecustom/directory. Team TOML overrides (agent/workflow customizations) are not copied to_bmad/custom/.Current behavior
Deploys:
ea-sdlc/skills/*to IDE skill directories (OK)Does NOT deploy:
ea-sdlc/custom/*.tomlto_bmad/custom/(missing)Expected behavior
If the custom-source module contains a
custom/directory with.tomlfiles, the installer should copy them to_bmad/custom/(without overwriting.user.tomlfiles).Workaround
Custom modules must ship their own post-install script that copies TOML overrides manually. For example, ea-sdlc has a
deployTomlOverrides()function in its setup script for this purpose.Why it matters
The three-layer customization system (
{skill-root}/customize.toml->_bmad/custom/{name}.toml->.user.toml) works correctly at runtime viaresolve_customization.py. But there is no built-in mechanism to populate the team layer from a custom module - this is a gap in the installer's responsibility.Modules that need to override agent behavior (activation_steps_prepend, persistent_facts, finalize_reviewers, etc.) currently have no way to deploy those overrides without a separate post-install step.