ma-agents 3.5.6 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.ma-agents.json +10 -0
  2. package/AGENTS.md +97 -0
  3. package/MANIFEST.yaml +3 -0
  4. package/README.md +17 -0
  5. package/_bmad-output/implementation-artifacts/21-10-profile-reconfigure.md +30 -6
  6. package/_bmad-output/implementation-artifacts/21-11-profile-uninstall.md +2 -1
  7. package/_bmad-output/implementation-artifacts/21-2-universal-instruction-block-expansion.md +217 -62
  8. package/_bmad-output/implementation-artifacts/21-3-roomodes-template-bmad-modes.md +196 -73
  9. package/_bmad-output/implementation-artifacts/21-4-agents-md-template-opencode.md +242 -53
  10. package/_bmad-output/implementation-artifacts/21-5-clinerules-template-extension.md +180 -41
  11. package/_bmad-output/implementation-artifacts/21-6-onprem-layered-guardrails.md +250 -75
  12. package/_bmad-output/implementation-artifacts/21-7-bmad-persona-phase-prefix.md +221 -89
  13. package/_bmad-output/implementation-artifacts/21-8-vllm-reference-doc-readme.md +121 -63
  14. package/_bmad-output/implementation-artifacts/21-9-tests-validation.md +332 -61
  15. package/_bmad-output/implementation-artifacts/bug-bmad-recompile-fails-on-airgapped-network.md +112 -0
  16. package/_bmad-output/implementation-artifacts/sprint-status.yaml +3 -2
  17. package/bin/cli.js +59 -0
  18. package/docs/deployment/vllm-nemotron.md +130 -0
  19. package/lib/agents.js +17 -2
  20. package/lib/bmad-customize/bmm-analyst.customize.yaml +8 -0
  21. package/lib/bmad-customize/bmm-architect.customize.yaml +2 -0
  22. package/lib/bmad-customize/bmm-dev.customize.yaml +2 -0
  23. package/lib/bmad-customize/bmm-pm.customize.yaml +2 -0
  24. package/lib/bmad-customize/bmm-qa.customize.yaml +2 -0
  25. package/lib/bmad-customize/bmm-quick-flow-solo-dev.customize.yaml +8 -0
  26. package/lib/bmad-customize/bmm-sm.customize.yaml +2 -0
  27. package/lib/bmad-customize/bmm-tech-writer.customize.yaml +2 -0
  28. package/lib/bmad-customize/bmm-ux-designer.customize.yaml +2 -0
  29. package/lib/bmad.js +293 -1
  30. package/lib/installer.js +617 -43
  31. package/lib/merge/roomodes.js +125 -0
  32. package/lib/profile.js +25 -2
  33. package/lib/reconfigure.js +334 -0
  34. package/lib/templates/agents-md.template.md +67 -0
  35. package/lib/templates/clinerules.template.md +13 -0
  36. package/lib/templates/instruction-block-onprem.template.md +86 -0
  37. package/lib/templates/instruction-block-universal.template.md +29 -0
  38. package/lib/templates/roomodes.template.yaml +96 -0
  39. package/lib/uninstall.js +314 -0
  40. package/package.json +4 -3
  41. package/test/agents-md.test.js +398 -0
  42. package/test/bmad-extension.test.js +2 -2
  43. package/test/bmad-persona-phase-prefix.test.js +271 -0
  44. package/test/clinerules.test.js +339 -0
  45. package/test/instruction-block.test.js +388 -0
  46. package/test/integration-verification.test.js +2 -2
  47. package/test/migration-validation.test.js +2 -2
  48. package/test/offline-recompile.test.js +237 -0
  49. package/test/onprem-injection.test.js +425 -32
  50. package/test/onprem-layer.test.js +419 -0
  51. package/test/reconfigure.test.js +436 -0
  52. package/test/roomodes.test.js +343 -0
  53. package/test/uninstall.test.js +402 -0
package/bin/cli.js CHANGED
@@ -35,6 +35,8 @@ const fs = require('fs');
35
35
  const { execFileSync } = require('child_process');
36
36
  const { installSkill, uninstallSkill, getStatus, listSkills, listAgents, updateProjectContextRepoLayout } = require('../lib/installer');
37
37
  const { getProfile, setProfile, resolveProfile } = require('../lib/profile');
38
+ const { reconfigure: runReconfigure, ReconfigureYesRejectedError, ManifestNotFoundError, RoomodesSlugDivergenceError } = require('../lib/reconfigure');
39
+ const { uninstallProfileArtifacts } = require('../lib/uninstall');
38
40
  const bmad = require('../lib/bmad');
39
41
  const { getBmadPlatformCode } = require('../lib/agents');
40
42
  const { handleCreateSkill, handleValidateSkill, handleSetMandatory, handleCustomizeAgent, handleCreateAgent } = require('../lib/skill-authoring');
@@ -92,6 +94,7 @@ ${chalk.bold('Usage:')}
92
94
  ${chalk.cyan(`npx ${NAME} install`)} Interactive install wizard
93
95
  ${chalk.cyan(`npx ${NAME} install`)} <skill> <agents...> Install directly
94
96
  ${chalk.cyan(`npx ${NAME} uninstall`)} <skill> <agents..> Uninstall a skill
97
+ ${chalk.cyan(`npx ${NAME} uninstall --profile-artifacts`)} Remove ma-agents-owned profile content from all injection files
95
98
  ${chalk.cyan(`npx ${NAME} status`)} Show installed skills
96
99
  ${chalk.cyan(`npx ${NAME} list`)} List available skills
97
100
  ${chalk.cyan(`npx ${NAME} agents`)} List supported agents
@@ -100,6 +103,7 @@ ${chalk.bold('Usage:')}
100
103
  ${chalk.cyan(`npx ${NAME} set-mandatory`)} <name> [--off] Mark a skill as always-load (or remove)
101
104
  ${chalk.cyan(`npx ${NAME} customize-agent`)} <agent> Customize a BMAD agent persona and actions
102
105
  ${chalk.cyan(`npx ${NAME} create-agent`)} <name> Create a new specialized BMAD agent
106
+ ${chalk.cyan(`npx ${NAME} reconfigure`)} Re-run the profile prompt and re-stamp artifacts
103
107
  ${chalk.cyan(`npx ${NAME} config layout`)} Reconfigure repository layout
104
108
  ${chalk.cyan(`npx ${NAME} config layout --show`)} Show current layout (read-only)
105
109
  ${chalk.cyan(`npx ${NAME} help`)} Show this help
@@ -112,6 +116,18 @@ ${chalk.bold('Install options:')}
112
116
  ${chalk.cyan('--agent <name>')} Target a specific agent (skip agent selection)
113
117
  ${chalk.cyan('--log')} Log all console output to install_<datetime>.log
114
118
 
119
+ ${chalk.bold('Reconfigure options:')}
120
+ ${chalk.cyan('--force-roomodes-overwrite')} Accept slug-stomp on user-edited ma-agents slugs
121
+ ${chalk.gray('(reconfigure rejects --yes by design — it is interactive only)')}
122
+
123
+ ${chalk.bold('Uninstall --profile-artifacts options:')}
124
+ ${chalk.cyan('--yes')} Skip confirmation prompt (supported for CI decommissioning)
125
+ ${chalk.gray('(asymmetry note: uninstall --profile-artifacts accepts --yes; reconfigure does not)')}
126
+
127
+ ${chalk.bold('Notes:')}
128
+ Divergent \`.cline/clinerules.md\` vs. \`.clinerules\` marker blocks require
129
+ manual reconciliation — \`--yes\` does not bypass this check.
130
+
115
131
  ${chalk.bold('Examples:')}
116
132
  npx ${NAME} install
117
133
  npx ${NAME} install code-review claude-code
@@ -1197,6 +1213,20 @@ async function handleInstall(args) {
1197
1213
  }
1198
1214
 
1199
1215
  async function handleUninstall(args) {
1216
+ // Story 21.11 — if --profile-artifacts flag is present, route to uninstallProfileArtifacts.
1217
+ // --yes IS supported for profile-artifact uninstall (CI decommissioning use-case).
1218
+ // This is an intentional asymmetry vs. `reconfigure` which REJECTS --yes.
1219
+ if (args.includes('--profile-artifacts')) {
1220
+ const yesFlag = args.includes('--yes');
1221
+ try {
1222
+ await uninstallProfileArtifacts(process.cwd(), { yes: yesFlag });
1223
+ } catch (error) {
1224
+ console.error(chalk.red('\n Profile artifact uninstall failed:'), error.message);
1225
+ process.exit(1);
1226
+ }
1227
+ return;
1228
+ }
1229
+
1200
1230
  const { globalFlag, customPath, scope, positional } = parseFlags(args);
1201
1231
 
1202
1232
  const skillId = positional[0];
@@ -1281,6 +1311,32 @@ async function handleConfigLayout(args) {
1281
1311
  console.log(chalk.bold.green('\n Layout reconfigured!\n'));
1282
1312
  }
1283
1313
 
1314
+ // --- Profile reconfigure (Story 21.10) ---
1315
+ async function handleReconfigure(args) {
1316
+ try {
1317
+ await runReconfigure({ projectRoot: process.cwd(), argv: args });
1318
+ } catch (err) {
1319
+ if (err instanceof ReconfigureYesRejectedError) {
1320
+ console.error(chalk.red(err.message));
1321
+ process.exit(1);
1322
+ }
1323
+ if (err instanceof ManifestNotFoundError) {
1324
+ console.error(chalk.red(err.message));
1325
+ console.error(chalk.gray(' Hint: run `npx ma-agents install` before `reconfigure`.'));
1326
+ process.exit(1);
1327
+ }
1328
+ if (err instanceof RoomodesSlugDivergenceError) {
1329
+ console.error(chalk.red(err.message));
1330
+ process.exit(1);
1331
+ }
1332
+ if (err && err.name === 'ClinerulesDualFileDriftError') {
1333
+ console.error(chalk.red(err.message));
1334
+ process.exit(1);
1335
+ }
1336
+ throw err;
1337
+ }
1338
+ }
1339
+
1284
1340
  // --- Interactive mode ---
1285
1341
 
1286
1342
  async function interactiveMode() {
@@ -1385,6 +1441,9 @@ async function main() {
1385
1441
  process.exit(1);
1386
1442
  }
1387
1443
  break;
1444
+ case 'reconfigure':
1445
+ await handleReconfigure(args.slice(1));
1446
+ break;
1388
1447
  case 'help':
1389
1448
  case '--help':
1390
1449
  case '-h':
@@ -0,0 +1,130 @@
1
+ # vLLM Deployment Reference: Nemotron Super 49B
2
+
3
+ This document covers the recommended vLLM server configuration for running **Nvidia Nemotron Super 49B v1** (or similar Nemotron-class reasoning models) as the local LLM backend for `ma-agents` on-prem installations.
4
+
5
+ > **Scope:** This document is reference documentation for the human operator who runs the vLLM inference server. It is not stamped into target projects by the `ma-agents` installer (FR179). Agent-side guardrails are delivered by the on-prem instruction block (`lib/templates/instruction-block-onprem.template.md`) installed into each project's agent files.
6
+
7
+ ---
8
+
9
+ ## Recommended vLLM Flags
10
+
11
+ All five flags below are recommended for Nemotron Super 49B. Omitting any of them will degrade either correctness or stability.
12
+
13
+ ### `--enable-auto-tool-choice`
14
+
15
+ Enables automatic tool/function call parsing for supported models. Without this flag, vLLM treats model output as plain text and never extracts structured tool calls, causing the agent runtime to receive raw JSON embedded in prose rather than a parsed tool invocation. Required for any coding agent workflow that relies on file-editing or shell-execution tools.
16
+
17
+ ### `--tool-call-parser qwen3_coder`
18
+
19
+ Selects the Qwen3-Coder-compatible parser that correctly extracts structured tool calls from Nemotron's output format. Nemotron Super 49B uses the same tool-call serialization convention as the Qwen3-Coder family. Using the wrong parser (e.g., `hermes`) causes malformed or silently dropped tool calls.
20
+
21
+ ### `--max-model-len 32768`
22
+
23
+ Caps the context window at 32K tokens. This balances the KV-cache VRAM budget against coding task context requirements — sufficient for full repository context plus long multi-turn chats. Without an explicit cap, vLLM allocates KV-cache for the model's maximum trained length (often 128K+), exhausting VRAM before the first request completes on single-GPU configurations.
24
+
25
+ ### `--enforce-eager`
26
+
27
+ Disables CUDA graph capture. This eliminates the first-request latency spike (CUDA graph warm-up can take 30–90 seconds on large models) and resolves some multi-turn inference stability issues observed with Nemotron-class models. The trade-off is slightly lower sustained throughput on back-to-back short requests. For interactive coding agent use where latency-per-request matters more than throughput, `--enforce-eager` is the correct default.
28
+
29
+ ### `--trust-remote-code`
30
+
31
+ Required by the Nemotron Super 49B model class to load custom model code from the HuggingFace snapshot. Nemotron ships custom attention and RoPE scaling implementations that are not yet merged into the vLLM mainline. **Only set this flag when the model source is trusted** — for Nvidia's official HuggingFace repository (`nvidia/Nemotron-Super-49B-v1`) this is safe; for third-party forks, verify the model code before enabling.
32
+
33
+ ---
34
+
35
+ ## Sample `vllm serve` Command
36
+
37
+ Copy-paste-runnable launch command composing all recommended flags:
38
+
39
+ ```bash
40
+ vllm serve nvidia/Nemotron-Super-49B-v1 \
41
+ --enable-auto-tool-choice \
42
+ --tool-call-parser qwen3_coder \
43
+ --max-model-len 32768 \
44
+ --enforce-eager \
45
+ --trust-remote-code \
46
+ --dtype bfloat16
47
+ # Per-request sampling parameters are set client-side (see sampling table below):
48
+ # Planning phase: temperature=0.0, top_p=1.0
49
+ # Implementation phase: temperature=0.6, top_p=0.95
50
+ ```
51
+
52
+ > **Note on `--dtype`:** Use `bfloat16` for full-precision inference (requires 2× H100 80GB). For single-GPU deployments, substitute with `--quantization fp8` or `--quantization nvfp4` — see the quantization table below. Remove `--dtype bfloat16` when using a quantization flag, as they are mutually exclusive.
53
+
54
+ ---
55
+
56
+ ## Quantization Tradeoffs
57
+
58
+ | Quantization | Approx. VRAM (49B, single H100 80GB) | Instruction-Following Quality |
59
+ |---|---|---|
60
+ | BF16 | ~98 GB (requires 2× H100) | Best — full precision weights |
61
+ | FP8 | ~49 GB (fits 1× H100 80GB) | Near-BF16 — minor degradation on complex reasoning |
62
+ | NVFP4 | ~25 GB (fits 1× A100 40GB) | Acceptable — recommended starting point for constrained hardware; test instruction-following quality for your use-case |
63
+
64
+ > **Assumptions:** VRAM figures assume no KV-cache at model load time with `--max-model-len 32768`. Actual VRAM usage is higher at inference as KV-cache fills. Tensor-parallel configurations (e.g., `--tensor-parallel-size 2`) can distribute the model across multiple GPUs, enabling BF16 on 2× H100 80GB.
65
+
66
+ **Recommended starting point for constrained hardware:** NVFP4 on a single A100 40GB. Validate instruction-following quality for your specific task mix before using in production — planning-phase prompts (deterministic, `/no_think`) are typically less sensitive to quantization than implementation-phase prompts (reasoning ON).
67
+
68
+ ---
69
+
70
+ ## Reasoning Mode and `/no_think`
71
+
72
+ Nemotron Super 49B is a reasoning model. **Thinking mode is ON by default** — the model prefixes its response with an extended internal monologue (`<think>...</think>`) before producing its answer. For coding tasks, this improves output quality at the cost of higher token consumption and latency.
73
+
74
+ ### Disabling Reasoning for Planning Personas
75
+
76
+ Planning-phase agents (PM, Architect, Scrum Master, Analyst, Tech Writer, UX, QA) produce structured documents where extended reasoning adds latency without improving output quality — and where deterministic output (`temperature=0.0`) is preferred. To disable reasoning for these personas, prepend `/no_think` to the system prompt.
77
+
78
+ The `ma-agents` on-prem installer delivers `/no_think` in two places:
79
+
80
+ 1. **Per-agent system prompt prefix** — the BMAD persona phase-aware prefix (Story 21.7) prepends `/no_think` to the system prompt of all planning-phase personas at install time.
81
+ 2. **Per-tool instruction blocks** — `lib/templates/instruction-block-onprem.template.md` also injects `/no_think` into the per-tool instruction blocks stamped into `CLAUDE.md`, `.roo/rules/`, `.clinerules`, and `AGENTS.md` for planning-mode agents.
82
+
83
+ ### Retaining Reasoning for Implementation Personas
84
+
85
+ Reasoning mode is intentionally **left ON** for implementation personas (`bmm-dev`, `bmm-quick-flow-solo-dev`). The extended chain-of-thought improves code generation quality, catches edge cases, and produces more careful reasoning about algorithmic choices. The higher token cost is accepted for implementation tasks.
86
+
87
+ ---
88
+
89
+ ## Per-Phase Sampling Parameters
90
+
91
+ Sampling parameters are set client-side on each request (not in the `vllm serve` command). Configure your agent client or OpenAI-compatible API call accordingly.
92
+
93
+ | Phase | Temperature | top_p | Notes |
94
+ |---|---|---|---|
95
+ | Planning (PM, Architect, SM, Analyst, Tech Writer, UX, QA) | 0.0 | 1.0 | Deterministic — avoids hallucinated artifacts; use with `/no_think` |
96
+ | Implementation (Dev, Quick-Flow-Solo-Dev) | 0.6 | 0.95 | Allows creative solutions; reasoning ON |
97
+
98
+ > **Why `temperature=0.0` for planning?** Planning artifacts (PRDs, architecture docs, stories) must be reproducible across re-runs. Non-deterministic output at planning phase leads to artifact drift between sessions, which breaks BMAD-METHOD's assumption that prior context documents are stable. Setting `temperature=0.0` makes the model greedy and fully deterministic given the same prompt.
99
+
100
+ > **Why `temperature=0.6` for implementation?** Implementation tasks benefit from creative exploration — slightly non-zero temperature allows the model to consider multiple candidate approaches rather than always taking the locally-greedy token path. Combined with reasoning ON, this produces higher-quality code than either `temperature=0.0` or pure sampling alone.
101
+
102
+ ---
103
+
104
+ ## `str_replace_editor` Hallucination Warning
105
+
106
+ ### Failure Mode
107
+
108
+ Local LLMs — including Nemotron-class models — may hallucinate invocations of `str_replace_editor`. This tool exists only in Claude Code (Anthropic's hosted Claude environment) and is not available in any locally-hosted LLM agent runtime. When a local model generates a `str_replace_editor` tool call:
109
+
110
+ - The agent runtime fails silently or returns a tool-not-found error.
111
+ - No actual file is edited.
112
+ - The model may then proceed as if the edit succeeded, producing divergent state between the model's internal belief and the actual file system.
113
+ - Downstream tool calls (e.g., `read_file`, `bash`) may then operate on stale content, compounding the error.
114
+
115
+ This failure mode is insidious because it is often silent — the model does not retry, and the user may not notice until the generated code is tested.
116
+
117
+ ### Mitigations Delivered by `ma-agents`
118
+
119
+ `ma-agents` addresses this at two layers:
120
+
121
+ **Layer 1 — Instruction-block prohibition (Story 21.6)**
122
+
123
+ The on-prem instruction block (`lib/templates/instruction-block-onprem.template.md`) explicitly forbids invoking `str_replace_editor` in the per-tool rules injected into every agent's instruction file (`CLAUDE.md`, `.roo/rules/`, `.clinerules`, `AGENTS.md`). This rule is present in every on-prem agent installation and is re-stamped on each `ma-agents` update.
124
+
125
+ **Layer 2 — Application-layer path restriction (Stories 21.3, 21.4)**
126
+
127
+ - **Roo Code:** `.roomodes` `fileRegex` patterns (Story 21.3) constrain planning personas to documentation-only paths (e.g., `_bmad-output/**`, `docs/**`). Even if a planning persona hallucinates a `str_replace_editor` call targeting a source file, the Roo Code application layer will block the tool call before it reaches the filesystem.
128
+ - **OpenCode / AGENTS.md:** Story 21.4 similarly scopes planning personas in `AGENTS.md` to documentation paths, reducing the surface where a misrouted tool call could corrupt code files.
129
+
130
+ > **Operator action required:** Neither mitigation eliminates the underlying model behavior. Monitor agent session logs for `str_replace_editor` in model outputs — occurrences indicate the model is operating outside its instruction-following envelope and may require prompt tuning or a different quantization level.
package/lib/agents.js CHANGED
@@ -159,7 +159,13 @@ const agents = [
159
159
  template: 'generic',
160
160
  bmadPlatformCode: 'roo',
161
161
  instructionFiles: ['.roo/rules/00-ma-agents.md'],
162
- injectionStrategy: { position: 'top', skipPatterns: ['---'] }
162
+ injectionStrategy: { position: 'top', skipPatterns: ['---'] },
163
+ // Story 21.3 AC #3 — extra YAML template stamped at project root so Roo
164
+ // Code's FileRestrictionError (NFR47) gates BMAD-mode edits at the IDE
165
+ // layer. Processed by applyExtraInstructionTemplates in lib/installer.js.
166
+ extraInstructionTemplates: [
167
+ { template: 'roomodes.template.yaml', target: '.roomodes', merger: 'yaml-customModes' }
168
+ ]
163
169
  },
164
170
  {
165
171
  id: 'cursor',
@@ -242,7 +248,16 @@ const agents = [
242
248
  fileExtension: '.md',
243
249
  template: 'generic',
244
250
  instructionFiles: ['opencode.json'],
245
- injectionStrategy: { position: 'json-merge', targetKey: 'instructions' }
251
+ injectionStrategy: { position: 'json-merge', targetKey: 'instructions' },
252
+ // Story 21.4 — OpenCode auto-loads AGENTS.md when the file is listed in
253
+ // opencode.json::instructions[]. The extraInstructionTemplates field names
254
+ // the template shipped at lib/templates/<template>, the target path
255
+ // (relative to project root) to stamp, and the merger strategy. Processed
256
+ // by updateAgentInstructions in lib/installer.js in addition to the JSON
257
+ // merge above.
258
+ extraInstructionTemplates: [
259
+ { template: 'agents-md.template.md', target: 'AGENTS.md', merger: 'markdown-markers' }
260
+ ]
246
261
  },
247
262
  {
248
263
  id: 'bmm-devops',
@@ -0,0 +1,8 @@
1
+ # MA-AGENTS: skill enforcement for bmm-analyst
2
+ phase: planning
3
+ on_prem_phase_prefix: "/no_think You are in a planning phase — respond in text for questions; create files only when explicitly asked."
4
+ critical_actions:
5
+ - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
6
+ - "For each skill marked always_load: true, read the skill file completely"
7
+ - "If _bmad-output/project-context.md exists, read it completely"
8
+ - "Follow all skill directives and project-context rules during this session"
@@ -1,4 +1,6 @@
1
1
  # MA-AGENTS: skill enforcement for bmm-architect
2
+ phase: planning
3
+ on_prem_phase_prefix: "/no_think You are in a planning phase — respond in text for questions; create files only when explicitly asked."
2
4
  critical_actions:
3
5
  - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
4
6
  - "For each skill marked always_load: true, read the skill file completely"
@@ -1,4 +1,6 @@
1
1
  # MA-AGENTS: skill enforcement for bmm-dev
2
+ phase: implementation
3
+ on_prem_phase_prefix: "Think carefully before writing code. Always reference the story you are implementing before making edits."
2
4
  critical_actions:
3
5
  - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
4
6
  - "For each skill marked always_load: true, read the skill file completely"
@@ -1,4 +1,6 @@
1
1
  # MA-AGENTS: skill enforcement for bmm-pm
2
+ phase: planning
3
+ on_prem_phase_prefix: "/no_think You are in a planning phase — respond in text for questions; create files only when explicitly asked."
2
4
  critical_actions:
3
5
  - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
4
6
  - "For each skill marked always_load: true, read the skill file completely"
@@ -1,4 +1,6 @@
1
1
  # MA-AGENTS: Gad — Software Quality Assurance Expert
2
+ phase: planning
3
+ on_prem_phase_prefix: "/no_think You are in a planning phase — respond in text for questions; create files only when explicitly asked."
2
4
  agent:
3
5
  metadata:
4
6
  name: "Gad"
@@ -0,0 +1,8 @@
1
+ # MA-AGENTS: skill enforcement for bmm-quick-flow-solo-dev
2
+ phase: implementation
3
+ on_prem_phase_prefix: "Think carefully before writing code. Always reference the story you are implementing before making edits."
4
+ critical_actions:
5
+ - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
6
+ - "For each skill marked always_load: true, read the skill file completely"
7
+ - "If _bmad-output/project-context.md exists, read it completely"
8
+ - "Follow all skill directives and project-context rules during this session"
@@ -1,4 +1,6 @@
1
1
  # MA-AGENTS: skill enforcement for bmm-sm
2
+ phase: planning
3
+ on_prem_phase_prefix: "/no_think You are in a planning phase — respond in text for questions; create files only when explicitly asked."
2
4
  critical_actions:
3
5
  - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
4
6
  - "For each skill marked always_load: true, read the skill file completely"
@@ -1,4 +1,6 @@
1
1
  # MA-AGENTS: skill enforcement for bmm-tech-writer
2
+ phase: planning
3
+ on_prem_phase_prefix: "/no_think You are in a planning phase — respond in text for questions; create files only when explicitly asked."
2
4
  critical_actions:
3
5
  - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
4
6
  - "For each skill marked always_load: true, read the skill file completely"
@@ -1,4 +1,6 @@
1
1
  # MA-AGENTS: skill enforcement for bmm-ux-designer
2
+ phase: planning
3
+ on_prem_phase_prefix: "/no_think You are in a planning phase — respond in text for questions; create files only when explicitly asked."
2
4
  critical_actions:
3
5
  - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
4
6
  - "For each skill marked always_load: true, read the skill file completely"