Skip to main content

workflow-lite-plan

Lightweight planning skill - task analysis, multi-angle exploration, clarification, adaptive planning, confirmation, and execution handoff

Datos de origen

Repositorio
catlog22/Claude-Code-Workflow
Última actividad en el origen
14 de mayo de 2026 a las 15:44
Idioma detectado de SKILL.md
inglés
Estrellas
2131
Forks
166

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
workflow-lite-plan
description
Lightweight planning skill - task analysis, multi-angle exploration, clarification, adaptive planning, confirmation, and execution handoff
allowed-tools
Skill, Agent, AskUserQuestion, TodoWrite, Read, Write, Edit, Bash, Glob, Grep
<purpose> Planning pipeline: explore → clarify → plan → confirm → handoff to workflow-lite-execute. Produces exploration results, a structured plan (plan.json), independent task files (.task/TASK-*.json), and hands off to workflow-lite-execute for implementation. </purpose> <process> ## 1. Context Isolation > **CRITICAL**: If invoked from analyze-with-file or brainstorm-with-file, the prior session is **COMPLETE** and all its phase instructions are FINISHED and MUST NOT be referenced. Only follow LP-Phase 1-5 defined in THIS document. Phase numbers are INDEPENDENT of any prior workflow. ## 2. Input ``` <task-description> Task description or path to .md file (required) ``` | Flag | Description | |------|-------------| | `-y`, `--yes` | Auto mode: Skip clarification, auto-confirm plan, auto-select execution, skip review (entire plan+execute workflow) | | `--force-explore` | Force code exploration even when task has prior analysis | **Note**: Workflow preferences (`autoYes`, `forceExplore`) must be initialized at skill start. If not provided by caller, skill will prompt user for workflow mode selection. ## 3. Output Artifacts | Artifact | Description | |----------|-------------| | `exploration-{angle}.json` | Per-angle exploration results (1-4 files based on complexity) | | `explorations-manifest.json` | Index of all exploration files | | `planning-context.md` | Evidence paths + synthesized understanding | | `plan.json` | Plan overview with task_ids[] (plan-overview-base-schema.json) | | `.task/TASK-*.json` | Independent task files (one per task) | **Output Directory**: `.workflow/.lite-plan/{task-slug}-{YYYY-MM-DD}/` **Agent Usage**: All complexities → `cli-lite-planning-agent` **Schema Reference**: `~/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json` ## 4. Phase Summary | Phase | Core Action | Output | |-------|-------------|--------| | LP-0 | Initialize workflowPreferences | autoYes, forceExplore | | LP-1 | Complexity assessment → parallel cli-explore-agents (1-4) | exploration-*.json + manifest | | LP-2 | Aggregate + dedup clarification_needs → multi-round AskUserQuestion | clarificationContext (in-memory) | | LP-3 | cli-lite-planning-agent | plan.json + .task/TASK-*.json | | LP-4 | Display plan → AskUserQuestion (Confirm + Execution + Review) | userSelection | | LP-5 | Build executionContext → Skill("workflow-lite-execute") | handoff (Mode 1) | ## 5. LP-Phase 0: Workflow Preferences Initialization ```javascript if (typeof workflowPreferences === 'undefined' || workflowPreferences === null) { workflowPreferences = { autoYes: false, // false: show LP-Phase 2/4 prompts | true (-y): skip all prompts forceExplore: false } } ``` ## 6. LP-Phase 1: Intelligent Multi-Angle Exploration **Session Setup** (MANDATORY): ```javascript const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString() const priorHeader = task_description.match(/^## Prior (?:Analysis|Brainstorm) \((.+?)\)/m) const taskSlug = (priorHeader ? priorHeader[1] : task_description).toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40).replace(/^-+|-+$/g, '') const dateStr = getUtc8ISOString().substring(0, 10) const sessionId = `${taskSlug}-${dateStr}` const sessionFolder = `.workflow/.lite-plan/${sessionId}` bash(`mkdir -p ${sessionFolder} && test -d ${sessionFolder} && echo "SUCCESS: ${sessionFolder}" || echo "FAILED: ${sessionFolder}"`) ``` **TodoWrite Template** (initial state — subsequent phases update status progressively): ```javascript // Pattern: set phases[0..N-1].status="completed", phases[N].status="in_progress" // Only full block shown here; subsequent updates follow same structure with status changes TodoWrite({ todos: [ { content: `LP-Phase 1: Exploration [${complexity}] ${selectedAngles.length} angles`, status: "in_progress", activeForm: `Exploring: ${selectedAngles.join(', ')}` }, { content: "LP-Phase 2: Clarification", status: "pending" }, { content: "LP-Phase 3: Planning [cli-lite-planning-agent]", status: "pending" }, { content: "LP-Phase 4: Confirmation", status: "pending" }, { content: "LP-Phase 5: Execution", status: "pending" } ]}) ``` **Exploration Decision Logic**: ```javascript const hasPriorAnalysis = /##\s*Prior Analysis/i.test(task_description) const hasHandoffSpec = /```json:handoff-spec/i.test(task_description) // Parse structured handoff from analyze-with-file or brainstorm-with-file (if present) let handoffSpec = null if (hasHandoffSpec) { const specMatch = task_description.match(/```json:handoff-spec\s*\n([\s\S]*?)\n```/) if (specMatch) { handoffSpec = JSON.parse(specMatch[1]) // handoffSpec contains: { source, session_id, session_folder, summary, // implementation_scope[], code_anchors[], key_files[], key_findings[], decision_context[], // exploration_artifacts: { exploration_codebase, explorations, perspectives, research, deep_dives[] } } // implementation_scope[]: { objective, rationale, priority, target_files[], acceptance_criteria[], change_summary } console.log(`[Handoff] From ${handoffSpec.source} session ${handoffSpec.session_id}`) console.log(`[Handoff] ${handoffSpec.implementation_scope.length} scoped items with acceptance criteria`) // Enrich task_description with handoff context for downstream planning agent // These fields were previously produced but unused — now injected into planning context if (handoffSpec.summary) { task_description += `\n\n## Analysis Summary\n${handoffSpec.summary}` } if (handoffSpec.key_findings?.length > 0) { task_description += `\n\n## Key Findings\n${handoffSpec.key_findings.map((f, i) => `${i+1}. ${f.point || f} (${f.confidence || 'medium'})`).join('\n')}` } if (handoffSpec.decision_context?.length > 0) { task_description += `\n\n## Decision Context\n${handoffSpec.decision_context.map(d => `- **${d.decision || d}**: ${d.reason || ''}`).join('\n')}` } if (handoffSpec.code_anchors?.length > 0) { task_description += `\n\n## Code Anchors\n${handoffSpec.code_anchors.slice(0, 10).map(a => `- \`${a.file}:${a.lines}\`: ${a.significance}`).join('\n')}` } } } // Brainstorm handoff has no code_anchors/key_files — needs exploration for implementation context const isBrainstormSource = handoffSpec?.source === 'brainstorm-with-file' const isAnalysisSource = handoffSpec?.source === 'analyze-with-file' needsExploration = workflowPreferences.forceExplore ? true : isBrainstormSource ? true // brainstorm explore is lightweight, lite-plan needs deeper exploration : (hasPriorAnalysis || isAnalysisSource) ? false : (task.mentions_specific_files || task.requires_codebase_context || task.needs_architecture_understanding || task.modifies_existing_code) if (!needsExploration) { // Bridge: Build manifest from analyze session's exploration artifacts if (isAnalysisSource && handoffSpec?.exploration_artifacts) { const artifacts = handoffSpec.exploration_artifacts const explorationEntries = [] let idx = 1 const artifactMapping = [ { key: 'exploration_codebase', angle: 'codebase-discovery' }, { key: 'explorations', angle: 'analysis-findings' }, { key: 'perspectives', angle: 'multi-perspective' }, { key: 'research', angle: 'external-research' } ] artifactMapping.forEach(({ key, angle }) => { if (artifacts[key] && file_exists(artifacts[key])) { explorationEntries.push({ angle, file: artifacts[key].split('/').pop(), path: artifacts[key], source_schema: 'analyze', index: idx++ }) } }) if (artifacts.deep_dives?.length > 0) { artifacts.deep_dives.forEach(divePath => { if (file_exists(divePath)) { const name = divePath.match(/explorations\/(.+)\.json$/)?.[1] || `deep-dive-${idx}` explorationEntries.push({ angle: name, file: `${name}.json`, path: divePath, source_schema: 'analyze', index: idx++ }) } }) } if (explorationEntries.length > 0) { Write(`${sessionFolder}/explorations-manifest.json`, JSON.stringify({ session_id: sessionId, task_description, timestamp: getUtc8ISOString(), complexity, exploration_count: explorationEntries.length, source: 'analyze-with-file', source_session: handoffSpec.session_id, explorations: explorationEntries }, null, 2)) console.log(`[Analyze Bridge] ${explorationEntries.length} artifacts from ${handoffSpec.session_id}`) } } // If no manifest built; LP-Phase 3 loads with safe fallback proceed_to_next_phase() } ``` **Context Protection**: File reading >=50k chars → force `needsExploration=true` (delegate to cli-explore-agent) **Complexity Assessment**: ```javascript const complexity = analyzeTaskComplexity(task_description) // 'Low': single file, single function, zero cross-module impact (fix typo, rename var, adjust constant) // 'Medium': multiple files OR integration point OR new pattern (add endpoint, implement feature, refactor) // 'High': cross-module, architectural, systemic (new subsystem, migration, security overhaul) // Default bias: uncertain between Low/Medium → choose Medium const ANGLE_PRESETS = { architecture: ['architecture', 'dependencies', 'modularity', 'integration-points'], security: ['security', 'auth-patterns', 'dataflow', 'validation'], performance: ['performance', 'bottlenecks', 'caching', 'data-access'], bugfix: ['error-handling', 'dataflow', 'state-management', 'edge-cases'], feature: ['patterns', 'integration-points', 'testing', 'dependencies'] } function selectAngles(taskDescription, count) { const text = taskDescription.toLowerCase() let preset = 'feature' if (/refactor|architect|restructure|modular/.test(text)) preset = 'architecture' else if (/security|auth|permission|access/.test(text)) preset = 'security' else if (/performance|slow|optimi|cache/.test(text)) preset = 'performance' else if (/fix|bug|error|issue|broken/.test(text)) preset = 'bugfix' return ANGLE_PRESETS[preset].slice(0, count) } const selectedAngles = selectAngles(task_description, complexity === 'High' ? 4 : (complexity === 'Medium' ? 3 : 1)) console.log(`Exploration Plan: ${complexity} | ${selectedAngles.join(', ')} | cli-lite-planning-agent`) ``` **Launch Parallel Explorations**: **CRITICAL**: MUST NOT use `run_in_background: true` — exploration results are REQUIRED before planning. ```javascript const explorationTasks = selectedAngles.map((angle, index) => Task( subagent_type="cli-explore-agent", run_in_background=false, description=`Explore: ${angle}`, prompt=` ## Task Objective Execute **${angle}** exploration for task planning context. ## Output Location
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub