Skip to content

refactor(agents): remove phase-4 agent personas#2014

Open
alexeyv wants to merge 4 commits intomainfrom
delete-phase4-agents
Open

refactor(agents): remove phase-4 agent personas#2014
alexeyv wants to merge 4 commits intomainfrom
delete-phase4-agents

Conversation

@alexeyv
Copy link
Copy Markdown
Collaborator

@alexeyv alexeyv commented Mar 16, 2026

Summary

  • Delete 4 phase-4 agent persona definitions (dev, qa, sm, quick-flow-solo-dev) — skills now serve as direct tools without persona wrappers
  • PM agent retained — it owns phase 2-3 workflows (Create/Validate/Edit PRD, Create Epics)
  • Removed agents kept as party-mode participants in default-party.csv (with blank paths)
  • Clean up references in bmad-skill-manifest, default-party.csv, module-help.csv, bmad-help workflow, and party-mode workflows
  • Update agent compilation tests to use analyst instead of deleted agents

Follow-up

  • Doc updates for agent references will be in a separate PR

Test plan

  • All 222 installation component tests pass
  • All 52 schema validation tests pass
  • Ref validation, lint, markdown lint, format check all pass
  • Full push gate green

Skills now serve as direct tools without persona wrappers.
Delete dev, pm, qa, sm, and quick-flow-solo-dev agent definitions
and clean up references in help CSV, party-mode, and manifests.
@augmentcode
Copy link
Copy Markdown

augmentcode bot commented Mar 16, 2026

🤖 Augment PR Summary

Summary: Refactors BMM agents by removing the phase-4 persona “wrapper” agents and relying on skills as direct tools.

Changes:

  • Removed five agent definitions: dev, pm, qa, sm, and quick-flow-solo-dev.
  • Pruned the deleted agents from bmad-skill-manifest.yaml so only remaining agents are listed.
  • Updated bmad-help guidance for “agent-based workflows” to remove the explicit “load agent first” instructions.
  • Adjusted party-mode orchestration wording to avoid referencing a specific master agent name.
  • Updated installation component tests to compile the existing analyst.agent.yaml instead of removed agents.

Technical Notes: PR is primarily deletions/cleanup; test updates keep the agent compilation coverage aligned with the new agent set.

🤖 Was this summary useful? React with 👍 or 👎

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 16, 2026

📝 Walkthrough

Walkthrough

This PR removes five agent configurations (Developer, Product Manager, QA Engineer, Quick Flow Solo Dev, and Scrum Master) from the codebase along with their manifest entries. It updates related workflow documentation to remove explicit executor references and modifies tests to use the Analyst agent instead of removed agents.

Changes

Cohort / File(s) Summary
Agent Manifest & Definitions
src/bmm/agents/bmad-skill-manifest.yaml, src/bmm/agents/dev.agent.yaml, src/bmm/agents/pm.agent.yaml, src/bmm/agents/qa.agent.yaml, src/bmm/agents/quick-flow-solo-dev.agent.yaml, src/bmm/agents/sm.agent.yaml
Removed five agent YAML files (dev, pm, qa, quick-flow-solo-dev, sm) and their corresponding entries from the skill manifest. Remaining agents: analyst, architect, ux-designer.
Workflow Documentation
src/core/skills/bmad-help/workflow.md, src/core/skills/bmad-party-mode/workflow.md, src/core/skills/bmad-party-mode/steps/step-02-discussion-orchestration.md
Removed explicit references to "bmad-master" executor in moderation/orchestration logic. Updated workflow examples to reflect simplified agent invocation patterns.
Test Updates
test/test-installation-components.js
Replaced PM/QA agent tests with Analyst agent tests. Updated agent paths, file references, and assertions to expect "Business Analyst" title instead of "Product Manager".

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • bmadcode
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: removing phase-4 agent personas, which is the primary objective of the PR.
Description check ✅ Passed The description is clearly related to the changeset, providing a summary of deleted agents, cleanup references, and test updates.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch delete-phase4-agents
📝 Coding Plan
  • Generate coding plan for human review comments

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.

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. No suggestions at this time.

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

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
test/test-installation-components.js (1)

151-184: Missing negative test coverage for removed agents.

This PR removes five agent personas (dev, pm, qa, sm, quick-flow-solo-dev), but there's no test verifying that:

  1. Attempting to compile the removed agent YAMLs produces an appropriate error
  2. The removed agent paths no longer exist
  3. Installations don't reference the deleted agents

A defensive test asserting the removed agent files don't exist would catch accidental re-introduction:

🧪 Suggested negative test
// After Test Suite 1, add:
console.log(`${colors.yellow}Test Suite 1b: Removed Agents Verification${colors.reset}\n`);

const removedAgents = ['dev', 'pm', 'qa', 'sm', 'quick-flow-solo-dev'];
for (const agent of removedAgents) {
  const agentPath = path.join(projectRoot, `src/bmm/agents/${agent}.agent.yaml`);
  const exists = await fs.pathExists(agentPath);
  assert(!exists, `Removed agent ${agent}.agent.yaml should not exist`);
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/test-installation-components.js` around lines 151 - 184, Add a negative
test after the existing "Agent Compilation" suite that verifies the five removed
agent personas are gone: for each name in
['dev','pm','qa','sm','quick-flow-solo-dev'] assert
fs.pathExists(path.join(projectRoot, `src/bmm/agents/${agent}.agent.yaml`)) is
false; additionally attempt to call YamlXmlBuilder.buildAgent(...) for one of
the removed agent paths and assert it throws (or returns an error) to ensure
compilation fails for deleted agents, and scan installation references (e.g.,
any installer manifest loader used in tests) to assert they do not reference
these agent names.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@test/test-installation-components.js`:
- Around line 155-162: The test uses a shared temp filename in tempOutput which
can collide across suites; update the test around analystAgentPath and the
builder.buildAgent call to generate a unique temp filename per invocation (for
example append a suite identifier, process.pid, timestamp, or use a
tmp/mkdtemp-based temp file) and ensure the file is cleaned up after the test;
replace the hardcoded path using __dirname + 'temp-analyst-agent.md' with a
deterministic unique-name strategy so Suite 1 and Suite 16 (and parallel runs)
cannot race or read stale output.
- Around line 855-877: Test Suite 16 duplicates Test Suite 1 by compiling the
same analyst agent; either delete the entire Test Suite 16 block or update it to
compile a different agent to increase coverage. Locate the try block that
creates a new YamlXmlBuilder and calls builder.buildAgent with analystAgentPath
and tempOutput (temp-analyst-agent.md) and either remove that whole block (Test
Suite 16 console.log and nested try/catch) or change analystAgentPath to point
to a different agent (e.g., bmad-master) and update the assertion to check for
that agent's expected output so it no longer mirrors Test Suite 1.

---

Nitpick comments:
In `@test/test-installation-components.js`:
- Around line 151-184: Add a negative test after the existing "Agent
Compilation" suite that verifies the five removed agent personas are gone: for
each name in ['dev','pm','qa','sm','quick-flow-solo-dev'] assert
fs.pathExists(path.join(projectRoot, `src/bmm/agents/${agent}.agent.yaml`)) is
false; additionally attempt to call YamlXmlBuilder.buildAgent(...) for one of
the removed agent paths and assert it throws (or returns an error) to ensure
compilation fails for deleted agents, and scan installation references (e.g.,
any installer manifest loader used in tests) to assert they do not reference
these agent names.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e19734ff-4885-4fed-ab41-3f958f60205a

📥 Commits

Reviewing files that changed from the base of the PR and between d1163f8 and 70e806a.

⛔ Files ignored due to path filters (2)
  • src/bmm/module-help.csv is excluded by !**/*.csv
  • src/bmm/teams/default-party.csv is excluded by !**/*.csv
📒 Files selected for processing (10)
  • src/bmm/agents/bmad-skill-manifest.yaml
  • src/bmm/agents/dev.agent.yaml
  • src/bmm/agents/pm.agent.yaml
  • src/bmm/agents/qa.agent.yaml
  • src/bmm/agents/quick-flow-solo-dev.agent.yaml
  • src/bmm/agents/sm.agent.yaml
  • src/core/skills/bmad-help/workflow.md
  • src/core/skills/bmad-party-mode/steps/step-02-discussion-orchestration.md
  • src/core/skills/bmad-party-mode/workflow.md
  • test/test-installation-components.js
💤 Files with no reviewable changes (6)
  • src/bmm/agents/sm.agent.yaml
  • src/bmm/agents/dev.agent.yaml
  • src/bmm/agents/qa.agent.yaml
  • src/bmm/agents/quick-flow-solo-dev.agent.yaml
  • src/bmm/agents/pm.agent.yaml
  • src/bmm/agents/bmad-skill-manifest.yaml

Comment on lines 155 to 162
const analystAgentPath = path.join(projectRoot, 'src/bmm/agents/analyst.agent.yaml');

// Create temp output path
const tempOutput = path.join(__dirname, 'temp-pm-agent.md');
const tempOutput = path.join(__dirname, 'temp-analyst-agent.md');

try {
const result = await builder.buildAgent(pmAgentPath, null, tempOutput, { includeMetadata: true });
const result = await builder.buildAgent(analystAgentPath, null, tempOutput, { includeMetadata: true });

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Shared temp filename across test suites risks collision.

Both Test Suite 1 (line 158) and Test Suite 16 (line 862) use the same temp filename temp-analyst-agent.md in __dirname. If cleanup fails in Suite 1 or tests are ever parallelized, Suite 16 could read stale data or encounter race conditions.

Consider using unique filenames like temp-analyst-agent-suite1.md and temp-analyst-agent-suite16.md, or use a unique suffix per invocation.

💡 Suggested fix
-    const tempOutput = path.join(__dirname, 'temp-analyst-agent.md');
+    const tempOutput = path.join(__dirname, 'temp-analyst-agent-suite1.md');
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const analystAgentPath = path.join(projectRoot, 'src/bmm/agents/analyst.agent.yaml');
// Create temp output path
const tempOutput = path.join(__dirname, 'temp-pm-agent.md');
const tempOutput = path.join(__dirname, 'temp-analyst-agent.md');
try {
const result = await builder.buildAgent(pmAgentPath, null, tempOutput, { includeMetadata: true });
const result = await builder.buildAgent(analystAgentPath, null, tempOutput, { includeMetadata: true });
const analystAgentPath = path.join(projectRoot, 'src/bmm/agents/analyst.agent.yaml');
// Create temp output path
const tempOutput = path.join(__dirname, 'temp-analyst-agent-suite1.md');
try {
const result = await builder.buildAgent(analystAgentPath, null, tempOutput, { includeMetadata: true });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/test-installation-components.js` around lines 155 - 162, The test uses a
shared temp filename in tempOutput which can collide across suites; update the
test around analystAgentPath and the builder.buildAgent call to generate a
unique temp filename per invocation (for example append a suite identifier,
process.pid, timestamp, or use a tmp/mkdtemp-based temp file) and ensure the
file is cleaned up after the test; replace the hardcoded path using __dirname +
'temp-analyst-agent.md' with a deterministic unique-name strategy so Suite 1 and
Suite 16 (and parallel runs) cannot race or read stale output.

Comment on lines 855 to 877
// Test 16: Analyst Agent Compilation
// ============================================================
console.log(`${colors.yellow}Test Suite 16: QA Agent Compilation${colors.reset}\n`);
console.log(`${colors.yellow}Test Suite 16: Analyst Agent Compilation${colors.reset}\n`);

try {
const builder = new YamlXmlBuilder();
const qaAgentPath = path.join(projectRoot, 'src/bmm/agents/qa.agent.yaml');
const tempOutput = path.join(__dirname, 'temp-qa-agent.md');
const analystAgentPath = path.join(projectRoot, 'src/bmm/agents/analyst.agent.yaml');
const tempOutput = path.join(__dirname, 'temp-analyst-agent.md');

try {
const result = await builder.buildAgent(qaAgentPath, null, tempOutput, { includeMetadata: true });
const result = await builder.buildAgent(analystAgentPath, null, tempOutput, { includeMetadata: true });
const compiled = await fs.readFile(tempOutput, 'utf8');

assert(compiled.includes('QA Engineer'), 'QA agent compilation includes agent title');

assert(compiled.includes('qa-generate-e2e-tests'), 'QA agent menu includes automate workflow');
assert(compiled.includes('Business Analyst'), 'Analyst agent compilation includes agent title');

// Cleanup
await fs.remove(tempOutput);
} catch (error) {
assert(false, 'QA agent compiles successfully', error.message);
assert(false, 'Analyst agent compiles successfully', error.message);
}
} catch (error) {
assert(false, 'QA compilation test setup', error.message);
assert(false, 'Analyst compilation test setup', error.message);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Test Suite 16 is now redundant with Test Suite 1.

After this change, both Test Suite 1 (lines 151-183) and Test Suite 16 (lines 855-877) test the exact same analyst agent:

  • Same source path: src/bmm/agents/analyst.agent.yaml
  • Same temp output file: temp-analyst-agent.md
  • Same assertion: includes('Business Analyst')

Suite 16's single assertion is a strict subset of Suite 1's assertions (which also checks <agent>, <persona>, <menu> tags). This provides no additional coverage.

Consider either:

  1. Removing Suite 16 entirely, or
  2. Testing a different remaining agent (e.g., bmad-master or another bmm agent) to maintain agent compilation coverage breadth
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/test-installation-components.js` around lines 855 - 877, Test Suite 16
duplicates Test Suite 1 by compiling the same analyst agent; either delete the
entire Test Suite 16 block or update it to compile a different agent to increase
coverage. Locate the try block that creates a new YamlXmlBuilder and calls
builder.buildAgent with analystAgentPath and tempOutput (temp-analyst-agent.md)
and either remove that whole block (Test Suite 16 console.log and nested
try/catch) or change analystAgentPath to point to a different agent (e.g.,
bmad-master) and update the assertion to check for that agent's expected output
so it no longer mirrors Test Suite 1.

The agent persona files are deleted but their party roster entries
must stay so party-mode discussions keep the full cast.
@alexeyv alexeyv force-pushed the delete-phase4-agents branch from f84b41c to 43ca26e Compare March 16, 2026 14:33
alexeyv added 2 commits March 16, 2026 08:43
PM owns phase 2-3 workflows (Create/Validate/Edit PRD, Create Epics).
Restore compiled skill directory, skill manifest entry, and
module-help agent column values.
# Conflicts:
#	src/bmm/module-help.csv
#	test/test-installation-components.js
@alexeyv
Copy link
Copy Markdown
Collaborator Author

alexeyv commented Mar 16, 2026

Parking this PR — agent removal is blocked until we resolve the customization story.

Two open questions:

  1. Long-term: How will agent customizations work in the new architecture?
  2. Existing users: People currently have customizations hanging off these agent definitions. Removing the agents would break those customizations.

Will revisit once the customization approach is decided.

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