Use when coordinating multiple enhancers for /enhance command. Runs analyzers in parallel and produces unified report.
Coordinate all enhancement analyzers in parallel and produce a unified report.
const args = '$ARGUMENTS'.split(' ').filter(Boolean);
const targetPath = args.find(a => !a.startsWith('--')) || '.';
const flags = {
apply: args.includes('--apply'),
focus: args.find(a => a.startsWith('--focus='))?.split('=')[1],
verbose: args.includes('--verbose'),
showSuppressed: args.includes('--show-suppressed'),
resetLearned: args.includes('--reset-learned'),
noLearn: args.includes('--no-learn'),
exportLearned: args.includes('--export-learned')
};
// Validate focus type
const VALID_FOCUS = ['plugin', 'agent', 'claudemd', 'claude-memory', 'docs', 'prompt', 'hooks', 'skills', 'cross-file'];
if (flags.focus && !VALID_FOCUS.includes(flags.focus)) {
console.error(`Invalid --focus: "${flags.focus}". Valid: ${VALID_FOCUS.join(', ')}`);
return;
}
Detect what exists in target path:
const discovery = {
plugins: await Glob({ pattern: 'plugins/*/.claude-plugin/plugin.json', path: targetPath }),
agents: await Glob({ pattern: '**/agents/*.md', path: targetPath }),
claudemd: await Glob({ pattern: '**/CLAUDE.md', path: targetPath }) ||
await Glob({ pattern: '**/AGENTS.md', path: targetPath }),
docs: await Glob({ pattern: 'docs/**/*.md', path: targetPath }),
prompts: await Glob({ pattern: '**/prompts/**/*.md', path: targetPath }) ||
await Glob({ pattern: '**/commands/**/*.md', path: targetPath }),
hooks: await Glob({ pattern: '**/hooks/**/*.md', path: targetPath }),
skills: await Glob({ pattern: '**/skills/**/SKILL.md', path: targetPath }),
// Cross-file runs if agents OR skills exist (analyzes relationships)
'cross-file': discovery.agents?.length || discovery.skills?.length ? ['enabled'] : []
};
// Use relative path from skill directory to plugin lib
// Path: skills/enhance-orchestrator/ -> ../../lib/
const { getSuppressionPath } = require('../../lib/cross-platform');
const { loadAutoSuppressions, getProjectId, clearAutoSuppressions } = require('../../lib/enhance/auto-suppression');
const suppressionPath = getSuppressionPath();
const projectId = getProjectId(targetPath);
if (flags.resetLearned) {
clearAutoSuppressions(suppressionPath, projectId);
console.log(`Cleared suppressions for project: ${projectId}`);
}
const autoLearned = loadAutoSuppressions(suppressionPath, projectId);
CRITICAL: MUST spawn these EXACT agents using Task(). Do NOT use Explore or other agents.
| Focus Type | Agent to Spawn | Model | JS Analyzer |
|---|---|---|---|
plugin | plugin-enhancer | sonnet | lib/enhance/plugin-analyzer.js |
agent | agent-enhancer | opus | lib/enhance/agent-analyzer.js |
claudemd | claudemd-enhancer | opus | lib/enhance/projectmemory-analyzer.js |
docs | docs-enhancer | opus | lib/enhance/docs-analyzer.js |
prompt | prompt-enhancer | opus | lib/enhance/prompt-analyzer.js |
hooks | hooks-enhancer | opus | lib/enhance/hook-analyzer.js |
skills | skills-enhancer | opus | lib/enhance/skill-analyzer.js |
cross-file | cross-file-enhancer | sonnet | lib/enhance/cross-file-analyzer.js |
Each agent has Bash(node:*) to run its JS analyzer. Do NOT substitute with Explore agents.
// EXACT agent mapping - do not change
const ENHANCER_AGENTS = {
plugin: 'plugin-enhancer',
agent: 'agent-enhancer',
claudemd: 'claudemd-enhancer',
docs: 'docs-enhancer',
prompt: 'prompt-enhancer',
hooks: 'hooks-enhancer',
skills: 'skills-enhancer',
'cross-file': 'cross-file-enhancer'
};
const promises = [];
for (const [type, agentType] of Object.entries(ENHANCER_AGENTS)) {
if (focus && focus !== type) continue;
if (!discovery[type]?.length) continue;
// MUST use exact subagent_type - these agents have Bash(node:*) to run JS analyzers
promises.push(Task({
subagent_type: agentType,
prompt: `Analyze ${type} in ${targetPath}.
MUST use Skill tool to invoke your enhance-* skill.
The skill runs the JavaScript analyzer and returns structured findings.