brainstorm-to-cycle
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseBrainstorm to Cycle Adapter
Brainstorm to Cycle 适配器
Overview
概述
Bridge workflow that converts brainstorm-with-file output to parallel-dev-cycle input. Reads synthesis.json, allows user to select an idea, and formats it as an enriched TASK description.
Core workflow: Load Session → Select Idea → Format Task → Launch Cycle
这是一个桥接工作流,可将brainstorm-with-file的输出转换为parallel-dev-cycle的输入。它会读取synthesis.json文件,允许用户选择创意,并将其格式化为增强型TASK描述。
核心工作流:加载会话 → 选择创意 → 格式化任务 → 启动Cycle
Inputs
输入参数
| Argument | Required | Description |
|---|---|---|
| --session | Yes | Brainstorm session ID (e.g., |
| --idea | No | Pre-select idea by index (0-based, from top_ideas) |
| --auto | No | Auto-select top-scored idea without confirmation |
| --launch | No | Auto-launch parallel-dev-cycle without preview |
| 参数 | 是否必填 | 描述 |
|---|---|---|
| --session | 是 | 头脑风暴会话ID(例如: |
| --idea | 否 | 通过索引预先选择创意(从0开始,对应top_ideas中的条目) |
| --auto | 否 | 自动选择得分最高的创意,无需确认 |
| --launch | 否 | 自动启动parallel-dev-cycle,无需预览 |
Output
输出结果
Launches with enriched TASK containing:
/parallel-dev-cycle- Primary recommendation or selected idea
- Key strengths and challenges
- Suggested implementation steps
- Alternative approaches for reference
启动,传入包含以下内容的增强型TASK:
/parallel-dev-cycle- 主要建议或选中的创意
- 核心优势与挑战
- 建议的实施步骤
- 供参考的替代方案
Execution Process
执行流程
Phase 1: Session Loading
├─ Validate session folder exists
├─ Read synthesis.json
├─ Parse top_ideas and recommendations
└─ Validate data structure
Phase 2: Idea Selection
├─ --auto mode → Select highest scored idea
├─ --idea=N → Select specified index
└─ Interactive → Present options, await selection
Phase 3: Task Formatting
├─ Build enriched task description
├─ Include context from brainstorm
└─ Generate parallel-dev-cycle command
Phase 4: Cycle Launch
├─ Confirm with user (unless --auto)
└─ Execute parallel-dev-cyclePhase 1: Session Loading
├─ Validate session folder exists
├─ Read synthesis.json
├─ Parse top_ideas and recommendations
└─ Validate data structure
Phase 2: Idea Selection
├─ --auto mode → Select highest scored idea
├─ --idea=N → Select specified index
└─ Interactive → Present options, await selection
Phase 3: Task Formatting
├─ Build enriched task description
├─ Include context from brainstorm
└─ Generate parallel-dev-cycle command
Phase 4: Cycle Launch
├─ Confirm with user (unless --auto)
└─ Execute parallel-dev-cycleImplementation
实现细节
Phase 1: Session Loading
阶段1:会话加载
Step 0: Determine Project Root
步骤0:确定项目根目录
检测项目根目录,确保 产物位置正确:
.workflow/bash
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)优先通过 git 获取仓库根目录;非 git 项目回退到 取当前绝对路径。
存储为 ,后续所有 路径必须以此为前缀。
pwd{projectRoot}.workflow/javascript
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
const projectRoot = bash('git rev-parse --show-toplevel 2>/dev/null || pwd').trim()
// Parse arguments
const args = "$ARGUMENTS"
const sessionId = "$SESSION"
const ideaIndexMatch = args.match(/--idea=(\d+)/)
const preSelectedIdea = ideaIndexMatch ? parseInt(ideaIndexMatch[1]) : null
const isAutoMode = args.includes('--auto')
// Validate session
const sessionFolder = `${projectRoot}/.workflow/.brainstorm/${sessionId}`
const synthesisPath = `${sessionFolder}/synthesis.json`
const brainstormPath = `${sessionFolder}/brainstorm.md`
function fileExists(p) {
try { return bash(`test -f "${p}" && echo "yes"`).includes('yes') } catch { return false }
}
if (!fileExists(synthesisPath)) {
console.error(`检测项目根目录,确保 产物位置正确:
.workflow/bash
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)优先通过 git 获取仓库根目录;非 git 项目回退到 取当前绝对路径。
存储为 ,后续所有 路径必须以此为前缀。
pwd{projectRoot}.workflow/javascript
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
const projectRoot = bash('git rev-parse --show-toplevel 2>/dev/null || pwd').trim()
// Parse arguments
const args = "$ARGUMENTS"
const sessionId = "$SESSION"
const ideaIndexMatch = args.match(/--idea=(\d+)/)
const preSelectedIdea = ideaIndexMatch ? parseInt(ideaIndexMatch[1]) : null
const isAutoMode = args.includes('--auto')
// Validate session
const sessionFolder = `${projectRoot}/.workflow/.brainstorm/${sessionId}`
const synthesisPath = `${sessionFolder}/synthesis.json`
const brainstormPath = `${sessionFolder}/brainstorm.md`
function fileExists(p) {
try { return bash(`test -f "${p}" && echo "yes"`).includes('yes') } catch { return false }
}
if (!fileExists(synthesisPath)) {
console.error(`Error: Session Not Found
Error: Session Not Found
Session ID: ${sessionId}
Expected path: ${synthesisPath}
Available sessions:
ls -1 ${projectRoot}/.workflow/.brainstorm/ 2>/dev/null | head -10`)
return { status: 'error', message: 'Session not found' }
}
) bash(// Load synthesis
const synthesis = JSON.parse(Read(synthesisPath))
// Validate structure
if (!synthesis.top_ideas || synthesis.top_ideas.length === 0) {
console.error(`
Session ID: ${sessionId}
Expected path: ${synthesisPath}
Available sessions:
ls -1 ${projectRoot}/.workflow/.brainstorm/ 2>/dev/null | head -10`)
return { status: 'error', message: 'Session not found' }
}
) bash(// Load synthesis
const synthesis = JSON.parse(Read(synthesisPath))
// Validate structure
if (!synthesis.top_ideas || synthesis.top_ideas.length === 0) {
console.error(`
Error: No Ideas Found
Error: No Ideas Found
The brainstorm session has no top_ideas.
Please complete the brainstorm workflow first.
`)
return { status: 'error', message: 'No ideas in synthesis' }
}
console.log(`
The brainstorm session has no top_ideas.
Please complete the brainstorm workflow first.
`)
return { status: 'error', message: 'No ideas in synthesis' }
}
console.log(`
Brainstorm Session Loaded
Brainstorm Session Loaded
Session: ${sessionId}
Topic: ${synthesis.topic}
Completed: ${synthesis.completed}
Ideas Found: ${synthesis.top_ideas.length}
`)
---Session: ${sessionId}
Topic: ${synthesis.topic}
Completed: ${synthesis.completed}
Ideas Found: ${synthesis.top_ideas.length}
`)
---Phase 2: Idea Selection
阶段2:创意选择
javascript
let selectedIdea = null
let selectionSource = ''
// Auto mode: select highest scored
if (isAutoMode) {
selectedIdea = synthesis.top_ideas.reduce((best, idea) =>
idea.score > best.score ? idea : best
)
selectionSource = 'auto (highest score)'
console.log(`
**Auto-selected**: ${selectedIdea.title} (Score: ${selectedIdea.score}/10)
`)
}
// Pre-selected by index
else if (preSelectedIdea !== null) {
if (preSelectedIdea >= synthesis.top_ideas.length) {
console.error(`javascript
let selectedIdea = null
let selectionSource = ''
// Auto mode: select highest scored
if (isAutoMode) {
selectedIdea = synthesis.top_ideas.reduce((best, idea) =>
idea.score > best.score ? idea : best
)
selectionSource = 'auto (highest score)'
console.log(`
**Auto-selected**: ${selectedIdea.title} (Score: ${selectedIdea.score}/10)
`)
}
// Pre-selected by index
else if (preSelectedIdea !== null) {
if (preSelectedIdea >= synthesis.top_ideas.length) {
console.error(`Error: Invalid Idea Index
Error: Invalid Idea Index
Requested: --idea=${preSelectedIdea}
Available: 0 to ${synthesis.top_ideas.length - 1}
`)
return { status: 'error', message: 'Invalid idea index' }
}
selectedIdea = synthesis.top_ideas[preSelectedIdea]
selectionSource =
index ${preSelectedIdea}console.log()
}
**Pre-selected**: ${selectedIdea.title} (Index: ${preSelectedIdea})// Interactive selection
else {
// Display options
console.log(`
Requested: --idea=${preSelectedIdea}
Available: 0 to ${synthesis.top_ideas.length - 1}
`)
return { status: 'error', message: 'Invalid idea index' }
}
selectedIdea = synthesis.top_ideas[preSelectedIdea]
selectionSource =
index ${preSelectedIdea}console.log()
}
**Pre-selected**: ${selectedIdea.title} (Index: ${preSelectedIdea})// Interactive selection
else {
// Display options
console.log(`
Select Idea for Development
Select Idea for Development
| # | Title | Score | Feasibility |
|---|---|---|---|
| ${synthesis.top_ideas.map((idea, i) => | |||
| ` | ${i} | ${idea.title.substring(0, 40)} | ${idea.score}/10 |
| ).join('\n')} |
Primary Recommendation: ${synthesis.recommendations?.primary?.substring(0, 60) || 'N/A'}
`)
// Build options for AskUser
const ideaOptions = synthesis.top_ideas.slice(0, 4).map((idea, i) => ({
label: ,
description:
}))
#${i}: ${idea.title.substring(0, 30)}Score: ${idea.score}/10 - ${idea.description?.substring(0, 50) || ''}// Add primary recommendation option if different
if (synthesis.recommendations?.primary) {
ideaOptions.unshift({
label: "Primary Recommendation",
description: synthesis.recommendations.primary.substring(0, 60)
})
}
const selection = ASK_USER([{
id: "idea", type: "select",
prompt: "Which idea should be developed?",
options: ideaOptions
}]) // BLOCKS (wait for user response)
// Parse selection
if (selection.idea === "Primary Recommendation") {
// Use primary recommendation as task
selectedIdea = {
title: "Primary Recommendation",
description: synthesis.recommendations.primary,
key_strengths: synthesis.key_insights || [],
main_challenges: [],
next_steps: synthesis.follow_up?.filter(f => f.type === 'implementation').map(f => f.summary) || []
}
selectionSource = 'primary recommendation'
} else {
const match = selection.idea.match(/^#(\d+):/)
const idx = match ? parseInt(match[1]) : 0
selectedIdea = synthesis.top_ideas[idx]
selectionSource =
}
}
user selected #${idx}console.log(`
| # | Title | Score | Feasibility |
|---|---|---|---|
| ${synthesis.top_ideas.map((idea, i) => | |||
| ` | ${i} | ${idea.title.substring(0, 40)} | ${idea.score}/10 |
| ).join('\n')} |
Primary Recommendation: ${synthesis.recommendations?.primary?.substring(0, 60) || 'N/A'}
`)
// Build options for AskUser
const ideaOptions = synthesis.top_ideas.slice(0, 4).map((idea, i) => ({
label: ,
description:
}))
#${i}: ${idea.title.substring(0, 30)}Score: ${idea.score}/10 - ${idea.description?.substring(0, 50) || ''}// Add primary recommendation option if different
if (synthesis.recommendations?.primary) {
ideaOptions.unshift({
label: "Primary Recommendation",
description: synthesis.recommendations.primary.substring(0, 60)
})
}
const selection = ASK_USER([{
id: "idea", type: "select",
prompt: "Which idea should be developed?",
options: ideaOptions
}]) // BLOCKS (wait for user response)
// Parse selection
if (selection.idea === "Primary Recommendation") {
// Use primary recommendation as task
selectedIdea = {
title: "Primary Recommendation",
description: synthesis.recommendations.primary,
key_strengths: synthesis.key_insights || [],
main_challenges: [],
next_steps: synthesis.follow_up?.filter(f => f.type === 'implementation').map(f => f.summary) || []
}
selectionSource = 'primary recommendation'
} else {
const match = selection.idea.match(/^#(\d+):/)
const idx = match ? parseInt(match[1]) : 0
selectedIdea = synthesis.top_ideas[idx]
selectionSource =
}
}
user selected #${idx}console.log(`
Selected Idea
Selected Idea
Title: ${selectedIdea.title}
Source: ${selectionSource}
Description: ${selectedIdea.description?.substring(0, 200) || 'N/A'}
`)
---Title: ${selectedIdea.title}
Source: ${selectionSource}
Description: ${selectedIdea.description?.substring(0, 200) || 'N/A'}
`)
---Phase 3: Task Formatting
阶段3:任务格式化
javascript
// Build enriched task description
function formatTask(idea, synthesis) {
const sections = []
// Main objective
sections.push(`# Main Objective\n\n${idea.title}`)
// Description
if (idea.description) {
sections.push(`# Description\n\n${idea.description}`)
}
// Key strengths
if (idea.key_strengths?.length > 0) {
sections.push(`# Key Strengths\n\n${idea.key_strengths.map(s => `- ${s}`).join('\n')}`)
}
// Main challenges (important for RA agent)
if (idea.main_challenges?.length > 0) {
sections.push(`# Main Challenges to Address\n\n${idea.main_challenges.map(c => `- ${c}`).join('\n')}`)
}
// Recommended steps
if (idea.next_steps?.length > 0) {
sections.push(`# Recommended Implementation Steps\n\n${idea.next_steps.map((s, i) => `${i + 1}. ${s}`).join('\n')}`)
}
// Alternative approaches (for RA consideration)
if (synthesis.recommendations?.alternatives?.length > 0) {
sections.push(`# Alternative Approaches (for reference)\n\n${synthesis.recommendations.alternatives.map(a => `- ${a}`).join('\n')}`)
}
// Key insights from brainstorm
if (synthesis.key_insights?.length > 0) {
const relevantInsights = synthesis.key_insights.slice(0, 3)
sections.push(`# Key Insights from Brainstorm\n\n${relevantInsights.map(i => `- ${i}`).join('\n')}`)
}
// Source reference
sections.push(`# Source\n\nBrainstorm Session: ${synthesis.session_id}\nTopic: ${synthesis.topic}`)
return sections.join('\n\n')
}
const enrichedTask = formatTask(selectedIdea, synthesis)
// Display formatted task
console.log(`javascript
// Build enriched task description
function formatTask(idea, synthesis) {
const sections = []
// Main objective
sections.push(`# Main Objective\n\n${idea.title}`)
// Description
if (idea.description) {
sections.push(`# Description\n\n${idea.description}`)
}
// Key strengths
if (idea.key_strengths?.length > 0) {
sections.push(`# Key Strengths\n\n${idea.key_strengths.map(s => `- ${s}`).join('\n')}`)
}
// Main challenges (important for RA agent)
if (idea.main_challenges?.length > 0) {
sections.push(`# Main Challenges to Address\n\n${idea.main_challenges.map(c => `- ${c}`).join('\n')}`)
}
// Recommended steps
if (idea.next_steps?.length > 0) {
sections.push(`# Recommended Implementation Steps\n\n${idea.next_steps.map((s, i) => `${i + 1}. ${s}`).join('\n')}`)
}
// Alternative approaches (for RA consideration)
if (synthesis.recommendations?.alternatives?.length > 0) {
sections.push(`# Alternative Approaches (for reference)\n\n${synthesis.recommendations.alternatives.map(a => `- ${a}`).join('\n')}`)
}
// Key insights from brainstorm
if (synthesis.key_insights?.length > 0) {
const relevantInsights = synthesis.key_insights.slice(0, 3)
sections.push(`# Key Insights from Brainstorm\n\n${relevantInsights.map(i => `- ${i}`).join('\n')}`)
}
// Source reference
sections.push(`# Source\n\nBrainstorm Session: ${synthesis.session_id}\nTopic: ${synthesis.topic}`)
return sections.join('\n\n')
}
const enrichedTask = formatTask(selectedIdea, synthesis)
// Display formatted task
console.log(`Formatted Task for parallel-dev-cycle
Formatted Task for parallel-dev-cycle
```markdown
${enrichedTask}
```
`)
// Save task to session folder for reference
Write(, )
${sessionFolder}/cycle-task.md# Generated Task\n\n**Generated**: ${getUtc8ISOString()}\n**Idea**: ${selectedIdea.title}\n**Selection**: ${selectionSource}\n\n---\n\n${enrichedTask}
---```markdown
${enrichedTask}
```
`)
// Save task to session folder for reference
Write(, )
${sessionFolder}/cycle-task.md# Generated Task\n\n**Generated**: ${getUtc8ISOString()}\n**Idea**: ${selectedIdea.title}\n**Selection**: ${selectionSource}\n\n---\n\n${enrichedTask}
---Phase 4: Cycle Launch
阶段4:Cycle启动
javascript
// Confirm launch (unless auto mode)
let shouldLaunch = isAutoMode
if (!isAutoMode) {
const confirmation = ASK_USER([{
id: "launch", type: "select",
prompt: "Launch parallel-dev-cycle with this task?",
options: [
{ label: "Yes, launch cycle (Recommended)", description: "Start parallel-dev-cycle with enriched task" },
{ label: "No, just save task", description: "Save formatted task for manual use" }
]
}]) // BLOCKS (wait for user response)
shouldLaunch = confirmation.launch.includes("Yes")
}
if (shouldLaunch) {
console.log(`javascript
// Confirm launch (unless auto mode)
let shouldLaunch = isAutoMode
if (!isAutoMode) {
const confirmation = ASK_USER([{
id: "launch", type: "select",
prompt: "Launch parallel-dev-cycle with this task?",
options: [
{ label: "Yes, launch cycle (Recommended)", description: "Start parallel-dev-cycle with enriched task" },
{ label: "No, just save task", description: "Save formatted task for manual use" }
]
}]) // BLOCKS (wait for user response)
shouldLaunch = confirmation.launch.includes("Yes")
}
if (shouldLaunch) {
console.log(`Launching parallel-dev-cycle
Launching parallel-dev-cycle
Task: ${selectedIdea.title}
Source Session: ${sessionId}
`)
// Escape task for command line
const escapedTask = enrichedTask
.replace(/\/g, '\\')
.replace(/"/g, '\"')
.replace(/$/g, '\$')
.replace(/')
/g, '\\// Launch parallel-dev-cycle
// Note: In actual execution, this would invoke the skill
console.log(`
Task: ${selectedIdea.title}
Source Session: ${sessionId}
`)
// Escape task for command line
const escapedTask = enrichedTask
.replace(/\/g, '\\')
.replace(/"/g, '\"')
.replace(/$/g, '\$')
.replace(/')
/g, '\\// Launch parallel-dev-cycle
// Note: In actual execution, this would invoke the skill
console.log(`
Cycle Command
Cycle Command
```bash
/parallel-dev-cycle TASK="${escapedTask.substring(0, 100)}..."
```
Full task saved to: ${sessionFolder}/cycle-task.md
`)
// Return success with cycle trigger
return {
status: 'success',
action: 'launch_cycle',
session_id: sessionId,
idea: selectedIdea.title,
task_file: ,
cycle_command:
}
${sessionFolder}/cycle-task.md/parallel-dev-cycle TASK="${enrichedTask}"} else {
console.log(`
```bash
/parallel-dev-cycle TASK="${escapedTask.substring(0, 100)}..."
```
Full task saved to: ${sessionFolder}/cycle-task.md
`)
// Return success with cycle trigger
return {
status: 'success',
action: 'launch_cycle',
session_id: sessionId,
idea: selectedIdea.title,
task_file: ,
cycle_command:
}
${sessionFolder}/cycle-task.md/parallel-dev-cycle TASK="${enrichedTask}"} else {
console.log(`
Task Saved (Not Launched)
Task Saved (Not Launched)
Task file: ${sessionFolder}/cycle-task.md
To launch manually:
```bash
/parallel-dev-cycle TASK="$(cat ${sessionFolder}/cycle-task.md)"
```
`)
return {
status: 'success',
action: 'saved_only',
session_id: sessionId,
task_file:
}
}
${sessionFolder}/cycle-task.md
---Task file: ${sessionFolder}/cycle-task.md
To launch manually:
```bash
/parallel-dev-cycle TASK="$(cat ${sessionFolder}/cycle-task.md)"
```
`)
return {
status: 'success',
action: 'saved_only',
session_id: sessionId,
task_file:
}
}
${sessionFolder}/cycle-task.md
---Session Files
会话文件
After execution:
{projectRoot}/.workflow/.brainstorm/{session-id}/
├── brainstorm.md # Original brainstorm
├── synthesis.json # Synthesis data (input)
├── perspectives.json # Perspectives data
├── ideas/ # Idea deep-dives
└── cycle-task.md # ⭐ Generated task (output)执行完成后,文件结构如下:
{projectRoot}/.workflow/.brainstorm/{session-id}/
├── brainstorm.md # 原始头脑风暴文档
├── synthesis.json # 合成数据(输入)
├── perspectives.json # 视角数据
├── ideas/ # 创意深度分析
└── cycle-task.md # ⭐ 生成的任务(输出)Task Format
任务格式
The generated task includes:
| Section | Purpose | Used By |
|---|---|---|
| Main Objective | Clear goal statement | RA: Primary requirement |
| Description | Detailed explanation | RA: Requirement context |
| Key Strengths | Why this approach | RA: Design decisions |
| Main Challenges | Known issues to address | RA: Edge cases, risks |
| Implementation Steps | Suggested approach | EP: Planning guidance |
| Alternatives | Other valid approaches | RA: Fallback options |
| Key Insights | Learnings from brainstorm | RA: Domain context |
生成的任务包含以下部分:
| 章节 | 用途 | 使用方 |
|---|---|---|
| Main Objective | 清晰的目标陈述 | RA:主要需求 |
| Description | 详细说明 | RA:需求上下文 |
| Key Strengths | 该方案的优势 | RA:设计决策依据 |
| Main Challenges | 需要解决的已知问题 | RA:边缘情况、风险评估 |
| Implementation Steps | 建议的实施步骤 | EP:规划指导 |
| Alternatives | 其他可行方案 | RA:备选方案参考 |
| Key Insights | 头脑风暴中的关键洞见 | RA:领域上下文 |
Error Handling
错误处理
| Situation | Action |
|---|---|
| Session not found | List available sessions, abort |
| synthesis.json missing | Suggest completing brainstorm first |
| No top_ideas | Report error, abort |
| Invalid --idea index | Show valid range, abort |
| Task too long | Truncate with reference to file |
| 场景 | 处理方式 |
|---|---|
| 会话未找到 | 列出可用会话,终止执行 |
| synthesis.json缺失 | 提示先完成头脑风暴工作流 |
| 无top_ideas | 报告错误,终止执行 |
| --idea索引无效 | 显示有效范围,终止执行 |
| 任务内容过长 | 截断内容并提示查看文件 |
Examples
示例
Auto Mode (Quick Launch)
自动模式(快速启动)
bash
/brainstorm-to-cycle SESSION="BS-rate-limiting-2025-01-28" --autobash
/brainstorm-to-cycle SESSION="BS-rate-limiting-2025-01-28" --auto→ Selects highest-scored idea
→ 选择得分最高的创意
→ Launches parallel-dev-cycle immediately
→ 立即启动parallel-dev-cycle
undefinedundefinedPre-Selected Idea
预先选择创意
bash
/brainstorm-to-cycle SESSION="BS-auth-system-2025-01-28" --idea=2bash
/brainstorm-to-cycle SESSION="BS-auth-system-2025-01-28" --idea=2→ Selects top_ideas[2]
→ 选择top_ideas[2]中的创意
→ Confirms before launch
→ 确认后启动
undefinedundefinedInteractive Selection
交互式选择
bash
/brainstorm-to-cycle SESSION="BS-caching-2025-01-28"bash
/brainstorm-to-cycle SESSION="BS-caching-2025-01-28"→ Displays all ideas with scores
→ 显示所有带得分的创意
→ User selects from options
→ 用户选择创意
→ Confirms and launches
→ 确认后启动
undefinedundefinedIntegration Flow
集成流程
brainstorm-with-file
│
▼
synthesis.json
│
▼
brainstorm-to-cycle ◄─── This command
│
▼
enriched TASK
│
▼
parallel-dev-cycle
│
▼
RA → EP → CD → VASNow execute brainstorm-to-cycle with session: $SESSION
brainstorm-with-file
│
▼
synthesis.json
│
▼
brainstorm-to-cycle ◄─── 本命令
│
▼
增强型TASK
│
▼
parallel-dev-cycle
│
▼
RA → EP → CD → VAS请使用会话 $SESSION 执行brainstorm-to-cycle