Files
Claude-Code-Workflow/.claude/commands/workflow/collaborative-plan-with-file.md
catlog22 0342976c51 feat: add JSON detection utility for various formats
- Implemented a utility function `detectJsonInLine` to identify and parse JSON data from different formats including direct JSON, tool calls, tool results, embedded JSON, and code blocks.
- Introduced `JsonDetectionResult` interface to standardize the detection results.
- Added a new test results file to track the status of tests.
2026-02-01 15:17:03 +08:00

605 lines
23 KiB
Markdown

---
name: workflow:collaborative-plan-with-file
description: Collaborative planning with Plan Note - Understanding agent creates shared plan-note.md template, parallel agents fill pre-allocated sections, conflict detection without merge. Outputs executable plan-note.md.
argument-hint: "[-y|--yes] <task description> [--max-agents=5]"
allowed-tools: TodoWrite(*), Task(*), AskUserQuestion(*), Read(*), Bash(*), Write(*), Glob(*), Grep(*), mcp__ace-tool__search_context(*)
---
## Auto Mode
When `--yes` or `-y`: Auto-approve splits, skip confirmations.
# Collaborative Planning Command
## Quick Start
```bash
# Basic usage
/workflow:collaborative-plan-with-file "Implement real-time notification system"
# With options
/workflow:collaborative-plan-with-file "Refactor authentication module" --max-agents=4
/workflow:collaborative-plan-with-file "Add payment gateway support" -y
```
**Context Source**: Understanding-Agent + Per-agent exploration
**Output Directory**: `.workflow/.planning/{session-id}/`
**Default Max Agents**: 5 (actual count based on requirement complexity)
**Core Innovation**: Plan Note - shared collaborative document, no merge needed
## Output Artifacts
### Phase 1: Understanding Agent
| Artifact | Description |
|----------|-------------|
| `plan-note.md` | Shared collaborative document with pre-allocated sections |
| `requirement-analysis.json` | Sub-domain assignments and TASK ID ranges |
### Phase 2: Per Sub-Agent
| Artifact | Description |
|----------|-------------|
| `planning-context.md` | Evidence paths + synthesized understanding |
| `plan.json` | Complete agent plan (detailed implementation) |
| Updates to `plan-note.md` | Agent fills pre-allocated sections |
### Phase 3: Final Output
| Artifact | Description |
|----------|-------------|
| `plan-note.md` | ⭐ Executable plan with conflict markers |
| `conflicts.json` | Detected conflicts with resolution options |
| `plan.md` | Human-readable summary |
## Overview
Unified collaborative planning workflow using **Plan Note** architecture:
1. **Understanding**: Agent analyzes requirements and creates plan-note.md template with pre-allocated sections
2. **Parallel Planning**: Each agent generates plan.json + fills their pre-allocated section in plan-note.md
3. **Conflict Detection**: Scan plan-note.md for conflicts (no merge needed)
4. **Completion**: Generate plan.md summary, ready for execution
```
┌─────────────────────────────────────────────────────────────────────────┐
│ PLAN NOTE COLLABORATIVE PLANNING │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Phase 1: Understanding & Template Creation │
│ ├─ Understanding-Agent analyzes requirements │
│ ├─ Identify 2-5 sub-domains (focus areas) │
│ ├─ Create plan-note.md with pre-allocated sections │
│ └─ Assign TASK ID ranges (no conflicts) │
│ │
│ Phase 2: Parallel Agent Execution (No Locks Needed) │
│ ┌──────────────┬──────────────┬──────────────┐ │
│ │ Agent 1 │ Agent 2 │ Agent N │ │
│ ├──────────────┼──────────────┼──────────────┤ │
│ │ Own Section │ Own Section │ Own Section │ ← Pre-allocated │
│ │ plan.json │ plan.json │ plan.json │ ← Detailed plans │
│ └──────────────┴──────────────┴──────────────┘ │
│ │
│ Phase 3: Conflict Detection (Single Source) │
│ ├─ Parse plan-note.md (all sections) │
│ ├─ Detect file/dependency/strategy conflicts │
│ └─ Update plan-note.md conflict section │
│ │
│ Phase 4: Completion (No Merge) │
│ ├─ Generate plan.md (human-readable) │
│ └─ Ready for execution │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
## Output Structure
```
.workflow/.planning/{CPLAN-slug-YYYY-MM-DD}/
├── plan-note.md # ⭐ Core: Requirements + Tasks + Conflicts
├── requirement-analysis.json # Phase 1: Sub-domain assignments
├── agents/ # Phase 2: Per-agent detailed plans
│ ├── {focus-area-1}/
│ │ ├── planning-context.md # Evidence + understanding
│ │ └── plan.json # Complete agent plan
│ ├── {focus-area-2}/
│ │ └── ...
│ └── {focus-area-N}/
│ └── ...
├── conflicts.json # Phase 3: Conflict details
└── plan.md # Phase 4: Human-readable summary
```
## Implementation
### Session Initialization
**Objective**: Create session context and directory structure for collaborative planning.
**Required Actions**:
1. Extract task description from `$ARGUMENTS`
2. Generate session ID with format: `CPLAN-{slug}-{date}`
- slug: lowercase, alphanumeric, max 30 chars
- date: YYYY-MM-DD (UTC+8)
3. Define session folder: `.workflow/.planning/{session-id}`
4. Parse command options:
- `--max-agents=N` (default: 5)
- `-y` or `--yes` for auto-approval mode
5. Create directory structure: `{session-folder}/agents/`
**Session Variables**:
- `sessionId`: Unique session identifier
- `sessionFolder`: Base directory for all artifacts
- `maxAgents`: Maximum number of parallel agents
- `autoMode`: Boolean for auto-confirmation
### Phase 1: Understanding & Template Creation
**Objective**: Analyze requirements and create the plan-note.md template with pre-allocated sections for parallel agents.
**Prerequisites**:
- Session initialized with valid sessionId and sessionFolder
- Task description available from $ARGUMENTS
**Workflow Steps**:
1. **Initialize Progress Tracking**
- Create 4 todo items for workflow phases
- Set Phase 1 status to `in_progress`
2. **Launch Understanding Agent**
- Agent type: `cli-lite-planning-agent`
- Execution mode: synchronous (run_in_background: false)
3. **Agent Tasks**:
- **Understand Requirements**: Extract core objective, key points, constraints from task description
- **Form Checklist**: Identify critical questions needing clarification
- **Split Sub-Domains**: Identify 2-{maxAgents} parallelizable focus areas
- **Create Plan Note**: Generate plan-note.md with pre-allocated sections
**Output Files**:
| File | Purpose |
|------|---------|
| `{sessionFolder}/plan-note.md` | Collaborative template with pre-allocated sections per agent |
| `{sessionFolder}/requirement-analysis.json` | Sub-domain assignments and TASK ID ranges |
**requirement-analysis.json Schema**:
- `session_id`: Session identifier
- `original_requirement`: Task description
- `complexity`: Low | Medium | High
- `sub_domains[]`: Array of focus areas with task_id_range and estimated_effort
- `total_agents`: Number of agents to spawn
**Success Criteria**:
- 2-{maxAgents} clear sub-domains identified
- Each sub-domain can be planned independently
- Plan Note template includes all pre-allocated sections
- TASK ID ranges have no overlap (100 IDs per agent)
- Requirements understanding is comprehensive
**Completion**:
- Log created artifacts
- Update Phase 1 todo status to `completed`
**Agent Call**:
```javascript
Task(
subagent_type="cli-lite-planning-agent",
run_in_background=false,
description="Understand requirements and create plan template",
prompt=`
## Mission: Create Plan Note Template
### Input Requirements
${taskDescription}
### Tasks
1. **Understand Requirements**: Extract core objective, key points, constraints
2. **Form Checklist**: Identify critical questions needing clarification
3. **Split Sub-Domains**: Identify 2-${maxAgents} parallelizable focus areas
4. **Create Plan Note**: Generate plan-note.md with pre-allocated sections
### Output Files
**File 1**: ${sessionFolder}/plan-note.md
Structure Requirements:
- YAML frontmatter: session_id, original_requirement, created_at, contributors, sub_domains, agent_sections, agent_task_id_ranges, status
- Section: ## 需求理解 (Core objectives, key points, constraints, split strategy)
- Section: ## 任务池 - {Focus Area 1} (Pre-allocated task section for agent 1, TASK-001 ~ TASK-100)
- Section: ## 任务池 - {Focus Area 2} (Pre-allocated task section for agent 2, TASK-101 ~ TASK-200)
- ... (One task pool section per sub-domain)
- Section: ## 依赖关系 (Auto-generated after all agents complete)
- Section: ## 冲突标记 (Populated in Phase 3)
- Section: ## 上下文证据 - {Focus Area 1} (Evidence for agent 1)
- Section: ## 上下文证据 - {Focus Area 2} (Evidence for agent 2)
- ... (One evidence section per sub-domain)
**File 2**: ${sessionFolder}/requirement-analysis.json
- session_id, original_requirement, complexity, sub_domains[], total_agents
### Success Criteria
- [ ] 2-${maxAgents} clear sub-domains identified
- [ ] Each sub-domain can be planned independently
- [ ] Plan Note template includes all pre-allocated sections
- [ ] TASK ID ranges have no overlap (100 IDs per agent)
`
)
```
### Phase 2: Parallel Sub-Agent Execution
**Objective**: Launch parallel planning agents to fill their pre-allocated sections in plan-note.md.
**Prerequisites**:
- Phase 1 completed successfully
- `{sessionFolder}/requirement-analysis.json` exists with sub-domain definitions
- `{sessionFolder}/plan-note.md` template created
**Workflow Steps**:
1. **Load Sub-Domain Configuration**
- Read `{sessionFolder}/requirement-analysis.json`
- Extract sub-domains array with focus_area, description, task_id_range
2. **Update Progress Tracking**
- Set Phase 2 status to `in_progress`
- Add sub-todo for each agent
3. **User Confirmation** (unless autoMode)
- Display identified sub-domains with descriptions
- Options: "开始规划" / "调整拆分" / "取消"
- Skip if autoMode enabled
4. **Create Agent Directories**
- For each sub-domain: `{sessionFolder}/agents/{focus-area}/`
5. **Launch Parallel Agents**
- Agent type: `cli-lite-planning-agent`
- Execution mode: synchronous (run_in_background: false)
- Launch ALL agents in parallel (single message with multiple Task calls)
**Per-Agent Context**:
- Focus area name and description
- Assigned TASK ID range (no overlap with other agents)
- Session ID and folder path
**Per-Agent Tasks**:
| Task | Output | Description |
|------|--------|-------------|
| Generate plan.json | `{sessionFolder}/agents/{focus-area}/plan.json` | Complete detailed plan following schema |
| Update plan-note.md | Sync to shared file | Fill pre-allocated "任务池" and "上下文证据" sections |
**Task Summary Format** (for plan-note.md):
- Task header: `### TASK-{ID}: {Title} [{focus-area}]`
- Status, Complexity, Dependencies
- Scope description
- Modification points with file:line references
- Conflict risk assessment
**Evidence Format** (for plan-note.md):
- Related files with relevance scores
- Existing patterns identified
- Constraints discovered
**Agent Execution Rules**:
- Each agent modifies ONLY its pre-allocated sections
- Use assigned TASK ID range exclusively
- No locking needed (exclusive sections)
- Include conflict_risk assessment for each task
**Completion**:
- Wait for all agents to complete
- Log generated artifacts for each agent
- Update Phase 2 todo status to `completed`
**User Confirmation** (unless autoMode):
```javascript
if (!autoMode) {
AskUserQuestion({
questions: [{
question: `已识别 ${subDomains.length} 个子领域:\n${subDomains.map((s, i) => `${i+1}. ${s.focus_area}: ${s.description}`).join('\n')}\n\n确认开始并行规划?`,
header: "Confirm Split",
multiSelect: false,
options: [
{ label: "开始规划", description: "启动并行sub-agent" },
{ label: "调整拆分", description: "修改子领域划分" },
{ label: "取消", description: "退出规划" }
]
}]
})
}
```
**Launch Parallel Agents** (single message, multiple Task calls):
```javascript
// Create agent directories
subDomains.forEach(sub => {
Bash(`mkdir -p ${sessionFolder}/agents/${sub.focus_area}`)
})
// Launch all agents in parallel
subDomains.map(sub =>
Task(
subagent_type="cli-lite-planning-agent",
run_in_background=false,
description=`Plan: ${sub.focus_area}`,
prompt=`
## Sub-Agent Context
**Focus Area**: ${sub.focus_area}
**Description**: ${sub.description}
**TASK ID Range**: ${sub.task_id_range[0]}-${sub.task_id_range[1]}
**Session**: ${sessionId}
## Dual Output Tasks
### Task 1: Generate Complete plan.json
Output: ${sessionFolder}/agents/${sub.focus_area}/plan.json
Schema: ~/.claude/workflows/cli-templates/schemas/plan-json-schema.json
### Task 2: Sync Summary to plan-note.md
**Locate Your Sections**:
- Task Pool: "## 任务池 - ${toTitleCase(sub.focus_area)}"
- Evidence: "## 上下文证据 - ${toTitleCase(sub.focus_area)}"
**Task Summary Format**:
- Task header: ### TASK-${sub.task_id_range[0]}: Task Title [${sub.focus_area}]
- Fields: 状态, 复杂度, 依赖, 范围, 修改点, 冲突风险
**Evidence Format**:
- 相关文件, 现有模式, 约束
## Execution Steps
1. Generate complete plan.json
2. Extract summary from plan.json
3. Read ${sessionFolder}/plan-note.md
4. Locate and replace your task pool section
5. Locate and replace your evidence section
6. Write back plan-note.md
## Important
- Only modify your pre-allocated sections
- Use assigned TASK ID range: ${sub.task_id_range[0]}-${sub.task_id_range[1]}
`
)
)
```
### Phase 3: Conflict Detection
**Objective**: Analyze plan-note.md for conflicts across all agent contributions without merging files.
**Prerequisites**:
- Phase 2 completed successfully
- All agents have updated plan-note.md with their sections
- `{sessionFolder}/plan-note.md` contains all task and evidence sections
**Workflow Steps**:
1. **Update Progress Tracking**
- Set Phase 3 status to `in_progress`
2. **Parse Plan Note**
- Read `{sessionFolder}/plan-note.md`
- Extract YAML frontmatter (session metadata)
- Parse markdown sections by heading levels
- Identify all "任务池" sections
3. **Extract All Tasks**
- For each "任务池" section:
- Extract tasks matching pattern: `### TASK-{ID}: {Title} [{author}]`
- Parse task details: status, complexity, dependencies, modification points, conflict risk
- Consolidate into single task list
4. **Detect Conflicts**
**File Conflicts**:
- Group modification points by file:location
- Identify locations modified by multiple agents
- Record: severity=high, tasks involved, agents involved, suggested resolution
**Dependency Cycles**:
- Build dependency graph from task dependencies
- Detect cycles using depth-first search
- Record: severity=critical, cycle path, suggested resolution
**Strategy Conflicts**:
- Group tasks by files they modify
- Identify files with high/medium conflict risk from multiple agents
- Record: severity=medium, tasks involved, agents involved, suggested resolution
5. **Generate Conflict Artifacts**
**conflicts.json**:
- Write to `{sessionFolder}/conflicts.json`
- Include: detected_at, total_tasks, total_agents, conflicts array
- Each conflict: type, severity, tasks_involved, description, suggested_resolution
**Update plan-note.md**:
- Locate "## 冲突标记" section
- Generate markdown summary of conflicts
- Replace section content with conflict markdown
6. **Completion**
- Log conflict detection summary
- Display conflict details if any found
- Update Phase 3 todo status to `completed`
**Conflict Types**:
| Type | Severity | Detection Logic |
|------|----------|-----------------|
| file_conflict | high | Same file:location modified by multiple agents |
| dependency_cycle | critical | Circular dependencies in task graph |
| strategy_conflict | medium | Multiple high-risk tasks in same file from different agents |
**Conflict Detection Functions**:
**parsePlanNote(markdown)**:
- Input: Raw markdown content of plan-note.md
- Process:
- Extract YAML frontmatter between `---` markers
- Parse frontmatter as YAML to get session metadata
- Scan for heading patterns `^(#{2,})\s+(.+)$`
- Build sections array with: level, heading, start position, content
- Output: `{ frontmatter: object, sections: array }`
**extractTasksFromSection(content, sectionHeading)**:
- Input: Section content text, section heading for attribution
- Process:
- Match task pattern: `### (TASK-\d+):\s+(.+?)\s+\[(.+?)\]`
- For each match: extract taskId, title, author
- Call parseTaskDetails for additional fields
- Output: Array of task objects with id, title, author, source_section, ...details
**parseTaskDetails(content)**:
- Input: Task content block
- Process:
- Extract fields via regex patterns:
- `**状态**:\s*(.+)` → status
- `**复杂度**:\s*(.+)` → complexity
- `**依赖**:\s*(.+)` → depends_on (extract TASK-\d+ references)
- `**冲突风险**:\s*(.+)` → conflict_risk
- Extract modification points: `-\s+\`([^`]+):\s*([^`]+)\`:\s*(.+)` → file, location, summary
- Output: Details object with status, complexity, depends_on[], modification_points[], conflict_risk
**detectFileConflicts(tasks)**:
- Input: All tasks array
- Process:
- Build fileMap: `{ "file:location": [{ task_id, task_title, source_agent, change }] }`
- For each location with multiple modifications from different agents:
- Create conflict with type='file_conflict', severity='high'
- Include: location, tasks_involved, agents_involved, modifications
- Suggested resolution: 'Coordinate modification order or merge changes'
- Output: Array of file conflict objects
**detectDependencyCycles(tasks)**:
- Input: All tasks array
- Process:
- Build dependency graph: `{ taskId: [dependsOn_taskIds] }`
- Use DFS with recursion stack to detect cycles
- For each cycle found:
- Create conflict with type='dependency_cycle', severity='critical'
- Include: cycle path as tasks_involved
- Suggested resolution: 'Remove or reorganize dependencies'
- Output: Array of dependency cycle conflict objects
**detectStrategyConflicts(tasks)**:
- Input: All tasks array
- Process:
- Group tasks by files they modify
- For each file with tasks from multiple agents:
- Filter for high/medium conflict_risk tasks
- If >1 high-risk tasks from different agents:
- Create conflict with type='strategy_conflict', severity='medium'
- Include: file, tasks_involved, agents_involved
- Suggested resolution: 'Review approaches and align on single strategy'
- Output: Array of strategy conflict objects
**generateConflictMarkdown(conflicts)**:
- Input: Array of conflict objects
- Process:
- If empty: return '✅ 无冲突检测到'
- For each conflict:
- Generate header: `### CONFLICT-{padded_index}: {description}`
- Add fields: 严重程度, 涉及任务, 涉及Agent
- Add 问题详情 based on conflict type
- Add 建议解决方案
- Add 决策状态: [ ] 待解决
- Output: Markdown string for plan-note.md "## 冲突标记" section
**replaceSectionContent(markdown, sectionHeading, newContent)**:
- Input: Original markdown, target section heading, new content
- Process:
- Find section heading position via regex
- Find next heading of same or higher level
- Replace content between heading and next section
- If section not found: append at end
- Output: Updated markdown string
### Phase 4: Completion
**Objective**: Generate human-readable plan summary and finalize workflow.
**Prerequisites**:
- Phase 3 completed successfully
- Conflicts detected and documented in plan-note.md
- All artifacts generated
**Workflow Steps**:
1. **Update Progress Tracking**
- Set Phase 4 status to `in_progress`
2. **Read Final State**
- Read `{sessionFolder}/plan-note.md`
- Extract frontmatter metadata
- Load conflicts from Phase 3
3. **Generate plan.md**
- Create human-readable summary including:
- Session metadata
- Requirements understanding
- Sub-domain breakdown
- Task overview by focus area
- Conflict report
- Execution instructions
4. **Write Summary File**
- Write to `{sessionFolder}/plan.md`
5. **Display Completion Summary**
- Session statistics
- File structure
- Execution command
- Conflict status
6. **Update Todo**
- Set Phase 4 status to `completed`
**plan.md Structure**:
| Section | Content |
|---------|---------|
| Header | Session ID, created time, original requirement |
| Requirements | Copy from plan-note.md "## 需求理解" section |
| Sub-Domain Split | List each focus area with description and task ID range |
| Task Overview | Tasks grouped by focus area with complexity and dependencies |
| Conflict Report | Summary of detected conflicts or "无冲突" |
| Execution | Command to execute the plan |
**Required Function** (semantic description):
- **generateHumanReadablePlan**: Extract sections from plan-note.md and format as readable plan.md with session info, requirements, tasks, and conflicts
## Configuration
| Flag | Default | Description |
|------|---------|-------------|
| `--max-agents` | 5 | Maximum sub-agents to spawn |
| `-y, --yes` | false | Auto-confirm all decisions |
## Error Handling
| Error | Resolution |
|-------|------------|
| Understanding agent fails | Retry once, provide more context |
| Planning agent fails | Skip failed agent, continue with others |
| Section not found in plan-note | Agent creates section (defensive) |
| Conflict detection fails | Continue with empty conflicts |
## Best Practices
1. **Clear Requirements**: Detailed requirements → better sub-domain splitting
2. **Review Plan Note**: Check plan-note.md before execution
3. **Resolve Conflicts**: Address high/critical conflicts before execution
4. **Inspect Details**: Use agents/{focus-area}/plan.json for deep dive
---
**Now execute collaborative-plan-with-file for**: $ARGUMENTS