- 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.
27 KiB
name, description, argument-hint, allowed-tools
| name | description | argument-hint | allowed-tools |
|---|---|---|---|
| unified-execute-with-file | Universal execution engine for consuming any planning/brainstorm/analysis output with minimal progress tracking, multi-agent coordination, and incremental execution | [-y|--yes] [-p|--plan <path>[,<path2>]] [--merge-agents] [--auto-commit] [--commit-prefix "prefix"] [-m|--mode sequential|parallel] ["execution context or task name"] | TodoWrite(*), Task(*), AskUserQuestion(*), Read(*), Grep(*), Glob(*), Bash(*), Edit(*), Write(*) |
Auto Mode
When --yes or -y: Auto-confirm execution decisions, use default parallel strategy where possible.
Unified Execute-With-File Command
Quick Start
# Basic usage (auto-detect plan, ask for execution method)
/workflow:unified-execute-with-file
# Execute with specific plan
/workflow:unified-execute-with-file -p .workflow/plans/auth-plan.md
# Merge multiple plans
/workflow:unified-execute-with-file -p plan.json,agents/auth/plan.json
# Collaborative plan execution (auto-discover sub-plans)
/workflow:unified-execute-with-file -p .workflow/.planning/CPLAN-xxx --merge-agents
# With auto-commit (conventional commits)
/workflow:unified-execute-with-file --auto-commit -p plan.json
# Sequential execution (no parallelization)
/workflow:unified-execute-with-file -m sequential -p plan.json
# Auto mode (skip prompts, use Agent for simple tasks, CLI for complex)
/workflow:unified-execute-with-file -y -p plan.json
Execution Methods:
- Agent: Task tool with code-developer (recommended for standard tasks)
- CLI-Codex:
ccw cli --tool codex(complex tasks, git-aware) - CLI-Gemini:
ccw cli --tool gemini(analysis-heavy tasks) - Auto: Select based on task complexity (default in
-ymode)
Context Source: Plan files (IMPL_PLAN.md, plan.json, synthesis.json, etc.)
Output Directory: .workflow/.execution/{session-id}/
Default Mode: Parallel execution with smart dependency resolution
Core Innovation: Unified event log + structured notes + auto-commit
Output Artifacts
During Execution
| Artifact | Description |
|---|---|
execution.md |
Plan overview, task table, execution timeline |
execution-events.md |
⭐ Unified log (all task executions) - SINGLE SOURCE OF TRUTH |
Generated Code
Files generated directly to project directories (src/, tests/, docs/, etc.), not into execution folder.
Overview
Universal execution engine consuming any planning output and executing it with multi-agent coordination, dependency management, and progress tracking.
Core workflow: Load Plan → Parse Tasks → Execute → Track → Verify
┌─────────────────────────────────────────────────────────────────────────┐
│ UNIFIED EXECUTION WORKFLOW │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Phase 1: Plan Detection & Multi-Plan Merging │
│ ├─ Auto-detect or explicit --plan path │
│ ├─ Support multiple plans (comma-separated or --merge-agents) │
│ ├─ Deduplicate tasks (file overlap + 90% title similarity) │
│ ├─ Assign global IDs: GTASK-{plan-index}-{original-id} │
│ └─ Remap cross-plan dependencies │
│ │
│ Phase 2: Session Initialization │
│ ├─ Create .workflow/.execution/{sessionId}/ │
│ ├─ Generate execution.md (plan overview + task table) │
│ ├─ Initialize execution-events.md (unified log) │
│ ├─ Validate dependency graph (detect cycles) │
│ └─ Calculate execution waves (topological sort + conflict check) │
│ │
│ Phase 3: Pre-Execution Validation (Agent-Assisted) │
│ ├─ Launch validation agent to check feasibility │
│ ├─ Verify file existence, agent availability, file conflicts │
│ ├─ Generate validation report with recommendations │
│ └─ Ask user: execution method (Agent/CLI-Codex/CLI-Gemini/Auto) │
│ │
│ Phase 4: Wave Execution (Parallel/Sequential) │
│ ┌──────────────┬──────────────┬──────────────┐ │
│ │ Wave 1 │ Wave 2 │ Wave N │ │
│ ├──────────────┼──────────────┼──────────────┤ │
│ │ Task 1-A ──┐ │ Task 2-A │ Task N-A │ ← Dependencies OK │
│ │ Task 1-B │ │ Task 2-B │ Task N-B │ ← No file conflicts │
│ │ Task 1-C ──┘ │ │ │ ← Max 3 parallel │
│ └──────────────┴──────────────┴──────────────┘ │
│ │
│ Phase 5: Per-Task Execution (Agent OR CLI) │
│ ├─ Extract relevant notes from previous tasks │
│ ├─ Inject notes into execution context │
│ ├─ Route to Agent (Task tool) OR CLI (ccw cli command) │
│ ├─ Generate structured notes for next task │
│ ├─ Auto-commit if enabled (conventional commit format) │
│ └─ Append event to unified log │
│ │
│ Phase 6: Progress Tracking & Recovery │
│ ├─ execution-events.md: Single source of truth │
│ ├─ Each task: read previous events → execute → write event │
│ ├─ Status indicators: ✅ (completed), ❌ (failed), ⏳ (progress) │
│ └─ Resume support: --continue flag │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Output Structure
.workflow/.execution/{EXEC-slug-YYYY-MM-DD}/
├── execution.md # Plan overview + task table + timeline
└── execution-events.md # ⭐ Unified log (all task executions) - SINGLE SOURCE OF TRUTH
# Generated files (direct to project):
src/*, tests/*, docs/*
Key Concept: execution-events.md serves as both human-readable log AND machine-parseable state store. No redundancy, one unified source.
Implementation
Session Initialization
Objective: Parse plan paths, create session directory, build unified task graph.
Prerequisites: None (entry point)
Workflow Steps:
-
Parse Command Flags
- Extract plan paths from
--planor-pargument - Detect
--merge-agentsflag for collaborative plan auto-discovery - Detect
--auto-commitand--commit-prefixfor git integration - Detect
--modefor execution strategy (parallel/sequential) - Detect
-yor--yesfor auto-confirmation mode
- Extract plan paths from
-
Resolve Plan Paths
Input Format Resolution Strategy Comma-separated Split by comma: plan1.json,plan2.json--merge-agentsAuto-discover: plan-note.md+agents/**/plan.jsonSingle path Direct use No path Auto-detect from .workflow/(IMPL_PLAN.md or task JSONs) -
Build Unified Graph
- Parse all plans via format-agnostic
parsePlan() - Assign global IDs:
GTASK-{plan-index}-{original-id} - Deduplicate tasks (file overlap + 90% title similarity)
- Remap dependencies (handle merged tasks + cross-plan refs)
- Validate (detect cycles), topological sort
- Return:
{ tasks, executionOrder, planSources, metadata }
- Parse all plans via format-agnostic
-
Create Session Directory
- Generate session ID:
EXEC-{slug}-{date}-{random} - Create
.workflow/.execution/{sessionId}/ - Initialize
execution.mdwith plan sources and merge statistics - Initialize
execution-events.md(empty, will be appended)
- Generate session ID:
Success Criteria:
- All plans parsed successfully
- No circular dependencies in task graph
- Session directory created with execution.md template
- Execution order calculated (topological sort)
Completion: Log session ID and ready for validation phase
Pre-Execution Validation (Agent-Assisted)
Objective: Use validation agent to check execution feasibility, then ask user about execution method.
Prerequisites: Session initialized, unified graph built
Workflow Steps:
-
Launch Validation Agent
Task( subagent_type="cli-explore-agent", run_in_background=false, description="Validate execution plan feasibility", prompt=`
Validation Mission
Analyze the following execution plan and generate a validation report.
Plan Summary
- Total Tasks: ${unifiedGraph.tasks.length}
- Plan Sources: ${unifiedGraph.planSources.map(p => p.path).join(', ')}
- Execution Mode: ${executionMode}
Tasks to Validate
${unifiedGraph.tasks.slice(0, 10).map(t => - ${t.id}: ${t.title} (files: ${t.files_to_modify?.join(', ')})).join('\n')}
Validation Checks
- File Existence: Verify files_to_modify exist or will be created
- Dependency Resolution: Check all depends_on targets exist
- File Conflicts: Identify same-file modifications in parallel waves
- Complexity Assessment: Estimate task complexity (Low/Medium/High)
- Risk Analysis: Identify potential issues or blockers
Output Format
Generate validation-report.json in ${sessionFolder}: { "status": "pass" | "warn" | "fail", "file_checks": { "missing": [], "will_create": [] }, "dependency_issues": [], "file_conflicts": [{ "file": "", "tasks": [], "wave": 0 }], "complexity_assessment": { "low": 0, "medium": 0, "high": 0 }, "risks": [{ "severity": "critical|high|medium|low", "description": "" }], "recommendations": [] } ` )
2. **Process Validation Result**
- Read `{sessionFolder}/validation-report.json`
- Display summary: status, conflicts count, risks count
- If `status === "fail"`: Show blockers, ask to abort/continue
- If `status === "warn"`: Show warnings, ask to proceed/fix
3. **Select Execution Method** (unless `--yes` flag)
| Method | Description | When to Use |
|--------|-------------|-------------|
| Agent | `Task(subagent_type="code-developer")` | Standard implementation |
| CLI-Codex | `ccw cli --tool codex --mode write` | Complex tasks, git-aware |
| CLI-Gemini | `ccw cli --tool gemini --mode write` | Analysis-heavy tasks |
| Auto | Auto-select by complexity | Default for `--yes` mode |
**User Interaction** (unless `--yes`):
```javascript
if (autoYes) {
executionMethod = "Auto"
console.log(`[--yes] Auto-selecting execution method: Auto`)
} else {
const selection = AskUserQuestion({
questions: [{
question: `选择执行方式 (${unifiedGraph.tasks.length} tasks, complexity: ${avgComplexity}):`,
header: "Execution",
multiSelect: false,
options: [
{ label: "Agent (Recommended)", description: "@code-developer - 标准实现" },
{ label: "CLI-Codex", description: "ccw cli --tool codex - 复杂任务" },
{ label: "CLI-Gemini", description: "ccw cli --tool gemini - 分析型任务" },
{ label: "Auto", description: "按复杂度自动选择" }
]
}]
})
executionMethod = selection.execution
}
-
Confirm Execution (unless
--yesflag)Options:
- "开始执行" → Proceed with selected method
- "更换方式" → Re-select execution method
- "查看详情" → View full validation report
- "取消" → Exit without execution
Success Criteria:
- Validation agent completed successfully
- No critical blockers (or user chose to continue)
- Execution method selected
- User confirmed (or auto-mode enabled)
Variables Set:
validationReport: Parsed validation-report.jsonexecutionMethod: "Agent" | "CLI-Codex" | "CLI-Gemini" | "Auto"
Wave Execution
Objective: Execute tasks in waves, respecting dependencies and file conflicts.
Prerequisites: Validation completed, user confirmed
Workflow Steps:
-
Calculate Execution Waves
Constraints:
- Tasks with dependencies must wait for completion
- Same file modifications → Sequential (no parallel)
- Max 3 parallel tasks per wave (resource limit)
Algorithm:
- Find available tasks (dependencies satisfied, not completed)
- Check file conflicts (task.files_to_modify)
- Group non-conflicting tasks (up to 3 per wave)
- Mark completed, repeat
-
Execute Each Wave
- Launch tasks in parallel via
executeTask() - Wait for wave completion via
Promise.allSettled() - Process results (mark completed/failed)
- Update execution.md timeline
- Append events to execution-events.md
- Launch tasks in parallel via
-
Handle Failures
Failure Type Action Task timeout Ask: retry/skip/abort Dependency failed Auto-skip dependent tasks Max retries reached Ask: retry/skip/abort (unless auto-mode)
Success Criteria:
- All waves executed
- Results captured in execution-events.md
- Failed tasks handled appropriately
Task Execution
Objective: Execute individual task with context awareness, structured notes, and optional auto-commit.
Prerequisites: Task selected from available wave
Workflow Steps:
-
Extract Relevant Notes
- Read all notes from execution-events.md
- Filter by file overlap (notes.related_files ∩ task.files_to_modify)
- Always include Critical severity notes
- Sort by severity (Critical → High → Medium → Low)
-
Build Execution Context
const executionContext = ` ⚠️ Execution Notes from Previous Tasks ${relevantNotes} // Categorized notes with severity Current Task: ${task.id} - Original ID: ${task.original_id} - Source Plan: ${task.source_plan} - Modified Files: ${task.files_to_modify} Previous Agent Executions (for reference) ${previousEvents} // All previous task results ` -
Route to Executor (based on
executionMethod)Option A: Agent Execution
When:
executionMethod === "Agent"orAuto + Low ComplexityExecute task via Task tool with code-developer agent:
Task({ subagent_type: "code-developer", // or other agent types run_in_background: false, description: task.title, prompt: buildAgentPrompt(executionContext, task) }) // buildAgentPrompt generates: // - Execution context with notes // - Task details (title, description) // - Files to modify // - Dependencies // - Expected outputAgent Type Selection:
Agent Type Use Case code-developer Code implementation tdd-developer Code with tests test-fix-agent Test execution and fixing cli-execution-agent CLI-based tasks debug-explore-agent Bug diagnosis universal-executor Generic tasks
Option B: CLI Execution
When:
executionMethod === "CLI-Codex"/"CLI-Gemini"orAuto + Medium/High ComplexityExecute task via CLI in background mode:
// Build CLI prompt from execution context const cliPrompt = buildCliPrompt(task, executionContext) // Generates: PURPOSE, TASK, MODE, CONTEXT, EXPECTED, CONSTRAINTS // Select tool based on execution method const tool = executionMethod === "CLI-Gemini" ? "gemini" : "codex" // Generate fixed execution ID for resume capability const fixedId = `${sessionId}-${task.id}` // Execute in background Bash({ command: `ccw cli -p "${cliPrompt}" --tool ${tool} --mode write --id ${fixedId}`, run_in_background: true, description: `Execute task ${task.id} via CLI` }) // STOP HERE - CLI executes in background, task hook will notify on completionResume on Failure:
if (cliResult.status === 'failed' || cliResult.status === 'timeout') { console.log(`Task ${task.id} incomplete. Resume with fixed ID: ${fixedId}`) // Resume command: ccw cli -p "Continue" --resume ${fixedId} --id ${fixedId}-retry } -
Generate Structured Notes
Pattern Detection (auto-generate notes):
localStorage|sessionStorage→ WARNING (High): XSS防护提醒package.jsonmodified → DEPENDENCY (Medium): npm install提醒api.*change|breaking→ API_CHANGE (Critical): 兼容性检查
-
Auto-Commit (if
--auto-commitenabled)- Get changed files via
git status --porcelain - Filter to task.files_to_modify
- Stage files:
git add - Generate conventional commit message:
type(scope): subject - Commit:
git commit -m
- Get changed files via
-
Append to Event Log
Event Format:
## Task ${task.id} - COMPLETED ✅ **Timestamp**: ${time} **Duration**: ${ms} **Agent**: ${agent} ### Execution Summary ${summary} ### Generated Artifacts - `src/auth.ts` (2.3KB) ### Git Commit (if --auto-commit) **Files Committed**: ${files.length} **Commit Message**: feat(auth): implement user login ### 注意事项 (Execution Notes) **Category**: WARNING **Severity**: High **Related Files**: src/auth.ts **Message**: 使用了localStorage,注意XSS防护 ---
Success Criteria:
- Task executed successfully
- Notes generated for next agent
- Event appended to execution-events.md
- Auto-commit completed (if enabled)
Completion
Objective: Summarize execution results and offer follow-up actions.
Prerequisites: All waves completed
Workflow Steps:
-
Collect Statistics
- Total tasks:
normalizedTasks.length - Completed:
tasks.filter(t => t.status === 'completed').length - Failed:
tasks.filter(t => t.status === 'failed').length - Skipped:
tasks.filter(t => t.status === 'skipped').length - Success rate:
(completed / total * 100).toFixed(1)
- Total tasks:
-
Update execution.md
- Append "Execution Completed" section
- Include statistics table
- Link to execution-events.md for details
-
Display Summary
- Show session ID and folder
- Display statistics
- List failed tasks (if any)
-
Offer Follow-Up Actions (unless
--yes)Options:
- "查看详情" → View full execution log
- "调试失败项" → Debug failed tasks
- "优化执行" → Analyze execution improvements
- "完成" → No further action
Success Criteria:
- Statistics collected and displayed
- execution.md updated with final status
- User informed of completion
Helper Functions
Multi-Plan Support
discoverCollaborativePlans(basePath):
- Search for
plan-note.mdorplan.jsonin base path - Glob
agents/*/plan.jsonfor sub-plans - Return: Array of plan paths
buildUnifiedGraph(planPaths):
- Parse each plan, assign global IDs
- Deduplicate tasks (file overlap + 90% title similarity via Levenshtein)
- Remap dependencies (merged tasks + cross-plan refs)
- Validate (detect cycles), topological sort
- Return:
{ tasks, executionOrder, planSources, metadata }
Deduplication Logic:
- Same files + 90%+ title similarity → Merge
- Merge metadata:
source_plans,merged_from
Structured Notes
Note Categories: WARNING, DECISION, API_CHANGE, FILE_CONFLICT, DEPENDENCY, PATTERN
Note Severity: Critical, High, Medium, Low
extractNotesFromEvents(eventLogPath):
- Parse structured note blocks from execution-events.md
- Pattern:
**Category**: ... **Severity**: ... **Related Files**: ... **Message**: ... - Return: Array of note objects
filterRelevantNotes(notes, task):
- Include: File overlap with task.files_to_modify
- Always include: Critical severity notes
- Sort: By severity (Critical first)
generateNotesForNextAgent(result, task):
- Pattern detection for common issues
- Auto-generate structured notes
- Return: Markdown-formatted notes
Git Auto-Commit
inferCommitType(task):
- Check action/title for keywords: fix, refactor, test, doc
- Default:
feat
extractScope(task):
- Check files_to_modify for patterns: frontend/, backend/, components/, api/, auth/
- Return: scope or null
generateCommitMessage(task):
- Format:
type(scope): subject - Footer:
Task-ID: ${task.id}\nPlan: ${plan}
autoCommitTaskChanges(task):
- Get changed files, filter to task.files_to_modify
- Stage, commit with conventional message
- Return:
{ files, message }or null
Plan Format Parsers
parsePlan(content, filePath):
- Route to appropriate parser based on filename pattern
- Support: IMPL_PLAN.md, plan.json, synthesis.json, conclusions.json
parsePlanJson(content):
- Handle plan-json-schema (lite-plan, collaborative-plan, sub-plans)
- Map fields:
modification_points → files_to_modify,acceptance → expected_output - Infer: agent_type, task.type
- Build: prompt from task details
Validation & Execution Method
validateExecutionPlan(unifiedGraph, sessionFolder):
- Launch validation agent (cli-explore-agent)
- Check file existence, dependencies, file conflicts
- Generate validation-report.json with status/risks/recommendations
- Return:
{ status: "pass"|"warn"|"fail", report: {...} }
selectExecutionMethod(validationReport, autoYes):
- If
autoYes === true: Return "Auto" - Otherwise: AskUserQuestion with options (Agent/CLI-Codex/CLI-Gemini/Auto)
- Return: Selected execution method
resolveExecutor(task, executionMethod, complexity):
- If
executionMethod === "Agent": Return "agent" - If
executionMethod === "CLI-Codex": Return "cli-codex" - If
executionMethod === "CLI-Gemini": Return "cli-gemini" - If
executionMethod === "Auto":- Low complexity → "agent"
- Medium/High complexity → "cli-codex"
- Return: Executor type
Agent Selection
selectBestAgent(task):
| Task Type | Agent |
|---|---|
| code (with tests) | tdd-developer |
| code | code-developer |
| test | test-fix-agent |
| doc | doc-generator |
| analysis | cli-execution-agent |
| debug | debug-explore-agent |
| default | universal-executor |
Parallelization
calculateParallel(tasks):
Group into waves with constraints:
- Same file modifications → Sequential
- Dependencies → Wait for completion
- Max 3 parallel tasks per wave
Algorithm: Find available → Check conflicts → Group → Repeat
Error Handling & Recovery
| Situation | Action |
|---|---|
| Task timeout | Mark timeout, ask: retry/skip/abort |
| Missing dependency | Auto-skip dependent tasks, log warning |
| File conflict | Detect before execution, ask resolution |
| Output mismatch | Validate vs expected_output, flag review |
| Agent unavailable | Fallback to universal-executor |
| Execution interrupted | Resume with --continue flag |
Retry Logic:
- Auto-retry up to
max_retries(default: 2) in auto-yes mode - Interactive mode: Ask user after max retries
Dependency Handling:
- Failed task → Auto-skip all dependent tasks
- Log warning with skipped task IDs
Session Resume
/workflow:unified-execute-with-file --continue # Resume last
/workflow:unified-execute-with-file --continue EXEC-xxx-2025-01-27 # Resume specific
Resume Process:
- Load execution.md and execution-events.md
- Parse events to identify completed/failed/skipped tasks (via status indicators)
- Recalculate remaining dependencies
- Resume from first incomplete task
- Append "Resumed from [sessionId]" note to events
Configuration
| Flag | Default | Description |
|---|---|---|
-p, --plan <path> |
Auto-detect | Plan file(s), comma-separated for multiple |
--merge-agents |
false | Auto-discover collaborative plan sub-plans |
--auto-commit |
false | Commit after each successful task |
--commit-prefix |
null | Custom commit message prefix |
-m, --mode |
parallel | Execution strategy: sequential or parallel |
-y, --yes |
false | Auto-confirm all decisions |
Best Practices
- Clear Plan Structure: Well-structured plans → better execution
- Review Validation Report: Check validation-report.json for risks before proceeding
- Choose Right Execution Method:
- Agent: Standard tasks, straightforward implementation
- CLI-Codex: Complex tasks, requires git-aware context
- CLI-Gemini: Analysis-heavy or exploratory tasks
- Auto: Let system decide based on complexity
- Use Auto-Commit: Enable
--auto-commitfor automatic progress tracking - Resolve Conflicts Early: Address file conflicts before execution
- Monitor Events Log: Check execution-events.md for detailed progress
- Resume on Failure: Use
--continueto resume interrupted executions (Agent) or fixed ID (CLI) - Multi-Plan Merging: Leverage
--merge-agentsfor collaborative plan execution
Advanced Features
Multi-Plan Merging
Use Cases:
- Collaborative planning output (plan-note.md + agents/**/plan.json)
- Multiple feature plans to execute together
- Incremental plan additions
Edge Cases:
- Same title, different files → Keep both
- Same files, different title → Merge if 90%+ similarity
- Same task in multiple plans → Merge once
Structured Execution Notes
Categories & Severity:
WARNING(High): Security risks, potential issuesDECISION(Medium): Architectural choicesAPI_CHANGE(Critical): Breaking changesFILE_CONFLICT(High): Multi-task file modificationsDEPENDENCY(Medium): Package/module changesPATTERN(Low): Coding patterns established
Note Filtering:
- File overlap: Show notes affecting task.files_to_modify
- Always show: Critical severity (regardless of files)
Auto-Commit
Conventional Commit Format:
- Structure:
type(scope): subject - Types: feat, fix, refactor, test, docs
- Scope: Inferred from file paths (frontend, backend, ui, api, auth)
- Footer: Task-ID, Plan source
Safety:
- Never commit on task failure
- Never skip hooks (no --no-verify)
- Use heredoc for commit messages (avoid shell injection)