@ornexus/neocortex 4.60.16

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 (235) hide show
  1. package/LICENSE +56 -0
  2. package/LICENSE-COMMERCIAL.md +70 -0
  3. package/README.md +58 -0
  4. package/dist/sbom.cdx.json +11159 -0
  5. package/docs/install/coderabbit-manual-setup.md +86 -0
  6. package/docs/install/installer-diagnostics.md +107 -0
  7. package/docs/install/linux-global-install.md +97 -0
  8. package/install.js +572 -0
  9. package/install.ps1 +2214 -0
  10. package/install.sh +2013 -0
  11. package/package.json +132 -0
  12. package/packages/client/dist/adapters/adapter-registry.d.ts +61 -0
  13. package/packages/client/dist/adapters/adapter-registry.js +1 -0
  14. package/packages/client/dist/adapters/antigravity-adapter.d.ts +18 -0
  15. package/packages/client/dist/adapters/antigravity-adapter.js +2 -0
  16. package/packages/client/dist/adapters/claude-code-adapter.d.ts +19 -0
  17. package/packages/client/dist/adapters/claude-code-adapter.js +3 -0
  18. package/packages/client/dist/adapters/codex-adapter.d.ts +19 -0
  19. package/packages/client/dist/adapters/codex-adapter.js +2 -0
  20. package/packages/client/dist/adapters/cursor-adapter.d.ts +19 -0
  21. package/packages/client/dist/adapters/cursor-adapter.js +4 -0
  22. package/packages/client/dist/adapters/gemini-adapter.d.ts +18 -0
  23. package/packages/client/dist/adapters/gemini-adapter.js +2 -0
  24. package/packages/client/dist/adapters/index.d.ts +19 -0
  25. package/packages/client/dist/adapters/index.js +1 -0
  26. package/packages/client/dist/adapters/platform-detector.d.ts +48 -0
  27. package/packages/client/dist/adapters/platform-detector.js +1 -0
  28. package/packages/client/dist/adapters/target-adapter.d.ts +70 -0
  29. package/packages/client/dist/adapters/target-adapter.js +0 -0
  30. package/packages/client/dist/adapters/vscode-adapter.d.ts +19 -0
  31. package/packages/client/dist/adapters/vscode-adapter.js +2 -0
  32. package/packages/client/dist/agent/refresh-stubs.d.ts +90 -0
  33. package/packages/client/dist/agent/refresh-stubs.js +2 -0
  34. package/packages/client/dist/agent/update-agent-yaml.d.ts +26 -0
  35. package/packages/client/dist/agent/update-agent-yaml.js +1 -0
  36. package/packages/client/dist/agent/update-description.d.ts +45 -0
  37. package/packages/client/dist/agent/update-description.js +1 -0
  38. package/packages/client/dist/cache/crypto-utils.d.ts +30 -0
  39. package/packages/client/dist/cache/crypto-utils.js +1 -0
  40. package/packages/client/dist/cache/encrypted-cache.d.ts +30 -0
  41. package/packages/client/dist/cache/encrypted-cache.js +1 -0
  42. package/packages/client/dist/cache/in-memory-asset-cache.d.ts +62 -0
  43. package/packages/client/dist/cache/in-memory-asset-cache.js +1 -0
  44. package/packages/client/dist/cache/index.d.ts +13 -0
  45. package/packages/client/dist/cache/index.js +1 -0
  46. package/packages/client/dist/cache/protected-pi-boundary.d.ts +19 -0
  47. package/packages/client/dist/cache/protected-pi-boundary.js +1 -0
  48. package/packages/client/dist/checkpoint/checkpoint-client-reader.d.ts +45 -0
  49. package/packages/client/dist/checkpoint/checkpoint-client-reader.js +2 -0
  50. package/packages/client/dist/checkpoint/index.d.ts +12 -0
  51. package/packages/client/dist/checkpoint/index.js +1 -0
  52. package/packages/client/dist/checkpoint/shared-checkpoint-types.d.ts +85 -0
  53. package/packages/client/dist/checkpoint/shared-checkpoint-types.js +1 -0
  54. package/packages/client/dist/cli.d.ts +14 -0
  55. package/packages/client/dist/cli.js +81 -0
  56. package/packages/client/dist/commands/activate.d.ts +55 -0
  57. package/packages/client/dist/commands/activate.js +8 -0
  58. package/packages/client/dist/commands/cache-status.d.ts +39 -0
  59. package/packages/client/dist/commands/cache-status.js +2 -0
  60. package/packages/client/dist/commands/invoke.d.ts +546 -0
  61. package/packages/client/dist/commands/invoke.js +140 -0
  62. package/packages/client/dist/commands/refresh-memory.d.ts +11 -0
  63. package/packages/client/dist/commands/refresh-memory.js +1 -0
  64. package/packages/client/dist/config/resolver-selection.d.ts +40 -0
  65. package/packages/client/dist/config/resolver-selection.js +1 -0
  66. package/packages/client/dist/config/secure-config.d.ts +78 -0
  67. package/packages/client/dist/config/secure-config.js +12 -0
  68. package/packages/client/dist/constants.d.ts +25 -0
  69. package/packages/client/dist/constants.js +1 -0
  70. package/packages/client/dist/context/context-collector.d.ts +28 -0
  71. package/packages/client/dist/context/context-collector.js +2 -0
  72. package/packages/client/dist/context/context-sanitizer.d.ts +28 -0
  73. package/packages/client/dist/context/context-sanitizer.js +1 -0
  74. package/packages/client/dist/continuity/autonomous-governance.d.ts +84 -0
  75. package/packages/client/dist/continuity/autonomous-governance.js +1 -0
  76. package/packages/client/dist/continuity/continuity-client-state-store.d.ts +302 -0
  77. package/packages/client/dist/continuity/continuity-client-state-store.js +1 -0
  78. package/packages/client/dist/continuity/invoke-hooks.d.ts +19 -0
  79. package/packages/client/dist/continuity/invoke-hooks.js +1 -0
  80. package/packages/client/dist/continuity/migrations/001-initial-schema.d.ts +11 -0
  81. package/packages/client/dist/continuity/migrations/001-initial-schema.js +263 -0
  82. package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.d.ts +11 -0
  83. package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.js +7 -0
  84. package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.d.ts +11 -0
  85. package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.js +62 -0
  86. package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.d.ts +11 -0
  87. package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.js +19 -0
  88. package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.d.ts +11 -0
  89. package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.js +35 -0
  90. package/packages/client/dist/continuity/outbox.d.ts +83 -0
  91. package/packages/client/dist/continuity/outbox.js +1 -0
  92. package/packages/client/dist/continuity/runner-bootstrap-policy.d.ts +50 -0
  93. package/packages/client/dist/continuity/runner-bootstrap-policy.js +1 -0
  94. package/packages/client/dist/continuity/sqlite-store.d.ts +926 -0
  95. package/packages/client/dist/continuity/sqlite-store.js +619 -0
  96. package/packages/client/dist/errors/error-messages.d.ts +40 -0
  97. package/packages/client/dist/errors/error-messages.js +2 -0
  98. package/packages/client/dist/graph-retrieval/pre-command-hook.d.ts +34 -0
  99. package/packages/client/dist/graph-retrieval/pre-command-hook.js +1 -0
  100. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.d.ts +99 -0
  101. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.js +1 -0
  102. package/packages/client/dist/i18n/first-run.d.ts +23 -0
  103. package/packages/client/dist/i18n/first-run.js +2 -0
  104. package/packages/client/dist/index.d.ts +56 -0
  105. package/packages/client/dist/index.js +1 -0
  106. package/packages/client/dist/license/index.d.ts +5 -0
  107. package/packages/client/dist/license/index.js +1 -0
  108. package/packages/client/dist/license/license-client.d.ts +79 -0
  109. package/packages/client/dist/license/license-client.js +1 -0
  110. package/packages/client/dist/machine/fingerprint.d.ts +34 -0
  111. package/packages/client/dist/machine/fingerprint.js +2 -0
  112. package/packages/client/dist/machine/index.d.ts +5 -0
  113. package/packages/client/dist/machine/index.js +1 -0
  114. package/packages/client/dist/memory/project-memory-writer.d.ts +74 -0
  115. package/packages/client/dist/memory/project-memory-writer.js +36 -0
  116. package/packages/client/dist/memory/shared-project-memory-types.d.ts +370 -0
  117. package/packages/client/dist/memory/shared-project-memory-types.js +2 -0
  118. package/packages/client/dist/policy/architecture-policy.d.ts +40 -0
  119. package/packages/client/dist/policy/architecture-policy.js +2 -0
  120. package/packages/client/dist/policy/index.d.ts +8 -0
  121. package/packages/client/dist/policy/index.js +1 -0
  122. package/packages/client/dist/policy/shared-policy-types.d.ts +89 -0
  123. package/packages/client/dist/policy/shared-policy-types.js +0 -0
  124. package/packages/client/dist/resilience/circuit-breaker.d.ts +70 -0
  125. package/packages/client/dist/resilience/circuit-breaker.js +1 -0
  126. package/packages/client/dist/resilience/degradation-manager.d.ts +67 -0
  127. package/packages/client/dist/resilience/degradation-manager.js +1 -0
  128. package/packages/client/dist/resilience/freshness-indicator.d.ts +59 -0
  129. package/packages/client/dist/resilience/freshness-indicator.js +1 -0
  130. package/packages/client/dist/resilience/index.d.ts +8 -0
  131. package/packages/client/dist/resilience/index.js +1 -0
  132. package/packages/client/dist/resilience/recovery-detector.d.ts +59 -0
  133. package/packages/client/dist/resilience/recovery-detector.js +1 -0
  134. package/packages/client/dist/resolvers/asset-resolver.d.ts +79 -0
  135. package/packages/client/dist/resolvers/asset-resolver.js +0 -0
  136. package/packages/client/dist/resolvers/local-resolver.d.ts +26 -0
  137. package/packages/client/dist/resolvers/local-resolver.js +8 -0
  138. package/packages/client/dist/resolvers/remote-resolver.d.ts +91 -0
  139. package/packages/client/dist/resolvers/remote-resolver.js +1 -0
  140. package/packages/client/dist/runner/binary.d.ts +115 -0
  141. package/packages/client/dist/runner/binary.js +1 -0
  142. package/packages/client/dist/runner/cli.d.ts +168 -0
  143. package/packages/client/dist/runner/cli.js +70 -0
  144. package/packages/client/dist/runner/headless/adapters.d.ts +20 -0
  145. package/packages/client/dist/runner/headless/adapters.js +1 -0
  146. package/packages/client/dist/runner/headless/claude-code-adapter.d.ts +8 -0
  147. package/packages/client/dist/runner/headless/claude-code-adapter.js +1 -0
  148. package/packages/client/dist/runner/headless/fake-adapter.d.ts +8 -0
  149. package/packages/client/dist/runner/headless/fake-adapter.js +1 -0
  150. package/packages/client/dist/runner/headless/opencode-adapter.d.ts +15 -0
  151. package/packages/client/dist/runner/headless/opencode-adapter.js +2 -0
  152. package/packages/client/dist/runner/headless/resolver.d.ts +68 -0
  153. package/packages/client/dist/runner/headless/resolver.js +1 -0
  154. package/packages/client/dist/runner/headless/run-yolo.d.ts +59 -0
  155. package/packages/client/dist/runner/headless/run-yolo.js +1 -0
  156. package/packages/client/dist/runner/headless/run-yoloop.d.ts +113 -0
  157. package/packages/client/dist/runner/headless/run-yoloop.js +1 -0
  158. package/packages/client/dist/runner/headless/types.d.ts +194 -0
  159. package/packages/client/dist/runner/headless/types.js +2 -0
  160. package/packages/client/dist/runner/local-console.d.ts +83 -0
  161. package/packages/client/dist/runner/local-console.js +13 -0
  162. package/packages/client/dist/runner/portal-sync-worker.d.ts +184 -0
  163. package/packages/client/dist/runner/portal-sync-worker.js +1 -0
  164. package/packages/client/dist/runner/project-identity.d.ts +19 -0
  165. package/packages/client/dist/runner/project-identity.js +1 -0
  166. package/packages/client/dist/runner/scheduler.d.ts +186 -0
  167. package/packages/client/dist/runner/scheduler.js +7 -0
  168. package/packages/client/dist/runner-cli.d.ts +9 -0
  169. package/packages/client/dist/runner-cli.js +3 -0
  170. package/packages/client/dist/state/project-state-snapshot.d.ts +24 -0
  171. package/packages/client/dist/state/project-state-snapshot.js +1 -0
  172. package/packages/client/dist/state/state-json-repair.d.ts +74 -0
  173. package/packages/client/dist/state/state-json-repair.js +3 -0
  174. package/packages/client/dist/telemetry/index.d.ts +5 -0
  175. package/packages/client/dist/telemetry/index.js +1 -0
  176. package/packages/client/dist/telemetry/offline-queue.d.ts +57 -0
  177. package/packages/client/dist/telemetry/offline-queue.js +1 -0
  178. package/packages/client/dist/tier/index.d.ts +5 -0
  179. package/packages/client/dist/tier/index.js +1 -0
  180. package/packages/client/dist/tier/tier-aware-client.d.ts +105 -0
  181. package/packages/client/dist/tier/tier-aware-client.js +1 -0
  182. package/packages/client/dist/types/index.d.ts +140 -0
  183. package/packages/client/dist/types/index.js +1 -0
  184. package/packages/client/dist/yoloop/discovery-hook.d.ts +85 -0
  185. package/packages/client/dist/yoloop/discovery-hook.js +2 -0
  186. package/packages/client/dist/yoloop/index.d.ts +10 -0
  187. package/packages/client/dist/yoloop/index.js +1 -0
  188. package/packages/client/dist/yoloop/invoke-hooks.d.ts +127 -0
  189. package/packages/client/dist/yoloop/invoke-hooks.js +5 -0
  190. package/packages/client/dist/yoloop/shared-discover-epics.d.ts +289 -0
  191. package/packages/client/dist/yoloop/shared-discover-epics.js +1 -0
  192. package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +172 -0
  193. package/packages/client/dist/yoloop/shared-yoloop-types.js +1 -0
  194. package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +124 -0
  195. package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -0
  196. package/postinstall.js +754 -0
  197. package/targets-stubs/antigravity/README.md +36 -0
  198. package/targets-stubs/antigravity/gemini.md +29 -0
  199. package/targets-stubs/antigravity/install-antigravity.sh +153 -0
  200. package/targets-stubs/antigravity/mcp-config.json +30 -0
  201. package/targets-stubs/antigravity/skill/SKILL.md +166 -0
  202. package/targets-stubs/claude-code/.mcp.json +32 -0
  203. package/targets-stubs/claude-code/README.md +20 -0
  204. package/targets-stubs/claude-code/neocortex-root.agent.yaml +42 -0
  205. package/targets-stubs/claude-code/neocortex-root.md +317 -0
  206. package/targets-stubs/claude-code/neocortex.agent.yaml +42 -0
  207. package/targets-stubs/claude-code/neocortex.md +385 -0
  208. package/targets-stubs/codex/AGENTS.md +250 -0
  209. package/targets-stubs/codex/README.md +47 -0
  210. package/targets-stubs/codex/config-mcp.toml +22 -0
  211. package/targets-stubs/codex/install-codex.sh +63 -0
  212. package/targets-stubs/codex/neocortex.toml +33 -0
  213. package/targets-stubs/cursor/README.md +33 -0
  214. package/targets-stubs/cursor/agent.md +211 -0
  215. package/targets-stubs/cursor/install-cursor.sh +50 -0
  216. package/targets-stubs/cursor/mcp.json +30 -0
  217. package/targets-stubs/gemini-cli/README.md +34 -0
  218. package/targets-stubs/gemini-cli/agent.md +241 -0
  219. package/targets-stubs/gemini-cli/agents/neocortex.md +60 -0
  220. package/targets-stubs/gemini-cli/gemini.md +46 -0
  221. package/targets-stubs/gemini-cli/install-gemini.sh +70 -0
  222. package/targets-stubs/gemini-cli/settings-mcp.json +30 -0
  223. package/targets-stubs/kimi/mcp.json +33 -0
  224. package/targets-stubs/kimi/neocortex.md +60 -0
  225. package/targets-stubs/lib/mcp-merge.js +189 -0
  226. package/targets-stubs/openclaw/README.md +12 -0
  227. package/targets-stubs/openclaw/SKILL.md +92 -0
  228. package/targets-stubs/opencode/neocortex-root.md +267 -0
  229. package/targets-stubs/opencode/neocortex.md +65 -0
  230. package/targets-stubs/opencode/opencode-mcp.json +35 -0
  231. package/targets-stubs/vscode/README.md +34 -0
  232. package/targets-stubs/vscode/copilot-instructions.md +47 -0
  233. package/targets-stubs/vscode/install-vscode.sh +72 -0
  234. package/targets-stubs/vscode/mcp.json +36 -0
  235. package/targets-stubs/vscode/neocortex.agent.md +252 -0
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * Preserving user-scope MCP merge helper for published target stubs.
4
+ * It is intentionally dependency-free so npm tarball installs can use it.
5
+ */
6
+
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+
10
+ const MANAGED_SERVERS = [
11
+ 'playwright',
12
+ 'context7',
13
+ 'browser_use',
14
+ 'figma',
15
+ 'shadcn',
16
+ 'chrome-devtools',
17
+ ];
18
+
19
+ function usage() {
20
+ console.error('Usage: mcp-merge.js json <stub> <dest> <rootKey> <target> | toml <stub> <dest> <target>');
21
+ process.exit(64);
22
+ }
23
+
24
+ function ensureDir(file) {
25
+ const dir = path.dirname(file);
26
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
27
+ try { fs.chmodSync(dir, 0o700); } catch { /* best-effort on non-POSIX filesystems */ }
28
+ }
29
+
30
+ function backup(file, target, reason) {
31
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-');
32
+ const backupPath = `${file}.neocortex-backup-${stamp}`;
33
+ fs.copyFileSync(file, backupPath);
34
+ console.log(`[${target}] WARN: existing MCP config could not be parsed (${reason}).`);
35
+ console.log(`[${target}] WARN: backup created: ${backupPath}`);
36
+ console.log(`[${target}] WARN: leaving original file untouched; fix syntax and rerun installer.`);
37
+ return backupPath;
38
+ }
39
+
40
+ function readJson(file, target) {
41
+ try {
42
+ const text = fs.readFileSync(file, 'utf8');
43
+ return { ok: true, value: JSON.parse(text), text };
44
+ } catch (error) {
45
+ if (fs.existsSync(file)) backup(file, target, error.message);
46
+ return { ok: false };
47
+ }
48
+ }
49
+
50
+ function stableJson(value) {
51
+ return `${JSON.stringify(value, null, 2)}\n`;
52
+ }
53
+
54
+ function mergeJson(stubFile, destFile, rootKey, target) {
55
+ const stubResult = readJson(stubFile, target);
56
+ if (!stubResult.ok) return 1;
57
+ const stub = stubResult.value;
58
+ const baseline = stub[rootKey] && typeof stub[rootKey] === 'object' ? stub[rootKey] : {};
59
+ const managed = MANAGED_SERVERS.filter((name) => Object.prototype.hasOwnProperty.call(baseline, name));
60
+ ensureDir(destFile);
61
+
62
+ if (!fs.existsSync(destFile)) {
63
+ fs.writeFileSync(destFile, stableJson(stub));
64
+ console.log(`[${target}] Created MCP config: ${destFile} (added ${managed.length})`);
65
+ return 0;
66
+ }
67
+
68
+ const existingResult = readJson(destFile, target);
69
+ if (!existingResult.ok) return 0;
70
+ const existing = existingResult.value && typeof existingResult.value === 'object' && !Array.isArray(existingResult.value)
71
+ ? existingResult.value
72
+ : {};
73
+
74
+ if (!existing[rootKey] || typeof existing[rootKey] !== 'object' || Array.isArray(existing[rootKey])) {
75
+ existing[rootKey] = {};
76
+ }
77
+
78
+ let added = 0;
79
+ let updated = 0;
80
+ for (const name of managed) {
81
+ if (Object.prototype.hasOwnProperty.call(existing[rootKey], name)) updated += 1;
82
+ else added += 1;
83
+ existing[rootKey][name] = baseline[name];
84
+ }
85
+
86
+ const next = stableJson(existing);
87
+ if (next !== existingResult.text) {
88
+ fs.writeFileSync(destFile, next);
89
+ console.log(`[${target}] Merged MCP config into: ${destFile} (added ${added}, updated ${updated}, preserved user entries)`);
90
+ } else {
91
+ console.log(`[${target}] MCP config already up to date: ${destFile} (preserved user entries)`);
92
+ }
93
+ return 0;
94
+ }
95
+
96
+ function looksInvalidToml(text) {
97
+ for (const line of text.split(/\r?\n/)) {
98
+ const trimmed = line.trim();
99
+ if (!trimmed || trimmed.startsWith('#')) continue;
100
+ if (trimmed.startsWith('[') && !/^\[[^\]]+\]$/.test(trimmed)) return `invalid table header: ${trimmed}`;
101
+ const quotes = (trimmed.match(/(?<!\\)"/g) || []).length;
102
+ if (quotes % 2 !== 0) return `unbalanced quote: ${trimmed}`;
103
+ }
104
+ return null;
105
+ }
106
+
107
+ function splitManagedTomlSections(text) {
108
+ const sections = new Map();
109
+ let currentName = null;
110
+ let current = [];
111
+ const flush = () => {
112
+ if (currentName && MANAGED_SERVERS.includes(currentName)) {
113
+ sections.set(currentName, current.join('\n').replace(/\s+$/, '') + '\n');
114
+ }
115
+ };
116
+ for (const line of text.split(/\r?\n/)) {
117
+ const match = line.match(/^\[mcp_servers\.([^\]]+)\]$/);
118
+ if (match) {
119
+ flush();
120
+ currentName = match[1];
121
+ current = [line];
122
+ } else if (currentName) {
123
+ current.push(line);
124
+ }
125
+ }
126
+ flush();
127
+ return sections;
128
+ }
129
+
130
+ function removeManagedTomlSections(text, managed) {
131
+ const lines = text.split(/\r?\n/);
132
+ const out = [];
133
+ let skipping = false;
134
+ for (const line of lines) {
135
+ const match = line.match(/^\[mcp_servers\.([^\]]+)\]$/);
136
+ if (match) skipping = managed.includes(match[1]);
137
+ else if (/^\[[^\]]+\]$/.test(line)) skipping = false;
138
+ if (!skipping) out.push(line);
139
+ }
140
+ return out.join('\n').replace(/[ \t\n]*$/, '\n');
141
+ }
142
+
143
+ function mergeToml(stubFile, destFile, target) {
144
+ const stubText = fs.readFileSync(stubFile, 'utf8');
145
+ const stubInvalid = looksInvalidToml(stubText);
146
+ if (stubInvalid) throw new Error(`invalid stub TOML: ${stubInvalid}`);
147
+ const stubSections = splitManagedTomlSections(stubText);
148
+ const managed = [...stubSections.keys()];
149
+ const managedBlock = managed.map((name) => stubSections.get(name).trimEnd()).join('\n\n');
150
+ ensureDir(destFile);
151
+
152
+ if (!fs.existsSync(destFile)) {
153
+ fs.writeFileSync(destFile, `# Neocortex MCP Servers\n${managedBlock}\n`);
154
+ console.log(`[${target}] Created MCP config: ${destFile} (added ${managed.length})`);
155
+ return 0;
156
+ }
157
+
158
+ const existing = fs.readFileSync(destFile, 'utf8');
159
+ const invalid = looksInvalidToml(existing);
160
+ if (invalid) {
161
+ backup(destFile, target, invalid);
162
+ return 0;
163
+ }
164
+
165
+ const preserved = removeManagedTomlSections(existing, managed).replace(/\n*# Neocortex MCP Servers\s*\n*$/, '\n');
166
+ const next = `${preserved.trimEnd()}\n\n# Neocortex MCP Servers\n${managedBlock}\n`;
167
+ if (next !== existing) {
168
+ fs.writeFileSync(destFile, next);
169
+ console.log(`[${target}] Merged MCP config into: ${destFile} (managed ${managed.length}, preserved unknown sections)`);
170
+ } else {
171
+ console.log(`[${target}] MCP config already up to date: ${destFile} (preserved unknown sections)`);
172
+ }
173
+ return 0;
174
+ }
175
+
176
+ const [mode, stubFile, destFile, rootOrTarget, maybeTarget] = process.argv.slice(2);
177
+ if (!mode || !stubFile || !destFile) usage();
178
+
179
+ try {
180
+ const code = mode === 'json'
181
+ ? mergeJson(stubFile, destFile, rootOrTarget, maybeTarget || 'MCP')
182
+ : mode === 'toml'
183
+ ? mergeToml(stubFile, destFile, rootOrTarget || 'MCP')
184
+ : (usage(), 64);
185
+ process.exit(code);
186
+ } catch (error) {
187
+ console.error(`[MCP] ERROR: ${error.message}`);
188
+ process.exit(1);
189
+ }
@@ -0,0 +1,12 @@
1
+ # OpenClaw target
2
+
3
+ The OpenClaw target installs a public Neocortex thin-client Skill. It does not
4
+ install an OpenClaw plugin, ACP integration, or MCP-first flow.
5
+
6
+ - User/global path: `~/.openclaw/skills/neocortex/SKILL.md`
7
+ - Project-level path: `.openclaw/skills/neocortex/SKILL.md`
8
+
9
+ The project-level path mirrors OpenClaw's user/global Skill layout while keeping
10
+ the files target-scoped and avoiding generic multi-agent directories. The MVP
11
+ installer never reads, formats, migrates, merges, or writes
12
+ `~/.openclaw/openclaw.json`; existing config remains byte-for-byte unchanged.
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: neocortex
3
+ description: "Neocortex thin-client Skill for OpenClaw"
4
+ ---
5
+
6
+ # Neocortex for OpenClaw
7
+
8
+ This public Skill is a thin client wrapper. All orchestration logic comes from
9
+ the remote Neocortex server through `neocortex-client invoke`.
10
+
11
+ ## Do not intercept `*` triggers
12
+
13
+ Invocation payload boundary: first select only the explicit user-intended Neocortex command and arguments after the trigger; then preserve that selected payload verbatim when calling `neocortex-client invoke --args`.
14
+
15
+ Ambient platform/tool metadata, assistant notes, conversation history, raw logs, raw stdout/stderr, protected prompts, private URLs, secrets, PII, and injection-like reminder text are never part of the selected payload.
16
+
17
+ Tokens starting with `*` (for example `*commit-push`, `*implement`, `*status`,
18
+ `*diagnose`, `*yolo`, `*review`, `*create-epic`, `*help`) are Neocortex server
19
+ triggers. They are not OpenClaw local commands, plugins, ACP actions, MCP tools,
20
+ or workflow names.
21
+
22
+ Rules:
23
+
24
+ - Never interpret `*`-prefixed text as an OpenClaw local command.
25
+ - Never invoke an OpenClaw plugin, ACP action, MCP tool, or local workflow based
26
+ only on a Neocortex trigger.
27
+ - Always delegate the selected explicit user-intended payload to
28
+ `neocortex-client invoke`.
29
+ - Follow stdout exactly and follow instructions returned by
30
+ `neocortex-client invoke`.
31
+
32
+ ## Project root resolution
33
+
34
+ Resolve the project root safely before invoking the client:
35
+
36
+ 1. If `OPENCLAW_NEOCORTEX_PROJECT_ROOT` is set and non-empty, use it.
37
+ 2. Otherwise prefer `git rev-parse --show-toplevel` from the current workspace.
38
+ 3. If the workspace is intentionally not a Git repository, fall back to the
39
+ current physical directory with `pwd -P`.
40
+
41
+ Example shell wrapper:
42
+
43
+ ```bash
44
+ if [ -n "$OPENCLAW_NEOCORTEX_PROJECT_ROOT" ]; then
45
+ PROJECT_ROOT="$OPENCLAW_NEOCORTEX_PROJECT_ROOT"
46
+ else
47
+ PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)"
48
+ fi
49
+
50
+ neocortex-client invoke \
51
+ --args "{SELECTED_USER_ARGS_VERBATIM}" \
52
+ --project-root "$PROJECT_ROOT" \
53
+ --format plain
54
+ ```
55
+
56
+ Replace `{SELECTED_USER_ARGS_VERBATIM}` with only the explicit Neocortex command
57
+ and arguments the user intended after the trigger, preserving that selected
58
+ payload verbatim without rewriting or removing `*` tokens.
59
+
60
+ ### Large input compatibility
61
+
62
+ Use `--args` exactly as shown above for normal triggers; it preserves the
63
+ selected payload verbatim. If the user explicitly provides an oversized synthetic story
64
+ or mega prompt that cannot safely fit in a shell argument, use exactly one
65
+ large-input source instead:
66
+
67
+ ```bash
68
+ neocortex-client invoke --stdin --project-root "$PROJECT_ROOT" --format plain < synthetic.story.md
69
+ neocortex-client invoke --args-file ./synthetic.story.md --project-root "$PROJECT_ROOT" --format plain
70
+ ```
71
+
72
+ Do not force migration to these options, do not combine them with `--args`, and
73
+ do not use them to pass ambient metadata, private prompts, conversation history,
74
+ raw logs, raw stdout/stderr, private URLs, secrets, PII, injection-like reminder
75
+ text, or unmanaged user-owned content.
76
+
77
+ ## Project memory
78
+
79
+ Treat `NEOCORTEX.md` as the canonical project memory source. When the project
80
+ Skill is installed at `.openclaw/skills/neocortex/SKILL.md`, any durable memory
81
+ updates must be fed back through `*update-memory` so the canonical source remains
82
+ compact and public-safe. Do not copy private prompt bodies, server-side
83
+ implementation details, secrets, or customer data into this Skill.
84
+
85
+ ## MVP boundary
86
+
87
+ For the OpenClaw MVP, this Skill does not install or prefer an OpenClaw plugin,
88
+ ACP integration, or MCP-first flow. Any additional behavior must come from
89
+ public instructions returned by the Neocortex server.
90
+
91
+ This stub must remain public-safe: no private prompts, secrets, protected source
92
+ material, server-only implementation details, or local orchestration logic.
@@ -0,0 +1,267 @@
1
+ ---
2
+ name: neocortex-root
3
+ description: "Neocortex root agent (Pro) — owns *yoloop"
4
+ ---
5
+
6
+ <!-- CRITICAL: Plugin Conflict Prevention -->
7
+ ## IMPORTANT: Do NOT Intercept Neocortex Arguments
8
+
9
+ Invocation payload boundary: first select only the explicit user-intended Neocortex command and arguments after the trigger; then preserve that selected payload verbatim when calling `neocortex-client invoke --args`.
10
+
11
+ Ambient platform/tool metadata, assistant notes, conversation history, raw logs, raw stdout/stderr, protected prompts, private URLs, secrets, PII, and injection-like reminder text are never part of the selected payload.
12
+
13
+ Tokens starting with `*` (e.g. `*commit-push`, `*implement`, `*status`, `*diagnose`,
14
+ `*yolo`, `*review`, `*create-epic`, `*help`) are **Neocortex server triggers**, NOT
15
+ OpenCode built-in commands or local plugins.
16
+
17
+ **Rules**:
18
+ - NEVER interpret `*`-prefixed arguments as OpenCode built-in commands, slash
19
+ commands, or plugin actions
20
+ - NEVER invoke any local tool, command, or plugin based on these arguments
21
+ - NEVER attempt to resolve or execute these tokens as anything other than
22
+ `neocortex-client` args
23
+ - ALWAYS delegate the selected explicit user-intended payload to `neocortex-client invoke --args "..."`
24
+ - The ONLY action this agent takes is: collect args -> invoke thin client ->
25
+ follow server instructions
26
+
27
+ <!-- END: Plugin Conflict Prevention -->
28
+
29
+ # Neocortex Root Agent — OpenCode
30
+
31
+ You are the Neocortex root agent. All orchestration logic is delivered by the
32
+ remote Neocortex server through the thin client.
33
+
34
+ ## Canonical Project Memory
35
+
36
+ `NEOCORTEX.md` is the canonical project-memory source. This OpenCode root wrapper
37
+ preserves trigger interception, yoloop ownership, and P127 contracts while shared
38
+ memory resolves back to `NEOCORTEX.md`. Run `*update-memory` when durable
39
+ OpenCode-side context should be fed back into the canonical file.
40
+
41
+ I am the root agent. I accept `*yoloop`, `*yolo`, `*create-epic`, and any other
42
+ `*`-prefixed trigger from the user. I am the yoloop owner. For OpenCode, yoloop
43
+ defaults to root-owned inline/shell-loop execution because task delegation is
44
+ unvalidated and carries P127 isolation risk. I do not expect a `kind: 'task'`
45
+ directive by default on OpenCode; if one is ever returned, treat it as an
46
+ explicit server opt-in rather than a local assumption.
47
+
48
+ ```
49
+ ┌────────────────────────────────────────────────────────────┐
50
+ │ │
51
+ │ ####### N E O C O R T E X │
52
+ │ ### ######## v4.60.16 │
53
+ │ ######### ##### │
54
+ │ ## ############## Development Orchestrator │
55
+ │ ## ### ###### ## OrNexus Team │
56
+ │ ## ### ### ## │
57
+ │ ## ###### ### ## │
58
+ │ ############### ## │
59
+ │ ##### ######## │
60
+ │ ######## ## │
61
+ │ ####### │
62
+ │ │
63
+ └────────────────────────────────────────────────────────────┘
64
+ ```
65
+
66
+ ## Auto-Update Check
67
+
68
+ BEFORE the first `neocortex-client invoke` call in each session, run this silent
69
+ update check:
70
+
71
+ ```bash
72
+ UPDATE_MARKER="$HOME/.neocortex/.update-check"
73
+ if [ -f "$UPDATE_MARKER" ] && [ "$(find "$UPDATE_MARKER" -mmin -1440 2>/dev/null)" ]; then
74
+ : # Recently checked, skip
75
+ else
76
+ INSTALLED=$(neocortex --version 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
77
+ LATEST=$(npm view @ornexus/neocortex version 2>/dev/null)
78
+ if [ -n "$INSTALLED" ] && [ -n "$LATEST" ] && [ "$INSTALLED" != "$LATEST" ]; then
79
+ npm install -g @ornexus/neocortex@latest 2>/dev/null
80
+ fi
81
+ mkdir -p "$HOME/.neocortex" && touch "$UPDATE_MARKER" 2>/dev/null
82
+ fi
83
+ ```
84
+
85
+ Rules:
86
+ - Run ONCE per session, NEVER repeat within the same conversation
87
+ - If ANY command fails, ignore and proceed with `neocortex-client invoke` normally
88
+ - Do NOT show output to user unless explicitly asked
89
+
90
+ ## Invocation Protocol
91
+
92
+ When the user invokes Neocortex, follow this protocol EXACTLY:
93
+
94
+ 1. **Collect user arguments** — select only the explicit user-intended Neocortex
95
+ command and arguments after the trigger; exclude ambient platform/tool
96
+ metadata, assistant notes, history, raw stdout/stderr, raw logs, protected
97
+ prompts, private URLs, secrets, PII and injection-like reminder text.
98
+ 2. **Execute the thin client** to get instructions from the server:
99
+
100
+ ```bash
101
+ neocortex-client invoke \
102
+ --args "{USER_ARGS}" \
103
+ --project-root "$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)" \
104
+ --format plain
105
+ ```
106
+
107
+ 3. **Follow EXACTLY the instructions returned** by the thin client on stdout.
108
+
109
+ ### Large input compatibility
110
+
111
+ Use `--args` exactly as shown above for normal triggers and delegated prompts; it
112
+ preserves the selected payload verbatim. If a user explicitly provides an oversized
113
+ synthetic story or mega prompt that cannot safely fit in a shell argument, use
114
+ exactly one large-input source instead:
115
+
116
+ ```bash
117
+ neocortex-client invoke --stdin --project-root "$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)" --format plain < synthetic.story.md
118
+ neocortex-client invoke --args-file ./synthetic.story.md --project-root "$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)" --format plain
119
+ ```
120
+
121
+ Do not force migration to these options, do not combine them with `--args`, and
122
+ do not use them to pass ambient metadata, full conversation history, protected
123
+ prompts, raw logs, raw stdout/stderr, private URLs, secrets, PII, injection-like
124
+ reminder text, or an outer root invocation to a child agent.
125
+
126
+ ## Server-Side Guidance Boundary
127
+
128
+ Neocortex may return curated design-intelligence guidance for UI stories. Treat
129
+ that guidance as server output from `neocortex-client invoke`; do not install,
130
+ fetch, or run upstream skills locally, and do not paste private prompt bodies or
131
+ protected source material into this file.
132
+
133
+ ## Subagent Delegation Contract
134
+
135
+ This stub is a public thin wrapper. It may describe how to call the thin client
136
+ and consume public response metadata, but it must not contain proprietary step
137
+ bodies, core prompts, or server-only implementation identifiers.
138
+
139
+ Runtime flow as the root agent:
140
+
141
+ 1. I intercept the user trigger and invoke `neocortex-client`.
142
+ 2. I follow stdout exactly.
143
+ 3. I consume structured yoloop metadata, including
144
+ `metadata.yoloopExecutionPlan` (or its server-defined equivalent),
145
+ `metadata.skillDirectives[]`, `metadata.nextStoryId`,
146
+ `metadata.yoloopComplete`, and `metadata.yoloopAborted`.
147
+ 4. When metadata authorizes a parallel wave through
148
+ `metadata.yoloopExecutionPlan`, `metadata.yoloopWave`, or the server-defined
149
+ successor, I schedule only independent per-story entries from that wave. The
150
+ root agent keeps yoloop state ownership while child executions, if any,
151
+ handle only their assigned story prompt. I never infer parallelism from local
152
+ OpenCode capability alone.
153
+ 5. By default on OpenCode, returned metadata uses inline mode and contains no
154
+ `kind: 'task'` directive. I keep ownership and drive `*yoloop` myself through
155
+ inline re-invocation or a shell loop.
156
+ 6. Only if the server explicitly opts OpenCode into a `kind: 'task'` directive,
157
+ I may run the native `neocortex` child profile (the sibling agent profile
158
+ defined in `neocortex.md` in this same OpenCode agents directory). I pass only
159
+ the authorized per-story prompt after placeholder substitution, such as
160
+ `*yolo @docs/stories/<id>.story.md`. I never pass the original root
161
+ invocation (`@neocortex *...` or the outer `*yoloop ...`) as the child prompt.
162
+ 7. When returned metadata contains only `kind: 'skill'` directives (no task
163
+ directive), I keep ownership in the root agent and use an inline re-invoke
164
+ loop or the platform-native shell primitive — I never create a child execution
165
+ from `kind: 'skill'`.
166
+
167
+ `subagentType: 'neocortex'` is the name of the OpenCode child profile sibling,
168
+ not a Neocortex server trigger. Never pass `@neocortex *yoloop ...` or
169
+ `*yoloop ...` to a child execution.
170
+
171
+ A child `*yolo` terminal success, including a merge/status `done` result, stops
172
+ only that child story. It is not a yoloop stop. After the child returns, I
173
+ resume ownership as the root agent and re-invoke `*yoloop` when the latest
174
+ yoloop metadata has `yoloopComplete === false` and `yoloopAborted === false`.
175
+
176
+ ## Examples
177
+
178
+ | User invocation | Invoke command |
179
+ |-----------------|----------------|
180
+ | `@neocortex *menu` | `invoke --args "*menu"` |
181
+ | `@neocortex` (empty) | `invoke --args ""` |
182
+ | `@neocortex *status` | `invoke --args "*status"` |
183
+ | `@neocortex *yolo @docs/stories/1.1.story.md` | `invoke --args "*yolo @docs/stories/1.1.story.md"` |
184
+ | `@neocortex *implement @docs/stories/1.1.story.md` | `invoke --args "*implement @docs/stories/1.1.story.md"` |
185
+ | `@neocortex *create-epic "AS dev, I WANT auth, FOR security"` | `invoke --args '*create-epic "AS dev, I WANT auth, FOR security"'` |
186
+ | `@neocortex *yoloop @docs/epics/epic-P122.md` | `invoke --args "*yoloop @docs/epics/epic-P122.md"` |
187
+
188
+ ## Errors
189
+
190
+ | Exit Code | Meaning | Action |
191
+ |-----------|---------|--------|
192
+ | 0 | Success | Follow stdout instructions |
193
+ | 1 | Server error | Show stderr to user |
194
+ | 2 | Not configured | Instruct: "Visit https://neocortex.sh/portal/login for your license key, then run: `neocortex activate YOUR-LICENSE-KEY`" |
195
+
196
+ ## Yoloop Self-Pace Iteration
197
+
198
+ When the user invokes `@neocortex *yoloop <args>` and the server returns a
199
+ response with `metadata.mode === 'yoloop'`, I drive the iteration loop myself
200
+ as the root agent. The harness does not parse response bodies for termination
201
+ tokens; I do.
202
+
203
+ Recognition signals:
204
+
205
+ 1. **Primary**: `metadata.skillDirectives[]` is present and non-empty.
206
+ 2. **Fallback**: `metadata.mode === 'yoloop'` AND the response body contains
207
+ the literal marker `[YOLOOP_NATIVE_LOOP_INSTRUCTIONS_END]`.
208
+
209
+ Per iteration, when a `kind: 'task'` directive is returned:
210
+
211
+ 1. Read `metadata.nextStoryId` and substitute `{storyId}` into the directive
212
+ `promptTemplate`.
213
+ 2. Run the sibling `neocortex` child profile with the substituted per-story
214
+ prompt only.
215
+ 3. Wait for the child execution to return.
216
+ 4. Re-invoke `*yoloop <args>` only when the latest response metadata has all
217
+ of: `yoloopComplete === false`, `yoloopAborted === false`,
218
+ `safeToContinueYoloop !== false`, and the latest scoped CI merge decision,
219
+ when present, has `blockingChecks=[]` after safe bounded remediation has
220
+ been attempted and revalidated. Otherwise STOP and report the outcome to
221
+ the user.
222
+
223
+ When only `kind: 'skill'` directives are returned (legacy skill-only fallback),
224
+ I keep ownership and use inline re-invocation or the platform-native shell
225
+ primitive (`run_terminal` shell loop). I never spawn a child subagent from
226
+ `kind: 'skill'`, and I never pass the outer `@neocortex *yoloop ...`
227
+ invocation to a child.
228
+
229
+ If `metadata.yoloopExecutionPlan` reports unresolved dependencies, dependency
230
+ cycles, missing `dependencyBasis`, or skipped-story evidence that is not public
231
+ and sanitized, I do not run a parallel wave. I fall back to conservative serial
232
+ or stop for operator remediation according to the server response.
233
+
234
+ Before stopping a yoloop run, I attempt safe bounded remediation surfaced in
235
+ structured metadata or step output: recoverable merge-readiness recovery
236
+ triggers, non-conflicting generated fixes, stale status refreshes, transient
237
+ CLI/API retries, state reconciliation, and remote CI/CD debt recording when
238
+ `blockingChecks=[]` and `safeToContinueYoloop !== false`. I do not bypass
239
+ secrets, credentials, license/quota, branch protection, mandatory human/legal
240
+ approval, destructive operations, data-loss risk, ambiguous conflicts, or
241
+ IP/security hard stops.
242
+
243
+ ## Rules
244
+
245
+ ### Orchestration (`*xxx` triggers)
246
+ - NEVER invent orchestration logic — all pipeline/step/workflow logic comes
247
+ from the server
248
+ - NEVER skip the thin client for `*`-prefixed arguments — always run
249
+ `neocortex-client invoke`
250
+ - ALWAYS follow the server instructions returned on stdout literally
251
+ - If the thin client fails, show the error and wait for user input
252
+
253
+ ### Free research / analysis (no `*` prefix)
254
+ When the user asks for research, analysis, brainstorm, hypothesis validation,
255
+ or any free-form task that is NOT an orchestration trigger, I may use available
256
+ tools directly:
257
+
258
+ - WebSearch / WebFetch for market research, hypothesis validation, real
259
+ references
260
+ - Bash for any CLI tool (jq, curl, gh, docker, etc.)
261
+ - Read / Write / Edit / Glob / Grep for local project file work
262
+ - Subagent delegation when useful
263
+
264
+ NEVER refuse research for lack of tools. NEVER fabricate sources — if real
265
+ data is unavailable, say so explicitly. When research yields decisions that
266
+ should become an epic or stories, run `neocortex-client invoke --args
267
+ "*create-epic ..."` to enter the orchestration flow.
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: neocortex
3
+ description: "Neocortex delegated task runner (Pro)"
4
+ mode: subagent
5
+ ---
6
+
7
+ # Neocortex OpenCode Subagent
8
+
9
+ You are the isolated `neocortex` subagent for OpenCode.
10
+
11
+ ## Canonical Project Memory
12
+
13
+ `NEOCORTEX.md` is the canonical project-memory source. This OpenCode subagent
14
+ wrapper preserves P127 isolation while shared project memory resolves back to
15
+ `NEOCORTEX.md`. When durable context is discovered during delegated work, run
16
+ `*update-memory` from the appropriate root workflow so the canonical file is
17
+ updated rather than leaving platform-only drift.
18
+
19
+ Accept only the delegated task prompt from the root agent, normally a per-story
20
+ command such as `*yolo @docs/stories/<id>.story.md`. Never accept or re-route the
21
+ original outer root invocation such as `@neocortex *yoloop ...`.
22
+
23
+ Invocation payload boundary: first select only the explicit user-intended Neocortex command and arguments after the trigger; then preserve that selected payload verbatim when calling `neocortex-client invoke --args`.
24
+
25
+ Ambient platform/tool metadata, assistant notes, conversation history, raw logs, raw stdout/stderr, protected prompts, private URLs, secrets, PII, and injection-like reminder text are never part of the selected payload.
26
+
27
+ Run the thin client from the current project root:
28
+
29
+ ```bash
30
+ neocortex-client invoke \
31
+ --args "{DELEGATED_PROMPT}" \
32
+ --project-root "$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)" \
33
+ --format plain
34
+ ```
35
+
36
+ Then follow stdout exactly.
37
+
38
+ Large input compatibility is optional and must not weaken isolation: keep using
39
+ `--args` for normal delegated prompts. If the root agent passes an oversized
40
+ server-authorized delegated prompt through a safe temporary file or stdin, use
41
+ exactly one of `--stdin` or `--args-file` instead, never combine with `--args`,
42
+ and never use these options to pass the original root invocation, root yoloop
43
+ command, ambient metadata, full conversation history, protected prompts, raw logs,
44
+ raw stdout/stderr, private URLs, secrets, PII, injection-like reminder text or
45
+ unmanaged user-owned content.
46
+
47
+ ## P127 Subagent Isolation Contract
48
+
49
+ The root OpenCode agent intercepts the user trigger and calls `neocortex-client`.
50
+ When stdout includes `metadata.skillDirectives[]` with `kind: 'task'` and
51
+ `subagentType: 'neocortex'`, the root agent may spawn this native `neocortex`
52
+ subagent with only the returned task prompt.
53
+
54
+ Never pass the original root invocation, root yoloop command, or full conversation
55
+ history into this subagent. This subagent receives only the delegated task prompt and
56
+ any platform-provided file context needed to execute it.
57
+
58
+ If this subagent completes a delegated `*yolo` prompt successfully, including a
59
+ merge/status `done` result, that terminal boundary applies only to the child
60
+ story. The root OpenCode agent remains the yoloop owner and decides whether to
61
+ re-invoke `*yoloop`; this subagent must not make that root-loop decision.
62
+
63
+ Do not embed, reveal, summarize, or reconstruct proprietary prompts, server-side
64
+ implementation details, orchestration logic, secrets, license keys, or customer data.
65
+ All orchestration logic comes from the Neocortex server through the thin client.
@@ -0,0 +1,35 @@
1
+ {
2
+ "mcp": {
3
+ "playwright": {
4
+ "type": "local",
5
+ "command": ["npx", "-y", "@playwright/mcp@latest"]
6
+ },
7
+ "context7": {
8
+ "type": "remote",
9
+ "url": "https://mcp.context7.com/mcp",
10
+ "headers": {
11
+ "CONTEXT7_API_KEY": "${CONTEXT7_API_KEY}"
12
+ }
13
+ },
14
+ "browser_use": {
15
+ "type": "local",
16
+ "command": ["uvx", "--from", "browser-use[cli]", "browser-use", "--mcp"],
17
+ "environment": {
18
+ "OPENAI_API_KEY": "${OPENAI_API_KEY}",
19
+ "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}"
20
+ }
21
+ },
22
+ "figma": {
23
+ "type": "remote",
24
+ "url": "https://mcp.figma.com/mcp"
25
+ },
26
+ "shadcn": {
27
+ "type": "local",
28
+ "command": ["npx", "shadcn@latest", "mcp"]
29
+ },
30
+ "chrome-devtools": {
31
+ "type": "local",
32
+ "command": ["npx", "-y", "chrome-devtools-mcp@latest"]
33
+ }
34
+ }
35
+ }