diff --git a/src/agents/gds-agent-game-architect/SKILL.md b/src/agents/gds-agent-game-architect/SKILL.md
index 7b29438..edb12e1 100644
--- a/src/agents/gds-agent-game-architect/SKILL.md
+++ b/src/agents/gds-agent-game-architect/SKILL.md
@@ -20,7 +20,7 @@ You are Cloud Dragonborn, the Game Architect. You design scalable game architect
### Step 1: Resolve the Agent Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key agent`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key agent`
**If the script fails**, resolve the `agent` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/agents/gds-agent-game-designer/SKILL.md b/src/agents/gds-agent-game-designer/SKILL.md
index 6a0888f..26e6cf8 100644
--- a/src/agents/gds-agent-game-designer/SKILL.md
+++ b/src/agents/gds-agent-game-designer/SKILL.md
@@ -20,7 +20,7 @@ You are Samus Shepard, the Game Designer. You drive creative vision, game design
### Step 1: Resolve the Agent Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key agent`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key agent`
**If the script fails**, resolve the `agent` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/agents/gds-agent-game-dev/SKILL.md b/src/agents/gds-agent-game-dev/SKILL.md
index 12a43c7..38a8651 100644
--- a/src/agents/gds-agent-game-dev/SKILL.md
+++ b/src/agents/gds-agent-game-dev/SKILL.md
@@ -22,7 +22,7 @@ You are Link Freeman, the Game Developer. You implement features, execute dev st
### Step 1: Resolve the Agent Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key agent`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key agent`
**If the script fails**, resolve the `agent` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/agents/gds-agent-game-solo-dev/SKILL.md b/src/agents/gds-agent-game-solo-dev/SKILL.md
index 1278b71..9f08a5a 100644
--- a/src/agents/gds-agent-game-solo-dev/SKILL.md
+++ b/src/agents/gds-agent-game-solo-dev/SKILL.md
@@ -20,7 +20,7 @@ You are Indie, the Game Solo Dev. You ship complete games from concept to launch
### Step 1: Resolve the Agent Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key agent`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key agent`
**If the script fails**, resolve the `agent` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/agents/gds-agent-tech-writer/SKILL.md b/src/agents/gds-agent-tech-writer/SKILL.md
index 5102970..5fd1cd1 100644
--- a/src/agents/gds-agent-tech-writer/SKILL.md
+++ b/src/agents/gds-agent-tech-writer/SKILL.md
@@ -20,7 +20,7 @@ You are Paige, the Technical Writer. You transform complex game development conc
### Step 1: Resolve the Agent Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key agent`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key agent`
**If the script fails**, resolve the `agent` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md b/src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md
index 464a969..61fa7c8 100644
--- a/src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md
+++ b/src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md
@@ -22,7 +22,7 @@ description: 'Facilitate game brainstorming sessions with game-specific techniqu
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/1-preproduction/gds-brainstorm-game/steps/step-04-complete.md b/src/workflows/1-preproduction/gds-brainstorm-game/steps/step-04-complete.md
index 91f6a74..8f7ddca 100644
--- a/src/workflows/1-preproduction/gds-brainstorm-game/steps/step-04-complete.md
+++ b/src/workflows/1-preproduction/gds-brainstorm-game/steps/step-04-complete.md
@@ -277,6 +277,6 @@ This step-file architecture ensures consistent, creative brainstorming with user
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/1-preproduction/gds-create-game-brief/SKILL.md b/src/workflows/1-preproduction/gds-create-game-brief/SKILL.md
index 2d841fa..69ea5b3 100644
--- a/src/workflows/1-preproduction/gds-create-game-brief/SKILL.md
+++ b/src/workflows/1-preproduction/gds-create-game-brief/SKILL.md
@@ -15,7 +15,7 @@ At the opening greeting, let the user know they can invoke `bmad-party-mode` for
## On Activation
-1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly and use defaults.
+1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly and use defaults.
2. Execute each entry in `{workflow.activation_steps_prepend}` in order.
3. Treat every entry in `{workflow.persistent_facts}` as foundational context for the rest of the run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.
4. `{workflow.external_sources}` is an org-configured registry of internal tools (knowledge bases, MCP tools); consult them alongside generic web research on the same triggers in `## Discovery`, org tools preferred when their directive matches. If a named tool is unavailable at runtime, fall back to standard behavior and note the gap when relevant.
diff --git a/src/workflows/1-preproduction/research/gds-domain-research/SKILL.md b/src/workflows/1-preproduction/research/gds-domain-research/SKILL.md
index 67f176a..9caf81b 100644
--- a/src/workflows/1-preproduction/research/gds-domain-research/SKILL.md
+++ b/src/workflows/1-preproduction/research/gds-domain-research/SKILL.md
@@ -20,7 +20,7 @@ description: 'Conduct game domain and industry research. Use when the user says
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/1-preproduction/research/gds-domain-research/domain-steps/step-06-research-synthesis.md b/src/workflows/1-preproduction/research/gds-domain-research/domain-steps/step-06-research-synthesis.md
index 8f20100..4a62d9e 100644
--- a/src/workflows/1-preproduction/research/gds-domain-research/domain-steps/step-06-research-synthesis.md
+++ b/src/workflows/1-preproduction/research/gds-domain-research/domain-steps/step-06-research-synthesis.md
@@ -446,6 +446,6 @@ Congratulations on completing comprehensive game domain research!
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/2-design/gds-create-narrative/SKILL.md b/src/workflows/2-design/gds-create-narrative/SKILL.md
index c3d5283..b7c6229 100644
--- a/src/workflows/2-design/gds-create-narrative/SKILL.md
+++ b/src/workflows/2-design/gds-create-narrative/SKILL.md
@@ -22,7 +22,7 @@ description: 'Create comprehensive narrative documentation with story structure
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/2-design/gds-create-narrative/steps/step-11-complete.md b/src/workflows/2-design/gds-create-narrative/steps/step-11-complete.md
index 81680cc..65cd04f 100644
--- a/src/workflows/2-design/gds-create-narrative/steps/step-11-complete.md
+++ b/src/workflows/2-design/gds-create-narrative/steps/step-11-complete.md
@@ -333,6 +333,6 @@ This step-file architecture ensures consistent, thorough narrative design with u
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/2-design/gds-gdd/SKILL.md b/src/workflows/2-design/gds-gdd/SKILL.md
index a7fd685..59e734d 100644
--- a/src/workflows/2-design/gds-gdd/SKILL.md
+++ b/src/workflows/2-design/gds-gdd/SKILL.md
@@ -21,7 +21,7 @@ At the opening greeting, let the user know they can invoke the skills `bmad-part
## On Activation
-1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, surface the diagnostic and halt.
+1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`. On failure, surface the diagnostic and halt.
2. Execute each entry in `{workflow.activation_steps_prepend}` in order.
3. Treat every entry in `{workflow.persistent_facts}` as foundational context. Entries prefixed `file:` are paths or globs under `{project-root}` — load their contents as facts. All others are facts verbatim.
4. Note `{workflow.external_sources}` as a registry to consult on demand when the conversation surfaces a relevant need. Do not query preemptively. If a named tool is unavailable at runtime, fall back to standard behavior and note the gap.
diff --git a/src/workflows/2-design/gds-prd/SKILL.md b/src/workflows/2-design/gds-prd/SKILL.md
index 53fdea8..869153b 100644
--- a/src/workflows/2-design/gds-prd/SKILL.md
+++ b/src/workflows/2-design/gds-prd/SKILL.md
@@ -31,7 +31,7 @@ You are a facilitator, not a form. The user is the author; you are the structure
## On Activation
-1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly and proceed with its values.
+1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly and proceed with its values.
2. Execute each entry in `{workflow.activation_steps_prepend}` in order.
3. Treat every entry in `{workflow.persistent_facts}` as foundational context. Entries prefixed `file:` are paths or globs under `{project-root}` — load their contents as facts. All others are facts verbatim.
4. Note `{workflow.external_sources}` as a registry to consult on demand when the conversation surfaces a relevant need. Do not query preemptively. If a named tool is unavailable at runtime, fall back to standard behavior and note the gap.
diff --git a/src/workflows/2-design/gds-ux/SKILL.md b/src/workflows/2-design/gds-ux/SKILL.md
index e2d1f1e..33a9848 100644
--- a/src/workflows/2-design/gds-ux/SKILL.md
+++ b/src/workflows/2-design/gds-ux/SKILL.md
@@ -33,7 +33,7 @@ UX may lead, follow, or stand alone. Inherit `sources:` by reference; the spines
## On Activation
-1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly and use defaults.
+1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly and use defaults.
2. Run `{workflow.activation_steps_prepend}`. Treat `{workflow.persistent_facts}` as foundational context (entries prefixed `file:` are loaded). `{workflow.external_sources}` is an org-configured registry of internal tools; consult them alongside generic web research on the same triggers, org tools preferred when their directive matches.
3. Load `{project-root}/_bmad/gds/config.yaml` (+ `config.user.yaml` if present). Resolve `{user_name}`, `{communication_language}`, `{document_output_language}`, `{planning_artifacts}`, `{project_name}`, `{date}`. Missing keys → neutral defaults; never block.
4. If headless, follow `references/headless.md` for the whole run. Otherwise greet the user **by name** using `{user_name}` and **in their language** using `{communication_language}` — and stay in `{communication_language}` for every turn. In the greeting, let the user know `bmad-party-mode` and `bmad-advanced-elicitation` are always available. Then scan for misroute on the first message: PRD → `gds-prd`; architecture → `gds-game-architecture`; narrative → `gds-create-narrative`; GDD → `gds-gdd`.
diff --git a/src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md b/src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md
index d52799b..e3e7109 100644
--- a/src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md
+++ b/src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md
@@ -20,7 +20,7 @@ description: 'Verify GDD, UX, Architecture, and Epics alignment before productio
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/3-technical/gds-check-implementation-readiness/steps/step-06-final-assessment.md b/src/workflows/3-technical/gds-check-implementation-readiness/steps/step-06-final-assessment.md
index ae0fb49..1408c88 100644
--- a/src/workflows/3-technical/gds-check-implementation-readiness/steps/step-06-final-assessment.md
+++ b/src/workflows/3-technical/gds-check-implementation-readiness/steps/step-06-final-assessment.md
@@ -130,6 +130,6 @@ Implementation Readiness complete. Invoke the `gds-help` skill.
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md b/src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md
index 44f6146..c9b3ba1 100644
--- a/src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md
+++ b/src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md
@@ -22,7 +22,7 @@ description: 'Create Epics and Stories from GDD requirements for development. Us
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/3-technical/gds-create-epics-and-stories/steps/step-04-final-validation.md b/src/workflows/3-technical/gds-create-epics-and-stories/steps/step-04-final-validation.md
index 2e28ffc..90acea7 100644
--- a/src/workflows/3-technical/gds-create-epics-and-stories/steps/step-04-final-validation.md
+++ b/src/workflows/3-technical/gds-create-epics-and-stories/steps/step-04-final-validation.md
@@ -156,6 +156,6 @@ Upon Completion of task output: offer to answer any questions about the Epics an
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/3-technical/gds-game-architecture/SKILL.md b/src/workflows/3-technical/gds-game-architecture/SKILL.md
index bf25eb1..7f9b0f3 100644
--- a/src/workflows/3-technical/gds-game-architecture/SKILL.md
+++ b/src/workflows/3-technical/gds-game-architecture/SKILL.md
@@ -22,7 +22,7 @@ description: 'Design scale-adaptive game architecture with engine systems and ne
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/3-technical/gds-game-architecture/steps/step-09-complete.md b/src/workflows/3-technical/gds-game-architecture/steps/step-09-complete.md
index 4750278..26a9364 100644
--- a/src/workflows/3-technical/gds-game-architecture/steps/step-09-complete.md
+++ b/src/workflows/3-technical/gds-game-architecture/steps/step-09-complete.md
@@ -376,6 +376,6 @@ This step-file architecture ensures consistent, thorough architecture creation w
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/3-technical/gds-generate-project-context/SKILL.md b/src/workflows/3-technical/gds-generate-project-context/SKILL.md
index d16e51a..62035b3 100644
--- a/src/workflows/3-technical/gds-generate-project-context/SKILL.md
+++ b/src/workflows/3-technical/gds-generate-project-context/SKILL.md
@@ -22,7 +22,7 @@ description: 'Create optimized project-context.md for AI agent consistency. Use
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/3-technical/gds-generate-project-context/steps/step-03-complete.md b/src/workflows/3-technical/gds-generate-project-context/steps/step-03-complete.md
index 7cfd6b9..a64265c 100644
--- a/src/workflows/3-technical/gds-generate-project-context/steps/step-03-complete.md
+++ b/src/workflows/3-technical/gds-generate-project-context/steps/step-03-complete.md
@@ -281,6 +281,6 @@ The project context file serves as the critical "rules of the road" that agents
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/4-production/gds-code-review/SKILL.md b/src/workflows/4-production/gds-code-review/SKILL.md
index 434a60e..cda781c 100644
--- a/src/workflows/4-production/gds-code-review/SKILL.md
+++ b/src/workflows/4-production/gds-code-review/SKILL.md
@@ -20,7 +20,7 @@ description: 'Review code changes adversarially using parallel review layers (Bl
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/4-production/gds-code-review/steps/step-04-present.md b/src/workflows/4-production/gds-code-review/steps/step-04-present.md
index 5ad0e94..511745c 100644
--- a/src/workflows/4-production/gds-code-review/steps/step-04-present.md
+++ b/src/workflows/4-production/gds-code-review/steps/step-04-present.md
@@ -127,6 +127,6 @@ Present the user with follow-up options:
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/4-production/gds-correct-course/SKILL.md b/src/workflows/4-production/gds-correct-course/SKILL.md
index 112be0e..63fef08 100644
--- a/src/workflows/4-production/gds-correct-course/SKILL.md
+++ b/src/workflows/4-production/gds-correct-course/SKILL.md
@@ -20,7 +20,7 @@ description: 'Manage significant changes during sprint execution. Use when the u
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -309,7 +309,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
Report workflow completion to user with personalized message: "Correct Course workflow complete, {user_name}!"
Remind user of success criteria and next steps for Developer agent
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/4-production/gds-create-story/SKILL.md b/src/workflows/4-production/gds-create-story/SKILL.md
index e5254b2..f6f0267 100644
--- a/src/workflows/4-production/gds-create-story/SKILL.md
+++ b/src/workflows/4-production/gds-create-story/SKILL.md
@@ -52,7 +52,7 @@ description: 'Creates a dedicated story file with all the context the agent will
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -450,7 +450,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
**The developer now has everything needed for flawless implementation!**
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/4-production/gds-dev-story/SKILL.md b/src/workflows/4-production/gds-dev-story/SKILL.md
index 23f7f0e..c6fcfed 100644
--- a/src/workflows/4-production/gds-dev-story/SKILL.md
+++ b/src/workflows/4-production/gds-dev-story/SKILL.md
@@ -39,7 +39,7 @@ description: 'Execute story implementation following a context filled story spec
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -513,7 +513,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
Suggest checking {sprint_status} to see project progress
Remain flexible - allow user to choose their own path or ask for other assistance
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/4-production/gds-investigate/SKILL.md b/src/workflows/4-production/gds-investigate/SKILL.md
index 6ebb5bd..1e4ee73 100644
--- a/src/workflows/4-production/gds-investigate/SKILL.md
+++ b/src/workflows/4-production/gds-investigate/SKILL.md
@@ -52,7 +52,7 @@ After every outcome, present what was learned and pause for the user before cont
### Step 1: Resolve the workflow block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
If the script fails, stop and surface the error.
diff --git a/src/workflows/4-production/gds-retrospective/SKILL.md b/src/workflows/4-production/gds-retrospective/SKILL.md
index 0378d99..c25eb83 100644
--- a/src/workflows/4-production/gds-retrospective/SKILL.md
+++ b/src/workflows/4-production/gds-retrospective/SKILL.md
@@ -63,7 +63,7 @@ description: 'Post-epic review to extract lessons and assess success. Use when t
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -1499,7 +1499,7 @@ Alice (Product Owner): "See you at epic planning!"
Charlie (Senior Dev): "Time to knock out that prep work."
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/4-production/gds-sprint-planning/SKILL.md b/src/workflows/4-production/gds-sprint-planning/SKILL.md
index 4c34efe..c600594 100644
--- a/src/workflows/4-production/gds-sprint-planning/SKILL.md
+++ b/src/workflows/4-production/gds-sprint-planning/SKILL.md
@@ -43,7 +43,7 @@ description: 'Generate sprint status tracking from epics. Use when the user says
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -255,7 +255,7 @@ development_status:
2. Use this file to track development progress
3. Agents will update statuses as they work
4. Re-run this workflow to refresh auto-detected statuses
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/4-production/gds-sprint-status/SKILL.md b/src/workflows/4-production/gds-sprint-status/SKILL.md
index a9a4bdc..fc18042 100644
--- a/src/workflows/4-production/gds-sprint-status/SKILL.md
+++ b/src/workflows/4-production/gds-sprint-status/SKILL.md
@@ -37,7 +37,7 @@ description: 'Summarize sprint status and surface risks. Use when the user says
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -228,7 +228,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted.
Exit workflow
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
@@ -252,7 +252,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted.
risks = {{risks}}
Return to caller
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
@@ -300,7 +300,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted.
is_valid = true
message = "sprint-status.yaml valid: metadata complete, all statuses recognized"
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gametest/gds-e2e-scaffold/SKILL.md b/src/workflows/gametest/gds-e2e-scaffold/SKILL.md
index 12e4ad2..5bd4689 100644
--- a/src/workflows/gametest/gds-e2e-scaffold/SKILL.md
+++ b/src/workflows/gametest/gds-e2e-scaffold/SKILL.md
@@ -22,7 +22,7 @@ description: 'Scaffold end-to-end testing infrastructure. Use when the user says
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -298,7 +298,7 @@ Tests/PlayMode/E2E/ (Unity)
5. Use `automate` workflow to generate E2E tests from scenarios
```
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gametest/gds-performance-test/SKILL.md b/src/workflows/gametest/gds-performance-test/SKILL.md
index 88037a4..1932d2f 100644
--- a/src/workflows/gametest/gds-performance-test/SKILL.md
+++ b/src/workflows/gametest/gds-performance-test/SKILL.md
@@ -22,7 +22,7 @@ description: 'Design game performance testing strategy. Use when the user says "
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -374,7 +374,7 @@ func test_performance_entity_stress():
Load and apply `{validation}` checklist to verify all deliverables are complete
Present a summary of what was produced and the recommended next steps to the user
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gametest/gds-playtest-plan/SKILL.md b/src/workflows/gametest/gds-playtest-plan/SKILL.md
index 0cc0ef5..cc696d3 100644
--- a/src/workflows/gametest/gds-playtest-plan/SKILL.md
+++ b/src/workflows/gametest/gds-playtest-plan/SKILL.md
@@ -19,7 +19,7 @@ description: 'Create structured playtesting plans for user feedback. Use when th
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -388,6 +388,6 @@ Refer to `checklist.md` for validation criteria.
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gametest/gds-test-automate/SKILL.md b/src/workflows/gametest/gds-test-automate/SKILL.md
index 5ab712f..ec31cc5 100644
--- a/src/workflows/gametest/gds-test-automate/SKILL.md
+++ b/src/workflows/gametest/gds-test-automate/SKILL.md
@@ -22,7 +22,7 @@ description: 'Generate automated game tests for gameplay systems. Use when the u
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -383,7 +383,7 @@ public IEnumerator Smoke_NewGame_StartsSuccessfully()
Load and apply `{validation}` checklist to verify all deliverables are complete
Present the automation summary to the user
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gametest/gds-test-design/SKILL.md b/src/workflows/gametest/gds-test-design/SKILL.md
index 4c755b6..e65c6c3 100644
--- a/src/workflows/gametest/gds-test-design/SKILL.md
+++ b/src/workflows/gametest/gds-test-design/SKILL.md
@@ -19,7 +19,7 @@ description: 'Create comprehensive game test scenarios. Use when the user says "
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -423,6 +423,6 @@ Refer to `checklist.md` for validation criteria.
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gametest/gds-test-framework/SKILL.md b/src/workflows/gametest/gds-test-framework/SKILL.md
index 6cc0889..80a2e63 100644
--- a/src/workflows/gametest/gds-test-framework/SKILL.md
+++ b/src/workflows/gametest/gds-test-framework/SKILL.md
@@ -19,7 +19,7 @@ description: 'Initialize game test framework for Unity, Unreal, or Godot. Use wh
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -437,6 +437,6 @@ Refer to `checklist.md` for comprehensive validation criteria.
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gametest/gds-test-review/SKILL.md b/src/workflows/gametest/gds-test-review/SKILL.md
index 8a0a7f4..5607617 100644
--- a/src/workflows/gametest/gds-test-review/SKILL.md
+++ b/src/workflows/gametest/gds-test-review/SKILL.md
@@ -19,7 +19,7 @@ description: 'Review test quality and coverage. Use when the user says "test rev
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
@@ -358,6 +358,6 @@ Refer to `checklist.md` for validation criteria.
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gds-document-project/SKILL.md b/src/workflows/gds-document-project/SKILL.md
index ead67c4..7317780 100644
--- a/src/workflows/gds-document-project/SKILL.md
+++ b/src/workflows/gds-document-project/SKILL.md
@@ -31,7 +31,7 @@ description: 'Analyze existing game projects to produce useful documentation. Us
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/gds-document-project/instructions.md b/src/workflows/gds-document-project/instructions.md
index ec9efe3..338d4f7 100644
--- a/src/workflows/gds-document-project/instructions.md
+++ b/src/workflows/gds-document-project/instructions.md
@@ -215,7 +215,7 @@ Since no workflow is in progress:
- Or run `workflow-init` to create a workflow path and get guided next steps
{{/if}}
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gds-document-project/workflows/deep-dive-instructions.md b/src/workflows/gds-document-project/workflows/deep-dive-instructions.md
index 65ce824..d7ea281 100644
--- a/src/workflows/gds-document-project/workflows/deep-dive-instructions.md
+++ b/src/workflows/gds-document-project/workflows/deep-dive-instructions.md
@@ -290,7 +290,7 @@ These comprehensive docs are now ready for:
Thank you for using the document-project workflow!
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
Exit workflow
diff --git a/src/workflows/gds-document-project/workflows/full-scan-instructions.md b/src/workflows/gds-document-project/workflows/full-scan-instructions.md
index 1356c8a..0149891 100644
--- a/src/workflows/gds-document-project/workflows/full-scan-instructions.md
+++ b/src/workflows/gds-document-project/workflows/full-scan-instructions.md
@@ -1103,6 +1103,6 @@ When ready to plan new features, run the PRD workflow and provide this index as
Display: "State file saved: {{output_folder}}/project-scan-report.json"
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.
diff --git a/src/workflows/gds-quick-flow/gds-quick-dev/SKILL.md b/src/workflows/gds-quick-flow/gds-quick-dev/SKILL.md
index 3e51faf..eb2afab 100644
--- a/src/workflows/gds-quick-flow/gds-quick-dev/SKILL.md
+++ b/src/workflows/gds-quick-flow/gds-quick-dev/SKILL.md
@@ -20,7 +20,7 @@ description: 'Implements any user intent, requirement, story, bug fix or change
### Step 1: Resolve the Workflow Block
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
diff --git a/src/workflows/gds-quick-flow/gds-quick-dev/step-05-present.md b/src/workflows/gds-quick-flow/gds-quick-dev/step-05-present.md
index c3c7be9..43aa790 100644
--- a/src/workflows/gds-quick-flow/gds-quick-dev/step-05-present.md
+++ b/src/workflows/gds-quick-flow/gds-quick-dev/step-05-present.md
@@ -73,6 +73,6 @@ Workflow complete.
## On Complete
-Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
+Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.