namnam-skills 1.0.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 (155) hide show
  1. package/README.md +223 -0
  2. package/package.json +63 -0
  3. package/src/cli.js +460 -0
  4. package/src/index.js +1 -0
  5. package/src/postinstall.js +162 -0
  6. package/src/templates/bmad/bmb/agents/agent-builder.md +14 -0
  7. package/src/templates/bmad/bmb/agents/module-builder.md +14 -0
  8. package/src/templates/bmad/bmb/agents/workflow-builder.md +14 -0
  9. package/src/templates/bmad/bmb/workflows/agent.md +5 -0
  10. package/src/templates/bmad/bmb/workflows/module.md +5 -0
  11. package/src/templates/bmad/bmb/workflows/workflow.md +5 -0
  12. package/src/templates/bmad/bmgd/agents/game-architect.md +14 -0
  13. package/src/templates/bmad/bmgd/agents/game-designer.md +14 -0
  14. package/src/templates/bmad/bmgd/agents/game-dev.md +14 -0
  15. package/src/templates/bmad/bmgd/agents/game-qa.md +14 -0
  16. package/src/templates/bmad/bmgd/agents/game-scrum-master.md +14 -0
  17. package/src/templates/bmad/bmgd/agents/game-solo-dev.md +14 -0
  18. package/src/templates/bmad/bmgd/workflows/brainstorm-game.md +13 -0
  19. package/src/templates/bmad/bmgd/workflows/code-review.md +13 -0
  20. package/src/templates/bmad/bmgd/workflows/correct-course.md +13 -0
  21. package/src/templates/bmad/bmgd/workflows/create-game-brief.md +5 -0
  22. package/src/templates/bmad/bmgd/workflows/create-gdd.md +5 -0
  23. package/src/templates/bmad/bmgd/workflows/create-story.md +13 -0
  24. package/src/templates/bmad/bmgd/workflows/dev-story.md +13 -0
  25. package/src/templates/bmad/bmgd/workflows/game-architecture.md +13 -0
  26. package/src/templates/bmad/bmgd/workflows/game-brief.md +13 -0
  27. package/src/templates/bmad/bmgd/workflows/gametest-automate.md +13 -0
  28. package/src/templates/bmad/bmgd/workflows/gametest-framework.md +13 -0
  29. package/src/templates/bmad/bmgd/workflows/gametest-performance.md +13 -0
  30. package/src/templates/bmad/bmgd/workflows/gametest-playtest-plan.md +13 -0
  31. package/src/templates/bmad/bmgd/workflows/gametest-test-design.md +13 -0
  32. package/src/templates/bmad/bmgd/workflows/gametest-test-review.md +13 -0
  33. package/src/templates/bmad/bmgd/workflows/gdd.md +13 -0
  34. package/src/templates/bmad/bmgd/workflows/generate-project-context.md +5 -0
  35. package/src/templates/bmad/bmgd/workflows/narrative.md +13 -0
  36. package/src/templates/bmad/bmgd/workflows/quick-dev.md +13 -0
  37. package/src/templates/bmad/bmgd/workflows/quick-prototype.md +13 -0
  38. package/src/templates/bmad/bmgd/workflows/quick-spec.md +13 -0
  39. package/src/templates/bmad/bmgd/workflows/retrospective.md +13 -0
  40. package/src/templates/bmad/bmgd/workflows/sprint-planning.md +13 -0
  41. package/src/templates/bmad/bmgd/workflows/sprint-status.md +13 -0
  42. package/src/templates/bmad/bmgd/workflows/workflow-init.md +13 -0
  43. package/src/templates/bmad/bmgd/workflows/workflow-status.md +13 -0
  44. package/src/templates/bmad/bmm/agents/analyst.md +14 -0
  45. package/src/templates/bmad/bmm/agents/architect.md +14 -0
  46. package/src/templates/bmad/bmm/agents/dev.md +14 -0
  47. package/src/templates/bmad/bmm/agents/pm.md +14 -0
  48. package/src/templates/bmad/bmm/agents/quick-flow-solo-dev.md +14 -0
  49. package/src/templates/bmad/bmm/agents/sm.md +14 -0
  50. package/src/templates/bmad/bmm/agents/tea.md +14 -0
  51. package/src/templates/bmad/bmm/agents/tech-writer.md +14 -0
  52. package/src/templates/bmad/bmm/agents/ux-designer.md +14 -0
  53. package/src/templates/bmad/bmm/workflows/check-implementation-readiness.md +5 -0
  54. package/src/templates/bmad/bmm/workflows/code-review.md +13 -0
  55. package/src/templates/bmad/bmm/workflows/correct-course.md +13 -0
  56. package/src/templates/bmad/bmm/workflows/create-architecture.md +5 -0
  57. package/src/templates/bmad/bmm/workflows/create-epics-and-stories.md +5 -0
  58. package/src/templates/bmad/bmm/workflows/create-excalidraw-dataflow.md +13 -0
  59. package/src/templates/bmad/bmm/workflows/create-excalidraw-diagram.md +13 -0
  60. package/src/templates/bmad/bmm/workflows/create-excalidraw-flowchart.md +13 -0
  61. package/src/templates/bmad/bmm/workflows/create-excalidraw-wireframe.md +13 -0
  62. package/src/templates/bmad/bmm/workflows/create-product-brief.md +5 -0
  63. package/src/templates/bmad/bmm/workflows/create-story.md +13 -0
  64. package/src/templates/bmad/bmm/workflows/create-ux-design.md +5 -0
  65. package/src/templates/bmad/bmm/workflows/dev-story.md +13 -0
  66. package/src/templates/bmad/bmm/workflows/document-project.md +13 -0
  67. package/src/templates/bmad/bmm/workflows/generate-project-context.md +5 -0
  68. package/src/templates/bmad/bmm/workflows/prd.md +5 -0
  69. package/src/templates/bmad/bmm/workflows/quick-dev.md +5 -0
  70. package/src/templates/bmad/bmm/workflows/quick-spec.md +5 -0
  71. package/src/templates/bmad/bmm/workflows/research.md +5 -0
  72. package/src/templates/bmad/bmm/workflows/retrospective.md +13 -0
  73. package/src/templates/bmad/bmm/workflows/sprint-planning.md +13 -0
  74. package/src/templates/bmad/bmm/workflows/sprint-status.md +13 -0
  75. package/src/templates/bmad/bmm/workflows/testarch-atdd.md +13 -0
  76. package/src/templates/bmad/bmm/workflows/testarch-automate.md +13 -0
  77. package/src/templates/bmad/bmm/workflows/testarch-ci.md +13 -0
  78. package/src/templates/bmad/bmm/workflows/testarch-framework.md +13 -0
  79. package/src/templates/bmad/bmm/workflows/testarch-nfr.md +13 -0
  80. package/src/templates/bmad/bmm/workflows/testarch-test-design.md +13 -0
  81. package/src/templates/bmad/bmm/workflows/testarch-test-review.md +13 -0
  82. package/src/templates/bmad/bmm/workflows/testarch-trace.md +13 -0
  83. package/src/templates/bmad/bmm/workflows/workflow-init.md +13 -0
  84. package/src/templates/bmad/bmm/workflows/workflow-status.md +13 -0
  85. package/src/templates/bmad/cis/agents/brainstorming-coach.md +14 -0
  86. package/src/templates/bmad/cis/agents/creative-problem-solver.md +14 -0
  87. package/src/templates/bmad/cis/agents/design-thinking-coach.md +14 -0
  88. package/src/templates/bmad/cis/agents/innovation-strategist.md +14 -0
  89. package/src/templates/bmad/cis/agents/presentation-master.md +14 -0
  90. package/src/templates/bmad/cis/agents/storyteller.md +14 -0
  91. package/src/templates/bmad/cis/workflows/design-thinking.md +13 -0
  92. package/src/templates/bmad/cis/workflows/innovation-strategy.md +13 -0
  93. package/src/templates/bmad/cis/workflows/problem-solving.md +13 -0
  94. package/src/templates/bmad/cis/workflows/storytelling.md +13 -0
  95. package/src/templates/bmad/core/agents/bmad-master.md +14 -0
  96. package/src/templates/bmad/core/tasks/index-docs.md +9 -0
  97. package/src/templates/bmad/core/tasks/shard-doc.md +9 -0
  98. package/src/templates/bmad/core/workflows/brainstorming.md +5 -0
  99. package/src/templates/bmad/core/workflows/party-mode.md +5 -0
  100. package/src/templates/claudekit/agents/ai-sdk-expert.md +135 -0
  101. package/src/templates/claudekit/agents/cli-expert.md +135 -0
  102. package/src/templates/claudekit/agents/code-review-expert.md +132 -0
  103. package/src/templates/claudekit/agents/code-search.md +83 -0
  104. package/src/templates/claudekit/agents/nestjs-expert.md +128 -0
  105. package/src/templates/claudekit/agents/oracle.md +120 -0
  106. package/src/templates/claudekit/agents/research-expert.md +115 -0
  107. package/src/templates/claudekit/agents/triage-expert.md +116 -0
  108. package/src/templates/claudekit/commands/checkpoint-create.md +54 -0
  109. package/src/templates/claudekit/commands/checkpoint-list.md +40 -0
  110. package/src/templates/claudekit/commands/checkpoint-restore.md +50 -0
  111. package/src/templates/claudekit/commands/create-command.md +107 -0
  112. package/src/templates/claudekit/commands/create-subagent.md +96 -0
  113. package/src/templates/core/code-review.md +70 -0
  114. package/src/templates/core/git-commit.md +57 -0
  115. package/src/templates/core/git-push.md +53 -0
  116. package/src/templates/core/git-status.md +48 -0
  117. package/src/templates/core/namnam.md +324 -0
  118. package/src/templates/core/validate-and-fix.md +69 -0
  119. package/src/templates/cursor-rules/data-science-ml.md +54 -0
  120. package/src/templates/cursor-rules/devops-infrastructure.md +59 -0
  121. package/src/templates/cursor-rules/golang-expert.md +61 -0
  122. package/src/templates/cursor-rules/nestjs-expert.md +60 -0
  123. package/src/templates/cursor-rules/python-expert.md +53 -0
  124. package/src/templates/cursor-rules/react-native-expo.md +51 -0
  125. package/src/templates/cursor-rules/rust-expert.md +61 -0
  126. package/src/templates/cursor-rules/solidity-web3.md +54 -0
  127. package/src/templates/cursor-rules/typescript-expert.md +42 -0
  128. package/src/templates/cursor-rules/vue-nuxt-expert.md +50 -0
  129. package/src/templates/official-plugins/claude-opus-migration.md +33 -0
  130. package/src/templates/official-plugins/commit-push-pr.md +55 -0
  131. package/src/templates/official-plugins/commit.md +60 -0
  132. package/src/templates/official-plugins/feature-dev.md +65 -0
  133. package/src/templates/official-plugins/frontend-design.md +53 -0
  134. package/src/templates/official-plugins/hookify.md +52 -0
  135. package/src/templates/official-plugins/new-sdk-app.md +45 -0
  136. package/src/templates/official-plugins/plugin-dev.md +53 -0
  137. package/src/templates/official-plugins/pr-review-toolkit.md +68 -0
  138. package/src/templates/official-plugins/ralph-loop.md +51 -0
  139. package/src/templates/official-plugins/security-guidance.md +36 -0
  140. package/src/templates/platforms/AGENTS.md +326 -0
  141. package/src/templates/platforms/aider/aider-template.md +75 -0
  142. package/src/templates/platforms/cline/clinerules-template.md +205 -0
  143. package/src/templates/platforms/codex/codex-template.md +74 -0
  144. package/src/templates/platforms/cursor/cursorrules-template.md +124 -0
  145. package/src/templates/platforms/gemini/gemini-template.md +93 -0
  146. package/src/templates/platforms/windsurf/windsurfrules-template.md +166 -0
  147. package/src/templates/system-prompts/cline-agent-patterns.md +286 -0
  148. package/src/templates/system-prompts/cursor-agent-patterns.md +177 -0
  149. package/src/templates/system-prompts/google-antigravity-patterns.md +274 -0
  150. package/src/templates/system-prompts/industry-best-practices.md +334 -0
  151. package/src/templates/system-prompts/multi-platform-engineering.md +343 -0
  152. package/src/templates/system-prompts/vscode-agent-patterns.md +288 -0
  153. package/src/templates/system-prompts/windsurf-cascade-patterns.md +264 -0
  154. package/src/templates/vercel-skills/react-best-practices.md +117 -0
  155. package/src/templates/vercel-skills/web-design-guidelines.md +88 -0
package/src/cli.js ADDED
@@ -0,0 +1,460 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Command } from 'commander';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import fs from 'fs-extra';
7
+ import path from 'path';
8
+ import { fileURLToPath } from 'url';
9
+ import inquirer from 'inquirer';
10
+
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+
14
+ const program = new Command();
15
+
16
+ // ASCII Art Banner
17
+ const banner = `
18
+ ${chalk.cyan('╔══════════════════════════════════════════════════════════════╗')}
19
+ ${chalk.cyan('║')} ${chalk.yellow.bold('NAMNAM SKILLS')} ${chalk.cyan('║')}
20
+ ${chalk.cyan('║')} ${chalk.gray('Universal AI Skills Installer')} ${chalk.cyan('║')}
21
+ ${chalk.cyan('║')} ${chalk.green('Claude • Codex • Cursor • Windsurf • Cline • Aider')} ${chalk.cyan('║')}
22
+ ${chalk.cyan('║')} ${chalk.magenta('150+ Agents | Workflows | Industry Prompts')} ${chalk.cyan('║')}
23
+ ${chalk.cyan('╚══════════════════════════════════════════════════════════════╝')}
24
+ `;
25
+
26
+ // Skill categories
27
+ const SKILL_CATEGORIES = {
28
+ core: {
29
+ name: 'Core Skills',
30
+ description: 'Essential: /namnam orchestrator, git, code-review, validate-and-fix',
31
+ folder: 'core'
32
+ },
33
+ platforms: {
34
+ name: 'AI Platforms Config',
35
+ description: 'Cursor, Windsurf, Cline, Codex, Aider, Gemini templates + AGENTS.md',
36
+ folder: 'platforms'
37
+ },
38
+ official_plugins: {
39
+ name: 'Official Anthropic Plugins',
40
+ description: 'feature-dev, commit, PR review, hookify, security, ralph-loop, frontend-design (11 files)',
41
+ folder: 'official-plugins'
42
+ },
43
+ vercel: {
44
+ name: 'Vercel Skills',
45
+ description: 'React best practices (51 rules), web design guidelines',
46
+ folder: 'vercel-skills'
47
+ },
48
+ claudekit: {
49
+ name: 'ClaudeKit',
50
+ description: 'Oracle, triage-expert, research-expert, code-search, checkpoints',
51
+ folder: 'claudekit'
52
+ },
53
+ bmad_bmm: {
54
+ name: 'BMAD BMM (Business Method)',
55
+ description: 'Business analysis, architecture, PRD, sprint planning workflows',
56
+ folder: 'bmad/bmm'
57
+ },
58
+ bmad_bmgd: {
59
+ name: 'BMAD BMGD (Game Development)',
60
+ description: 'Game design, GDD, game architecture, testing workflows',
61
+ folder: 'bmad/bmgd'
62
+ },
63
+ bmad_cis: {
64
+ name: 'BMAD CIS (Creative Innovation)',
65
+ description: 'Brainstorming, design thinking, innovation, storytelling',
66
+ folder: 'bmad/cis'
67
+ },
68
+ bmad_bmb: {
69
+ name: 'BMAD BMB (Builder)',
70
+ description: 'Agent builder, module builder, workflow builder',
71
+ folder: 'bmad/bmb'
72
+ },
73
+ bmad_core: {
74
+ name: 'BMAD Core',
75
+ description: 'BMAD master agent, brainstorming, party mode',
76
+ folder: 'bmad/core'
77
+ },
78
+ cursor_rules: {
79
+ name: 'Cursor Rules Collection',
80
+ description: 'Expert rules: TypeScript, Python, React Native, Vue, Solidity, Go, Rust, DevOps',
81
+ folder: 'cursor-rules'
82
+ },
83
+ system_prompts: {
84
+ name: 'System Prompts Collection',
85
+ description: 'Industry best practices from 30+ AI tools: Claude Code, Cursor, Windsurf, Cline, Antigravity',
86
+ folder: 'system-prompts'
87
+ },
88
+ all: {
89
+ name: 'All Skills',
90
+ description: 'Install EVERYTHING - 150+ skills, agents, workflows, and platform configs',
91
+ folder: '*'
92
+ }
93
+ };
94
+
95
+ // Supported AI Platforms
96
+ const AI_PLATFORMS = {
97
+ claude: { file: '.claude/', name: 'Claude Code' },
98
+ cursor: { file: '.cursorrules', name: 'Cursor' },
99
+ windsurf: { file: '.windsurfrules', name: 'Windsurf' },
100
+ cline: { file: '.clinerules', name: 'Cline' },
101
+ aider: { file: '.aider.conf.yml', name: 'Aider' },
102
+ codex: { file: 'codex.md', name: 'OpenAI Codex' },
103
+ gemini: { file: 'GEMINI.md', name: 'Google Gemini' },
104
+ universal: { file: 'AGENTS.md', name: 'Universal (All Platforms)' }
105
+ };
106
+
107
+ program
108
+ .name('namnam')
109
+ .description('Universal AI Skills Installer - Supports Claude, Codex, Cursor, Windsurf, Cline, Aider, Gemini')
110
+ .version('2.0.0');
111
+
112
+ program
113
+ .command('init')
114
+ .description('Initialize AI skills in current project')
115
+ .option('-a, --all', 'Install all skills and platform configs')
116
+ .option('-c, --category <category>', 'Install specific category')
117
+ .option('-i, --interactive', 'Interactive mode - choose what to install')
118
+ .option('-f, --force', 'Overwrite existing files')
119
+ .option('-p, --platforms', 'Also generate platform config files (.cursorrules, etc.)')
120
+ .action(async (options) => {
121
+ console.log(banner);
122
+
123
+ const cwd = process.cwd();
124
+ const claudeDir = path.join(cwd, '.claude', 'commands');
125
+
126
+ // Check if .claude directory exists
127
+ const hasClaudeDir = await fs.pathExists(path.join(cwd, '.claude'));
128
+
129
+ if (!hasClaudeDir) {
130
+ console.log(chalk.yellow('\n⚠️ No .claude directory found. Creating one...\n'));
131
+ }
132
+
133
+ let selectedCategories = [];
134
+ let generatePlatformConfigs = options.platforms || false;
135
+
136
+ if (options.interactive) {
137
+ // Interactive mode
138
+ const answers = await inquirer.prompt([
139
+ {
140
+ type: 'checkbox',
141
+ name: 'categories',
142
+ message: 'Select skill categories to install:',
143
+ choices: Object.entries(SKILL_CATEGORIES).map(([key, value]) => ({
144
+ name: `${chalk.cyan(value.name)} - ${chalk.gray(value.description)}`,
145
+ value: key,
146
+ checked: key === 'core' || key === 'platforms'
147
+ }))
148
+ },
149
+ {
150
+ type: 'confirm',
151
+ name: 'generateConfigs',
152
+ message: 'Generate platform config files (.cursorrules, .windsurfrules, etc.)?',
153
+ default: true
154
+ }
155
+ ]);
156
+ selectedCategories = answers.categories;
157
+ generatePlatformConfigs = answers.generateConfigs;
158
+ } else if (options.all) {
159
+ selectedCategories = ['all'];
160
+ generatePlatformConfigs = true;
161
+ } else if (options.category) {
162
+ if (!SKILL_CATEGORIES[options.category]) {
163
+ console.log(chalk.red(`\n❌ Unknown category: ${options.category}`));
164
+ console.log(chalk.gray('Available categories:'), Object.keys(SKILL_CATEGORIES).join(', '));
165
+ process.exit(1);
166
+ }
167
+ selectedCategories = [options.category];
168
+ } else {
169
+ // Default: install core + platforms
170
+ selectedCategories = ['core', 'platforms'];
171
+ console.log(chalk.cyan('\n📦 Installing core skills and platform configs...\n'));
172
+ console.log(chalk.gray('Tip: Use --interactive for more options, or --all for everything\n'));
173
+ }
174
+
175
+ const spinner = ora('Installing skills...').start();
176
+
177
+ try {
178
+ // Create .claude/commands directory
179
+ await fs.ensureDir(claudeDir);
180
+
181
+ // Copy templates
182
+ const templatesDir = path.join(__dirname, 'templates');
183
+ let copiedCount = 0;
184
+
185
+ if (selectedCategories.includes('all')) {
186
+ // Copy everything
187
+ const folders = ['core', 'platforms', 'official-plugins', 'vercel-skills', 'claudekit', 'bmad', 'cursor-rules', 'system-prompts'];
188
+ for (const folder of folders) {
189
+ const srcDir = path.join(templatesDir, folder);
190
+ if (await fs.pathExists(srcDir)) {
191
+ await fs.copy(srcDir, path.join(claudeDir, folder), { overwrite: options.force });
192
+ copiedCount += await countFiles(srcDir);
193
+ }
194
+ }
195
+ } else {
196
+ // Copy selected categories
197
+ for (const category of selectedCategories) {
198
+ const catConfig = SKILL_CATEGORIES[category];
199
+ if (!catConfig) continue;
200
+
201
+ const srcDir = path.join(templatesDir, catConfig.folder);
202
+ if (await fs.pathExists(srcDir)) {
203
+ const destDir = path.join(claudeDir, catConfig.folder);
204
+ await fs.copy(srcDir, destDir, { overwrite: options.force });
205
+ copiedCount += await countFiles(srcDir);
206
+ }
207
+ }
208
+ }
209
+
210
+ spinner.succeed(chalk.green(`Successfully installed ${copiedCount} skill files!`));
211
+
212
+ // Generate platform config files if requested
213
+ if (generatePlatformConfigs) {
214
+ console.log(chalk.cyan('\n📝 Generating platform config files...'));
215
+ await generatePlatformFiles(cwd, templatesDir, options.force);
216
+ }
217
+
218
+ // Summary
219
+ console.log(chalk.cyan('\n✨ Skills installed to: .claude/commands/'));
220
+ console.log(chalk.white('\nInstalled categories:'));
221
+ for (const cat of selectedCategories) {
222
+ const config = SKILL_CATEGORIES[cat];
223
+ if (config) {
224
+ console.log(chalk.gray(` • ${config.name}`));
225
+ }
226
+ }
227
+
228
+ console.log(chalk.cyan('\n🚀 Quick Start:'));
229
+ console.log(chalk.white(' /namnam <task> - Orchestrate all agents'));
230
+ console.log(chalk.white(' /namnam --full <task> - Maximum power mode'));
231
+ console.log(chalk.white(' /namnam --multi-platform - Sync all AI configs'));
232
+ console.log(chalk.white(' /code-review - Multi-aspect code review'));
233
+ console.log(chalk.white(' /validate-and-fix - Run checks and auto-fix'));
234
+
235
+ console.log(chalk.magenta('\n🤖 Supported AI Platforms:'));
236
+ console.log(chalk.white(' Claude Code, Codex, Cursor, Windsurf, Cline, Aider, Gemini'));
237
+
238
+ } catch (error) {
239
+ spinner.fail(chalk.red('Installation failed!'));
240
+ console.error(chalk.red(error.message));
241
+ process.exit(1);
242
+ }
243
+ });
244
+
245
+ program
246
+ .command('platforms')
247
+ .description('Generate config files for all AI platforms')
248
+ .option('-f, --force', 'Overwrite existing files')
249
+ .action(async (options) => {
250
+ console.log(banner);
251
+
252
+ const cwd = process.cwd();
253
+ const templatesDir = path.join(__dirname, 'templates');
254
+
255
+ console.log(chalk.cyan('\n📝 Generating platform config files...\n'));
256
+ await generatePlatformFiles(cwd, templatesDir, options.force);
257
+
258
+ console.log(chalk.green('\n✅ Platform configs generated!'));
259
+ console.log(chalk.gray('\nFiles created:'));
260
+ for (const [key, platform] of Object.entries(AI_PLATFORMS)) {
261
+ const filePath = path.join(cwd, platform.file);
262
+ const exists = await fs.pathExists(filePath);
263
+ if (exists) {
264
+ console.log(chalk.white(` • ${platform.file} (${platform.name})`));
265
+ }
266
+ }
267
+ });
268
+
269
+ program
270
+ .command('list')
271
+ .description('List all available skill categories')
272
+ .action(() => {
273
+ console.log(banner);
274
+ console.log(chalk.cyan('\n📚 Available Skill Categories:\n'));
275
+
276
+ Object.entries(SKILL_CATEGORIES).forEach(([key, value]) => {
277
+ console.log(chalk.yellow(` ${key}`));
278
+ console.log(chalk.white(` ${value.name}`));
279
+ console.log(chalk.gray(` ${value.description}`));
280
+ console.log();
281
+ });
282
+
283
+ console.log(chalk.magenta('\n🤖 Supported AI Platforms:\n'));
284
+ Object.entries(AI_PLATFORMS).forEach(([key, value]) => {
285
+ console.log(chalk.white(` ${value.name}`), chalk.gray(`(${value.file})`));
286
+ });
287
+
288
+ console.log(chalk.cyan('\nUsage:'));
289
+ console.log(chalk.white(' npx namnam-skills init --category <category>'));
290
+ console.log(chalk.white(' npx namnam-skills init --all'));
291
+ console.log(chalk.white(' npx namnam-skills init --interactive'));
292
+ console.log(chalk.white(' npx namnam-skills platforms'));
293
+ });
294
+
295
+ program
296
+ .command('update')
297
+ .description('Update skills to latest version')
298
+ .action(async () => {
299
+ console.log(banner);
300
+ const spinner = ora('Checking for updates...').start();
301
+
302
+ spinner.info('Update functionality coming soon!');
303
+ console.log(chalk.gray('\nFor now, run: npm update -g namnam-skills'));
304
+ });
305
+
306
+ program
307
+ .command('uninstall')
308
+ .description('Remove all installed skills')
309
+ .action(async () => {
310
+ console.log(banner);
311
+
312
+ const answers = await inquirer.prompt([
313
+ {
314
+ type: 'confirm',
315
+ name: 'confirm',
316
+ message: 'Are you sure you want to remove all skills?',
317
+ default: false
318
+ }
319
+ ]);
320
+
321
+ if (answers.confirm) {
322
+ const spinner = ora('Removing skills...').start();
323
+ const cwd = process.cwd();
324
+ const claudeDir = path.join(cwd, '.claude', 'commands');
325
+
326
+ try {
327
+ await fs.remove(claudeDir);
328
+ spinner.succeed(chalk.green('Skills removed successfully!'));
329
+ } catch (error) {
330
+ spinner.fail(chalk.red('Failed to remove skills'));
331
+ console.error(error.message);
332
+ }
333
+ }
334
+ });
335
+
336
+ program
337
+ .command('info')
338
+ .description('Show information about installed skills and detected platforms')
339
+ .action(async () => {
340
+ console.log(banner);
341
+
342
+ const cwd = process.cwd();
343
+ const claudeDir = path.join(cwd, '.claude', 'commands');
344
+
345
+ // Detect AI platforms
346
+ console.log(chalk.magenta('\n🤖 Detected AI Platforms:\n'));
347
+ for (const [key, platform] of Object.entries(AI_PLATFORMS)) {
348
+ const filePath = path.join(cwd, platform.file);
349
+ const exists = await fs.pathExists(filePath);
350
+ const status = exists ? chalk.green('✓') : chalk.gray('○');
351
+ console.log(` ${status} ${platform.name} (${platform.file})`);
352
+ }
353
+
354
+ // Skills info
355
+ if (!(await fs.pathExists(claudeDir))) {
356
+ console.log(chalk.yellow('\n⚠️ No skills installed. Run `namnam init` to install.'));
357
+ return;
358
+ }
359
+
360
+ const count = await countFiles(claudeDir);
361
+ console.log(chalk.green(`\n✅ ${count} skill files installed`));
362
+ console.log(chalk.gray(` Location: ${claudeDir}`));
363
+
364
+ // List folders
365
+ const items = await fs.readdir(claudeDir, { withFileTypes: true });
366
+ const folders = items.filter(i => i.isDirectory()).map(i => i.name);
367
+
368
+ if (folders.length > 0) {
369
+ console.log(chalk.cyan('\nInstalled categories:'));
370
+ for (const folder of folders) {
371
+ const folderPath = path.join(claudeDir, folder);
372
+ const folderCount = await countFiles(folderPath);
373
+ console.log(chalk.white(` • ${folder} (${folderCount} files)`));
374
+ }
375
+ }
376
+ });
377
+
378
+ // Helper function to count files recursively
379
+ async function countFiles(dir) {
380
+ let count = 0;
381
+
382
+ if (!(await fs.pathExists(dir))) {
383
+ return 0;
384
+ }
385
+
386
+ const items = await fs.readdir(dir, { withFileTypes: true });
387
+
388
+ for (const item of items) {
389
+ if (item.isDirectory()) {
390
+ count += await countFiles(path.join(dir, item.name));
391
+ } else if (item.name.endsWith('.md') || item.name.endsWith('.yml') || item.name.endsWith('.json')) {
392
+ count++;
393
+ }
394
+ }
395
+
396
+ return count;
397
+ }
398
+
399
+ // Generate platform config files
400
+ async function generatePlatformFiles(cwd, templatesDir, force = false) {
401
+ const platformsDir = path.join(templatesDir, 'platforms');
402
+
403
+ // Copy AGENTS.md to project root
404
+ const agentsSrc = path.join(platformsDir, 'AGENTS.md');
405
+ const agentsDest = path.join(cwd, 'AGENTS.md');
406
+ if (await fs.pathExists(agentsSrc)) {
407
+ if (force || !(await fs.pathExists(agentsDest))) {
408
+ await fs.copy(agentsSrc, agentsDest);
409
+ console.log(chalk.green(' ✓ AGENTS.md (Universal)'));
410
+ }
411
+ }
412
+
413
+ // Generate .cursorrules
414
+ const cursorSrc = path.join(platformsDir, 'cursor', 'cursorrules-template.md');
415
+ const cursorDest = path.join(cwd, '.cursorrules');
416
+ if (await fs.pathExists(cursorSrc)) {
417
+ if (force || !(await fs.pathExists(cursorDest))) {
418
+ const content = await fs.readFile(cursorSrc, 'utf-8');
419
+ // Extract the rules content from the markdown
420
+ const match = content.match(/```[\s\S]*?```/);
421
+ if (match) {
422
+ const rules = match[0].replace(/```/g, '').trim();
423
+ await fs.writeFile(cursorDest, rules);
424
+ console.log(chalk.green(' ✓ .cursorrules (Cursor)'));
425
+ }
426
+ }
427
+ }
428
+
429
+ // Generate .windsurfrules
430
+ const windsurfSrc = path.join(platformsDir, 'windsurf', 'windsurfrules-template.md');
431
+ const windsurfDest = path.join(cwd, '.windsurfrules');
432
+ if (await fs.pathExists(windsurfSrc)) {
433
+ if (force || !(await fs.pathExists(windsurfDest))) {
434
+ const content = await fs.readFile(windsurfSrc, 'utf-8');
435
+ const match = content.match(/```[\s\S]*?```/);
436
+ if (match) {
437
+ const rules = match[0].replace(/```/g, '').trim();
438
+ await fs.writeFile(windsurfDest, rules);
439
+ console.log(chalk.green(' ✓ .windsurfrules (Windsurf)'));
440
+ }
441
+ }
442
+ }
443
+
444
+ // Generate .clinerules
445
+ const clineSrc = path.join(platformsDir, 'cline', 'clinerules-template.md');
446
+ const clineDest = path.join(cwd, '.clinerules');
447
+ if (await fs.pathExists(clineSrc)) {
448
+ if (force || !(await fs.pathExists(clineDest))) {
449
+ const content = await fs.readFile(clineSrc, 'utf-8');
450
+ const match = content.match(/```yaml[\s\S]*?```/);
451
+ if (match) {
452
+ const rules = match[0].replace(/```yaml/g, '').replace(/```/g, '').trim();
453
+ await fs.writeFile(clineDest, rules);
454
+ console.log(chalk.green(' ✓ .clinerules (Cline)'));
455
+ }
456
+ }
457
+ }
458
+ }
459
+
460
+ program.parse();
package/src/index.js ADDED
@@ -0,0 +1 @@
1
+ export { default } from './cli.js';
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import chalk from 'chalk';
7
+
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+
11
+ // Find the actual project root (where user ran npm install)
12
+ function findProjectRoot() {
13
+ // npm sets INIT_CWD to the directory where npm install was run
14
+ if (process.env.INIT_CWD) {
15
+ return process.env.INIT_CWD;
16
+ }
17
+
18
+ // Fallback: navigate from current directory
19
+ let current = process.cwd();
20
+
21
+ // If we're in node_modules, go to parent
22
+ if (current.includes('node_modules')) {
23
+ const parts = current.split(path.sep + 'node_modules');
24
+ current = parts[0];
25
+ }
26
+
27
+ return current;
28
+ }
29
+
30
+ async function autoInstall() {
31
+ const projectRoot = findProjectRoot();
32
+ const silent = process.env.NAMNAM_SILENT === 'true' || process.env.CI === 'true';
33
+
34
+ // Don't run during npm publish or in the package itself
35
+ if (process.env.npm_lifecycle_event === 'prepublishOnly') return;
36
+ if (projectRoot.includes('namnam-cli') || projectRoot.includes('namnam-skills')) return;
37
+
38
+ const claudeDir = path.join(projectRoot, '.claude', 'commands');
39
+ const templatesDir = path.join(__dirname, 'templates');
40
+
41
+ if (!silent) {
42
+ console.log(chalk.cyan('\n╔══════════════════════════════════════════════════════════════╗'));
43
+ console.log(chalk.cyan('║') + ' ' + chalk.yellow.bold('NAMNAM SKILLS') + ' - Auto Installing... ' + chalk.cyan('║'));
44
+ console.log(chalk.cyan('╚══════════════════════════════════════════════════════════════╝\n'));
45
+ }
46
+
47
+ const results = { success: 0, failed: 0 };
48
+
49
+ try {
50
+ // Create .claude/commands directory
51
+ await fs.ensureDir(claudeDir);
52
+
53
+ // Copy ALL templates with per-folder error handling
54
+ const folders = ['core', 'platforms', 'official-plugins', 'vercel-skills', 'claudekit', 'bmad', 'cursor-rules'];
55
+
56
+ for (const folder of folders) {
57
+ try {
58
+ const srcDir = path.join(templatesDir, folder);
59
+ if (await fs.pathExists(srcDir)) {
60
+ await fs.copy(srcDir, path.join(claudeDir, folder), { overwrite: true });
61
+ results.success += await countFiles(srcDir);
62
+ }
63
+ } catch (error) {
64
+ results.failed++;
65
+ if (!silent) {
66
+ console.log(chalk.yellow(`⚠️ Skipped ${folder}: ${error.message}`));
67
+ }
68
+ }
69
+ }
70
+
71
+ // Generate platform config files
72
+ try {
73
+ await generatePlatformFiles(projectRoot, templatesDir);
74
+ } catch (error) {
75
+ if (!silent) {
76
+ console.log(chalk.yellow(`⚠️ Some platform configs skipped: ${error.message}`));
77
+ }
78
+ }
79
+
80
+ if (!silent) {
81
+ if (results.success > 0) {
82
+ console.log(chalk.green(`✅ Installed ${results.success}+ skill files to .claude/commands/`));
83
+ console.log(chalk.green('✅ Generated platform configs (AGENTS.md, .cursorrules, etc.)'));
84
+ console.log(chalk.cyan('\n🚀 Quick Start:'));
85
+ console.log(chalk.white(' /namnam <task> - Orchestrate all agents'));
86
+ console.log(chalk.white(' /namnam --full <task> - Maximum power mode'));
87
+ console.log(chalk.white(' /code-review - Multi-aspect code review'));
88
+ console.log(chalk.white(' /validate-and-fix - Run checks and auto-fix\n'));
89
+ }
90
+ if (results.failed > 0) {
91
+ console.log(chalk.yellow(`\n⚠️ ${results.failed} folders skipped. Run manually: npx namnam-skills init --all`));
92
+ }
93
+ }
94
+
95
+ } catch (error) {
96
+ // Silent fail - don't break user's install
97
+ if (!silent) {
98
+ console.log(chalk.yellow('⚠️ Auto-install skipped. Run manually: npx namnam-skills init --all'));
99
+ }
100
+ }
101
+ }
102
+
103
+ async function countFiles(dir) {
104
+ let count = 0;
105
+ if (!(await fs.pathExists(dir))) return 0;
106
+
107
+ const items = await fs.readdir(dir, { withFileTypes: true });
108
+ for (const item of items) {
109
+ if (item.isDirectory()) {
110
+ count += await countFiles(path.join(dir, item.name));
111
+ } else if (item.name.endsWith('.md') || item.name.endsWith('.yml') || item.name.endsWith('.json')) {
112
+ count++;
113
+ }
114
+ }
115
+ return count;
116
+ }
117
+
118
+ async function generatePlatformFiles(projectRoot, templatesDir) {
119
+ const platformsDir = path.join(templatesDir, 'platforms');
120
+
121
+ // Copy AGENTS.md (always overwrite for updates)
122
+ const agentsSrc = path.join(platformsDir, 'AGENTS.md');
123
+ const agentsDest = path.join(projectRoot, 'AGENTS.md');
124
+ if (await fs.pathExists(agentsSrc)) {
125
+ await fs.copy(agentsSrc, agentsDest, { overwrite: true });
126
+ }
127
+
128
+ // Generate .cursorrules
129
+ const cursorSrc = path.join(platformsDir, 'cursor', 'cursorrules-template.md');
130
+ const cursorDest = path.join(projectRoot, '.cursorrules');
131
+ if (await fs.pathExists(cursorSrc) && !(await fs.pathExists(cursorDest))) {
132
+ const content = await fs.readFile(cursorSrc, 'utf-8');
133
+ const match = content.match(/```[\s\S]*?```/);
134
+ if (match) {
135
+ await fs.writeFile(cursorDest, match[0].replace(/```/g, '').trim());
136
+ }
137
+ }
138
+
139
+ // Generate .windsurfrules
140
+ const windsurfSrc = path.join(platformsDir, 'windsurf', 'windsurfrules-template.md');
141
+ const windsurfDest = path.join(projectRoot, '.windsurfrules');
142
+ if (await fs.pathExists(windsurfSrc) && !(await fs.pathExists(windsurfDest))) {
143
+ const content = await fs.readFile(windsurfSrc, 'utf-8');
144
+ const match = content.match(/```[\s\S]*?```/);
145
+ if (match) {
146
+ await fs.writeFile(windsurfDest, match[0].replace(/```/g, '').trim());
147
+ }
148
+ }
149
+
150
+ // Generate .clinerules
151
+ const clineSrc = path.join(platformsDir, 'cline', 'clinerules-template.md');
152
+ const clineDest = path.join(projectRoot, '.clinerules');
153
+ if (await fs.pathExists(clineSrc) && !(await fs.pathExists(clineDest))) {
154
+ const content = await fs.readFile(clineSrc, 'utf-8');
155
+ const match = content.match(/```yaml[\s\S]*?```/);
156
+ if (match) {
157
+ await fs.writeFile(clineDest, match[0].replace(/```yaml/g, '').replace(/```/g, '').trim());
158
+ }
159
+ }
160
+ }
161
+
162
+ autoInstall();
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: 'agent-builder'
3
+ description: 'agent-builder agent'
4
+ ---
5
+
6
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
7
+
8
+ <agent-activation CRITICAL="TRUE">
9
+ 1. LOAD the FULL agent file from @_bmad/bmb/agents/agent-builder.md
10
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
11
+ 3. Execute ALL activation steps exactly as written in the agent file
12
+ 4. Follow the agent's persona and menu system precisely
13
+ 5. Stay in character throughout the session
14
+ </agent-activation>
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: 'module-builder'
3
+ description: 'module-builder agent'
4
+ ---
5
+
6
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
7
+
8
+ <agent-activation CRITICAL="TRUE">
9
+ 1. LOAD the FULL agent file from @_bmad/bmb/agents/module-builder.md
10
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
11
+ 3. Execute ALL activation steps exactly as written in the agent file
12
+ 4. Follow the agent's persona and menu system precisely
13
+ 5. Stay in character throughout the session
14
+ </agent-activation>
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: 'workflow-builder'
3
+ description: 'workflow-builder agent'
4
+ ---
5
+
6
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
7
+
8
+ <agent-activation CRITICAL="TRUE">
9
+ 1. LOAD the FULL agent file from @_bmad/bmb/agents/workflow-builder.md
10
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
11
+ 3. Execute ALL activation steps exactly as written in the agent file
12
+ 4. Follow the agent's persona and menu system precisely
13
+ 5. Stay in character throughout the session
14
+ </agent-activation>
@@ -0,0 +1,5 @@
1
+ ---
2
+ description: 'Tri-modal workflow for creating, editing, and validating BMAD Core compliant agents'
3
+ ---
4
+
5
+ IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL @_bmad/bmb/workflows/agent/workflow.md, READ its entire contents and follow its directions exactly!
@@ -0,0 +1,5 @@
1
+ ---
2
+ description: 'Quad-modal workflow for creating BMAD modules (Brief + Create + Edit + Validate)'
3
+ ---
4
+
5
+ IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL @_bmad/bmb/workflows/module/workflow.md, READ its entire contents and follow its directions exactly!