agileflow 3.2.1 → 3.4.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/CHANGELOG.md +10 -0
- package/README.md +6 -6
- package/lib/feature-flags.js +32 -4
- package/lib/skill-loader.js +0 -1
- package/package.json +1 -1
- package/scripts/agileflow-statusline.sh +81 -0
- package/scripts/babysit-clear-restore.js +154 -0
- package/scripts/claude-tmux.sh +120 -24
- package/scripts/claude-watchdog.sh +225 -0
- package/scripts/generators/agent-registry.js +14 -1
- package/scripts/generators/inject-babysit.js +22 -9
- package/scripts/generators/inject-help.js +19 -9
- package/scripts/lib/README-portable-tasks.md +424 -0
- package/scripts/lib/audit-cleanup.js +250 -0
- package/scripts/lib/audit-registry.js +248 -0
- package/scripts/lib/configure-detect.js +20 -0
- package/scripts/lib/feature-catalog.js +13 -2
- package/scripts/lib/gate-enforcer.js +295 -0
- package/scripts/lib/model-profiles.js +98 -0
- package/scripts/lib/signal-detectors.js +1 -1
- package/scripts/lib/skill-catalog.js +557 -0
- package/scripts/lib/skill-recommender.js +311 -0
- package/scripts/lib/tdd-phase-manager.js +455 -0
- package/scripts/lib/team-events.js +76 -8
- package/scripts/lib/tmux-group-colors.js +113 -0
- package/scripts/messaging-bridge.js +209 -1
- package/scripts/spawn-audit-sessions.js +549 -0
- package/scripts/team-manager.js +37 -16
- package/scripts/tmux-close-windows.sh +180 -0
- package/scripts/tmux-restore-window.sh +67 -0
- package/scripts/tmux-save-closed-window.sh +35 -0
- package/src/core/agents/ads-audit-budget.md +181 -0
- package/src/core/agents/ads-audit-compliance.md +169 -0
- package/src/core/agents/ads-audit-creative.md +164 -0
- package/src/core/agents/ads-audit-google.md +226 -0
- package/src/core/agents/ads-audit-meta.md +183 -0
- package/src/core/agents/ads-audit-tracking.md +197 -0
- package/src/core/agents/ads-consensus.md +322 -0
- package/src/core/agents/brainstorm-analyzer-features.md +169 -0
- package/src/core/agents/brainstorm-analyzer-growth.md +161 -0
- package/src/core/agents/brainstorm-analyzer-integration.md +172 -0
- package/src/core/agents/brainstorm-analyzer-market.md +147 -0
- package/src/core/agents/brainstorm-analyzer-ux.md +167 -0
- package/src/core/agents/brainstorm-consensus.md +237 -0
- package/src/core/agents/completeness-analyzer-api.md +190 -0
- package/src/core/agents/completeness-analyzer-conditional.md +201 -0
- package/src/core/agents/completeness-analyzer-handlers.md +159 -0
- package/src/core/agents/completeness-analyzer-imports.md +159 -0
- package/src/core/agents/completeness-analyzer-routes.md +182 -0
- package/src/core/agents/completeness-analyzer-state.md +188 -0
- package/src/core/agents/completeness-analyzer-stubs.md +198 -0
- package/src/core/agents/completeness-consensus.md +286 -0
- package/src/core/agents/perf-consensus.md +2 -2
- package/src/core/agents/security-consensus.md +2 -2
- package/src/core/agents/seo-analyzer-content.md +167 -0
- package/src/core/agents/seo-analyzer-images.md +187 -0
- package/src/core/agents/seo-analyzer-performance.md +206 -0
- package/src/core/agents/seo-analyzer-schema.md +176 -0
- package/src/core/agents/seo-analyzer-sitemap.md +172 -0
- package/src/core/agents/seo-analyzer-technical.md +144 -0
- package/src/core/agents/seo-consensus.md +289 -0
- package/src/core/agents/test-consensus.md +2 -2
- package/src/core/commands/ads/audit.md +375 -0
- package/src/core/commands/ads/budget.md +97 -0
- package/src/core/commands/ads/competitor.md +112 -0
- package/src/core/commands/ads/creative.md +85 -0
- package/src/core/commands/ads/google.md +112 -0
- package/src/core/commands/ads/landing.md +119 -0
- package/src/core/commands/ads/linkedin.md +112 -0
- package/src/core/commands/ads/meta.md +91 -0
- package/src/core/commands/ads/microsoft.md +115 -0
- package/src/core/commands/ads/plan.md +321 -0
- package/src/core/commands/ads/tiktok.md +129 -0
- package/src/core/commands/ads/youtube.md +124 -0
- package/src/core/commands/ads.md +128 -0
- package/src/core/commands/babysit.md +250 -1344
- package/src/core/commands/code/completeness.md +466 -0
- package/src/core/commands/{audit → code}/legal.md +26 -16
- package/src/core/commands/{audit → code}/logic.md +27 -16
- package/src/core/commands/{audit → code}/performance.md +30 -20
- package/src/core/commands/{audit → code}/security.md +32 -19
- package/src/core/commands/{audit → code}/test.md +30 -20
- package/src/core/commands/{discovery → ideate}/brief.md +12 -12
- package/src/core/commands/{discovery/new.md → ideate/discover.md} +13 -13
- package/src/core/commands/ideate/features.md +435 -0
- package/src/core/commands/seo/audit.md +373 -0
- package/src/core/commands/seo/competitor.md +174 -0
- package/src/core/commands/seo/content.md +107 -0
- package/src/core/commands/seo/geo.md +229 -0
- package/src/core/commands/seo/hreflang.md +140 -0
- package/src/core/commands/seo/images.md +96 -0
- package/src/core/commands/seo/page.md +198 -0
- package/src/core/commands/seo/plan.md +163 -0
- package/src/core/commands/seo/programmatic.md +131 -0
- package/src/core/commands/seo/references/cwv-thresholds.md +64 -0
- package/src/core/commands/seo/references/eeat-framework.md +110 -0
- package/src/core/commands/seo/references/quality-gates.md +91 -0
- package/src/core/commands/seo/references/schema-types.md +102 -0
- package/src/core/commands/seo/schema.md +183 -0
- package/src/core/commands/seo/sitemap.md +97 -0
- package/src/core/commands/seo/technical.md +100 -0
- package/src/core/commands/seo.md +107 -0
- package/src/core/commands/skill/list.md +68 -212
- package/src/core/commands/skill/recommend.md +216 -0
- package/src/core/commands/tdd-next.md +238 -0
- package/src/core/commands/tdd.md +210 -0
- package/src/core/experts/_core-expertise.yaml +105 -0
- package/src/core/experts/analytics/expertise.yaml +5 -99
- package/src/core/experts/codebase-query/expertise.yaml +3 -72
- package/src/core/experts/compliance/expertise.yaml +6 -72
- package/src/core/experts/database/expertise.yaml +9 -52
- package/src/core/experts/documentation/expertise.yaml +7 -140
- package/src/core/experts/integrations/expertise.yaml +7 -127
- package/src/core/experts/mentor/expertise.yaml +8 -35
- package/src/core/experts/monitoring/expertise.yaml +7 -49
- package/src/core/experts/performance/expertise.yaml +1 -26
- package/src/core/experts/security/expertise.yaml +9 -34
- package/src/core/experts/ui/expertise.yaml +6 -36
- package/src/core/knowledge/ads/ad-audit-checklist-scoring.md +424 -0
- package/src/core/knowledge/ads/ad-optimization-logic.md +590 -0
- package/src/core/knowledge/ads/ad-technical-specifications.md +385 -0
- package/src/core/knowledge/ads/definitive-advertising-reference-2026.md +506 -0
- package/src/core/knowledge/ads/paid-advertising-research-2026.md +445 -0
- package/src/core/templates/agileflow-metadata.json +15 -1
- package/tools/cli/installers/ide/_base-ide.js +42 -5
- package/tools/cli/installers/ide/claude-code.js +13 -4
- package/tools/cli/lib/content-injector.js +160 -12
- package/tools/cli/lib/docs-setup.js +1 -1
- package/src/core/commands/skill/create.md +0 -698
- package/src/core/commands/skill/delete.md +0 -316
- package/src/core/commands/skill/edit.md +0 -359
- package/src/core/commands/skill/test.md +0 -394
- package/src/core/commands/skill/upgrade.md +0 -552
- package/src/core/templates/skill-template.md +0 -117
|
@@ -52,11 +52,11 @@ class ClaudeCodeSetup extends BaseIdeSetup {
|
|
|
52
52
|
await this.installCommandsRecursive(agentsSource, spawnableAgentsDir, agileflowDir, false);
|
|
53
53
|
console.log(chalk.dim(` - Spawnable agents: .claude/agents/agileflow/`));
|
|
54
54
|
|
|
55
|
-
// Claude Code specific: Create skills directory for
|
|
56
|
-
//
|
|
55
|
+
// Claude Code specific: Create skills directory for marketplace skills
|
|
56
|
+
// Users browse and install skills via /agileflow:skill:recommend or npx skills add
|
|
57
57
|
const skillsTargetDir = path.join(ideDir, 'skills');
|
|
58
58
|
await this.ensureDir(skillsTargetDir);
|
|
59
|
-
console.log(chalk.dim(` - Skills directory: .claude/skills/ (for
|
|
59
|
+
console.log(chalk.dim(` - Skills directory: .claude/skills/ (for marketplace skills)`));
|
|
60
60
|
|
|
61
61
|
// Claude Code specific: Setup damage control hooks
|
|
62
62
|
await this.setupDamageControl(projectDir, agileflowDir, ideDir, options);
|
|
@@ -237,7 +237,14 @@ class ClaudeCodeSetup extends BaseIdeSetup {
|
|
|
237
237
|
if (!settings.hooks.SessionStart) settings.hooks.SessionStart = [];
|
|
238
238
|
|
|
239
239
|
// Define SessionStart hooks
|
|
240
|
+
// babysit-clear-restore MUST run before welcome to set last_precompact_at flag
|
|
240
241
|
const sessionStartHooks = [
|
|
242
|
+
{
|
|
243
|
+
type: 'command',
|
|
244
|
+
command:
|
|
245
|
+
'node $CLAUDE_PROJECT_DIR/.agileflow/scripts/babysit-clear-restore.js 2>/dev/null || true',
|
|
246
|
+
timeout: 5000,
|
|
247
|
+
},
|
|
241
248
|
{
|
|
242
249
|
type: 'command',
|
|
243
250
|
command:
|
|
@@ -285,7 +292,9 @@ class ClaudeCodeSetup extends BaseIdeSetup {
|
|
|
285
292
|
|
|
286
293
|
// Write settings
|
|
287
294
|
await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2));
|
|
288
|
-
console.log(
|
|
295
|
+
console.log(
|
|
296
|
+
chalk.dim(` - SessionStart hooks: babysit-restore, welcome, archive, context-loader`)
|
|
297
|
+
);
|
|
289
298
|
}
|
|
290
299
|
|
|
291
300
|
/**
|
|
@@ -70,9 +70,46 @@ function isPathSafe(filePath, baseDir) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
73
|
+
* Derive agent category from name for compact grouping.
|
|
74
|
+
* @param {string} name - Agent name
|
|
75
|
+
* @returns {string} Category name
|
|
76
|
+
*/
|
|
77
|
+
function categorizeAgent(name) {
|
|
78
|
+
// Audit analyzer families
|
|
79
|
+
const analyzerMatch = name.match(/^(logic|security|perf|test|completeness|legal)-analyzer-/);
|
|
80
|
+
if (analyzerMatch) {
|
|
81
|
+
const familyNames = {
|
|
82
|
+
logic: 'Logic',
|
|
83
|
+
security: 'Security',
|
|
84
|
+
perf: 'Performance',
|
|
85
|
+
test: 'Tests',
|
|
86
|
+
completeness: 'Completeness',
|
|
87
|
+
legal: 'Legal',
|
|
88
|
+
};
|
|
89
|
+
return `Audit - ${familyNames[analyzerMatch[1]] || analyzerMatch[1]}`;
|
|
90
|
+
}
|
|
91
|
+
// Consensus coordinators for audit families
|
|
92
|
+
const consensusMatch = name.match(/^(logic|security|perf|test|completeness|legal)-consensus$/);
|
|
93
|
+
if (consensusMatch) {
|
|
94
|
+
const familyNames = {
|
|
95
|
+
logic: 'Logic',
|
|
96
|
+
security: 'Security',
|
|
97
|
+
perf: 'Performance',
|
|
98
|
+
test: 'Tests',
|
|
99
|
+
completeness: 'Completeness',
|
|
100
|
+
legal: 'Legal',
|
|
101
|
+
};
|
|
102
|
+
return `Audit - ${familyNames[consensusMatch[1]] || consensusMatch[1]}`;
|
|
103
|
+
}
|
|
104
|
+
if (name.startsWith('council-')) return 'Council';
|
|
105
|
+
if (name.endsWith('-validator')) return 'Validation';
|
|
106
|
+
return 'Domain';
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Scan agents directory and generate compact category-grouped agent list
|
|
74
111
|
* @param {string} agentsDir - Path to agents directory
|
|
75
|
-
* @returns {string} Formatted agent list
|
|
112
|
+
* @returns {string} Formatted agent list grouped by category
|
|
76
113
|
*/
|
|
77
114
|
function generateAgentList(agentsDir) {
|
|
78
115
|
if (!fs.existsSync(agentsDir)) return '';
|
|
@@ -117,16 +154,20 @@ function generateAgentList(agentsDir) {
|
|
|
117
154
|
|
|
118
155
|
// Sanitize the count value
|
|
119
156
|
const safeCount = sanitize.count(agents.length);
|
|
157
|
+
|
|
158
|
+
// Group by category for compact output
|
|
159
|
+
const categories = {};
|
|
160
|
+
for (const agent of agents) {
|
|
161
|
+
const cat = categorizeAgent(agent.name);
|
|
162
|
+
if (!categories[cat]) categories[cat] = [];
|
|
163
|
+
categories[cat].push(agent.name);
|
|
164
|
+
}
|
|
165
|
+
|
|
120
166
|
let output = `**AVAILABLE AGENTS (${safeCount} total)**:\n\n`;
|
|
121
167
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
output += ` - **Purpose**: ${agent.description}\n`;
|
|
126
|
-
output += ` - **Tools**: ${agent.tools.join(', ')}\n`;
|
|
127
|
-
output += ` - **Usage**: \`subagent_type: "agileflow-${agent.name}"\`\n`;
|
|
128
|
-
output += `\n`;
|
|
129
|
-
});
|
|
168
|
+
for (const [category, names] of Object.entries(categories)) {
|
|
169
|
+
output += `**${category}**: ${names.join(', ')}\n`;
|
|
170
|
+
}
|
|
130
171
|
|
|
131
172
|
return output;
|
|
132
173
|
}
|
|
@@ -235,6 +276,94 @@ function generateCommandList(commandsDir) {
|
|
|
235
276
|
return output;
|
|
236
277
|
}
|
|
237
278
|
|
|
279
|
+
/**
|
|
280
|
+
* Generate a compact category summary for agents (no individual names).
|
|
281
|
+
* Used by minimal mode and generators that want a discovery-oriented summary.
|
|
282
|
+
* @param {string} agentsDir - Path to agents directory
|
|
283
|
+
* @returns {string} Compact category summary with counts
|
|
284
|
+
*/
|
|
285
|
+
function generateAgentSummary(agentsDir) {
|
|
286
|
+
if (!fs.existsSync(agentsDir)) return '';
|
|
287
|
+
|
|
288
|
+
const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.md'));
|
|
289
|
+
const agents = [];
|
|
290
|
+
|
|
291
|
+
for (const file of files) {
|
|
292
|
+
const filePath = path.join(agentsDir, file);
|
|
293
|
+
if (!isPathSafe(filePath, agentsDir)) continue;
|
|
294
|
+
|
|
295
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
296
|
+
const frontmatter = parseFrontmatter(content);
|
|
297
|
+
if (!frontmatter || Object.keys(frontmatter).length === 0) continue;
|
|
298
|
+
|
|
299
|
+
const name = frontmatter.name || path.basename(file, '.md');
|
|
300
|
+
agents.push(name);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// Group by category, count per category
|
|
304
|
+
const categories = {};
|
|
305
|
+
for (const name of agents) {
|
|
306
|
+
const cat = categorizeAgent(name);
|
|
307
|
+
if (!categories[cat]) categories[cat] = 0;
|
|
308
|
+
categories[cat]++;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
const safeCount = sanitize.count(agents.length);
|
|
312
|
+
let output = `**${safeCount} agents** across ${Object.keys(categories).length} categories:\n`;
|
|
313
|
+
for (const [category, count] of Object.entries(categories)) {
|
|
314
|
+
output += `- **${category}**: ${count} agents\n`;
|
|
315
|
+
}
|
|
316
|
+
output += `\nRun \`/agileflow:help agents\` or browse \`.agileflow/agents/\` for the full list.`;
|
|
317
|
+
return output;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Generate a compact category summary for commands (no individual names).
|
|
322
|
+
* Used by minimal mode and generators that want a discovery-oriented summary.
|
|
323
|
+
* @param {string} commandsDir - Path to commands directory
|
|
324
|
+
* @returns {string} Compact category summary with counts
|
|
325
|
+
*/
|
|
326
|
+
function generateCommandSummary(commandsDir) {
|
|
327
|
+
if (!fs.existsSync(commandsDir)) return '';
|
|
328
|
+
|
|
329
|
+
const commands = [];
|
|
330
|
+
|
|
331
|
+
// Count main command files
|
|
332
|
+
const mainFiles = fs.readdirSync(commandsDir).filter(f => f.endsWith('.md'));
|
|
333
|
+
for (const file of mainFiles) {
|
|
334
|
+
const filePath = path.join(commandsDir, file);
|
|
335
|
+
if (!isPathSafe(filePath, commandsDir)) continue;
|
|
336
|
+
|
|
337
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
338
|
+
const frontmatter = parseFrontmatter(content);
|
|
339
|
+
if (!frontmatter || Object.keys(frontmatter).length === 0) continue;
|
|
340
|
+
commands.push(path.basename(file, '.md'));
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Count subdirectory command files
|
|
344
|
+
const entries = fs.readdirSync(commandsDir, { withFileTypes: true });
|
|
345
|
+
for (const entry of entries) {
|
|
346
|
+
if (entry.isDirectory()) {
|
|
347
|
+
const subDir = path.join(commandsDir, entry.name);
|
|
348
|
+
if (!isPathSafe(subDir, commandsDir)) continue;
|
|
349
|
+
|
|
350
|
+
const subFiles = fs.readdirSync(subDir).filter(f => f.endsWith('.md'));
|
|
351
|
+
for (const file of subFiles) {
|
|
352
|
+
const filePath = path.join(subDir, file);
|
|
353
|
+
if (!isPathSafe(filePath, commandsDir)) continue;
|
|
354
|
+
|
|
355
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
356
|
+
const frontmatter = parseFrontmatter(content);
|
|
357
|
+
if (!frontmatter || Object.keys(frontmatter).length === 0) continue;
|
|
358
|
+
commands.push(`${entry.name}:${path.basename(file, '.md')}`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
const safeCount = sanitize.count(commands.length);
|
|
364
|
+
return `**${safeCount} commands** available. Run \`/agileflow:help\` for the full list with descriptions.`;
|
|
365
|
+
}
|
|
366
|
+
|
|
238
367
|
// =============================================================================
|
|
239
368
|
// Template Generation Functions
|
|
240
369
|
// =============================================================================
|
|
@@ -480,6 +609,8 @@ function clearPreserveRulesCache() {
|
|
|
480
609
|
* @param {string} context.agileflowFolder - AgileFlow folder name
|
|
481
610
|
* @param {string} context.docsFolder - Docs folder name (default: 'docs')
|
|
482
611
|
* @param {string} context.version - AgileFlow version
|
|
612
|
+
* @param {boolean} context.minimal - When true, skip AGENT_LIST and COMMAND_LIST injection
|
|
613
|
+
* (replaces with discovery pointers). Keeps session harness, quality gates, preserve_rules.
|
|
483
614
|
* @returns {string} Content with all placeholders replaced
|
|
484
615
|
*/
|
|
485
616
|
function injectContent(content, context = {}) {
|
|
@@ -488,6 +619,7 @@ function injectContent(content, context = {}) {
|
|
|
488
619
|
agileflowFolder = '.agileflow',
|
|
489
620
|
docsFolder = 'docs',
|
|
490
621
|
version = 'unknown',
|
|
622
|
+
minimal = false,
|
|
491
623
|
} = context;
|
|
492
624
|
|
|
493
625
|
let result = content;
|
|
@@ -541,7 +673,13 @@ function injectContent(content, context = {}) {
|
|
|
541
673
|
// List generation already includes sanitization via sanitizeAgentData/sanitizeCommandData
|
|
542
674
|
if (coreDir && fs.existsSync(coreDir)) {
|
|
543
675
|
if (result.includes('{{AGENT_LIST}}')) {
|
|
544
|
-
|
|
676
|
+
let agentList;
|
|
677
|
+
if (minimal) {
|
|
678
|
+
// Minimal mode: replace with compact discovery pointer
|
|
679
|
+
agentList = `**Agents**: ${safeAgentCount} available. Run \`/agileflow:help agents\` or \`ls .agileflow/agents/\` to browse.`;
|
|
680
|
+
} else {
|
|
681
|
+
agentList = generateAgentList(path.join(coreDir, 'agents'));
|
|
682
|
+
}
|
|
545
683
|
result = replaceInBodyOnly(result, body => {
|
|
546
684
|
let updated = body.replace(/<!-- \{\{AGENT_LIST\}\} -->/g, agentList);
|
|
547
685
|
updated = updated.replace(/\{\{AGENT_LIST\}\}/g, agentList);
|
|
@@ -550,7 +688,13 @@ function injectContent(content, context = {}) {
|
|
|
550
688
|
}
|
|
551
689
|
|
|
552
690
|
if (result.includes('{{COMMAND_LIST}}')) {
|
|
553
|
-
|
|
691
|
+
let commandList;
|
|
692
|
+
if (minimal) {
|
|
693
|
+
// Minimal mode: replace with compact discovery pointer
|
|
694
|
+
commandList = `**Commands**: ${safeCommandCount} available. Run \`/agileflow:help\` or \`ls .agileflow/commands/\` to browse.`;
|
|
695
|
+
} else {
|
|
696
|
+
commandList = generateCommandList(path.join(coreDir, 'commands'));
|
|
697
|
+
}
|
|
554
698
|
result = replaceInBodyOnly(result, body => {
|
|
555
699
|
let updated = body.replace(/<!-- \{\{COMMAND_LIST\}\} -->/g, commandList);
|
|
556
700
|
updated = updated.replace(/\{\{COMMAND_LIST\}\}/g, commandList);
|
|
@@ -798,6 +942,10 @@ module.exports = {
|
|
|
798
942
|
generateAgentList,
|
|
799
943
|
generateCommandList,
|
|
800
944
|
|
|
945
|
+
// Summary generation (compact, for minimal mode)
|
|
946
|
+
generateAgentSummary,
|
|
947
|
+
generateCommandSummary,
|
|
948
|
+
|
|
801
949
|
// Template generation
|
|
802
950
|
generateSessionHarnessContent,
|
|
803
951
|
clearSessionHarnessCache,
|
|
@@ -190,7 +190,7 @@ Project-level planning and tracking.
|
|
|
190
190
|
- **milestones.md**: Release milestones
|
|
191
191
|
- **risks.md**: Project risks and mitigation strategies
|
|
192
192
|
- **ideation/**: Ideation reports from \`/agileflow:ideate:new\`
|
|
193
|
-
- **
|
|
193
|
+
- **code-audits/**: Code audit reports from \`/agileflow:code:logic\`
|
|
194
194
|
`,
|
|
195
195
|
|
|
196
196
|
[`${docsFolder}/09-agents/README.md`]: `# Agent Status Tracking
|