19 KiB
Phase 2: Lite Execute
Overview
Flexible task execution phase supporting three input modes: in-memory plan (from planning phases), direct prompt description, or file content. Handles execution orchestration, progress tracking, and optional code review.
Core capabilities:
- Multi-mode input (in-memory plan, prompt description, or file path)
- Execution orchestration (Agent or Codex) with full context
- Live progress tracking via TodoWrite at execution call level
- Optional code review with selected tool (Gemini, Agent, or custom)
- Context continuity across multiple executions
- Intelligent format detection (Enhanced Task JSON vs plain text)
Parameters
--in-memory: Use plan from memory (called by planning phases)<input>: Task description string, or path to file (required)
Input Modes
Mode 1: In-Memory Plan
Trigger: Called by planning phase after confirmation with --in-memory flag
Input Source: executionContext global variable set by planning phase
Content: Complete execution context (see Data Structures section)
Behavior:
- Skip execution method selection (already set by planning phase)
- Directly proceed to execution with full context
- All planning artifacts available (exploration, clarifications, plan)
Mode 2: Prompt Description
Trigger: User calls with task description string
Input: Simple task description (e.g., "Add unit tests for auth module")
Behavior:
- Store prompt as
originalUserInput - Create simple execution plan from prompt
- ASK_USER: Select execution method (Agent/Codex/Auto)
- ASK_USER: Select code review tool (Skip/Gemini/Agent/Other)
- Proceed to execution with
originalUserInputincluded
User Interaction:
Route by mode:
├─ --yes mode → Auto-confirm with defaults:
│ ├─ Execution method: Auto
│ └─ Code review: Skip
│
└─ Interactive mode → ASK_USER with 2 questions:
├─ Execution method: Agent (@code-developer) / Codex (codex CLI) / Auto (complexity-based)
└─ Code review: Skip / Gemini Review / Codex Review (git-aware) / Agent Review
Mode 3: File Content
Trigger: User calls with file path
Input: Path to file containing task description or plan.json
Format Detection:
1. Read file content
2. Attempt JSON parsing
├─ Valid JSON with summary + approach + tasks fields → plan.json format
│ ├─ Use parsed data as planObject
│ └─ Set originalUserInput = summary
└─ Not valid JSON or missing required fields → plain text format
└─ Set originalUserInput = file content (same as Mode 2)
3. User selects execution method + code review (same as Mode 2)
Execution Process
Input Parsing:
└─ Decision (mode detection):
├─ --in-memory flag → Mode 1: Load executionContext → Skip user selection
├─ Existing file path (path exists) → Mode 3: Read file → Detect format
│ ├─ Valid plan.json → Use planObject → User selects method + review
│ └─ Not plan.json → Treat as prompt → User selects method + review
└─ Otherwise → Mode 2: Prompt description → User selects method + review
Execution:
├─ Step 1: Initialize result tracking (previousExecutionResults = [])
├─ Step 2: Task grouping & batch creation
│ ├─ Extract explicit depends_on (no file/keyword inference)
│ ├─ Group: independent tasks → single parallel batch (maximize utilization)
│ ├─ Group: dependent tasks → sequential phases (respect dependencies)
│ └─ Create TodoWrite list for batches
├─ Step 3: Launch execution
│ ├─ Phase 1: All independent tasks (single batch, concurrent)
│ └─ Phase 2+: Dependent tasks by dependency order
├─ Step 4: Track progress (TodoWrite updates per batch)
└─ Step 5: Code review (if codeReviewTool ≠ "Skip")
Output:
└─ Execution complete with results in previousExecutionResults[]
Detailed Execution Steps
Step 1: Initialize Execution Tracking
Operations:
- Initialize
previousExecutionResultsarray for context continuity - In-Memory Mode: Echo execution strategy from planning phase for transparency
- Display: Method, Review tool, Task count, Complexity, Executor assignments (if present)
Step 2: Task Grouping & Batch Creation
Dependency Analysis: Use explicit depends_on from plan.json only — no inference from file paths or keywords.
1. Build task ID → index mapping
2. For each task:
└─ Resolve depends_on IDs to task indices
└─ Filter: only valid IDs that reference earlier tasks
3. Group into execution batches:
├─ Phase 1: All tasks with NO dependencies → single parallel batch
│ └─ Mark as processed
└─ Phase 2+: Iterative dependency resolution
├─ Find tasks whose ALL dependencies are satisfied (processed)
├─ Group ready tasks as batch (parallel within batch if multiple)
├─ Mark as processed
├─ Repeat until no tasks remain
└─ Safety: If no ready tasks found → circular dependency warning → force remaining
4. Assign batch IDs:
├─ Parallel batches: P1, P2, P3...
└─ Sequential batches: S1, S2, S3...
5. Create TodoWrite list with batch indicators:
├─ ⚡ for parallel batches (concurrent)
└─ → for sequential batches (one-by-one)
Step 3: Launch Execution
Executor Resolution
Task-level executor assignment takes priority over global execution method:
Resolution order (per task):
├─ 1. executorAssignments[task.id] → use assigned executor (gemini/codex/agent)
└─ 2. Fallback to global executionMethod:
├─ "Agent" → agent
├─ "Codex" → codex
└─ "Auto" → Low complexity → agent; Medium/High → codex
Execution Flow
1. Separate batches into parallel and sequential groups
2. Phase 1 — Launch all parallel batches concurrently:
├─ Update TodoWrite: all parallel → in_progress
├─ Execute all parallel batches simultaneously (single message, multiple tool calls)
├─ Collect results → append to previousExecutionResults
└─ Update TodoWrite: all parallel → completed
3. Phase 2+ — Execute sequential batches in order:
├─ For each sequential batch:
│ ├─ Update TodoWrite: current batch → in_progress
│ ├─ Execute batch
│ ├─ Collect result → append to previousExecutionResults
│ └─ Update TodoWrite: current batch → completed
└─ Continue until all batches completed
Unified Task Prompt Builder
Each task is formatted as a self-contained checklist. The executor only needs to know what THIS task requires. Same template for Agent and CLI.
Prompt Structure (assembled from batch tasks):
## Goal
{originalUserInput}
## Tasks
(For each task in batch, separated by ---)
### {task.title}
**Scope**: {task.scope} | **Action**: {task.action}
#### Modification Points
- **{file}** → `{target}`: {change}
#### Why this approach (Medium/High only)
{rationale.chosen_approach}
Key factors: {decision_factors}
Tradeoffs: {tradeoffs}
#### How to do it
{description}
{implementation steps}
#### Code skeleton (High only)
Interfaces: {interfaces}
Functions: {key_functions}
Classes: {classes}
#### Reference
- Pattern: {pattern}
- Files: {files}
- Notes: {examples}
#### Risk mitigations (High only)
- {risk.description} → **{risk.mitigation}**
#### Done when
- [ ] {acceptance criteria}
Success metrics: {verification.success_metrics}
## Context
(Assembled from available sources, reference only)
### Exploration Notes (Refined)
**Read first**: {exploration_log_refined path}
Contains: file index, task-relevant context, code reference, execution notes
**IMPORTANT**: Use to avoid re-exploring already analyzed files
### Previous Work
{previousExecutionResults summaries}
### Clarifications
{clarificationContext entries}
### Data Flow
{planObject.data_flow.diagram}
### Artifacts
Plan: {plan path}
### Project Guidelines
@.workflow/project-guidelines.json
Complete each task according to its "Done when" checklist.
Option A: Agent Execution
When to use: getTaskExecutor(task) === "agent", or global executionMethod = "Agent", or Auto AND complexity = Low
Execution Flow:
1. Spawn code-developer agent with prompt:
├─ MANDATORY FIRST STEPS:
│ ├─ Read: ~/.codex/agents/code-developer.md
│ ├─ Read: .workflow/project-tech.json
│ ├─ Read: .workflow/project-guidelines.json
│ └─ Read: {exploration_log_refined} (execution-relevant context)
└─ Body: {buildExecutionPrompt(batch)}
2. Wait for completion (timeout: 10 minutes)
3. Close agent after collection
4. Collect result → executionResult structure
Option B: CLI Execution (Codex)
When to use: getTaskExecutor(task) === "codex", or global executionMethod = "Codex", or Auto AND complexity = Medium/High
Execution:
ccw cli -p "{buildExecutionPrompt(batch)}" --tool codex --mode write --id {sessionId}-{groupId}
Fixed ID Pattern: {sessionId}-{groupId} (e.g., implement-auth-2025-12-13-P1)
Execution Mode: Background (run_in_background=true) → Stop output → Wait for task hook callback
Resume on Failure:
If status = failed or timeout:
├─ Display: Fixed ID, lookup command, resume command
├─ Lookup: ccw cli detail {fixedExecutionId}
└─ Resume: ccw cli -p "Continue tasks" --resume {fixedExecutionId} --tool codex --mode write --id {fixedExecutionId}-retry
Option C: CLI Execution (Gemini)
When to use: getTaskExecutor(task) === "gemini" (analysis tasks)
ccw cli -p "{buildExecutionPrompt(batch)}" --tool gemini --mode analysis --id {sessionId}-{groupId}
Step 4: Progress Tracking
Progress tracked at batch level (not individual task level).
| Icon | Meaning |
|---|---|
| ⚡ | Parallel batch (concurrent execution) |
| → | Sequential batch (one-by-one execution) |
Step 5: Code Review (Optional)
Skip Condition: Only run if codeReviewTool ≠ "Skip"
Review Focus: Verify implementation against plan acceptance criteria and verification requirements.
Review Criteria:
- Acceptance Criteria: Verify each criterion from plan.tasks[].acceptance
- Verification Checklist (Medium/High): Check unit_tests, integration_tests, success_metrics from plan.tasks[].verification
- Code Quality: Analyze quality, identify issues, suggest improvements
- Plan Alignment: Validate implementation matches planned approach and risk mitigations
Shared Review Prompt Template:
PURPOSE: Code review for implemented changes against plan acceptance criteria and verification requirements
TASK: • Verify plan acceptance criteria fulfillment • Check verification requirements (unit tests, success metrics) • Analyze code quality • Identify issues • Suggest improvements • Validate plan adherence and risk mitigations
MODE: analysis
CONTEXT: @**/* @{plan.json} [@{exploration.json}] | Memory: Review lite-execute changes against plan requirements including verification checklist
EXPECTED: Quality assessment with:
- Acceptance criteria verification (all tasks)
- Verification checklist validation (Medium/High: unit_tests, integration_tests, success_metrics)
- Issue identification
- Recommendations
Explicitly check each acceptance criterion and verification item from plan.json tasks.
CONSTRAINTS: Focus on plan acceptance criteria, verification requirements, and plan adherence | analysis=READ-ONLY
Tool-Specific Execution:
| Tool | Command | Notes |
|---|---|---|
| Agent Review | Direct review by current agent | Read plan.json, apply review criteria, report findings |
| Gemini Review | ccw cli -p "[review prompt]" --tool gemini --mode analysis |
Recommended |
| Qwen Review | ccw cli -p "[review prompt]" --tool qwen --mode analysis |
Alternative |
| Codex Review (A) | ccw cli -p "[review prompt]" --tool codex --mode review |
Complex reviews with focus areas |
| Codex Review (B) | ccw cli --tool codex --mode review --uncommitted |
Quick review, no custom prompt |
Important
:
-pprompt and target flags (--uncommitted/--base/--commit) are mutually exclusive for codex review.
Multi-Round Review: Generate fixed review ID ({sessionId}-review). If issues found, resume with follow-up:
ccw cli -p "Clarify the security concerns" --resume {reviewId} --tool gemini --mode analysis --id {reviewId}-followup
Implementation Note: Replace [review prompt] placeholder with actual Shared Review Prompt Template content, substituting:
@{plan.json}→@{executionContext.session.artifacts.plan}[@{exploration.json}]→ exploration files from artifacts (if exists)
Step 6: Update Development Index
Trigger: After all executions complete (regardless of code review)
Skip Condition: Skip if .workflow/project-tech.json does not exist
Operations:
1. Read .workflow/project-tech.json
└─ If not found → silent skip
2. Initialize development_index if missing
└─ Categories: feature, enhancement, bugfix, refactor, docs
3. Detect category from task keywords:
├─ fix/bug/error/issue/crash → bugfix
├─ refactor/cleanup/reorganize → refactor
├─ doc/readme/comment → docs
├─ add/new/create/implement → feature
└─ (default) → enhancement
4. Detect sub_feature from task file paths
└─ Extract parent directory names, return most frequent
5. Create entry:
├─ title: plan summary (max 60 chars)
├─ sub_feature: detected from file paths
├─ date: current date (YYYY-MM-DD)
├─ description: plan approach (max 100 chars)
├─ status: "completed" if all results completed, else "partial"
└─ session_id: from executionContext
6. Append entry to development_index[category]
7. Update statistics.last_updated timestamp
8. Write updated project-tech.json
Best Practices
Input Modes: In-memory (planning phase), prompt (standalone), file (JSON/text) Task Grouping: Based on explicit depends_on only; independent tasks run in single parallel batch Execution: All independent tasks launch concurrently via single Claude message with multiple tool calls
Error Handling
| Error | Cause | Resolution |
|---|---|---|
| Missing executionContext | --in-memory without context | Error: "No execution context found. Only available when called by planning phase." |
| File not found | File path doesn't exist | Error: "File not found: {path}. Check file path." |
| Empty file | File exists but no content | Error: "File is empty: {path}. Provide task description." |
| Invalid Enhanced Task JSON | JSON missing required fields | Warning: "Missing required fields. Treating as plain text." |
| Malformed JSON | JSON parsing fails | Treat as plain text (expected for non-JSON files) |
| Execution failure | Agent/Codex crashes | Display error, use fixed ID {sessionId}-{groupId} for resume |
| Execution timeout | CLI exceeded timeout | Use fixed ID for resume with extended timeout |
| Codex unavailable | Codex not installed | Show installation instructions, offer Agent execution |
| Fixed ID not found | Custom ID lookup failed | Check ccw cli history, verify date directories |
Data Structures
executionContext (Input - Mode 1)
Passed from planning phase via global variable:
{
planObject: {
summary: string,
approach: string,
tasks: [...],
estimated_time: string,
recommended_execution: string,
complexity: string
},
explorationsContext: {...} | null, // Multi-angle explorations
explorationAngles: string[], // List of exploration angles
explorationManifest: {...} | null, // Exploration manifest
clarificationContext: {...} | null,
executionMethod: "Agent" | "Codex" | "Auto", // Global default
codeReviewTool: "Skip" | "Gemini Review" | "Agent Review" | string,
originalUserInput: string,
// Task-level executor assignments (priority over executionMethod)
executorAssignments: {
[taskId]: { executor: "gemini" | "codex" | "agent", reason: string }
},
// Session artifacts location (saved by planning phase)
session: {
id: string, // Session identifier: {taskSlug}-{shortTimestamp}
folder: string, // Session folder path: .workflow/.lite-plan/{session-id}
artifacts: {
explorations: [{angle, path}], // exploration-{angle}.json paths
explorations_manifest: string, // explorations-manifest.json path
exploration_log: string, // exploration-notes.md (full version, Plan consumption)
exploration_log_refined: string, // exploration-notes-refined.md (refined version, Execute consumption)
plan: string // plan.json path (always present)
}
}
}
Artifact Usage:
- exploration_log: Full exploration notes, for Plan phase reference, contains 6 sections
- exploration_log_refined: Refined exploration notes, for Execute phase consumption, task-relevant content only
- Pass artifact paths to CLI tools and agents for enhanced context
- See execution options above for usage examples
executionResult (Output)
Collected after each execution call completes:
{
executionId: string, // e.g., "[Agent-1]", "[Codex-1]"
status: "completed" | "partial" | "failed",
tasksSummary: string, // Brief description of tasks handled
completionSummary: string, // What was completed
keyOutputs: string, // Files created/modified, key changes
notes: string, // Important context for next execution
fixedCliId: string | null // Fixed CLI execution ID (e.g., "implement-auth-2025-12-13-P1")
}
Appended to previousExecutionResults array for context continuity in multi-execution scenarios.
Post-Completion Expansion
After completion, ask user whether to expand as issue (test/enhance/refactor/doc). Selected items create new issues accordingly.
Fixed ID Pattern: {sessionId}-{groupId} enables predictable lookup without auto-generated timestamps.
Resume Usage: If status is "partial" or "failed", use fixedCliId to resume:
# Lookup previous execution
ccw cli detail {fixedCliId}
# Resume with new fixed ID for retry
ccw cli -p "Continue from where we left off" --resume {fixedCliId} --tool codex --mode write --id {fixedCliId}-retry
Post-Phase Update
After Phase 2 (Lite Execute) completes:
- Output Created: Executed tasks, optional code review results, updated development index
- Execution Results:
previousExecutionResults[]with status per batch - Next Action: Workflow complete. Optionally expand to issue (test/enhance/refactor/doc)
- TodoWrite: Mark all execution batches as completed