create-merlin-brain 3.21.0 → 3.22.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.
package/bin/install.cjs CHANGED
@@ -1256,6 +1256,13 @@ async function install() {
1256
1256
  hooks: [{ type: 'command', command: 'bash ~/.claude/hooks/config-change.sh' }]
1257
1257
  });
1258
1258
 
1259
+ // UserPromptSubmit hook: fast intent detection → routing suggestion injected as additionalContext
1260
+ // No network calls. <100ms. Outputs {} when no pattern matches (silent for generic messages).
1261
+ settings.hooks.UserPromptSubmit = settings.hooks.UserPromptSubmit || [];
1262
+ addHookIfMissing(settings.hooks.UserPromptSubmit, {
1263
+ hooks: [{ type: 'command', command: 'bash ~/.claude/hooks/user-prompt-router.sh' }]
1264
+ });
1265
+
1259
1266
  // PostToolUse: file size enforcement (implementation agents only)
1260
1267
  addHookIfMissing(settings.hooks.PostToolUse, {
1261
1268
  matcher: 'Edit|Write',
@@ -1327,6 +1334,22 @@ async function install() {
1327
1334
  // clean up existing prompt hooks from previous installs.
1328
1335
  // ═══════════════════════════════════════════════════════════════
1329
1336
 
1337
+ // Configure Merlin statusline
1338
+ settings.statusline = settings.statusline || {};
1339
+ settings.statusline.enabled = true;
1340
+ settings.statusline.items = settings.statusline.items || [];
1341
+
1342
+ // Add Merlin status if not already present
1343
+ const hasMerlinStatus = settings.statusline.items.some(item =>
1344
+ item.command && item.command.includes('merlin')
1345
+ );
1346
+ if (!hasMerlinStatus) {
1347
+ settings.statusline.items.push({
1348
+ command: 'bash -c \'echo "⟡🔮 MERLIN"\'',
1349
+ interval: 30
1350
+ });
1351
+ }
1352
+
1330
1353
  fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
1331
1354
  logSuccess('Configured hooks in settings.local.json');
1332
1355
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/server/tools/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAa9C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,QAwMlD"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/server/tools/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAc9C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,QAoNlD"}
@@ -25,6 +25,7 @@ import { coachWrap } from '../session-coach.js';
25
25
  import { readAgentEffort, readAgentIsolation, readAgentBackground, buildEffortPrefix, AGENT_ROLES, WORKFLOW_AGENTS, } from './route-helpers.js';
26
26
  import { spawnAgent, getAvailableAgents, truncateOutput } from './agent-spawn.js';
27
27
  import { discoverBetterAgent, shouldAugment, fetchAugmentation, buildAugmentationSection, } from './augmentation.js';
28
+ import { checkLocalSpecialists } from './smart-route.js';
28
29
  export function registerRouteTools(ctx) {
29
30
  const { server, client, resolveRepoId } = ctx;
30
31
  // ── merlin_route — Spawn a fresh Claude process for a specialist agent ──
@@ -90,6 +91,11 @@ export function registerRouteTools(ctx) {
90
91
  if (discoveryHint) {
91
92
  console.error(`[merlin_route] Discovery hint: "${discoveryHint.name}" (${discoveryHint.grade}) — slug: ${discoveryHint.slug}`);
92
93
  }
94
+ // 3b. Check installed domain specialists — zero-latency, no API call
95
+ const localSpecialist = checkLocalSpecialists(task, agent);
96
+ if (localSpecialist) {
97
+ console.error(`[merlin_route] Local specialist match: "${localSpecialist.name}" — ${localSpecialist.role}`);
98
+ }
93
99
  // 4. Fetch augmentation if cloud agent matched and agent is eligible
94
100
  const augmentation = (discoveryHint && shouldAugment(agent))
95
101
  ? await fetchAugmentation(client, discoveryHint)
@@ -157,11 +163,16 @@ export function registerRouteTools(ctx) {
157
163
  response += `> Mode: background — non-blocking execution\n`;
158
164
  if (augmentation)
159
165
  response += `> Augmented with: \`${augmentation.slug}\` (${augmentation.grade}) — ${augmentation.description.slice(0, 80)}\n`;
166
+ response += '\n';
167
+ // Surface better-agent hints prominently — before the output so they are never buried
168
+ if (localSpecialist) {
169
+ response += `> **Better specialist available:** \`${localSpecialist.name}\` — ${localSpecialist.role}\n`;
170
+ response += `> Installed locally. Consider: \`merlin_route(agent="${localSpecialist.name}", task="...")\`\n\n`;
171
+ }
160
172
  if (discoveryHint) {
161
- response += `\n> Catalog match: \`${discoveryHint.name}\` (${discoveryHint.grade}) — ${discoveryHint.description}\n`;
162
- response += `> View: \`merlin_get_agent_detail("${discoveryHint.slug}")\` | Install: \`merlin_discover_agents("${discoveryHint.slug}")\`\n`;
173
+ response += `> **Catalog specialist found:** \`${discoveryHint.name}\` (${discoveryHint.grade}) — ${discoveryHint.description}\n`;
174
+ response += `> View: \`merlin_get_agent_detail("${discoveryHint.slug}")\` | Install: \`merlin_discover_agents("${discoveryHint.slug}")\`\n\n`;
163
175
  }
164
- response += '\n';
165
176
  if (result.exitCode !== 0)
166
177
  response += `> Note: Agent exited with code ${result.exitCode}\n\n`;
167
178
  response += output;
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/server/tools/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/server/tools/route.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,24 @@
8
8
  * 3. Ranking all candidates and recommending the best fit
9
9
  */
10
10
  import type { ToolContext } from './types.js';
11
+ /** Domain specialists with keyword matchers */
12
+ export declare const DOMAIN_AGENTS: Record<string, {
13
+ keywords: RegExp;
14
+ role: string;
15
+ }>;
16
+ /** Result from a local specialist check */
17
+ export interface LocalSpecialistHint {
18
+ name: string;
19
+ role: string;
20
+ }
21
+ /**
22
+ * Check whether a locally installed domain specialist is a better fit
23
+ * for the given task than the chosen agent. Returns the first match, or
24
+ * null if the chosen agent already IS the best local specialist.
25
+ *
26
+ * This is intentionally lightweight — no API calls, pure keyword scoring —
27
+ * so it can run inside merlin_route without adding latency.
28
+ */
29
+ export declare function checkLocalSpecialists(task: string, chosenAgent: string): LocalSpecialistHint | null;
11
30
  export declare function registerSmartRouteTools(ctx: ToolContext): void;
12
31
  //# sourceMappingURL=smart-route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"smart-route.d.ts","sourceRoot":"","sources":["../../../src/server/tools/smart-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2D9C,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,WAAW,QA8GvD"}
1
+ {"version":3,"file":"smart-route.d.ts","sourceRoot":"","sources":["../../../src/server/tools/smart-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAe9C,+CAA+C;AAC/C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAO5E,CAAC;AAEF,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAWnG;AAoCD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,WAAW,QA8GvD"}
@@ -24,7 +24,7 @@ const AGENT_ROLES = {
24
24
  'docs-keeper': 'Documentation updates',
25
25
  };
26
26
  /** Domain specialists with keyword matchers */
27
- const DOMAIN_AGENTS = {
27
+ export const DOMAIN_AGENTS = {
28
28
  'remotion': { keywords: /\b(video|animation|remotion|render)\b/, role: 'Programmatic video creation' },
29
29
  'merlin-frontend': { keywords: /\b(react|vue|frontend|ui|component|css|tailwind)\b/, role: 'Frontend development' },
30
30
  'merlin-security': { keywords: /\b(security|audit|pentest|owasp|vulnerabilit)\b/, role: 'Deep security audits' },
@@ -32,6 +32,28 @@ const DOMAIN_AGENTS = {
32
32
  'merlin-api-designer': { keywords: /\b(api|rest|graphql|endpoint|swagger|openapi)\b/, role: 'API design' },
33
33
  'merlin-migrator': { keywords: /\b(migrat|schema|database|alter|column)\b/, role: 'Database migrations' },
34
34
  };
35
+ /**
36
+ * Check whether a locally installed domain specialist is a better fit
37
+ * for the given task than the chosen agent. Returns the first match, or
38
+ * null if the chosen agent already IS the best local specialist.
39
+ *
40
+ * This is intentionally lightweight — no API calls, pure keyword scoring —
41
+ * so it can run inside merlin_route without adding latency.
42
+ */
43
+ export function checkLocalSpecialists(task, chosenAgent) {
44
+ const taskLower = task.toLowerCase();
45
+ const available = getAvailableAgents();
46
+ for (const [agentName, { keywords, role }] of Object.entries(DOMAIN_AGENTS)) {
47
+ if (agentName === chosenAgent)
48
+ continue;
49
+ if (!available.includes(agentName))
50
+ continue;
51
+ if (keywords.test(taskLower)) {
52
+ return { name: agentName, role };
53
+ }
54
+ }
55
+ return null;
56
+ }
35
57
  /** Keyword boost patterns for core agents */
36
58
  const CORE_BOOSTS = {
37
59
  'implementation-dev': /\b(build|add|create|implement|write|code)\b/,
@@ -1 +1 @@
1
- {"version":3,"file":"smart-route.js","sourceRoot":"","sources":["../../../src/server/tools/smart-route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smart-route.js","sourceRoot":"","sources":["../../../src/server/tools/smart-route.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,52 @@ if [ -f "$PORT_FILE" ] && command -v jq >/dev/null 2>&1; then
52
52
  fi
53
53
  fi
54
54
 
55
- # Claude Code command hooks must output valid JSON to stdout
56
- echo '{}'
55
+ # ─────────────────────────────────────────────────────────────────────────────
56
+ # SECRET DETECTION (PostToolUse — advisory only, edit already happened)
57
+ # Scans the written file for common credential patterns and warns via
58
+ # additionalContext. Never blocks — always exits 0.
59
+ # ─────────────────────────────────────────────────────────────────────────────
60
+ SECRET_WARNING=""
61
+ if [ -n "$file_path" ] && [ -f "$file_path" ]; then
62
+ # Read file content once into a variable (cap at first 500 lines for speed)
63
+ file_content=$(head -500 "$file_path" 2>/dev/null || true)
64
+
65
+ if [ -n "$file_content" ]; then
66
+ found_secrets=""
67
+
68
+ # AWS access key (AKIA...)
69
+ if echo "$file_content" | grep -qE 'AKIA[0-9A-Z]{16}' 2>/dev/null; then
70
+ found_secrets="${found_secrets}AWS-KEY "
71
+ fi
72
+
73
+ # OpenAI / Anthropic / generic sk- API keys (sk- followed by 20+ alphanum chars)
74
+ if echo "$file_content" | grep -qE 'sk-[A-Za-z0-9]{20,}' 2>/dev/null; then
75
+ found_secrets="${found_secrets}API-KEY(sk-) "
76
+ fi
77
+
78
+ # PEM private keys
79
+ if echo "$file_content" | grep -qF 'BEGIN PRIVATE KEY' 2>/dev/null || \
80
+ echo "$file_content" | grep -qF 'BEGIN RSA PRIVATE KEY' 2>/dev/null; then
81
+ found_secrets="${found_secrets}PRIVATE-KEY "
82
+ fi
83
+
84
+ # Hardcoded password assignments (password = "..." or password: "...")
85
+ if echo "$file_content" | grep -qiE '(password|passwd|pwd)\s*[:=]\s*["'"'"'][^'"'"'"]{6,}["'"'"']' 2>/dev/null; then
86
+ found_secrets="${found_secrets}HARDCODED-PASSWORD "
87
+ fi
88
+
89
+ if [ -n "$found_secrets" ]; then
90
+ SECRET_WARNING="WARNING: Possible secrets detected in ${file_path}: ${found_secrets}— review before committing."
91
+ fi
92
+ fi
93
+ fi
94
+
95
+ # Output with optional secret warning as additionalContext
96
+ if [ -n "$SECRET_WARNING" ] && command -v jq >/dev/null 2>&1; then
97
+ jq -n --arg warn "$SECRET_WARNING" '{
98
+ additionalContext: $warn
99
+ }'
100
+ else
101
+ echo '{}'
102
+ fi
57
103
  exit 0
@@ -47,17 +47,29 @@ if [ -f "$PORT_FILE" ] && command -v jq >/dev/null 2>&1; then
47
47
  fi
48
48
  fi
49
49
 
50
+ # Detect current project name (fast, no network)
51
+ PROJECT_NAME=""
52
+ # Try git remote name first (works in most Merlin project dirs)
53
+ if command -v git >/dev/null 2>&1; then
54
+ PROJECT_NAME=$(git remote get-url origin 2>/dev/null | sed 's|.*/||; s|\.git$||' || true)
55
+ fi
56
+ # Fall back to current directory basename
57
+ if [ -z "$PROJECT_NAME" ]; then
58
+ PROJECT_NAME=$(basename "$PWD" 2>/dev/null || echo "unknown")
59
+ fi
60
+
50
61
  # Build the protocol reminder that survives compaction
51
62
  SESSION_INFO=""
52
63
  if [ -n "$GUARDIAN_STATE" ] && command -v jq >/dev/null 2>&1; then
53
64
  HEALTH=$(echo "$GUARDIAN_STATE" | jq -r '.health // "?"' 2>/dev/null || echo "?")
54
65
  DRIFT=$(echo "$GUARDIAN_STATE" | jq -r '.driftLevel // "?"' 2>/dev/null || echo "?")
55
66
  EDITS=$(echo "$GUARDIAN_STATE" | jq -r '.editsSinceContext // "?"' 2>/dev/null || echo "?")
56
- SESSION_INFO=" Session health: ${HEALTH}%, drift level: ${DRIFT}, edits since context: ${EDITS}."
67
+ SESSION_INFO=" Health:${HEALTH}% drift:${DRIFT} edits:${EDITS}."
57
68
  fi
58
69
 
59
70
  # The protocol rules that MUST survive compaction
60
- CONTEXT="MERLIN PROTOCOL REMINDER (post-compaction): You are Merlin, an orchestrator. You NEVER write code — you route to agents. MANDATORY RULES: (1) YOU answer codebase questions using merlin_get_context/merlin_search — never Explore agents. (2) YOU route implementation to agents via Skill(merlin:workflow) or merlin_route(). (3) Call merlin_get_context BEFORE any file edit or codebase question. (4) Prefix EVERY action with the badge. (5) After every agent completes: show result, run verification, surface one skill, detect next intent. (6) Run agents in PARALLEL. (7) ROUTING: Bug=bug-fix workflow, Feature=feature-dev workflow, Refactor=refactor workflow, Small task=merlin_smart_route then merlin_route. (8) Save behaviors when user corrects you.${SESSION_INFO}"
71
+ # Keep under 500 chars so injection stays lean
72
+ CONTEXT="MERLIN POST-COMPACTION: Project=${PROJECT_NAME}. Mode=AI Automation. You are an ORCHESTRATOR — NEVER write code. RULES: (1) Route ALL code work to agents via Skill(merlin:workflow) or merlin_route(). (2) 1 MESSAGE = ALL OPERATIONS — run independent agents in PARALLEL, never sequential. (3) Call merlin_get_context BEFORE edits. (4) Badge EVERY action. (5) ROUTING: Bug=bug-fix, Feature=feature-dev, Refactor=refactor, Small=merlin_smart_route. (6) Save corrections via merlin_save_behavior.${SESSION_INFO}"
61
73
 
62
74
  if command -v jq >/dev/null 2>&1; then
63
75
  jq -n --arg ctx "$CONTEXT" '{
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Merlin Hook: UserPromptSubmit
4
+ # Detects intent from the user's message and injects Merlin routing suggestions
5
+ # as additionalContext. Keeps Merlin orchestration "always on" — not just at
6
+ # session start.
7
+ #
8
+ # Contract:
9
+ # - Reads JSON from stdin: {"userPrompt": "..."}
10
+ # - Outputs {} when no pattern matches (no noise)
11
+ # - Outputs additionalContext JSON when a routing signal is found
12
+ # - MUST be <100ms: no network calls, no merlin CLI, no curl
13
+ # - Always exits 0
14
+ #
15
+ set -euo pipefail
16
+ trap 'echo "{}"; exit 0' ERR
17
+
18
+ # ── Read stdin ────────────────────────────────────────────────────────────────
19
+ input=""
20
+ if [ ! -t 0 ]; then
21
+ input=$(cat 2>/dev/null || true)
22
+ fi
23
+
24
+ [ -z "$input" ] && echo "{}" && exit 0
25
+
26
+ # ── Extract userPrompt ────────────────────────────────────────────────────────
27
+ prompt=""
28
+ if command -v jq >/dev/null 2>&1; then
29
+ prompt=$(echo "$input" | jq -r '.userPrompt // empty' 2>/dev/null || true)
30
+ else
31
+ # Minimal extraction without jq — strip surrounding JSON scaffolding
32
+ prompt=$(echo "$input" | sed 's/.*"userPrompt"[[:space:]]*:[[:space:]]*"\(.*\)".*/\1/' 2>/dev/null || true)
33
+ fi
34
+
35
+ [ -z "$prompt" ] && echo "{}" && exit 0
36
+
37
+ # ── Intent matching (order matters — most specific first) ─────────────────────
38
+ suggestion=""
39
+
40
+ # Resume — check before generic "plan" or "build"
41
+ if echo "$prompt" | grep -qiE "I'm back|im back|resume|pick up|continue|where were we"; then
42
+ suggestion='Detected: resume. Use: Skill("merlin:resume-work")'
43
+
44
+ # Progress / status
45
+ elif echo "$prompt" | grep -qiE "progress|status|where are we|how far"; then
46
+ suggestion='Detected: progress check. Use: Skill("merlin:progress")'
47
+
48
+ # Security
49
+ elif echo "$prompt" | grep -qiE "security|audit|vulnerability|CVE|OWASP|penetration"; then
50
+ suggestion='Detected: security. Use: Skill("merlin:workflow", args='"'"'run security-audit'"'"')'
51
+
52
+ # Challenge
53
+ elif echo "$prompt" | grep -qiE "challenge|right approach|alternative|are we sure"; then
54
+ suggestion='Detected: challenge. Use: Skill("merlin:challenge", args="<task>")'
55
+
56
+ # Brainstorm
57
+ elif echo "$prompt" | grep -qiE "brainstorm|ideate|explore ideas|what if|think about"; then
58
+ suggestion='Detected: brainstorm. Use: Skill("merlin:brainstorm")'
59
+
60
+ # Debug / investigate (before generic bug pattern)
61
+ elif echo "$prompt" | grep -qiE "debug|investigate|why is|figure out|trace|diagnose"; then
62
+ suggestion='Detected: debug. Use: Skill("merlin:debug", args="<task>")'
63
+
64
+ # Bug / error
65
+ elif echo "$prompt" | grep -qiE "bug|crash|error|not working|broken|fix|failing|500|404|exception|stack trace"; then
66
+ suggestion='Detected: bug/error. Use: Skill("merlin:workflow", args='"'"'run bug-fix "<task>"'"'"')'
67
+
68
+ # Refactor
69
+ elif echo "$prompt" | grep -qiE "refactor|cleanup|clean up|DRY|organize|restructure"; then
70
+ suggestion='Detected: refactor. Use: Skill("merlin:workflow", args='"'"'run refactor "<task>"'"'"')'
71
+
72
+ # Planning
73
+ elif echo "$prompt" | grep -qiE "plan|roadmap|phases|milestones"; then
74
+ suggestion='Detected: planning. Use: Skill("merlin:plan-phase")'
75
+
76
+ # Feature / build (broad — must come after more specific patterns)
77
+ elif echo "$prompt" | grep -qiE "build|add|create|implement|make|new feature|develop"; then
78
+ suggestion='Detected: feature. Use: Skill("merlin:workflow", args='"'"'run feature-dev "<task>"'"'"')'
79
+ fi
80
+
81
+ # ── No match → silent pass-through ───────────────────────────────────────────
82
+ [ -z "$suggestion" ] && echo "{}" && exit 0
83
+
84
+ # ── Emit routing hint ─────────────────────────────────────────────────────────
85
+ _ctx="⟡🔮 MERLIN ROUTING: ${suggestion}. Remember: YOU are the orchestrator. Answer codebase questions via Sights. Route implementation to agents. Badge every action."
86
+
87
+ if command -v jq >/dev/null 2>&1; then
88
+ jq -n --arg ctx "$_ctx" \
89
+ '{hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:$ctx}}'
90
+ else
91
+ # jq not available — emit via printf, escaping the double-quotes in suggestion
92
+ _ctx_escaped=$(printf '%s' "$_ctx" | sed 's/"/\\"/g')
93
+ printf '{"hookSpecificOutput":{"hookEventName":"UserPromptSubmit","additionalContext":"%s"}}\n' "$_ctx_escaped"
94
+ fi
95
+
96
+ exit 0
@@ -1 +1 @@
1
- 3.21.0
1
+ 3.22.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-merlin-brain",
3
- "version": "3.21.0",
3
+ "version": "3.22.0",
4
4
  "description": "Merlin - The Ultimate AI Brain for Claude Code. One install: workflows, agents, loop, and Sights MCP server.",
5
5
  "type": "module",
6
6
  "main": "./dist/server/index.js",