Explorer
supabase/supabase
Build and modify Studio Explorer surfaces, including notebooks, chats, SQL snippets, query cells, and their shared toolbar patterns.
Lightweight planning skill - task analysis, multi-angle exploration, clarification, adaptive planning, confirmation, and execution handoff
$ npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install catlog22/Claude-Code-Workflow workflow-lite-plan --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/catlog22/Claude-Code-Workflow.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/workflow-lite-plan .claude/skills/workflow-lite-plan && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "workflow-lite-plan" agent skill from https://github.com/catlog22/Claude-Code-Workflow/tree/main/.claude/skills/workflow-lite-plan into .claude/skills/workflow-lite-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-lite-plan", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/catlog22/Claude-Code-Workflow/tree/main/.claude/skills/workflow-lite-planType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install catlog22/Claude-Code-Workflow workflow-lite-plan --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/catlog22/Claude-Code-Workflow.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/workflow-lite-plan .agents/skills/workflow-lite-plan && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "workflow-lite-plan" agent skill from https://github.com/catlog22/Claude-Code-Workflow/tree/main/.claude/skills/workflow-lite-plan into .agents/skills/workflow-lite-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-lite-plan", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install catlog22/Claude-Code-Workflow workflow-lite-plan --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/catlog22/Claude-Code-Workflow.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/workflow-lite-plan .cursor/skills/workflow-lite-plan && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "workflow-lite-plan" agent skill from https://github.com/catlog22/Claude-Code-Workflow/tree/main/.claude/skills/workflow-lite-plan into .cursor/skills/workflow-lite-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-lite-plan", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/catlog22/Claude-Code-Workflow.git --path .claude/skills/workflow-lite-plan--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install catlog22/Claude-Code-Workflow workflow-lite-plan --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/catlog22/Claude-Code-Workflow.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/workflow-lite-plan .gemini/skills/workflow-lite-plan && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "workflow-lite-plan" agent skill from https://github.com/catlog22/Claude-Code-Workflow/tree/main/.claude/skills/workflow-lite-plan into .gemini/skills/workflow-lite-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-lite-plan", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install catlog22/Claude-Code-Workflow workflow-lite-planInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/catlog22/Claude-Code-Workflow.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/workflow-lite-plan .github/skills/workflow-lite-plan && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "workflow-lite-plan" agent skill from https://github.com/catlog22/Claude-Code-Workflow/tree/main/.claude/skills/workflow-lite-plan into .github/skills/workflow-lite-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-lite-plan", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install catlog22/Claude-Code-Workflow workflow-lite-plan --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/catlog22/Claude-Code-Workflow.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/workflow-lite-plan .opencode/skills/workflow-lite-plan && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "workflow-lite-plan" agent skill from https://github.com/catlog22/Claude-Code-Workflow/tree/main/.claude/skills/workflow-lite-plan into .opencode/skills/workflow-lite-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-lite-plan", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
workflow-lite-planLightweight planning skill - task analysis, multi-angle exploration, clarification, adaptive planning, confirmation, and execution handoff
Workflow Lite Plan is an agent skill from catlog22/Claude-Code-Workflow. Lightweight planning skill - task analysis, multi-angle exploration, clarification, adaptive planning, confirmation, and execution handoff
Its SKILL.md is about 7.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: JSON-driven multi-agent cadence-team development framework with intelligent CLI orchestration (Gemini/Qwen/Codex), context-first architecture, and automated workflow execution. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 07491b0. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
SkillAgentAskUserQuestionTodoWriteReadWriteEditBashGlobGrepFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Workflow Lite Plan loads about 7.2k tokens when it runs. Until then it costs about 39 tokens; SKILL.md has 582 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Skill, Agent, AskUserQuestion, TodoWrite, Read, Write, Edit, Bash, Glob, GrepAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from catlog22/Claude-Code-Workflow at commit 07491b0, republished under its MIT licence (© catlog22). 582 words, ~7,197 tokens.
.claude/skills/workflow-lite-plan/SKILL.md (or your agent's skills folder).<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>
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.
<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.
| 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
| 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) |
if (typeof workflowPreferences === 'undefined' || workflowPreferences === null) {
workflowPreferences = {
autoYes: false, // false: show LP-Phase 2/4 prompts | true (-y): skip all prompts
forceExplore: false
}
}Session Setup (MANDATORY):
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):
// 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:
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:
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.
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
**Session Folder**: ${sessionFolder}
**Output File**: ${sessionFolder}/exploration-${angle}.json
## Assigned Context
- **Exploration Angle**: ${angle}
- **Task Description**: ${task_description}
- **Exploration Index**: ${index + 1} of ${selectedAngles.length}
## Exploration Strategy (${angle} focus)
**Step 1: Structural Scan** (Bash)
- get_modules_by_depth.sh → identify modules related to ${angle}
- find/rg → locate files relevant to ${angle} aspect
- Analyze imports/dependencies from ${angle} perspective
**Step 2: Semantic Analysis** (Gemini CLI)
- How does existing code handle ${angle} concerns?
- What patterns are used for ${angle}?
- Where would new code integrate from ${angle} viewpoint?
**Step 3: Write Output**
- Consolidate ${angle} findings into JSON
- Identify ${angle}-specific clarification needs
## Expected Output
**Schema**: explore-json-schema.json (auto-loaded by agent)
- All fields scoped to ${angle} perspective
- Ensure rationale is specific and >10 chars (not generic)
- Include file:line locations in integration_points
- _metadata.exploration_angle: "${angle}"
## Success Criteria
- [ ] get_modules_by_depth.sh executed
- [ ] At least 3 relevant files with specific rationale (>10 chars) + role classification
- [ ] Patterns are actionable (code examples, not generic advice)
- [ ] Integration points include file:line locations
- [ ] Constraints are project-specific to ${angle}
- [ ] JSON follows schema; clarification_needs includes options + recommended
- [ ] Files with relevance >= 0.7 have key_code array + topic_relation
## Execution
**Write**: \`${sessionFolder}/exploration-${angle}.json\`
**Return**: 2-3 sentence summary of ${angle} findings
`
)
)
// Execute all exploration tasks in parallelAuto-discover & Build Manifest:
const explorationFiles = bash(`find ${sessionFolder} -name "exploration-*.json" -type f`)
.split('\n').filter(f => f.trim())
const explorationManifest = {
session_id: sessionId,
task_description: task_description,
timestamp: getUtc8ISOString(),
complexity: complexity,
exploration_count: explorationFiles.length,
explorations: explorationFiles.map(file => {
const data = JSON.parse(Read(file))
return {
angle: data._metadata.exploration_angle,
file: path.basename(file),
path: file,
index: data._metadata.exploration_index
}
})
}
Write(`${sessionFolder}/explorations-manifest.json`, JSON.stringify(explorationManifest, null, 2))
console.log(`Exploration complete: ${explorationManifest.explorations.map(e => e.angle).join(', ')}`)// TodoWrite: Phase 1 → completed, Phase 2 → in_progress
Output: exploration-{angle}.json (1-4 files) + explorations-manifest.json
Skip if: No exploration or clarification_needs is empty across all explorations
CRITICAL: AskUserQuestion limits max 4 questions per call. MUST execute multiple rounds to exhaust all clarification needs.
const manifest = file_exists(`${sessionFolder}/explorations-manifest.json`)
? JSON.parse(Read(`${sessionFolder}/explorations-manifest.json`))
: { exploration_count: 0, explorations: [] }
const explorations = manifest.explorations.map(exp => ({
angle: exp.angle,
data: JSON.parse(Read(exp.path))
}))
// Aggregate from all explorations
const allClarifications = []
explorations.forEach(exp => {
if (exp.data.clarification_needs?.length > 0) {
exp.data.clarification_needs.forEach(need => {
allClarifications.push({ ...need, source_angle: exp.angle })
})
}
})
// Intelligent dedup: merge similar intent across angles, combine options
const dedupedClarifications = intelligentMerge(allClarifications)
if (workflowPreferences.autoYes) {
console.log(`[Auto] Skipping ${dedupedClarifications.length} clarification questions`)
} else if (dedupedClarifications.length > 0) {
const BATCH_SIZE = 4
const totalRounds = Math.ceil(dedupedClarifications.length / BATCH_SIZE)
for (let i = 0; i < dedupedClarifications.length; i += BATCH_SIZE) {
const batch = dedupedClarifications.slice(i, i + BATCH_SIZE)
const currentRound = Math.floor(i / BATCH_SIZE) + 1
console.log(`### Clarification Round ${currentRound}/${totalRounds}`)
AskUserQuestion({
questions: batch.map(need => ({
question: `[${need.source_angle}] ${need.question}\n\nContext: ${need.context}`,
header: need.source_angle.substring(0, 12),
multiSelect: false,
options: need.options.map((opt, index) => ({
label: need.recommended === index ? `${opt} ★` : opt,
description: need.recommended === index ? `Recommended` : `Use ${opt}`
}))
}))
})
// Store batch responses in clarificationContext before next round
}
}Output: clarificationContext (in-memory)
IMPORTANT: LP-Phase 3 is planning only — NO code execution. All execution happens in LP-Phase 5 via workflow-lite-execute.
Executor Assignment (after plan generation):
// Priority: 1. User explicit ("用 gemini 分析..." → gemini) | 2. Default → agent
const executorAssignments = {} // { taskId: { executor: 'gemini'|'codex'|'agent', reason } }
const taskFiles = Glob(`${sessionFolder}/.task/TASK-*.json`)
taskFiles.forEach(taskPath => {
const task = JSON.parse(Read(taskPath))
executorAssignments[task.id] = { executor: '...', reason: '...' }
})Invoke cli-lite-planning-agent:
Task(
subagent_type="cli-lite-planning-agent",
run_in_background=false,
description="Generate detailed implementation plan",
prompt=`
Generate implementation plan and write plan.json.
## Output Location
**Session Folder**: ${sessionFolder}
**Output Files**:
- ${sessionFolder}/planning-context.md (evidence + understanding)
- ${sessionFolder}/plan.json (plan overview — NO embedded tasks[])
- ${sessionFolder}/.task/TASK-*.json (independent task files, one per task)
## Project Context (MANDATORY)
Execute: ccw spec load --category planning
**CRITICAL**: All generated tasks MUST comply with constraints in specs/*.md
## Task Description
${task_description}
## Multi-Angle Exploration Context
${manifest.explorations.length > 0
? manifest.explorations.map(exp => `### Exploration: ${exp.angle} (${exp.file})
Path: ${exp.path}
Read this file for detailed ${exp.angle} analysis.`).join('\n\n') + `
Total: ${manifest.exploration_count} | Angles: ${manifest.explorations.map(e => e.angle).join(', ')}
Manifest: ${sessionFolder}/explorations-manifest.json`
: `No exploration files. Task Description contains "## Prior Analysis" — use as primary planning context.`}
## Structured Handoff Spec (from ${handoffSpec?.source || 'upstream workflow'})
${handoffSpec ? `
**Source**: ${handoffSpec.source} session ${handoffSpec.session_id}
**CRITICAL**: Use implementation_scope as PRIMARY input for task generation.
${isBrainstormSource ? '**NOTE**: Brainstorm source — code_anchors/key_files are empty. Use exploration results as primary file context.' : ''}
Each scope item maps to one or more tasks. Acceptance criteria become convergence.criteria.
${JSON.stringify(handoffSpec.implementation_scope, null, 2)}
**Code Anchors** (implementation targets):
${JSON.stringify(handoffSpec.code_anchors?.slice(0, 8), null, 2)}
**Key Findings** (context):
${JSON.stringify(handoffSpec.key_findings?.slice(0, 5), null, 2)}
**Task Generation Rules when handoffSpec present**:
1. Each implementation_scope item → 1 task (group only if tightly coupled)
2. scope.acceptance_criteria[] → task.convergence.criteria[]
3. scope.target_files[] → task.files[] with change from scope.change_summary
4. scope.objective → task.title, scope.rationale → task.description context
5. scope.priority → task ordering (high first)
` : 'No structured handoff spec — use task description and explorations as input.'}
## User Clarifications
${JSON.stringify(clarificationContext) || "None"}
## Complexity Level
${complexity}
## Requirements
- _metadata.exploration_angles: ${JSON.stringify(manifest.explorations.map(e => e.angle))}
- Two-layer output: plan.json (task_ids[], NO tasks[]) + .task/TASK-*.json
- Field names: files[].change (not modification_points), convergence.criteria (not acceptance)
## Task Grouping Rules
1. **Group by feature**: All changes for one feature = one task (even if 3-5 files)
2. **Group by context**: Related functional changes can be grouped together
3. **Minimize agent count**: Group simple unrelated tasks to reduce overhead
4. **Avoid file-per-task**: Do NOT create separate tasks for each file
5. **Substantial tasks**: Each task = 15-60 minutes of work
6. **True dependencies only**: depends_on only when Task B needs Task A's output
7. **Prefer parallel**: Most tasks should be independent
## Execution
1. ccw spec load → 2. Read ALL exploration files → 3. Synthesize + generate
4. Write: planning-context.md, .task/TASK-*.json, plan.json (task_ids[], NO tasks[])
5. Return brief completion summary
`
)Output: ${sessionFolder}/plan.json
// TodoWrite: Phase 3 → completed, Phase 4 → in_progress
Display Plan:
const plan = JSON.parse(Read(`${sessionFolder}/plan.json`))
const tasks = (plan.task_ids || []).map(id => JSON.parse(Read(`${sessionFolder}/.task/${id}.json`)))
console.log(`
## Implementation Plan
**Summary**: ${plan.summary}
**Approach**: ${plan.approach}
**Tasks** (${tasks.length}):
${tasks.map((t, i) => `${i+1}. ${t.title} (${t.scope || t.files?.[0]?.path || ''})`).join('\n')}
**Complexity**: ${plan.complexity} | **Time**: ${plan.estimated_time} | **Recommended**: ${plan.recommended_execution}
`)Collect Confirmation:
let userSelection
if (workflowPreferences.autoYes) {
console.log(`[Auto] Allow & Execute | Auto | Skip + Skip`)
userSelection = { confirmation: "Allow", execution_method: "Auto", code_review_tool: "Skip", convergence_review_tool: "Skip" }
} else {
// "Other" in Execution allows specifying CLI tools from ~/.claude/cli-tools.json
userSelection = AskUserQuestion({
questions: [
{
question: `Confirm plan and authorize execution? (${tasks.length} tasks, ${plan.complexity})`,
header: "Confirm",
multiSelect: false,
options: [
{ label: "Allow & Execute", description: "Approve plan and begin execution immediately (no further prompts)" },
{ label: "Modify", description: "Adjust before execution" },
{ label: "Cancel", description: "Abort workflow" }
]
},
{
question: "Execution method:",
header: "Execution",
multiSelect: false,
options: [
{ label: "Agent", description: "@code-developer agent" },
{ label: "Codex", description: "codex CLI tool" },
{ label: "Auto", description: `Auto: ${plan.complexity === 'Low' ? 'Agent' : 'Codex'}` }
]
},
{
question: "Code review after execution? (runs in workflow-lite-execute)",
header: "Code Review",
multiSelect: false,
options: [
{ label: "Gemini Review", description: "Gemini CLI: git diff quality review" },
{ label: "Codex Review", description: "Codex CLI: prompt-based code quality review (--mode analysis)" },
{ label: "Agent Review", description: "@code-reviewer agent" },
{ label: "Skip", description: "No code review" }
]
},
{
question: "Convergence review in workflow-lite-test-review phase?",
header: "Convergence Review",
multiSelect: false,
options: [
{ label: "Agent", description: "Agent: verify convergence criteria against implementation" },
{ label: "Gemini", description: "Gemini CLI: convergence verification" },
{ label: "Codex", description: "Codex CLI: convergence verification" },
{ label: "Skip", description: "Skip convergence review, run tests only" }
]
}
]
})
}// TodoWrite: Phase 4 → completed [${userSelection.execution_method} | CR:${userSelection.code_review_tool} | CVR:${userSelection.convergence_review_tool}], Phase 5 → in_progress
CRITICAL: lite-plan NEVER executes code directly. ALL execution goes through workflow-lite-execute.
Build executionContext:
const manifest = file_exists(`${sessionFolder}/explorations-manifest.json`)
? JSON.parse(Read(`${sessionFolder}/explorations-manifest.json`))
: { exploration_count: 0, explorations: [] }
const explorations = {}
manifest.explorations.forEach(exp => {
if (file_exists(exp.path)) explorations[exp.angle] = JSON.parse(Read(exp.path))
})
const plan = JSON.parse(Read(`${sessionFolder}/plan.json`))
executionContext = {
planObject: plan,
taskFiles: (plan.task_ids || []).map(id => ({ id, path: `${sessionFolder}/.task/${id}.json` })),
explorationsContext: explorations,
explorationAngles: manifest.explorations.map(e => e.angle),
explorationManifest: manifest,
clarificationContext: clarificationContext || null,
executionMethod: userSelection.execution_method,
codeReviewTool: userSelection.code_review_tool,
convergenceReviewTool: userSelection.convergence_review_tool,
originalUserInput: task_description,
executorAssignments: executorAssignments, // { taskId: { executor, reason } } — overrides executionMethod
session: {
id: sessionId,
folder: sessionFolder,
artifacts: {
explorations: manifest.explorations.map(exp => ({ angle: exp.angle, path: exp.path })),
explorations_manifest: `${sessionFolder}/explorations-manifest.json`,
plan: `${sessionFolder}/plan.json`,
task_dir: `${sessionFolder}/.task`
}
}
}Handoff:
if (!workflowPreferences.autoYes) {
console.log(`Handing off to execution engine. No further prompts.`)
}
// TodoWrite: Phase 5 → completed, add LE-Phase 1 → in_progress
const taskCount = (plan.task_ids || []).length
TodoWrite({ todos: [
{ content: "LP-Phase 1: Exploration", status: "completed" },
{ content: "LP-Phase 2: Clarification", status: "completed" },
{ content: "LP-Phase 3: Planning", status: "completed" },
{ content: `LP-Phase 4: Confirmed [${userSelection.execution_method} | CR:${userSelection.code_review_tool} | CVR:${userSelection.convergence_review_tool}]`, status: "completed" },
{ content: `LP-Phase 5: Handoff → workflow-lite-execute`, status: "completed" },
{ content: `LE-Phase 1: Task Loading [${taskCount} tasks]`, status: "in_progress", activeForm: "Loading tasks" }
]})
Skill("workflow-lite-execute")
// executionContext passed as global variable (Mode 1: In-Memory Plan).workflow/.lite-plan/{task-slug}-{YYYY-MM-DD}/
├── exploration-{angle}.json (1-4) # Per-angle exploration
├── explorations-manifest.json # Exploration index
├── planning-context.md # Evidence paths + understanding
├── plan.json # Plan overview (task_ids[])
├── code-review.md # Generated by workflow-lite-execute Step 4
├── test-checklist.json # Generated by workflow-lite-test-review
├── test-review.md # Generated by workflow-lite-test-review
└── .task/
├── TASK-001.json
├── TASK-002.json
└── ...lite-plan (LP-Phase 1-5)
└─ Skill("workflow-lite-execute") ← executionContext (global)
├─ Step 1-3: Task Execution
├─ Step 4: Code Review (quality/correctness/security)
└─ Step 5: Skill("workflow-lite-test-review") ← testReviewContext (global)
├─ TR-Phase 1: Detect test framework
├─ TR-Phase 2: Convergence verification (plan criteria)
├─ TR-Phase 3-4: Run tests + Auto-fix
└─ TR-Phase 5: Report + Sync specs| Error | Resolution |
|---|---|
| Exploration agent failure | Skip exploration, continue with task description only |
| Planning agent failure | Retry with reduced complexity or suggest breaking task |
| Clarification timeout | Use exploration findings as-is |
| Confirmation timeout | Save context, display resume instructions |
| Modify loop > 3 times | Suggest breaking task or using /workflow-plan |
</process>
<auto_mode>
When workflowPreferences.autoYes === true (entire plan+execute workflow):
Auto mode authorizes the complete plan-and-execute workflow with a single confirmation. No further prompts. </auto_mode>
<success_criteria>
© catlog22, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/workflow-lite-plan of catlog22/Claude-Code-Workflow.
Open the folder on GitHubat commit 07491b0
Workflow Lite Plan next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Workflow Lite Plan this skillcatlog22/Claude-Code-Workflow | 2.1k | — | ~7.2k | Automated safety check: Notes | MIT | |
| Explorersupabase/supabase | 111k | — | ~845 | Automated safety check: Pass | Apache-2.0 | |
| Agent Scout Explorerruvnet/ruflo | 74k | 3 repos | ~1.6k | Automated safety check: Pass | MIT | |
| Caveman Repository ExplorerJuliusBrussee/caveman | 110k | 1 repos | ~492 | Automated safety check: Pass | Apache-2.0 | |
| Exploreparcadei/Continuous-Claude-v3 | 3.9k | 2 repos | ~2.9k | Automated safety check: Notes | MIT | |
| Inbox ExplorationPostHog/posthog | 40k | — | ~7.7k | Automated safety check: Pass | Custom licence |
supabase/supabase
Build and modify Studio Explorer surfaces, including notebooks, chats, SQL snippets, query cells, and their shared toolbar patterns.
ruvnet/ruflo
Agent skill for scout-explorer - invoke with $agent-scout-explorer
JuliusBrussee/caveman
A read-only explorer for cold-start orientation or failed searches that replies with nothing but file path and line range citations, keeping its reads out of main context.
parcadei/Continuous-Claude-v3
Meta-skill for internal codebase exploration at varying depths (quick/deep/architecture)
PostHog/posthog
Explore PostHog's Inbox and act on what it surfaces — the place where signal reports cluster into actionable issues and trends.
PostHog/posthog
How to explore and make sense of PostHog Signals scouts — the scheduled agents that scan a project and write reports into the Signals inbox.
catlog22/Claude-Code-Workflow
Generate or convert Claude Code prompt files — command orchestrators, skill files, agent role definitions, or style conversion of existing files.
catlog22/Claude-Code-Workflow
CCW command help system. An agent skill from catlog22/Claude-Code-Workflow.
catlog22/Claude-Code-Workflow
Deep collaborative analysis team skill. An agent skill from catlog22/Claude-Code-Workflow.
catlog22/Claude-Code-Workflow
Unified brainstorming skill with dual-mode operation — auto mode (framework generation, parallel multi-role analysis, cross-role synthesis) and single role analysis.
catlog22/Claude-Code-Workflow
Chain-based CCW workflow orchestrator. An agent skill from catlog22/Claude-Code-Workflow.
catlog22/Claude-Code-Workflow
Check workflow delegation prompts against agent role definitions for content separation violations.
Lightweight planning skill - task analysis, multi-angle exploration, clarification, adaptive planning, confirmation, and execution handoff. Workflow Lite Plan is an agent skill from catlog22/Claude-Code-Workflow.
Run `npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a claude-code`. Or copy the skill folder (.claude/skills/workflow-lite-plan in catlog22/Claude-Code-Workflow) into .claude/skills/workflow-lite-plan in your project. Claude Code loads it when a task matches its description.
Run `npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a codex`. Or copy the skill folder (.claude/skills/workflow-lite-plan in catlog22/Claude-Code-Workflow) into .agents/skills/workflow-lite-plan in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add catlog22/Claude-Code-Workflow --skill workflow-lite-plan -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/workflow-lite-plan, .gemini/skills/workflow-lite-plan, .github/skills/workflow-lite-plan and .opencode/skills/workflow-lite-plan in your project.
SKILL.md names no scripts, command-line tools or credentials: Workflow Lite Plan is instructions for the agent only. Its frontmatter pre-approves these tools: Skill, Agent, AskUserQuestion, TodoWrite, Read, Write, Edit, Bash, Glob, Grep.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Workflow Lite Plan is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.2k tokens (SKILL.md is roughly 29k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Workflow Lite Plan: Explorer (supabase/supabase, 111k stars), Agent Scout Explorer (ruvnet/ruflo, 74k stars), Caveman Repository Explorer (JuliusBrussee/caveman, 110k stars) and Explore (parcadei/Continuous-Claude-v3, 3.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
catlog22 (a GitHub user) maintains it in catlog22/Claude-Code-Workflow, which has 2,130 GitHub stars. The repository holds 82 skills in this directory. The repository was last updated on June 18, 2026.
Source: catlog22/Claude-Code-Workflow on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.