musubi-sdd 0.1.4 → 0.1.6

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 (102) hide show
  1. package/README.md +38 -1
  2. package/bin/musubi-init.js +90 -35
  3. package/bin/musubi.js +34 -13
  4. package/package.json +3 -2
  5. package/src/agents/registry.js +36 -29
  6. package/src/templates/agents/claude-code/CLAUDE.md +13 -0
  7. package/src/templates/agents/claude-code/commands/sdd-change-apply.md +59 -30
  8. package/src/templates/agents/claude-code/commands/sdd-change-archive.md +68 -11
  9. package/src/templates/agents/claude-code/commands/sdd-change-init.md +95 -30
  10. package/src/templates/agents/claude-code/commands/sdd-design.md +115 -54
  11. package/src/templates/agents/claude-code/commands/sdd-implement.md +33 -1
  12. package/src/templates/agents/claude-code/commands/sdd-requirements.md +59 -8
  13. package/src/templates/agents/claude-code/commands/sdd-steering.md +22 -0
  14. package/src/templates/agents/claude-code/commands/sdd-tasks.md +54 -19
  15. package/src/templates/agents/claude-code/commands/sdd-validate.md +82 -10
  16. package/src/templates/agents/claude-code/skills/ai-ml-engineer/SKILL.md +121 -53
  17. package/src/templates/agents/claude-code/skills/api-designer/SKILL.md +61 -11
  18. package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +20 -2
  19. package/src/templates/agents/claude-code/skills/change-impact-analyzer/SKILL.md +53 -8
  20. package/src/templates/agents/claude-code/skills/cloud-architect/SKILL.md +72 -20
  21. package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +55 -14
  22. package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +52 -11
  23. package/src/templates/agents/claude-code/skills/database-administrator/SKILL.md +958 -653
  24. package/src/templates/agents/claude-code/skills/database-schema-designer/SKILL.md +72 -14
  25. package/src/templates/agents/claude-code/skills/devops-engineer/SKILL.md +25 -2
  26. package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +86 -63
  27. package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +17 -2
  28. package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +44 -4
  29. package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +46 -2
  30. package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +74 -11
  31. package/src/templates/agents/claude-code/skills/requirements-analyst/SKILL.md +125 -19
  32. package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +45 -2
  33. package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +51 -14
  34. package/src/templates/agents/claude-code/skills/software-developer/SKILL.md +81 -35
  35. package/src/templates/agents/claude-code/skills/steering/SKILL.md +30 -4
  36. package/src/templates/agents/claude-code/skills/system-architect/SKILL.md +125 -39
  37. package/src/templates/agents/claude-code/skills/technical-writer/SKILL.md +27 -2
  38. package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +72 -38
  39. package/src/templates/agents/claude-code/skills/traceability-auditor/SKILL.md +32 -11
  40. package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +214 -137
  41. package/src/templates/agents/codex/AGENTS.md +3 -0
  42. package/src/templates/agents/codex/commands/sdd-change-apply.md +59 -30
  43. package/src/templates/agents/codex/commands/sdd-change-archive.md +68 -11
  44. package/src/templates/agents/codex/commands/sdd-change-init.md +95 -30
  45. package/src/templates/agents/codex/commands/sdd-design.md +115 -54
  46. package/src/templates/agents/codex/commands/sdd-implement.md +33 -1
  47. package/src/templates/agents/codex/commands/sdd-requirements.md +59 -8
  48. package/src/templates/agents/codex/commands/sdd-steering.md +22 -0
  49. package/src/templates/agents/codex/commands/sdd-tasks.md +54 -19
  50. package/src/templates/agents/codex/commands/sdd-validate.md +82 -10
  51. package/src/templates/agents/cursor/AGENTS.md +3 -0
  52. package/src/templates/agents/cursor/commands/sdd-change-apply.md +59 -30
  53. package/src/templates/agents/cursor/commands/sdd-change-archive.md +68 -11
  54. package/src/templates/agents/cursor/commands/sdd-change-init.md +95 -30
  55. package/src/templates/agents/cursor/commands/sdd-design.md +115 -54
  56. package/src/templates/agents/cursor/commands/sdd-implement.md +33 -1
  57. package/src/templates/agents/cursor/commands/sdd-requirements.md +59 -8
  58. package/src/templates/agents/cursor/commands/sdd-steering.md +22 -0
  59. package/src/templates/agents/cursor/commands/sdd-tasks.md +54 -19
  60. package/src/templates/agents/cursor/commands/sdd-validate.md +82 -10
  61. package/src/templates/agents/gemini-cli/GEMINI.md +2 -0
  62. package/src/templates/agents/github-copilot/AGENTS.md +3 -0
  63. package/src/templates/agents/github-copilot/commands/sdd-change-apply.md +59 -30
  64. package/src/templates/agents/github-copilot/commands/sdd-change-archive.md +68 -11
  65. package/src/templates/agents/github-copilot/commands/sdd-change-init.md +95 -30
  66. package/src/templates/agents/github-copilot/commands/sdd-design.md +115 -54
  67. package/src/templates/agents/github-copilot/commands/sdd-implement.md +33 -1
  68. package/src/templates/agents/github-copilot/commands/sdd-requirements.md +59 -8
  69. package/src/templates/agents/github-copilot/commands/sdd-steering.md +22 -0
  70. package/src/templates/agents/github-copilot/commands/sdd-tasks.md +54 -19
  71. package/src/templates/agents/github-copilot/commands/sdd-validate.md +82 -10
  72. package/src/templates/agents/qwen-code/QWEN.md +2 -0
  73. package/src/templates/agents/qwen-code/commands/sdd-change-apply.md +59 -30
  74. package/src/templates/agents/qwen-code/commands/sdd-change-archive.md +68 -11
  75. package/src/templates/agents/qwen-code/commands/sdd-change-init.md +95 -30
  76. package/src/templates/agents/qwen-code/commands/sdd-design.md +115 -54
  77. package/src/templates/agents/qwen-code/commands/sdd-implement.md +33 -1
  78. package/src/templates/agents/qwen-code/commands/sdd-requirements.md +59 -8
  79. package/src/templates/agents/qwen-code/commands/sdd-steering.md +22 -0
  80. package/src/templates/agents/qwen-code/commands/sdd-tasks.md +54 -19
  81. package/src/templates/agents/qwen-code/commands/sdd-validate.md +82 -10
  82. package/src/templates/agents/shared/AGENTS.md +65 -10
  83. package/src/templates/agents/windsurf/AGENTS.md +3 -0
  84. package/src/templates/agents/windsurf/commands/sdd-change-apply.md +59 -30
  85. package/src/templates/agents/windsurf/commands/sdd-change-archive.md +68 -11
  86. package/src/templates/agents/windsurf/commands/sdd-change-init.md +95 -30
  87. package/src/templates/agents/windsurf/commands/sdd-design.md +115 -54
  88. package/src/templates/agents/windsurf/commands/sdd-implement.md +33 -1
  89. package/src/templates/agents/windsurf/commands/sdd-requirements.md +59 -8
  90. package/src/templates/agents/windsurf/commands/sdd-steering.md +22 -0
  91. package/src/templates/agents/windsurf/commands/sdd-tasks.md +54 -19
  92. package/src/templates/agents/windsurf/commands/sdd-validate.md +82 -10
  93. package/src/templates/shared/constitution/constitution.md +27 -23
  94. package/src/templates/shared/constitution/ears-format.md +71 -8
  95. package/src/templates/shared/constitution/workflow.md +14 -10
  96. package/src/templates/shared/documents/design.md +66 -30
  97. package/src/templates/shared/documents/requirements.md +53 -24
  98. package/src/templates/shared/documents/research.md +83 -62
  99. package/src/templates/shared/documents/tasks.md +84 -23
  100. package/src/templates/shared/steering/product.md +83 -55
  101. package/src/templates/shared/steering/structure.md +4 -1
  102. package/src/templates/shared/steering/tech.md +154 -151
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # MUSUBI
2
2
 
3
+ [![CI](https://github.com/nahisaho/musubi/actions/workflows/ci.yml/badge.svg)](https://github.com/nahisaho/musubi/actions/workflows/ci.yml)
4
+ [![npm version](https://badge.fury.io/js/musubi-sdd.svg)](https://www.npmjs.com/package/musubi-sdd)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
3
7
  **Ultimate Specification Driven Development Tool for 7 AI Coding Agents**
4
8
 
5
9
  MUSUBI is a comprehensive SDD (Specification Driven Development) framework that synthesizes the best features from 6 leading frameworks into a production-ready tool for multiple AI coding agents.
@@ -566,9 +570,36 @@ steering/rules/constitution.md
566
570
 
567
571
  ## Development
568
572
 
573
+ ### Contributing Workflow
574
+
575
+ 1. Fork the repository
576
+ 2. Create a feature branch: `git checkout -b feature/your-feature`
577
+ 3. Make your changes
578
+ 4. Run tests locally: `npm test`
579
+ 5. Run lint: `npm run lint`
580
+ 6. Commit with conventional commits: `git commit -m "feat: add new feature"`
581
+ 7. Push to your fork: `git push origin feature/your-feature`
582
+ 8. Create a Pull Request
583
+ 9. Wait for CI checks to pass (all checks must succeed)
584
+ 10. Request review
585
+ 11. Merge after approval
586
+
587
+ ### CI/CD Pipeline
588
+
589
+ - **CI**: Runs on every PR and push to `main`
590
+ - ESLint & Prettier
591
+ - Jest Tests (80% coverage required)
592
+ - Build Verification
593
+ - Security Audit
594
+ - Platform Initialization Tests (7 platforms)
595
+ - **Release**: Automated npm publish on version tags (`v*.*.*`)
596
+ - **Dependabot**: Weekly dependency updates (Mondays 9:00 JST)
597
+
598
+ ### Local Testing
599
+
569
600
  ```bash
570
601
  # Clone repository
571
- git clone https://github.com/your-org/musubi.git
602
+ git clone https://github.com/nahisaho/musubi.git
572
603
  cd musubi
573
604
 
574
605
  # Install dependencies
@@ -577,6 +608,12 @@ npm install
577
608
  # Run tests
578
609
  npm test
579
610
 
611
+ # Run lint
612
+ npm run lint
613
+
614
+ # Check formatting
615
+ npm run format:check
616
+
580
617
  # Link for local development
581
618
  npm link
582
619
  musubi init
@@ -34,7 +34,7 @@ const AGENTS_TEMPLATE_DIR = path.join(TEMPLATE_DIR, 'agents');
34
34
  async function main(agent, agentKey) {
35
35
  // Dynamic import for inquirer (ESM module)
36
36
  const inquirer = await import('inquirer');
37
-
37
+
38
38
  // If called directly without agent parameter, default to Claude Code
39
39
  if (!agent) {
40
40
  const { getAgentDefinition } = require('../src/agents/registry');
@@ -53,8 +53,8 @@ async function main(agent, agentKey) {
53
53
  type: 'confirm',
54
54
  name: 'overwrite',
55
55
  message: `MUSUBI for ${agent.label} is already initialized. Overwrite?`,
56
- default: false
57
- }
56
+ default: false,
57
+ },
58
58
  ]);
59
59
 
60
60
  if (!overwrite) {
@@ -69,20 +69,20 @@ async function main(agent, agentKey) {
69
69
  type: 'input',
70
70
  name: 'projectName',
71
71
  message: 'Project name:',
72
- default: path.basename(process.cwd())
72
+ default: path.basename(process.cwd()),
73
73
  },
74
74
  {
75
75
  type: 'input',
76
76
  name: 'description',
77
77
  message: 'Project description:',
78
- default: 'A software project using MUSUBI SDD'
78
+ default: 'A software project using MUSUBI SDD',
79
79
  },
80
80
  {
81
81
  type: 'list',
82
82
  name: 'projectType',
83
83
  message: 'Project type:',
84
- choices: ['Greenfield (0→1)', 'Brownfield (1→n)', 'Both']
85
- }
84
+ choices: ['Greenfield (0→1)', 'Brownfield (1→n)', 'Both'],
85
+ },
86
86
  ];
87
87
 
88
88
  // Skills selection is only for Claude Code (Skills API exclusive)
@@ -92,15 +92,43 @@ async function main(agent, agentKey) {
92
92
  name: 'skills',
93
93
  message: 'Select skills to install (all recommended):',
94
94
  choices: [
95
- { name: 'Core (orchestrator, steering, constitution-enforcer)', value: 'core', checked: true },
96
- { name: 'Requirements & Planning (requirements-analyst, project-manager, change-impact-analyzer)', value: 'requirements', checked: true },
97
- { name: 'Architecture & Design (system-architect, api-designer, database-schema-designer, ui-ux-designer)', value: 'architecture', checked: true },
95
+ {
96
+ name: 'Core (orchestrator, steering, constitution-enforcer)',
97
+ value: 'core',
98
+ checked: true,
99
+ },
100
+ {
101
+ name: 'Requirements & Planning (requirements-analyst, project-manager, change-impact-analyzer)',
102
+ value: 'requirements',
103
+ checked: true,
104
+ },
105
+ {
106
+ name: 'Architecture & Design (system-architect, api-designer, database-schema-designer, ui-ux-designer)',
107
+ value: 'architecture',
108
+ checked: true,
109
+ },
98
110
  { name: 'Development (software-developer)', value: 'development', checked: true },
99
- { name: 'Quality & Review (test-engineer, code-reviewer, bug-hunter, quality-assurance, traceability-auditor)', value: 'quality', checked: true },
100
- { name: 'Security & Performance (security-auditor, performance-optimizer)', value: 'security', checked: true },
101
- { name: 'Infrastructure (devops-engineer, cloud-architect, database-administrator, site-reliability-engineer, release-coordinator)', value: 'infrastructure', checked: true },
102
- { name: 'Documentation (technical-writer, ai-ml-engineer)', value: 'documentation', checked: true }
103
- ]
111
+ {
112
+ name: 'Quality & Review (test-engineer, code-reviewer, bug-hunter, quality-assurance, traceability-auditor)',
113
+ value: 'quality',
114
+ checked: true,
115
+ },
116
+ {
117
+ name: 'Security & Performance (security-auditor, performance-optimizer)',
118
+ value: 'security',
119
+ checked: true,
120
+ },
121
+ {
122
+ name: 'Infrastructure (devops-engineer, cloud-architect, database-administrator, site-reliability-engineer, release-coordinator)',
123
+ value: 'infrastructure',
124
+ checked: true,
125
+ },
126
+ {
127
+ name: 'Documentation (technical-writer, ai-ml-engineer)',
128
+ value: 'documentation',
129
+ checked: true,
130
+ },
131
+ ],
104
132
  });
105
133
  }
106
134
 
@@ -109,13 +137,13 @@ async function main(agent, agentKey) {
109
137
  type: 'confirm',
110
138
  name: 'createSteering',
111
139
  message: 'Generate initial steering context?',
112
- default: true
140
+ default: true,
113
141
  },
114
142
  {
115
143
  type: 'confirm',
116
144
  name: 'createConstitution',
117
145
  message: 'Create constitutional governance?',
118
- default: true
146
+ default: true,
119
147
  }
120
148
  );
121
149
 
@@ -130,7 +158,7 @@ async function main(agent, agentKey) {
130
158
  'templates',
131
159
  'storage/specs',
132
160
  'storage/changes',
133
- 'storage/features'
161
+ 'storage/features',
134
162
  ];
135
163
 
136
164
  // Add agent-specific directories
@@ -154,12 +182,29 @@ async function main(agent, agentKey) {
154
182
  const skillGroups = {
155
183
  core: ['orchestrator', 'steering', 'constitution-enforcer'],
156
184
  requirements: ['requirements-analyst', 'project-manager', 'change-impact-analyzer'],
157
- architecture: ['system-architect', 'api-designer', 'database-schema-designer', 'ui-ux-designer'],
185
+ architecture: [
186
+ 'system-architect',
187
+ 'api-designer',
188
+ 'database-schema-designer',
189
+ 'ui-ux-designer',
190
+ ],
158
191
  development: ['software-developer'],
159
- quality: ['test-engineer', 'code-reviewer', 'bug-hunter', 'quality-assurance', 'traceability-auditor'],
192
+ quality: [
193
+ 'test-engineer',
194
+ 'code-reviewer',
195
+ 'bug-hunter',
196
+ 'quality-assurance',
197
+ 'traceability-auditor',
198
+ ],
160
199
  security: ['security-auditor', 'performance-optimizer'],
161
- infrastructure: ['devops-engineer', 'cloud-architect', 'database-administrator', 'site-reliability-engineer', 'release-coordinator'],
162
- documentation: ['technical-writer', 'ai-ml-engineer']
200
+ infrastructure: [
201
+ 'devops-engineer',
202
+ 'cloud-architect',
203
+ 'database-administrator',
204
+ 'site-reliability-engineer',
205
+ 'release-coordinator',
206
+ ],
207
+ documentation: ['technical-writer', 'ai-ml-engineer'],
163
208
  };
164
209
 
165
210
  let skillCount = 0;
@@ -176,8 +221,12 @@ async function main(agent, agentKey) {
176
221
  // Install commands/prompts/workflows
177
222
  if (agent.features.hasCommands) {
178
223
  await copyCommands(agent, agentKey);
179
- const commandType = agentKey === 'github-copilot' || agentKey === 'codex' ? 'prompts' :
180
- agentKey === 'windsurf' ? 'workflows' : 'commands';
224
+ const commandType =
225
+ agentKey === 'github-copilot' || agentKey === 'codex'
226
+ ? 'prompts'
227
+ : agentKey === 'windsurf'
228
+ ? 'workflows'
229
+ : 'commands';
181
230
  console.log(chalk.green(` Installed ${commandType}`));
182
231
  }
183
232
 
@@ -225,7 +274,7 @@ async function copySkill(skillName, agent) {
225
274
  if (!agent.layout.skillsDir) {
226
275
  return; // Skip for agents without Skills API support
227
276
  }
228
-
277
+
229
278
  const srcDir = path.join(AGENTS_TEMPLATE_DIR, 'claude-code', 'skills', skillName);
230
279
  const destDir = path.join(agent.layout.skillsDir, skillName);
231
280
  await fs.copy(srcDir, destDir);
@@ -252,18 +301,19 @@ async function copyAgentsFile(agent) {
252
301
  if (destFile === 'GEMINI.md') {
253
302
  // Read shared AGENTS.md
254
303
  const agentsContent = await fs.readFile(sharedAgentsFile, 'utf8');
255
-
304
+
256
305
  // Read existing GEMINI.md template if exists
257
306
  const geminiTemplate = path.join(AGENTS_TEMPLATE_DIR, 'gemini-cli', 'GEMINI.md');
258
307
  let geminiContent = '';
259
308
  if (fs.existsSync(geminiTemplate)) {
260
309
  geminiContent = await fs.readFile(geminiTemplate, 'utf8');
261
310
  } else {
262
- geminiContent = `# Gemini CLI - MUSUBI Configuration\n\n` +
263
- `This file configures Gemini CLI for MUSUBI SDD.\n\n` +
264
- `---\n\n`;
311
+ geminiContent =
312
+ '# Gemini CLI - MUSUBI Configuration\n\n' +
313
+ 'This file configures Gemini CLI for MUSUBI SDD.\n\n' +
314
+ '---\n\n';
265
315
  }
266
-
316
+
267
317
  // Append AGENTS.md content
268
318
  geminiContent += agentsContent;
269
319
  await fs.writeFile(destFile, geminiContent);
@@ -296,20 +346,25 @@ async function createConstitution() {
296
346
  }
297
347
 
298
348
  async function createReadme(answers, agent, agentKey) {
299
- const skillsSection = agent.features.hasSkills && answers.skills
300
- ? `This project uses **MUSUBI** (Ultimate Specification Driven Development) with ${answers.skills.length} skill groups.
349
+ const skillsSection =
350
+ agent.features.hasSkills && answers.skills
351
+ ? `This project uses **MUSUBI** (Ultimate Specification Driven Development) with ${answers.skills.length} skill groups.
301
352
 
302
353
  ### Available Skills
303
354
 
304
355
  Check \`${agent.layout.skillsDir}/\` directory for all installed skills.
305
356
 
306
357
  `
307
- : `This project uses **MUSUBI** (Ultimate Specification Driven Development).
358
+ : `This project uses **MUSUBI** (Ultimate Specification Driven Development).
308
359
 
309
360
  `;
310
361
 
311
- const commandType = agentKey === 'github-copilot' || agentKey === 'codex' ? 'Prompts' :
312
- agentKey === 'windsurf' ? 'Workflows' : 'Commands';
362
+ const commandType =
363
+ agentKey === 'github-copilot' || agentKey === 'codex'
364
+ ? 'Prompts'
365
+ : agentKey === 'windsurf'
366
+ ? 'Workflows'
367
+ : 'Commands';
313
368
 
314
369
  const readme = `# MUSUBI - ${answers.projectName}
315
370
 
package/bin/musubi.js CHANGED
@@ -14,7 +14,11 @@ const { Command } = require('commander');
14
14
  const chalk = require('chalk');
15
15
  const fs = require('fs-extra');
16
16
  const path = require('path');
17
- const { detectAgentFromFlags, getAgentDefinition, getAllAliasFlags } = require('../src/agents/registry');
17
+ const {
18
+ detectAgentFromFlags,
19
+ getAgentDefinition,
20
+ getAllAliasFlags,
21
+ } = require('../src/agents/registry');
18
22
 
19
23
  const program = new Command();
20
24
 
@@ -29,9 +33,7 @@ program
29
33
  // ============================================================================
30
34
  // Command: init
31
35
  // ============================================================================
32
- const initCommand = program
33
- .command('init')
34
- .description('Initialize MUSUBI in current project');
36
+ const initCommand = program.command('init').description('Initialize MUSUBI in current project');
35
37
 
36
38
  // Add all agent selection flags dynamically
37
39
  const aliasFlags = getAllAliasFlags();
@@ -39,7 +41,7 @@ aliasFlags.forEach(flag => {
39
41
  initCommand.option(`--${flag}`, `Select agent: ${flag}`);
40
42
  });
41
43
 
42
- initCommand.action(async (options) => {
44
+ initCommand.action(async options => {
43
45
  const agentKey = detectAgentFromFlags(options);
44
46
  const agent = getAgentDefinition(agentKey);
45
47
 
@@ -78,7 +80,7 @@ program
78
80
  if (fs.existsSync(skillsDir)) {
79
81
  const skills = fs.readdirSync(skillsDir);
80
82
  console.log(chalk.white(`📁 Claude Code Skills: ${skills.length} installed`));
81
- console.log(chalk.gray(` Location: .claude/skills/\n`));
83
+ console.log(chalk.gray(' Location: .claude/skills/\n'));
82
84
  }
83
85
 
84
86
  // Check steering files
@@ -202,7 +204,8 @@ program
202
204
  console.log(chalk.white('\nArticle IV: EARS Requirements Format'));
203
205
  const specsDir = path.join(cwd, 'storage', 'specs');
204
206
  if (fs.existsSync(specsDir)) {
205
- const requirementFiles = fs.readdirSync(specsDir)
207
+ const requirementFiles = fs
208
+ .readdirSync(specsDir)
206
209
  .filter(f => f.includes('requirements') && f.endsWith('.md'));
207
210
 
208
211
  if (requirementFiles.length > 0) {
@@ -224,9 +227,13 @@ program
224
227
  });
225
228
 
226
229
  if (earsCompliant === requirementFiles.length) {
227
- console.log(chalk.green(` ✅ All requirements use EARS format`));
230
+ console.log(chalk.green(' ✅ All requirements use EARS format'));
228
231
  } else {
229
- console.log(chalk.yellow(` ⚠️ ${earsCompliant}/${requirementFiles.length} documents have EARS patterns`));
232
+ console.log(
233
+ chalk.yellow(
234
+ ` ⚠️ ${earsCompliant}/${requirementFiles.length} documents have EARS patterns`
235
+ )
236
+ );
230
237
  }
231
238
  } else {
232
239
  console.log(chalk.gray(' ℹ️ No requirements documents found'));
@@ -300,12 +307,26 @@ program
300
307
 
301
308
  console.log(chalk.white('25 Claude Code Skills:'));
302
309
  console.log(chalk.gray(' Orchestration: orchestrator, steering, constitution-enforcer'));
303
- console.log(chalk.gray(' Requirements: requirements-analyst, project-manager, change-impact-analyzer'));
304
- console.log(chalk.gray(' Architecture: system-architect, api-designer, database-schema-designer, ui-ux-designer'));
310
+ console.log(
311
+ chalk.gray(' Requirements: requirements-analyst, project-manager, change-impact-analyzer')
312
+ );
313
+ console.log(
314
+ chalk.gray(
315
+ ' Architecture: system-architect, api-designer, database-schema-designer, ui-ux-designer'
316
+ )
317
+ );
305
318
  console.log(chalk.gray(' Development: software-developer'));
306
- console.log(chalk.gray(' Quality: test-engineer, code-reviewer, bug-hunter, quality-assurance, traceability-auditor'));
319
+ console.log(
320
+ chalk.gray(
321
+ ' Quality: test-engineer, code-reviewer, bug-hunter, quality-assurance, traceability-auditor'
322
+ )
323
+ );
307
324
  console.log(chalk.gray(' Security: security-auditor, performance-optimizer'));
308
- console.log(chalk.gray(' Infrastructure: devops-engineer, cloud-architect, database-administrator, site-reliability-engineer, release-coordinator'));
325
+ console.log(
326
+ chalk.gray(
327
+ ' Infrastructure: devops-engineer, cloud-architect, database-administrator, site-reliability-engineer, release-coordinator'
328
+ )
329
+ );
309
330
  console.log(chalk.gray(' Documentation: technical-writer, ai-ml-engineer\n'));
310
331
  });
311
332
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "musubi-sdd",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Ultimate Specification Driven Development Tool with 25 Agents for 7 AI Coding Platforms (Claude Code, GitHub Copilot, Cursor, Gemini CLI, Windsurf, Codex, Qwen Code)",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -14,7 +14,8 @@
14
14
  "test:coverage": "jest --coverage",
15
15
  "lint": "eslint bin/ src/ tests/",
16
16
  "lint:fix": "eslint bin/ src/ tests/ --fix",
17
- "format": "prettier --write bin/ src/ tests/"
17
+ "format": "prettier --write bin/ src/ tests/",
18
+ "format:check": "prettier --check 'bin/**/*.js' 'src/**/*.js' 'tests/**/*.js'"
18
19
  },
19
20
  "keywords": [
20
21
  "specification-driven-development",
@@ -8,15 +8,16 @@
8
8
  const agentDefinitions = {
9
9
  'claude-code': {
10
10
  label: 'Claude Code',
11
- description: 'Installs MUSUBI skills in `.claude/skills/`, commands in `.claude/commands/`, agents in `CLAUDE.md`, and steering in `steering/`',
11
+ description:
12
+ 'Installs MUSUBI skills in `.claude/skills/`, commands in `.claude/commands/`, agents in `CLAUDE.md`, and steering in `steering/`',
12
13
  aliasFlags: ['--claude-code', '--claude'],
13
14
  recommendedModels: ['Claude Sonnet 4.5 or newer'],
14
15
  layout: {
15
- skillsDir: '.claude/skills', // MUSUBI-specific: 25 skills (Skills API)
16
+ skillsDir: '.claude/skills', // MUSUBI-specific: 25 skills (Skills API)
16
17
  commandsDir: '.claude/commands',
17
18
  agentDir: '.claude',
18
19
  docFile: 'CLAUDE.md',
19
- agentsFile: '.claude/AGENTS.md', // 25 agents definition (shared format)
20
+ agentsFile: '.claude/AGENTS.md', // 25 agents definition (shared format)
20
21
  },
21
22
  commands: {
22
23
  steering: '/sdd-steering',
@@ -27,20 +28,21 @@ const agentDefinitions = {
27
28
  validate: '/sdd-validate <feature>',
28
29
  },
29
30
  features: {
30
- hasSkills: true, // Claude Code supports Skills API
31
+ hasSkills: true, // Claude Code supports Skills API
31
32
  hasCommands: true,
32
33
  commandPrefix: '/',
33
34
  },
34
35
  },
35
36
  'github-copilot': {
36
37
  label: 'GitHub Copilot',
37
- description: 'Installs MUSUBI prompts in `.github/prompts/`, agents in `.github/AGENTS.md`, and steering in `steering/`',
38
+ description:
39
+ 'Installs MUSUBI prompts in `.github/prompts/`, agents in `.github/AGENTS.md`, and steering in `steering/`',
38
40
  aliasFlags: ['--copilot', '--github-copilot'],
39
41
  recommendedModels: ['Claude Sonnet 4.5 or newer', 'GPT-4'],
40
42
  layout: {
41
43
  commandsDir: '.github/prompts',
42
44
  agentDir: '.github',
43
- docFile: 'AGENTS.md', // Main doc file
45
+ docFile: 'AGENTS.md', // Main doc file
44
46
  agentsFile: '.github/AGENTS.md', // 25 agents definition
45
47
  },
46
48
  commands: {
@@ -52,20 +54,21 @@ const agentDefinitions = {
52
54
  validate: '#sdd-validate <feature>',
53
55
  },
54
56
  features: {
55
- hasSkills: true, // AGENTS.md provides 25 agents
57
+ hasSkills: true, // AGENTS.md provides 25 agents
56
58
  hasCommands: true,
57
59
  commandPrefix: '#',
58
60
  },
59
61
  },
60
- 'cursor': {
62
+ cursor: {
61
63
  label: 'Cursor IDE',
62
- description: 'Installs MUSUBI commands in `.cursor/commands/`, agents in `.cursor/AGENTS.md`, and steering in `steering/`',
64
+ description:
65
+ 'Installs MUSUBI commands in `.cursor/commands/`, agents in `.cursor/AGENTS.md`, and steering in `steering/`',
63
66
  aliasFlags: ['--cursor'],
64
67
  recommendedModels: ['Claude Sonnet 4.5 or newer', 'GPT-4'],
65
68
  layout: {
66
69
  commandsDir: '.cursor/commands',
67
70
  agentDir: '.cursor',
68
- docFile: 'AGENTS.md', // Main doc file
71
+ docFile: 'AGENTS.md', // Main doc file
69
72
  agentsFile: '.cursor/AGENTS.md', // 25 agents definition
70
73
  },
71
74
  commands: {
@@ -77,21 +80,22 @@ const agentDefinitions = {
77
80
  validate: '/sdd-validate <feature>',
78
81
  },
79
82
  features: {
80
- hasSkills: true, // AGENTS.md provides 25 agents
83
+ hasSkills: true, // AGENTS.md provides 25 agents
81
84
  hasCommands: true,
82
85
  commandPrefix: '/',
83
86
  },
84
87
  },
85
88
  'gemini-cli': {
86
89
  label: 'Gemini CLI',
87
- description: 'Installs MUSUBI commands in `.gemini/commands/` (TOML format), agents in `GEMINI.md`, and steering in `steering/`',
90
+ description:
91
+ 'Installs MUSUBI commands in `.gemini/commands/` (TOML format), agents in `GEMINI.md`, and steering in `steering/`',
88
92
  aliasFlags: ['--gemini-cli', '--gemini'],
89
93
  recommendedModels: ['Gemini 2.0 Flash or newer'],
90
94
  layout: {
91
95
  commandsDir: '.gemini/commands',
92
96
  agentDir: '.gemini',
93
97
  docFile: 'GEMINI.md',
94
- agentsFile: 'GEMINI.md', // Agents embedded in GEMINI.md
98
+ agentsFile: 'GEMINI.md', // Agents embedded in GEMINI.md
95
99
  },
96
100
  commands: {
97
101
  steering: '/sdd-steering',
@@ -102,22 +106,23 @@ const agentDefinitions = {
102
106
  validate: '/sdd-validate <feature>',
103
107
  },
104
108
  features: {
105
- hasSkills: true, // GEMINI.md provides 25 agents
109
+ hasSkills: true, // GEMINI.md provides 25 agents
106
110
  hasCommands: true,
107
111
  commandPrefix: '/',
108
- commandFormat: 'toml', // Unique: Gemini uses TOML instead of Markdown
112
+ commandFormat: 'toml', // Unique: Gemini uses TOML instead of Markdown
109
113
  },
110
114
  },
111
- 'codex': {
115
+ codex: {
112
116
  label: 'Codex CLI',
113
- description: 'Installs MUSUBI prompts in `.codex/prompts/`, agents in `.codex/AGENTS.md`, and steering in `steering/`',
117
+ description:
118
+ 'Installs MUSUBI prompts in `.codex/prompts/`, agents in `.codex/AGENTS.md`, and steering in `steering/`',
114
119
  aliasFlags: ['--codex', '--codex-cli'],
115
120
  recommendedModels: ['GPT-4 or newer'],
116
121
  layout: {
117
122
  commandsDir: '.codex/prompts',
118
123
  agentDir: '.codex',
119
- docFile: 'AGENTS.md', // Main doc file
120
- agentsFile: '.codex/AGENTS.md', // 25 agents definition
124
+ docFile: 'AGENTS.md', // Main doc file
125
+ agentsFile: '.codex/AGENTS.md', // 25 agents definition
121
126
  },
122
127
  commands: {
123
128
  steering: '/prompts:sdd-steering',
@@ -128,21 +133,22 @@ const agentDefinitions = {
128
133
  validate: '/prompts:sdd-validate <feature>',
129
134
  },
130
135
  features: {
131
- hasSkills: true, // AGENTS.md provides 25 agents
136
+ hasSkills: true, // AGENTS.md provides 25 agents
132
137
  hasCommands: true,
133
138
  commandPrefix: '/prompts:',
134
139
  },
135
140
  },
136
141
  'qwen-code': {
137
142
  label: 'Qwen Code',
138
- description: 'Installs MUSUBI commands in `.qwen/commands/`, agents in `.qwen/AGENTS.md`, and steering in `steering/`',
143
+ description:
144
+ 'Installs MUSUBI commands in `.qwen/commands/`, agents in `.qwen/AGENTS.md`, and steering in `steering/`',
139
145
  aliasFlags: ['--qwen-code', '--qwen'],
140
146
  recommendedModels: ['Qwen 2.5 Coder or newer'],
141
147
  layout: {
142
148
  commandsDir: '.qwen/commands',
143
149
  agentDir: '.qwen',
144
150
  docFile: 'QWEN.md',
145
- agentsFile: '.qwen/AGENTS.md', // 25 agents definition
151
+ agentsFile: '.qwen/AGENTS.md', // 25 agents definition
146
152
  },
147
153
  commands: {
148
154
  steering: '/sdd-steering',
@@ -153,21 +159,22 @@ const agentDefinitions = {
153
159
  validate: '/sdd-validate <feature>',
154
160
  },
155
161
  features: {
156
- hasSkills: true, // AGENTS.md provides 25 agents
162
+ hasSkills: true, // AGENTS.md provides 25 agents
157
163
  hasCommands: true,
158
164
  commandPrefix: '/',
159
165
  },
160
166
  },
161
- 'windsurf': {
167
+ windsurf: {
162
168
  label: 'Windsurf IDE',
163
- description: 'Installs MUSUBI workflows in `.windsurf/workflows/`, agents in `.windsurf/AGENTS.md`, and steering in `steering/`',
169
+ description:
170
+ 'Installs MUSUBI workflows in `.windsurf/workflows/`, agents in `.windsurf/AGENTS.md`, and steering in `steering/`',
164
171
  aliasFlags: ['--windsurf'],
165
172
  recommendedModels: ['Claude Sonnet 4.5 or newer', 'GPT-4'],
166
173
  layout: {
167
174
  commandsDir: '.windsurf/workflows',
168
175
  agentDir: '.windsurf',
169
- docFile: 'AGENTS.md', // Main doc file
170
- agentsFile: '.windsurf/AGENTS.md', // 25 agents definition
176
+ docFile: 'AGENTS.md', // Main doc file
177
+ agentsFile: '.windsurf/AGENTS.md', // 25 agents definition
171
178
  },
172
179
  commands: {
173
180
  steering: '/sdd-steering',
@@ -178,7 +185,7 @@ const agentDefinitions = {
178
185
  validate: '/sdd-validate <feature>',
179
186
  },
180
187
  features: {
181
- hasSkills: true, // AGENTS.md provides 25 agents
188
+ hasSkills: true, // AGENTS.md provides 25 agents
182
189
  hasCommands: true,
183
190
  commandPrefix: '/',
184
191
  },
@@ -209,7 +216,7 @@ function detectAgentFromFlags(options) {
209
216
  for (const flag of definition.aliasFlags) {
210
217
  const flagName = flag.replace(/^--/, '');
211
218
  // Convert kebab-case to camelCase for commander compatibility
212
- const camelCaseFlagName = flagName.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
219
+ const camelCaseFlagName = flagName.replace(/-([a-z])/g, g => g[1].toUpperCase());
213
220
  if (options[flagName] || options[camelCaseFlagName]) {
214
221
  return agentKey;
215
222
  }