Skip to content

feat(skills): add TOML-based skill customization system#28

Closed
bmadcode wants to merge 6 commits intomainfrom
skill-customization
Closed

feat(skills): add TOML-based skill customization system#28
bmadcode wants to merge 6 commits intomainfrom
skill-customization

Conversation

@bmadcode
Copy link
Copy Markdown
Contributor

Summary

  • Add customize.toml to all 10 skills: 6 agents with full persona + metadata sections, 4 workflows with stock fields
  • Include resolve-customization.py script in each skill's scripts/ directory for three-layer TOML merge (user > team > defaults)
  • Add customization resolve and inject points to all workflow SKILL.md files

Part of the cross-module skill customization initiative. See bmad-code-org/BMAD-METHOD#2262 for the core implementation.

Test plan

  • Verify agent customize.toml persona data matches existing manifests
  • Verify resolve-customization.py runs and returns JSON for each skill
  • Verify SKILL.md inject points reference correct skill names

🤖 Generated with Claude Code

Add customize.toml to all 10 skills (6 agents with full persona + metadata,
4 workflows with stock fields). Include resolve-customization.py script in
each skill's scripts/ directory. Add customization resolve and inject points
to all workflow SKILL.md files.
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 14, 2026

Warning

Rate limit exceeded

@bmadcode has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 59 minutes and 59 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 59 minutes and 59 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a63d35be-3392-4404-bf68-0cde30bf2dc1

📥 Commits

Reviewing files that changed from the base of the PR and between 35f47c3 and 96a8bdb.

📒 Files selected for processing (30)
  • src/skills/bmad-cis-agent-brainstorming-coach/SKILL.md
  • src/skills/bmad-cis-agent-brainstorming-coach/customize.toml
  • src/skills/bmad-cis-agent-brainstorming-coach/scripts/resolve-customization.py
  • src/skills/bmad-cis-agent-creative-problem-solver/SKILL.md
  • src/skills/bmad-cis-agent-creative-problem-solver/customize.toml
  • src/skills/bmad-cis-agent-creative-problem-solver/scripts/resolve-customization.py
  • src/skills/bmad-cis-agent-design-thinking-coach/SKILL.md
  • src/skills/bmad-cis-agent-design-thinking-coach/customize.toml
  • src/skills/bmad-cis-agent-design-thinking-coach/scripts/resolve-customization.py
  • src/skills/bmad-cis-agent-innovation-strategist/SKILL.md
  • src/skills/bmad-cis-agent-innovation-strategist/customize.toml
  • src/skills/bmad-cis-agent-innovation-strategist/scripts/resolve-customization.py
  • src/skills/bmad-cis-agent-presentation-master/SKILL.md
  • src/skills/bmad-cis-agent-presentation-master/customize.toml
  • src/skills/bmad-cis-agent-presentation-master/scripts/resolve-customization.py
  • src/skills/bmad-cis-agent-storyteller/SKILL.md
  • src/skills/bmad-cis-agent-storyteller/customize.toml
  • src/skills/bmad-cis-agent-storyteller/scripts/resolve-customization.py
  • src/skills/bmad-cis-design-thinking/SKILL.md
  • src/skills/bmad-cis-design-thinking/customize.toml
  • src/skills/bmad-cis-design-thinking/scripts/resolve-customization.py
  • src/skills/bmad-cis-innovation-strategy/SKILL.md
  • src/skills/bmad-cis-innovation-strategy/customize.toml
  • src/skills/bmad-cis-innovation-strategy/scripts/resolve-customization.py
  • src/skills/bmad-cis-problem-solving/SKILL.md
  • src/skills/bmad-cis-problem-solving/customize.toml
  • src/skills/bmad-cis-problem-solving/scripts/resolve-customization.py
  • src/skills/bmad-cis-storytelling/SKILL.md
  • src/skills/bmad-cis-storytelling/customize.toml
  • src/skills/bmad-cis-storytelling/scripts/resolve-customization.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch skill-customization

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@augmentcode
Copy link
Copy Markdown

augmentcode bot commented Apr 14, 2026

🤖 Augment PR Summary

Summary: This PR introduces a TOML-driven customization layer for CIS skills so teams and individuals can override default skill metadata/personas and workflow inject points.

Changes:

  • Added customize.toml defaults to 10 skills (6 agents, 4 workflows), defining customizable fields like additional_resources and inject.before/after (plus agent metadata/persona).
  • Added a per-skill scripts/resolve-customization.py that loads defaults plus optional team/user overrides from _bmad/customizations/ and outputs merged JSON.
  • Implemented a recursive deep-merge strategy with special handling for [[menu]] arrays (merge by code), while other arrays replace atomically.
  • Updated workflow SKILL.md files to document when/how to resolve and apply inject and additional_resources before running the workflow.
  • Added post-workflow guidance to resolve and apply inject.after as a final checklist/validation gate.

Technical Notes: Resolver searches for the project root by walking up to a directory containing _bmad/ or .git, and supports resolving either the full merged document or specific dotted keys via --key.

🤖 Was this summary useful? React with 👍 or 👎

Copy link
Copy Markdown

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 2 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

with open(path, "rb") as f:
return tomllib.load(f)
except Exception as exc:
print(f"warning: failed to parse {path}: {exc}", file=sys.stderr)
Copy link
Copy Markdown

@augmentcode augmentcode bot Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

load_toml() returns {} on parse errors (and on missing files), so a malformed override (or an unexpectedly missing defaults file) can silently produce “valid” merged JSON while exiting 0. Consider failing fast (non-zero exit) for these cases so customization mistakes don’t get silently ignored.

Severity: medium

Other Locations
  • src/skills/bmad-cis-agent-creative-problem-solver/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-agent-design-thinking-coach/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-agent-innovation-strategist/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-agent-presentation-master/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-agent-storyteller/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-design-thinking/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-innovation-strategy/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-problem-solving/scripts/resolve-customization.py:51
  • src/skills/bmad-cis-storytelling/scripts/resolve-customization.py:51

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.


def merge_menu(base: list[dict], override: list[dict]) -> list[dict]:
"""Merge-by-code: matching codes replace; new codes append."""
result_by_code: dict[str, dict] = {item["code"]: dict(item) for item in base}
Copy link
Copy Markdown

@augmentcode augmentcode bot Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_is_menu_array() only checks the first element for a code key, but merge_menu() assumes every element has item["code"], which can raise KeyError and crash on partially malformed [[menu]] arrays. Consider validating all items (or handling missing code) to make the merge behavior robust.

Severity: low

Other Locations
  • src/skills/bmad-cis-agent-creative-problem-solver/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-agent-design-thinking-coach/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-agent-innovation-strategist/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-agent-presentation-master/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-agent-storyteller/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-design-thinking/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-innovation-strategy/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-problem-solving/scripts/resolve-customization.py:71
  • src/skills/bmad-cis-storytelling/scripts/resolve-customization.py:71

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Change except Exception to except (tomllib.TOMLDecodeError, OSError)
for clearer failure signaling in user-facing tooling.
Refactor all 6 CIS agent SKILL.md files to resolve persona, inject,
additional_resources, and menu from customize.toml at activation.
Remove hardcoded Identity, Communication Style, and Principles sections.
- Drop ./ prefix from script paths (use scripts/ not ./scripts/)
- Use python3 instead of python for explicitness
- Add Available Scripts listing to all SKILL.md files
- Fix merge_menu KeyError crash when menu items missing 'code' key
- Fix _is_menu_array to check ALL elements, not just first
- Remove unused import os from resolve-customization.py
- Remove inject.after from agent activation and customize.toml
- Add type: ignore[arg-type] to merge_menu call (Pylance narrowing limitation)
- Reword inject.before in workflows: "prepend to active instructions and follow it"
- Reword inject.after in workflows: "append to active instructions and follow it"
- Make additional_resources lazy: note list but don't eagerly load
@bmadcode
Copy link
Copy Markdown
Contributor Author

Closing - skill customization consolidating to bmad-bmm only

@bmadcode bmadcode closed this Apr 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant