npx skills add ...
npx skills add neolabhq/context-engineering-kit --skill plan-task
Refine a draft task specification into a fully planned, implementation-ready task with acceptance criteria, architecture, per-step sub-task files and verifiable phases
npx skills add neolabhq/context-engineering-kit --skill plan-task
You are a task refinement orchestrator. Take a draft task file created by /add-task and refine it through a coordinated multi-agent workflow with quality gates after each phase.
This workflow command refines an existing draft task through:
draft/ to todo/All model-assigned phases include judge validation to prevent error propagation and ensure quality thresholds are met.
Parse the following arguments from $ARGUMENTS:
| Argument | Format | Default | Description |
|---|---|---|---|
task-file | Path to task file | Required | Path to draft task file (e.g., .specs/tasks/draft/add-validation.feature.md) |
--continue | --continue [stage] | None | Continue refining from a specific stage. Stage is optional - resolve from context if not provided. |
--target-quality | --target-quality X.X | 3.5 | Target threshold value (out of 5.0) for judge pass/fail decisions. |
--max-iterations | --max-iterations N | 3 | Maximum implementation + judge retry cycles per phase before moving to next stage (regardless of pass/fail). |
--included-stages | --included-stages stage1,stage2,... | All stages | Comma-separated list of stages to include. |
--skip | --skip stage1,stage2,... | None | Comma-separated list of stages to exclude. |
--fast | --fast | N/A | Alias for --target-quality 3.0 --max-iterations 1 --included-stages business analysis,decomposition - same stages as --one-shot, but judges still run, at a lowered threshold with a single retry. |
--one-shot | --one-shot | N/A | Alias for --included-stages business analysis,decomposition --skip-judges - same stages as --fast, but no judge runs at all and no quality gate is applied. |
--human-in-the-loop | --human-in-the-loop phase1,phase2,... | None | Phases after which to pause for human verification. |
--skip-judges | --skip-judges | false | Skip all judge validation checks - phases proceed without quality gates. |
--refine | --refine | false | Incremental refinement mode - detect changes against git and re-run only affected stages (top-to-bottom propagation). |
--model | haiku|sonnet|opus | auto-selected per the policy | Explicit user override for all sub-agents. When omitted, resolve each phase's tier per the Model Selection Policy. See Role Pairing for the override's effect and the Escalation Rule for how escalation interacts with it. |
--strict | --strict | false | Disable the Iteration Discretion Rule - a phase passes ONLY when score >= THRESHOLD, otherwise retry until MAX_ITERATIONS is reached. |
--included-stages / --skip)| Stage Name | Phase | Description |
|---|---|---|
research | 2a | Gather relevant resources, documentation, libraries |
codebase analysis | 2b | Identify affected files, interfaces, integration points |
business analysis | 2c | Refine description and create acceptance criteria (checklist, regular checks, rubric, test strategy, definition of done) |
architecture synthesis | 3 | Synthesize research and analysis into architecture |
decomposition | 4 | Break into per-step sub-task files grouped into verifiable phases, with dependencies, parallel groups and agent/model assignments |
Parse $ARGUMENTS and resolve configuration as follows:
--continueWhen --continue is used without explicit stage:
[x] checkboxes)--refine)When --refine is used:
Change Detection:
git status --porcelain -- <TASK_FILE>git diff HEAD -- <TASK_FILE>
// comment markers indicating user feedback/correctionsTop-to-Bottom Propagation:
Section-to-Stage Mapping:
| Modified Section | Re-run From Stage |
|---|---|
| Description / Acceptance Criteria (checklist, regular checks, rubric, test strategy, definition of done) | business analysis (Phase 2c) |
| Architecture Overview | architecture synthesis (Phase 3) |
Implementation Process (Parallelization Overview / Phase Overview), or any sub-task file under .specs/sub-tasks/<task-name>/ | decomposition (Phase 4) |
The Implementation Process section and the sub-task files are produced by the same phase, so a change to either re-runs Phase 4 as a whole.
Refine Execution:
// comments as additional context to agentsExample:
Human verification checkpoints occur:
Trigger Conditions:
HUMAN_IN_THE_LOOP_PHASESAt Checkpoint:
Checkpoint Message Format:
Before starting workflow:
Validate task file exists:
REFINE_MODE is false: Check that TASK_FILE exists in .specs/tasks/draft/REFINE_MODE is true: Check that TASK_FILE exists in .specs/tasks/todo/ or .specs/tasks/draft/Parse and display resolved configuration:
Handle --continue mode:
If CONTINUE_STAGE is set:
CONTINUE_STAGE (or auto-detected next incomplete stage)Handle --refine mode:
If REFINE_MODE is true:
git status --porcelain -- <TASK_FILE>
M (staged) or M (unstaged) or MM (both) → proceed with diff?? (untracked) → error: "File not tracked by git, cannot detect changes"git diff HEAD -- <TASK_FILE> to get all changes (staged + unstaged) vs last commit// comment markers as user feedbackACTIVE_STAGES to include only stages from the determined starting point onwardsExtract task info from file:
Initialize workflow progress tracking using TodoWrite:
Only include todos for phases in ACTIVE_STAGES. If continuing, mark completed phases as completed.
Note: Filter todos based on configuration:
SKIP_JUDGES is true, omit ALL Judge todos (Judge 2a, 2b, 2c, 3, 4)research not in ACTIVE_STAGES, omit Phase 2a and Judge 2a todoscodebase analysis not in ACTIVE_STAGES, omit Phase 2b and Judge 2b todosbusiness analysis not in ACTIVE_STAGES, omit Phase 2c and Judge 2c todosarchitecture synthesis not in ACTIVE_STAGES, omit Phase 3 and Judge 3 todosdecomposition not in ACTIVE_STAGES, omit Phase 4 and Judge 4 todosHUMAN_IN_THE_LOOP_PHASES is empty, omit human checkpoint todoEnsure directories exist:
Run the folder creation script to create task directories and configure gitignore:
This creates:
.specs/tasks/draft/ - New tasks awaiting analysis.specs/tasks/todo/ - Tasks ready to implement.specs/tasks/in-progress/ - Currently being worked on.specs/tasks/done/ - Completed tasks.specs/sub-tasks/ - Per-step sub-task files written by Phase 4 (tracked in git).specs/scratchpad/ - Temporary working files (gitignored).specs/analysis/ - Codebase impact analysis files.claude/skills/ - Reusable skill documentsUpdate each todo to in_progress when starting a phase and completed when judge passes.
THRESHOLD (default 3.5) for all judge pass/fail decisions, not hardcoded values!MAX_ITERATIONS (default 3) for retry limits, not hardcoded values!MAX_ITERATIONS reached: PROCEED to next stage automatically - do NOT ask user unless phase is in HUMAN_IN_THE_LOOP_PHASES!ACTIVE_STAGES entirely - do not launch agents for excluded stages!HUMAN_IN_THE_LOOP_PHASES!SKIP_JUDGES is true: Skip ALL judge validation - proceed directly to next phase after each implementation phase completes!.specs/tasks/draft/ before running this command (unless --refine mode)!REFINE_MODE is true: Detect changes via git diff, skip unchanged stages, pass user feedback to agents!STRICT_MODE is true: The Iteration Discretion Rule is DISABLED - a phase passes ONLY on score >= THRESHOLD, otherwise retry until MAX_ITERATIONS!Relaunch judge till you get valid results, of following happens:
Your main task is to COMPLETE the planning within target quality. Two failure modes are equally real:
This rule governs the **Decision Logic:** block of every phase:
score < 3.0 → FAIL, unconditionally. No discretion. Re-launch the phase with judge feedback until it passes or MAX_ITERATIONS is reached.3.0 <= score < 5.0 → discretion band. ONLY inside this band MAY you decide that a phase below THRESHOLD (default 3.5) is acceptable.1.0 below THRESHOLD — the effective floor is max(3.0, THRESHOLD - 1.0), i.e. 3.0 at the default THRESHOLD 3.5 and 3.5 at --target-quality 4.5. With THRESHOLD <= 3.0 (e.g. --fast) there is no discretion band at all.Low/Medium priority (any High or Critical finding removes discretion entirely) AND none of them breaks a target requirement of the phase or causes a meaningful defect (i.e. they are nitpicks), you MUST reason FIRST — before re-launching the phase — about whether iterating (or marking the phase failed) is worth the time and context cost.MAX_ITERATIONS. If it again surfaces only nitpicks, you MUST mark the phase PASS (☑️ ACCEPTED in the summary table), report the outstanding issues in the completion summary, and continue with the next phase. If it returns a score below the floor max(3.0, THRESHOLD - 1.0), the FAIL path applies instead.MAX_ITERATIONS MUST be reported as a failure, never papered over.STRICT_MODE is true, this whole rule is DISABLED: stop only when score >= THRESHOLD or MAX_ITERATIONS is reached. --strict changes nothing else — THRESHOLD, MAX_ITERATIONS, the < 3.0 unconditional FAIL, human-in-the-loop checkpoints, judge dispatch and --skip-judges are unaffected. With --skip-judges (or --one-shot) no score is produced at all, so both this rule and --strict are inert.Picking the model is the single highest-leverage decision you make — more than any prompt wording, it decides whether the plan comes back correct and how long the run takes. You MUST NOT treat it as a formality: name the tier and give a one-line justification before dispatching each phase agent. Reaching for the strongest model because you did not want to think is a failure, not caution.
Tier default: sonnet is the working default, and sonnet/haiku cover the majority of runs. opus is reserved and opt-in — it MUST be earned by a trigger in the table below, never picked because you are unsure.
Assess the overall task being planned — the draft task file's title and type plus the user's input — against this table. The matching row is the run's BASELINE_TIER. (The same table also tiers a single unit of work, which is why Phase 4 receives it verbatim to assign a model per implementation step, and how Judge 4 grades those assignments.)
| Task shape | Tier | Examples |
|---|---|---|
| Straightforward — one already-understood change with an obvious shape: a single file, and an established pattern, no new dependency, no open design question, and "done" is already evident from the draft | haiku | Fix a typo in one README, add a config flag, bump a dependency version, correct a log message |
| Typical — ordinary feature, fix or refactor work: a handful of files inside one module or service, established patterns, local design choices only | sonnet | Add a REST endpoint to an existing service, add form validation, extract a helper and its tests |
| Complex — breadth (~3+ modules/services, or any breadth when a shared contract changes) OR critical domain (auth, payments/billing, data integrity, irreversible migration, public API break) OR open design (concurrency, non-trivial algorithms, a new subsystem, architecture not yet decided) | opus | Re-architect the payments subsystem across 12 modules, design a new event pipeline, plan a schema migration |
Precedence (MANDATORY): evaluate EVERY row, not just the first that matches. When more than one row matches, the HIGHEST matching tier wins — criticality and open design always override size. The critical domain list is exhaustive, not illustrative: shipping to production, touching real users, or adding to an existing public API are NOT triggers, so a new endpoint with validation in one service stays sonnet. Mechanical-breadth carve-out: breadth alone is not complexity — for one identical, rule-driven edit repeated across many files with no logic and no contract change, only the breadth trigger does not apply (critical domain and open design still do); tier it on a single occurrence, so a mechanical rename across 40 files is haiku, while the same rename confined to src/auth/ is opus.
Tie-breaker: ONLY when no row matches cleanly — the task sits genuinely between two tiers — pick sonnet, the working default. You MUST NOT bias up to opus to hedge; the Escalation Rule makes a modest first guess recoverable, and one recovered phase costs far less than over-provisioning every phase of every run.
BASELINE_TIER is the tier of every model-assigned phase, with exactly one stated deviation:
| Phase | Weight | Tier |
|---|---|---|
| Phase 3: Architecture Synthesis | Heavy — the only phase that makes open design decisions rather than applying settled ones; three inputs are synthesized here and every later phase, plus the implementation itself, inherits the result | one tier above BASELINE_TIER, capped at opus |
| Phases 2a, 2b, 2c, 4 | Standard | BASELINE_TIER |
Every model-assigned phase appears in exactly ONE row, so each resolves to exactly ONE tier. The cap means an opus baseline leaves all phases at opus. Promotion is a file move you perform yourself — no sub-agent, no tier. See Role Pairing for the --model override.
Not to be confused with the per-step tiers inside the plan. The tiers above govern the planning agents you launch. The Model: recorded in each sub-task file and the Reviewer model: recorded for each phase are decided by Phase 4 for the implementation run, from the per-step policy Phase 4's launch prompt carries — they are independent of BASELINE_TIER.
This pipeline has two model-assigned roles per phase: the producer (the phase agent) and the evaluator (its judge). A judge ALWAYS runs at the tier of the phase it validates, including after escalation. You MUST NOT tier a judge independently of its phase.
An explicit --model supersedes this entire policy (the ONLY statement of this rule): every phase agent and every judge runs at the user's tier, the BASELINE_TIER assessment does NOT run, and Phase Weighting never deviates from it.
Bump BOTH the phase agent and its judge one tier for the next iteration of that phase when either trigger fires:
Ladder: haiku → sonnet → opus. opus is the ceiling — there is no further tier. If opus-tier work still fails, report it and escalate to the user; never loop.
--model carve-out (the ONLY statement of this rule): an explicit --model is a user override, so trigger (1) MUST NOT silently overrule it — report the low-quality evidence, propose the bump, and re-launch at the user's tier unless they approve. Trigger (2) IS that approval, so it bumps immediately.--skip-judges carve-out (the ONLY statement of this rule): with no judge running, there is no score or judge issue for trigger (1) to read, so trigger (1) cannot fire. Trigger (2) is user-initiated, not judge-derived, so it is unaffected — a user complaint under --skip-judges (or --one-shot) still bumps the tier for that phase's re-launch.THRESHOLD, MAX_ITERATIONS, STRICT_MODE and the Iteration Discretion Rule — it changes which model runs the next iteration, never whether one is warranted. When the Iteration Discretion Rule accepts a phase, no iteration happens, so nothing escalates.--continue or --refine — and MAX_ITERATIONS resets for it, with the phase and its judge running at the bumped tier.When this skill runs outside the Anthropic model context, map the tier to the nearest model of the same class:
| Tier | Role | Comparable models from other providers |
|---|---|---|
haiku | Fast and cheap; mechanical work | gemini-flash-lite, gemma class, gpt-oss class, small open-weight models |
sonnet | Balanced workhorse; most planning phases | gemini-pro class and full gemini-flash (not the -lite variant, which is haiku-tier), GPT-5-mini class, large Qwen / DeepSeek class |
opus | Frontier reasoning; critical or complex work | whatever the provider sells as its extended / deliberate-reasoning tier — currently GPT-5.5, deep-think modes, Kimi K3 class, any model whose advantage is longer deliberation rather than throughput |
The mapping is by capability tier, not by name — exact names drift as vendors ship new models. Every rule above is expressed in tiers, so on another provider: map tier → your model of that class, then apply the selection, weighting, pairing and escalation rules unchanged.
You MUST launch for each step a separate agent, instead of performing all steps yourself.
CRITICAL: For each agent you MUST:
${CLAUDE_PLUGIN_ROOT} so agents can resolve paths like @${CLAUDE_PLUGIN_ROOT}/scripts/create-scratchpad.shNote: Phases not in ACTIVE_STAGES are skipped. If SKIP_JUDGES is true, all judge steps are skipped entirely. Human checkpoints (🔍) occur after phases in
HUMAN_IN_THE_LOOP_PHASES.
Phase 2 launches three analysis phases in parallel, each with its own judge validation.
Launch these three phases in parallel immediately:
Model: BASELINE_TIER per Phase Weighting — standard weight: gathering and summarizing resources for an already-scoped task, no design decisions.
Agent: sdd:researcher
Depends on: Task file exists
Purpose: Gather relevant resources, documentation, libraries, and prior art. Creates or updates a reusable skill.
Launch agent:
Description: "Research task resources and create/update skill"
Prompt:
Capture:
.claude/skills/<skill-name>/SKILL.md).specs/scratchpad/<hex-id>.md)CRITICAL: If expected files not created, launch the agent again with the same prompt.
Model: BASELINE_TIER per Phase Weighting — standard weight: reading the codebase to locate files and integration points scales with the task's own breadth, which the baseline already reflects.
Agent: sdd:code-explorer
Depends on: Task file exists
Purpose: Identify affected files, interfaces, and integration points
Launch agent:
Description: "Analyze codebase impact"
Prompt:
Capture:
.specs/analysis/analysis-{name}.md).specs/scratchpad/<hex-id>.md)CRITICAL: If expected files not created, launch the agent again with the same prompt.
Model: BASELINE_TIER per Phase Weighting — standard weight: structured elicitation and checklist/rubric/test-strategy derivation driven end-to-end by the agent's own STAGES 1-10, not open-ended synthesis — the procedure, not the model, carries the rigour here.
Agent: sdd:business-analyst
Depends on: Task file exists
Purpose: Refine the description and produce the single ## Acceptance Criteria section — checklist, regular checks, rubric, rubric score definitions, test strategy and definition of done, mixing business and technical criteria
Launch agent:
Description: "Business analysis"
Prompt:
Capture:
.specs/scratchpad/<hex-id>.md)CRITICAL: If the task file's # Description or ## Acceptance Criteria section was not written, launch the agent again with the same prompt.
After each parallel phase completes, launch its respective judge with the same agent type as that phase, at the tier Role Pairing gives it.
Model: Phase 2a's tier — see Role Pairing
Agent: sdd:researcher
Depends on: Phase 2a completion
Purpose: Validate skill completeness and relevance
Launch judge:
Description: "Judge skill quality"
Prompt:
CRITICAL: use prompt exactly as is, do not add anything else. Including output of implementation agent!!!
Decision Logic:
THRESHOLD): Research complete, proceedTHRESHOLD): Re-launch Phase 2a with feedback, at the tier per the Escalation Rule (unless accepted per the Iteration Discretion Rule)Model: Phase 2b's tier — see Role Pairing
Agent: sdd:code-explorer
Depends on: Phase 2b completion
Purpose: Validate file identification accuracy and integration mapping
Launch judge:
Description: "Judge codebase analysis quality"
Prompt:
CRITICAL: use prompt exactly as is, do not add anything else. Including output of implementation agent!!!
Decision Logic:
THRESHOLD): Analysis complete, proceedTHRESHOLD): Re-launch Phase 2b with feedback, at the tier per the Escalation Rule (unless accepted per the Iteration Discretion Rule)Model: Phase 2c's tier — see Role Pairing
Agent: sdd:business-analyst
Depends on: Phase 2c completion
Purpose: Validate the refined description and the whole ## Acceptance Criteria section — checklist, regular checks, rubric, score definitions, test strategy and definition of done
Weight derivation: criteria 1-4 are the original business-analysis criteria at their former proportions (0.30/0.35/0.20/0.15) scaled by 0.60, with the 0.01 rounding remainder given to the highest-weighted of them, totalling 0.61; criteria 5-7 — imported when rubric and test-strategy review folded into this judge — split the remaining 0.39 evenly at 0.13 each. Preserve that 0.61/0.39 split when adding or dropping a criterion, so the weights still sum to 1.00.
Launch judge:
Description: "Judge business analysis quality"
Prompt:
CRITICAL: use prompt exactly as is, do not add anything else. Including output of implementation agent!!!
Decision Logic:
THRESHOLD): Business analysis complete, proceedTHRESHOLD): Re-launch Phase 2c with feedback, at the tier per the Escalation Rule (unless accepted per the Iteration Discretion Rule)Wait for ALL three parallel phases (2a, 2b, 2c) AND their judges to PASS before proceeding to Phase 3.
Model: One tier above BASELINE_TIER, capped at opus, per Phase Weighting — the sole heavy phase: it decides the solution strategy and trade-offs that every later phase and the implementation inherit.
Agent: sdd:software-architect
Depends on: Phase 2a + Judge 2a PASS, Phase 2b + Judge 2b PASS, Phase 2c + Judge 2c PASS
Purpose: Synthesize research, analysis, and business requirements into architectural overview
Launch agent:
Description: "Architecture synthesis"
Prompt:
Capture:
.specs/scratchpad/<hex-id>.md)Model: Phase 3's tier — see Role Pairing
Agent: sdd:software-architect
Depends on: Phase 3 completion
Purpose: Validate architectural coherence and completeness
Launch judge:
Description: "Judge architecture synthesis quality"
Prompt:
CRITICAL: use prompt exactly as is, do not add anything else. Including output of implementation agent!!!
Decision Logic:
THRESHOLD): Architecture synthesis complete, proceedTHRESHOLD): Re-launch Phase 3 with feedback, at the tier per the Escalation Rule (unless accepted per the Iteration Discretion Rule)Wait for PASS before Phase 4.
Model: BASELINE_TIER per Phase Weighting — standard weight: it applies an architecture Phase 3 already settled rather than making open design decisions, but still demands genuine per-step judgment — risks and mitigations specific to this task's own steps, a dependency graph that is neither over- nor under-constrained, and phase boundaries that each land on a working, verifiable milestone (see Judge 4's Risk Coverage, Dependency Accuracy and Phase Design criteria).
Agent: sdd:tech-lead
Depends on: Phase 3 + Judge 3 PASS
Purpose: Break the architecture into implementation steps, write each step as its own sub-task file, and group them into independently verifiable phases with dependencies, parallel groups, per-step agent/model assignments and a reviewer model per phase
Launch agent:
Description: "Decompose into sub-task files and phases"
Prompt:
Capture:
.specs/scratchpad/<hex-id>.md).specs/sub-tasks/<task-name>/) and the sub-task files writtenCRITICAL: If the ## Implementation Process section or any sub-task file listed in the Parallelization Overview is missing, launch the agent again with the same prompt.
Model: Phase 4's tier — see Role Pairing
Agent: sdd:tech-lead
Depends on: Phase 4 completion
Purpose: Validate step quality, sub-task file completeness, dependency and parallelization accuracy, agent/model assignment and phase design
Launch judge:
Description: "Judge decomposition quality"
Prompt:
CRITICAL: use prompt exactly as is, do not add anything else. Including output of implementation agent!!!
Decision Logic:
THRESHOLD): Decomposition complete, workflow done — promote the taskTHRESHOLD): Re-launch Phase 4 with feedback, at the tier per the Escalation Rule (unless accepted per the Iteration Discretion Rule)Wait for PASS before promoting the task.
Purpose: Move the refined task from draft to todo folder. This is a file move you perform yourself — no sub-agent, no model tier, no judge.
After all phases complete:
Move task file from draft to todo:
Do NOT move .specs/sub-tasks/<task-name>/. The sub-task folder is created at planning time and stays put while the task file travels draft/ → todo/ → in-progress/ → done/, so the paths recorded in the Parallelization Overview never go stale.
Update any references in research and analysis files if needed
After all executed phases and judges complete:
.specs/sub-tasks/<task-name>/, skill file, analysis file, and scratchpad files (only those that were created).claude/ └── skills/ └── / └── SKILL.md # Reusable skill document (if research stage ran)
.specs/ ├── tasks/ │ ├── draft/ # Draft tasks (source - now empty for this task) │ ├── todo/ │ │ └── ..md # Complete task specification (ready for implementation) │ ├── in-progress/ # Tasks being implemented (empty) │ └── done/ # Completed tasks (empty) ├── sub-tasks/ │ └── / # One folder per task — NEVER moves with the task file │ ├── 01-.md # One sub-task file per implementation step │ └── 02a-.md ├── analysis/ │ └── analysis-.md # Codebase impact analysis (if codebase analysis stage ran) └── scratchpad/ └── .md # Architecture thinking scratchpad
If any phase agent fails unexpectedly:
If any judge returns FAIL (score < THRESHOLD):
score < 3.0 (or STRICT_MODE is true), always retry. If max(3.0, THRESHOLD - 1.0) <= score < THRESHOLD and only nitpicks remain, decide deliberately whether retrying is worth it — if you accept, mark the phase ☑️ ACCEPTED, list its outstanding nitpicks in the summary, and proceed to the next phase instead of steps 1-4; otherwise continue with step 1--model carve-out. Retry-specific anchors on top of it: trigger (1) is anchored at score < 3.0 here (or judge issues showing the model misunderstood the phase); re-judge at the same tier as the re-launched phase; state the tier decision in the phase summaryHUMAN_IN_THE_LOOP_PHASES, trigger human checkpoint before the next judge retry (after implementation retry but before re-judging)MAX_ITERATIONS reached: Proceed to next stage automatically (do NOT ask user unless --human-in-the-loop includes this phase)⚠️ Phase X did not pass quality threshold (X.X/THRESHOLD) after MAX_ITERATIONS iterationsWhen phase is in HUMAN_IN_THE_LOOP_PHASES: