supermind-claude 2.1.0 → 2.1.1

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.
@@ -72,7 +72,7 @@ module.exports = async function install(flags) {
72
72
 
73
73
  // Step 7: Templates
74
74
  logger.step(7, TOTAL, 'Installing templates...');
75
- installTemplates();
75
+ installTemplates(mcpConfig.mode);
76
76
 
77
77
  // Write version marker
78
78
  fs.writeFileSync(PATHS.versionFile, version);
@@ -7,6 +7,7 @@ const { readSettings, writeSettings, mergeSettings, backupSettings } = require('
7
7
  const { installHooks, getHookSettings } = require('../lib/hooks');
8
8
  const { installSkills, removeLegacySkills } = require('../lib/skills');
9
9
  const { installTemplates } = require('../lib/templates');
10
+ const { detectMcpMode } = require('../lib/mcp');
10
11
  const { version } = require('../../package.json');
11
12
 
12
13
  module.exports = function update(flags) {
@@ -44,7 +45,7 @@ module.exports = function update(flags) {
44
45
 
45
46
  // Step 4: Templates
46
47
  logger.step(4, TOTAL, 'Updating templates...');
47
- installTemplates();
48
+ installTemplates(detectMcpMode());
48
49
 
49
50
  // Write version marker
50
51
  fs.writeFileSync(PATHS.versionFile, version);
package/cli/lib/mcp.js CHANGED
@@ -91,22 +91,42 @@ async function setupMcp(flags) {
91
91
  }
92
92
  if (!mode || mode === 'skip') {
93
93
  logger.info('Skipping MCP setup');
94
- return {};
94
+ return { mode: 'skip' };
95
95
  }
96
96
 
97
97
  if (mode === 'docker') {
98
98
  await setupDocker();
99
- return {}; // Docker mode uses AIRIS, not settings.json mcpServers
99
+ return { mode: 'docker' }; // Docker uses AIRIS gateway; mode drives template MCP section
100
100
  }
101
101
 
102
102
  if (mode === 'direct') {
103
103
  const apiKeys = await promptApiKeys(flags);
104
104
  const servers = setupDirect(apiKeys);
105
105
  logger.success(`Configured ${Object.keys(servers).length} MCP servers`);
106
- return { mcpServers: servers };
106
+ return { mode: 'direct', mcpServers: servers };
107
107
  }
108
108
 
109
- return {};
109
+ return { mode: 'skip' };
110
110
  }
111
111
 
112
- module.exports = { setupMcp };
112
+ // Infer MCP mode from installed artifacts. Used by update to re-render the template MCP section.
113
+ function detectMcpMode() {
114
+ if (fs.existsSync(path.join(PATHS.airisDir, 'docker-compose.yml'))) {
115
+ return 'docker';
116
+ }
117
+ // Any known direct-mode server in settings.json means direct install was used
118
+ try {
119
+ const settings = JSON.parse(fs.readFileSync(PATHS.settings, 'utf-8'));
120
+ const servers = settings.mcpServers || {};
121
+ if (servers.context7 || servers.playwright || servers.serena || servers.tavily) {
122
+ return 'direct';
123
+ }
124
+ } catch (err) {
125
+ if (err.code !== 'ENOENT') {
126
+ logger.warn(`Could not read settings.json to detect MCP mode: ${err.message}`);
127
+ }
128
+ }
129
+ return 'skip';
130
+ }
131
+
132
+ module.exports = { setupMcp, detectMcpMode };
@@ -5,11 +5,58 @@ const path = require('path');
5
5
  const { PATHS, ensureDir, getPackageRoot } = require('./platform');
6
6
  const logger = require('./logger');
7
7
 
8
- function installTemplates() {
8
+ const MCP_SECTIONS = {
9
+ docker: `## MCP Servers
10
+ Use these naturally when relevant — don't wait to be asked.
11
+
12
+ - **Magic MCP** — \`component_builder\`, \`component_inspiration\`, \`component_refiner\`, \`logo_search\` — use when building/refining UI components
13
+ - **Airis Gateway** (Docker, localhost:9400) — cold-start sub-servers:
14
+ - **context7** — Library docs lookup
15
+ - **playwright** — Browser automation/testing
16
+ - **serena** — Symbolic code navigation (run \`activate_project\` on first use)
17
+ - **tavily** — Web search/research
18
+ - **chrome-devtools** — Chrome debugging
19
+ - **shadcn** — shadcn/ui component search
20
+ `,
21
+
22
+ direct: `## MCP Servers
23
+ Use these naturally when relevant — don't wait to be asked.
24
+
25
+ - **Magic MCP** — \`component_builder\`, \`component_inspiration\`, \`component_refiner\`, \`logo_search\` — use when building/refining UI components
26
+ - **context7** — Library docs lookup (npx)
27
+ - **playwright** — Browser automation/testing (npx)
28
+ - **serena** — Symbolic code navigation; run \`activate_project\` on first use (uvx)
29
+ - **tavily** — Web search/research (npx, requires TAVILY_API_KEY)
30
+ - **chrome-devtools** — Chrome debugging (npx)
31
+ - **shadcn** — shadcn/ui component search (npx)
32
+ `,
33
+
34
+ skip: `## MCP Servers
35
+ Use these naturally when relevant — don't wait to be asked.
36
+
37
+ - **Magic MCP** — \`component_builder\`, \`component_inspiration\`, \`component_refiner\`, \`logo_search\` — use when building/refining UI components
38
+ <!-- Add your MCP servers here. Run \`npx supermind-claude\` to set up context7, playwright, serena, tavily, and more. -->
39
+ `,
40
+ };
41
+
42
+ // Matches MCP section up to next heading or end of file (with or without trailing newline)
43
+ const MCP_SECTION_PATTERN = /## MCP Servers\nUse these naturally when relevant.*?(?=\n## |\n?$)/s;
44
+
45
+ function installTemplates(mcpMode) {
9
46
  ensureDir(PATHS.templatesDir);
10
47
  const src = path.join(getPackageRoot(), 'templates', 'CLAUDE.md');
11
48
  const dest = path.join(PATHS.templatesDir, 'CLAUDE.md');
12
49
  fs.copyFileSync(src, dest);
50
+
51
+ if (mcpMode && MCP_SECTIONS[mcpMode]) {
52
+ const content = fs.readFileSync(dest, 'utf-8');
53
+ const updated = content.replace(MCP_SECTION_PATTERN, MCP_SECTIONS[mcpMode]);
54
+ if (updated === content && mcpMode !== 'docker') { // docker is the template default, so no-op is expected
55
+ logger.warn('MCP section pattern did not match template — using default MCP content');
56
+ }
57
+ fs.writeFileSync(dest, updated);
58
+ }
59
+
13
60
  logger.success('CLAUDE.md template');
14
61
  }
15
62
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supermind-claude",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "description": "Complete, opinionated Claude Code setup — hooks, skills, status line, MCP servers, and living documentation",
5
5
  "bin": {
6
6
  "supermind-claude": "cli/index.js",
@@ -78,6 +78,7 @@ Use the superpowers `/using-git-worktrees` skill for worktree creation. It handl
78
78
  - The code reviewer must find zero remaining issues before merging. If it finds problems, fix them and run the reviewer again. Repeat until clean.
79
79
  - Never skip the review step. Never skip "minor" fixes. Every finding gets fixed.
80
80
  - This entire process — create, implement, review, fix, merge, clean up — executes without stopping to ask for permission.
81
+ - **Branch safety:** If the current branch is `main` or `master` when a code change is requested, create a feature branch first (`feature/…`, `fix/…`, or `chore/…`) before making any changes. Never commit directly to `main` or `master`.
81
82
 
82
83
  ## MCP Servers
83
84
  Use these naturally when relevant — don't wait to be asked.