deepworkplan-create
Skill23 starsChanged 5 months agoMITView on GitHub
Create a Deep Work Plan for short or long work. Detect planning intent, materialize a compact Lite proposal first, then retain Lite or expand to Full task files when needed. Supports guided and trust handoff without executing product work.
In this repository16 other files it gives its agents.
- AGENTS.mdAGENTS.md
- ai-diff-reviewerSkill
- dailybotSkill
- deepworkplanSkill
- fix-frontmatterSkill
- shellcheck-fixSkill
- write-bats-testSkill
- deepworkplan-authorSkill
- deepworkplan-executeSkill
- deepworkplan-onboardSkill
- deepworkplan-refineSkill
- deepworkplan-resumeSkill
- deepworkplanSkill
- deepworkplan-statusSkill
- deepworkplan-upgradeSkill
- deepworkplan-verifySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
22 rules. About 0 are common, 9 are distinctive, and 13 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Create a new Deep Work Plan through a smooth, unified flow: the developer provides information once, you run the requirements analysis, and …
- Very specific: line 44
Write manifest.json, README.md, PROGRESS.md, PROMPTS.md, appropriate analysis_results/ and state.json using the v5 schemas.
- Distinctive: line 162
Never by default: no other guide, spec, preset or addon file is read for this flow — not defensively, not "to be safe".
- Distinctive: line 201
Never expands to Full without that explicit choice.
- Very specific: line 235
0.1 Parse boundary options: before special modes or input classification, consume contiguous trust/auto, lite and full tokens from either …
- Very specific: line 262
0.3 Select the plan generation: if this pack's line is 6+ or the developer explicitly asked for a v6 plan, read v6.md and follow that flow …
- Distinctive: line 298
2.6 Orchestrator detection (automatic — trigger only): After 2.3–2.4 (or, for full-context input, at the start of Step 3), an
- Distinctive: line 392
3.7 Requirements → tasks → gates check: Before leaving this step, confirm: every requirement from 3.2 has an owning task and an observable …
- Distinctive: line 403
Every ordinary create request lands here.
- Distinctive: line 543
Lite is not ungated: Every task keeps scoped acceptance criteria, a runnable validation gate, a completion log and a state entry.
- Very specific: line 584
Follow ../guide/authoring.md (§4–§5) and ../guide/structure.md (§1–§2).
- Very specific: line 606
Folder +
manifest.json(first write): create .dwp/plans/{PLAN_NAME}/ and immediately write manifest.json — plan identity: name, title, … - Very specific: line 684
Local review step (required): read addon-augmentations.md (this directory) and add its AI Diff Reviewer post-existing-checks step to the …
- Very specific: line 741
Conditional branches: if Step 2.6 fired, apply the orchestrator additions in orchestrator.md.
- Very specific: line 750
Run bash ../verify/conformance.sh --plan {PLAN_NAME} from the repository root after materialization.
- Distinctive: line 757
When the Final Review task's checklist reaches its closure step, write it so a
- Distinctive: line 783
Every task record has a Goal, a Context, a Touched Surface, Acceptance Criteria, a runnable Validation gate and a completion-log …
- Distinctive: line 799
Every task has Acceptance Criteria and a Validation gate.
- Very specific: line 804
Every task's checklist has the skills-decision step.
- Very specific: line 809
No placeholder text ([TODO, [TBD, {...} left unfilled) remains.
- Very specific: line 842
If the user chose to execute, hand off to the Execute sub-skill (../execute/SKILL.md): read the plan README, check git status, start from …
- Very specific: line 884
Reference: follow ../guide/authoring.md and ../guide/structure.md.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
DeepWorkPlan — Create
Create a new Deep Work Plan through a smooth, unified flow: the developer
provides information once, you run the requirements analysis, and materialize
a Lite plan folder under .dwp/plans/PLAN_<id>_<slug>/. Guided mode presents that
proposal for review; trust chooses its ready representation without a review.
Both modes return control to the developer to execute later.
Lite-first (v2.4):
createwrites no draft file and no.dwp/drafts/directory. A Lite plan is a complete proposal, not a partial Full plan — it is the reviewable artifact the refined draft used to be, except that it is already executable. Therefined-draft/from-refined-draftcommands were removed in 2.4.0; see../spec/LITE_PLANS.md.
Lite-first command grammar
Parse boundary options before interpreting the remaining text. trust and
auto select trust mode; lite and full express an optional format
preference. Each may be a contiguous token at the beginning or end, in either
order: /dwp-create trust lite add retry, /dwp-create add retry lite trust,
/dwp-create trust add retry, and /dwp-create add retry full are equivalent
forms. Remove all recognized boundary options before classifying context.
Repeated identical options are harmless. lite plus full is an explicit
conflict: report it rather than guessing. -- ends option parsing; everything
after it is literal context. Do not scan the middle of context, quotations or
code for option words. trust with no context asks for the goal. The resulting
plan is handed off; create never modifies product source or calls execute.
Lite-first lifecycle
Step 0.3 routes new plans on this pack to v6.md. The steps below
retain v5 compatibility.
Write manifest.json, README.md, PROGRESS.md, PROMPTS.md, appropriate
analysis_results/ and state.json using the v5 schemas. A Lite README has
one shared rules section and compact anchored task records (#task-N) containing
goal, touched surface, acceptance criteria, validation and completion evidence.
It includes an inline Final Review. It does not create task files or boilerplate
solely to meet a task count. materializing, ready and promoting are distinct
from review approval and execution status.
Guided mode writes a pending proposal, shows the observed signals and format
recommendation, and lets the developer retain Lite, promote Full, edit, or stop.
Trust records the same rationale, chooses Lite or Full, marks it ready and
pre-approved, and returns the execute command. An explicit Full preference wins;
an explicit Lite preference is retained only if compact records can express every
requirement and gate. Unknown scope triggers discovery, not an automatic Full
classification. Small planning work is a valid Lite plan; never route it to an
inline non-DWP alternative merely because it is small.
Philosophy
The goal is a delightful, smooth experience. The user provides information once; the system handles all intermediate steps (analysis, materialization, quality check) automatically — and never generates an artifact nobody asked for.
Shared resources (read at their moment, not upfront)
The compulsory set for this flow is the router SKILL plus this file, the
PROMPTS.md template every plan writes, and the adaptation rule every
generated gate obeys: the operative rules the composition runs on — the
Lite-first shape, the analysis steps, the test/security/documentation
discipline, the resumable write order and the quality checks — are stated
inline in the steps below. A Lite creation, the normal path, reads no
guide file at all; the Full expansion loads the authoring and structure
companions at Step 4.4, when it starts.
- Essential now (before composing anything):
../shared/context.sh— run it (bash ../shared/context.sh) to resolve repo root, branch, agent tool anddwp_dir; its source is not part of this flow's reads.../examples/PROMPTS_TEMPLATE.md— thePROMPTS.mdtemplate Step 4.0 item 4 writes for every plan, Lite or Full; it is inevitable, so it is declared here rather than hidden behind a trigger that always fires.../shared/adaptation.md— reasoning-over-copy-paste and the two repository archetypes (individual repo vs orchestrator hub); Step 2.6's archetype decision and every generated gate depend on it. The target repository'sdocs/TESTING_GUIDE.md(../spec/DOCUMENTATION_STANDARD.md§3.4) — the documented full and scoped validation commands and the source-to-test mapping every generated gate is selected from. It is a repository file, not a pack file: it is compulsory but carries no pack bytes (seetests/efficiency/paths.tsvexclusions). When the target has nodocs/TESTING_GUIDE.md, this read resolves against whatever the repository actually documents — usuallyAGENTS.md's quick-commands section — and the gate is derived from the real commands found there, scoped ones included. Only when the repository documents no runnable validation at all does the full-suite fallback apply (Step 3.5). Either way the missing registry is recorded as a harness finding in the plan's notes; it is never a reason to stop, and never a reason to invent a command the repository does not have. That is the whole t0 set — no guide or spec file is compulsory. - Conditional — read only when the trigger fires:
v6.md(this directory) — read only when Step 0.3 detects the v6 flow (the default for pack line 6+, or an explicit v6 request on an older pack); it carries the whole v6 authoring + materialization path. Both generations allocate new numbered folders; existing unnumbered plans keep their recorded names.../spec/V6_CONTRACT.md— read only when that v6 path composes the outcome contract (the closed field set, evidence classes and amendment chain it must conform to).../guide/authoring.md— read §4–§5 (plan README structure, task-file anatomy incl. the Touched Surface) only when Step 4.4 expands the plan into Full task files; read §5.3–§5.5 only when a task's test, security or documentation discipline is genuinely ambiguous and Step 3.6's inline rules do not settle it; read §4.3 only when a Full plan reaches 20 or more task files and needs the Stage Gates table. The Lite-first path never reaches any of these triggers.../guide/structure.md§1–§2 and §10 — read only when the Format Decision is Full, or the plan references promotion or tree anatomy; the Lite-first path writes its shape inline (Step 4.0).decisions.md— read only when the decision-debates trigger inv6.mdfires.orchestrator.md(this directory) plus../guide/orchestrator.md§13 — read only when Step 2.6 detects an orchestrator plan.team-agents.md(this directory) plus../guide/team-agents.md§14 — read only when Step 2.10 finds parallelizable tasks; the host merely having team agents is not a trigger.addon-augmentations.md(this directory) — read only when composing the Final Review, which every plan carries: this trigger always fires, so the end-to-end path measurement counts it on both the Lite and the Full path. Do not gate this read on whether the target already has the reviewer installed.../guide/execution.md§6.1 — read only when writing the Final Review task's prose; like the bullet above, this trigger always fires and is counted in both measured create paths.../guide/prompts.md§7 — read only when composing prompt text beyond the template.../guide/skills-integration.md§11 — read only when a task references skills or agents.../spec/DWP_SPECIFICATION.md— read §11 only when the rigor tier is borderline, and §5.0.2 only when a Touched Surface is genuinely ambiguous.../spec/PLAN_STATE.md§3–§4 and../spec/schema/— read only when writing the state layer in Step 4.4 item 7; the step text is self-sufficient otherwise.../examples/CREATE_PLAN.md— read only when the developer asks for prompt patterns or example phrasings of a plan request. Composing a plan never requires it: the workflow below takes its input from Steps 1–3, not from this catalogue.../shared/dwp-paths.md— read only when a plan folder cannot be located or theDWP_DIRoverride is in play; Step 4.0 already inlines.dwp/plans/{PLAN_NAME}/.../shared/troubleshooting.md— read only when something is already wrong (discovery failure, stale installation, missing test command, unsupported host capability, inconsistent plan state).../guide/GUIDE.md— the routing index; consult only when a need is not covered by a section named above.
- Never by default: no other guide, spec, preset or addon file is read for this flow — not defensively, not "to be safe". Speculative reading is exactly what the tier above replaces: name the moment, then read.
Parameter Reference
Boundary options (trust/auto, lite/full) are parsed first (Step 0.1) and
removed before the remaining text is classified. Every ordinary row below
materializes a Lite plan folder — no draft file is written.
| Input | Classification | Mode | Behavior | Example |
| (none) | — | guided | Ask for name, then ask questions; analyze; materialize the Lite plan; present it with the format recommendation for review | /dwp-create |
{short text} | name-only | guided | Extract name, ask questions immediately; then as above | /dwp-create improve error handling |
{long text} | full-context | guided | Infer name; analyze the provided context; materialize the Lite plan and present it for review | /dwp-create Refactor auth to use JWT across all services. Currently using sessions... |
trust or auto | — | trust | Ask for name, then ask questions; analyze; materialize the chosen representation directly (no review, no confirmations); the plan is pre-approved for unattended execution | /dwp-create trust |
{text} trust / trust {text} | name-only or full-context | trust | Same, with the context preserved from either boundary | /dwp-create trust fix the settings label |
lite (either boundary) | — | unchanged | Format preference: retain Lite unless a compact record cannot carry a required requirement or gate — then explain why Full is needed | /dwp-create lite rename this setting |
full (either boundary) | — | unchanged | Format preference: an explicit Full wins; the same folder is materialized and then expanded to task files (Step 4.0 → 4.4) | /dwp-create redesign the auth flow full |
lite and full | — | — | Conflict: report it and ask which one; never silently pick one, including in trust | /dwp-create lite full ... → error |
-- | — | unchanged | Ends option parsing; everything after it is literal context | /dwp-create trust -- full rewrite of the parser |
Name format: users type names in any format; you auto-convert to
snake_caseinternally.
Removed in 2.4.0:
refined-draft,from-refined-draftand itsfromalias. There is no draft artifact and no.dwp/drafts/directory — the Lite plan replaces them. If a repo still has a.dwp/drafts/folder from an earlier version, DWP neither reads nor writes it; the developer may delete it. To build a plan from an old draft's content, paste that content as the create context.
Modes
Guided Mode (default)
- Collects information from the user; runs the requirements analysis (Step 3).
- Materializes the Lite plan (Step 4.0) → shows it with the format recommendation and the observed signals behind it.
- Asks the developer to retain Lite, promote to Full, edit, or stop. The plan
stays
Approval: pendinguntil they choose. - Never expands to Full without that explicit choice.
Trust Mode (trust or auto)
- Collects information from the user; runs the same requirements analysis (Step 3) and the same plan-quality check (Step 4.5).
- Materializes the chosen representation directly — Lite, or Full when the
rubric or an explicit
fullsays so; never author both representations. Trust waives the intermediate review, never the analysis, the quality check, or the execution handoff. - Records the plan as pre-approved for unattended execution
(
../spec/AGENT_PROTOCOL.md§7.2): the developer'strustinstruction is the approval.trustauthorizes the planning decisions — it never calls execute.
Trust boundary (write scope)
allowed-tools includes write-capable Edit, Write, and Bash.
Writes: plan artifacts under the gitignored .dwp/ directory only —
.dwp/plans/{PLAN_NAME}/ for the
materialized plan (README, task files, analysis outputs, state layer). Analysis
outputs go inside that plan's own analysis_results/, never the repository root
(../spec/DWP_SPECIFICATION.md §5). "Trust
mode" skips intermediate confirmations of plan content, not of the write
boundary, and grants no permission the plan does not list.
It MUST NOT: modify source files (that is execute's job), write outside
.dwp/, read or include secrets in plan content, install anything, make network
calls, or materialize a plan whose tasks lack acceptance criteria and validation
gates. Ordinary create never requires a source edit, an install, or the network.
Unified Workflow
Step 0 — Parse Parameters & Determine Mode
0.1 Parse boundary options: before special modes or input classification,
consume contiguous trust/auto, lite and full tokens from either boundary
in either order. trust_mode is true when trust or auto occurred; record a
single format preference when lite or full occurred. Repeated identical
options are valid. A lite/full conflict is an error. Stop parsing at --;
all following text is literal context. Never inspect ordinary context words.
0.2 Classify remaining input:
| Condition | Classification | What to do |
| No remaining text | no input | Go to Step 1, then Step 2 (ask for name + all info) |
| ≤10 words AND no complete sentences AND no line breaks | name-only | Convert to snake_case → plan name. Go to Step 1, then Step 2 (skip name question) |
| >10 words OR detailed sentences OR line breaks | full-context | Infer plan name → snake_case. Go to Step 1, then Step 3 (use provided context) |
Name auto-conversion to snake_case: lowercase; replace hyphens/spaces with
_; strip everything but a-z0-9_. Examples: improve Feature X →
improve_feature_x, add-stripe-payments → add_stripe_payments.
CRITICAL: when input is name-only, NEVER explore the codebase or research the topic before asking questions. The name only says what to CALL the plan, not what to DO. Go directly to Step 2.
Routing by mode:
no input/name-only→ Step 1, then Step 2.full-context→ Step 1, then Step 3.
0.3 Select the plan generation: if this pack's line is 6+ or the developer
explicitly asked for a v6 plan, read v6.md and follow that flow
exclusively (it also covers v7). Stop here: Steps 1 onward describe the
retained v5 lifecycle and MUST NOT be applied to a v6 or v7 plan. With this
7.x pack, v7 is the default for new plans; an explicit v6 request
materializes a v6 contract. Existing plans always keep their recorded generation.
Step 1 — Quick Introduction
Show a brief intro matching the mode: in guided mode, that you will analyze the requirements, stage a refined plan for review, and then generate the final executable plan; in trust mode, that you will analyze the requirements and materialize the final executable plan directly (no confirmations), and that the plan will be pre-approved for unattended execution.
Step 2 — Gather Information (Conversational)
Skip the questions (2.1–2.5) for
full-contextinput. Steps 2.6 and 2.10 are detections, not questions: they run in every mode. For full-context input, skip 2.1–2.5 and run 2.6 and 2.10 at the start of Step 3 against the provided context, then continue.
Collect, conversationally:
- 2.1 Plan name (skip if already extracted) — auto-convert to a lowercase
snake_case slug. The allocator adds
PLAN_<id>_when the folder is created. The current v6 flow uses 2–5 slug words. The retained v5 flow uses 2–4 because its frozen schema counts the ID as one word. Existing names are never changed. - 2.2 Objective — one or two sentences.
- 2.3 Context — where the changes live, constraints/rules, tech notes.
- 2.4 Tasks — one bounded task is valid for Lite; split only when outcomes, risks or gates genuinely differ. Never invent padding to reach a count.
- 2.5 Guidelines (optional) — branch/commit format, coverage target, whether
an Executive Report is wanted at completion (records an explicit prior request
per
../spec/DWP_SPECIFICATION.md§6.3), etc.
2.6 Orchestrator detection (automatic — trigger only). After 2.3–2.4 (or, for
full-context input, at the start of Step 3), an
orchestrator plan is indicated when the work spans 2+ sub-repositories with
independent feature work, or the user explicitly mentions child DWPs /
orchestrator / "create plans in each repo". If, and only if, this fires:
read orchestrator.md (this directory) and follow its
gathering steps (2.6 choice, 2.7–2.9). Otherwise skip it entirely.
2.10 Team-agents detection (automatic — runs in every mode, including when
Step 2 was skipped; non-orchestrator plans; trigger only). Analyze whether 2+
tasks touch different files/modules
with no data dependencies and would benefit from parallel execution. This is NOT
opt-in — but the only trigger is the analysis's answer, never the host's
capabilities. If, and only if, 2+ tasks are parallelizable: read
team-agents.md (this directory) and follow its steps (2.10
configuration, and 2.11 parallel research if that step's own trigger — 2+ repos
or several independent modules with context missing — also fires). If not
parallelizable: write the sequential declaration into the plan README — one
agent-neutral line, Execution: sequential — {short rationale: shared surface /
collision risk / single-session audit trail} — and read nothing else for this
detection, even when the host supports team agents. The decision is never
silent in either direction; never fabricate parallel groups to fill the section.
Step 3 — Requirements Analysis (both modes, before any file is written)
First, if Step 2's questions were skipped (full-context input or full-context input): run the two detections now, against the provided context — 2.6 orchestrator and 2.10 team-agents — and read their on-demand files only if a trigger fires. A detection is never skipped merely because no questions were asked.
This step runs in every mode and is the substance of the plan; the mode only decides whether it is first reviewed before execution (guided) or handed off directly (trust).
- 3.1 Proportional rigor (
../spec/DWP_SPECIFICATION.md§11). Confirm the work warrants a plan. A trivial single-concern change is micro tier and is a first-class Lite plan: record a concise goal, gate and Final Review rather than routing the developer out of DWP. Otherwise choosestandardordeepand record why in the plan README. A borderline call is recorded, never asked. - 3.2 Requirement inventory. List every user requirement and constraint (from Steps 2–2.5 or the full-context input). Each one will need an owning task and an observable acceptance criterion.
- 3.3 Task decomposition (
../spec/DWP_SPECIFICATION.md§6.4). One task, one objective: a task may perform several steps that serve its single granular objective, and must never bundle several objectives — prefer N tasks with one objective each over fewer tasks carrying several. Each task is one coherent outcome with a bounded write surface, concrete inputs and outputs, and resumable sub-steps. Split when a task serves several objectives with different failure modes, evidence or authorization that would otherwise hide behind one checkbox; keep tightly coupled edits that serve the same objective together. There is no task-count quota, no ritual of a separate task per minor edit, and no padding to inflate the count. Preserve full detail — this analysis never shortens a requirement to save space. - 3.4 Dependency order and prerequisites. Order tasks so every prerequisite artifact (a decision, a file, a contract) exists before the task that consumes it; record, per task, its owned surface, prerequisite artifacts, and expected outputs (these become the task's Context, Read Before Starting, and Outputs).
- 3.5 Validation selection (
../spec/DWP_SPECIFICATION.md§5.0.2, §5.1). For each behavior-changing task, derive the planned Touched Surface, the affected consumers, and the risk class (isolated / seam / shared-core / unknown), and select runnable gates from the repository's documented commands and mapping (docs/TESTING_GUIDE.md): the tests of the changed behavior plus affected consumers; integration/contract checks inside any task that changes a real seam; a widening to the full suite for shared/core, configuration, schema, dependency or toolchain changes or when impact cannot be bounded. Where the repository documents no scoped invocation, the task's gate is the full suite by rule — and note in the README that the repository's harness can be upgraded (../spec/DOCUMENTATION_STANDARD.md§3.5). Do not paste a generic full-suite command into every task: full validation of the final state is the Final Review's job (§5.1.3). - 3.6 Test, security, and documentation discipline. Bake the test
discipline (
../guide/authoring.md§5.3) into every behavior-changing task: its Acceptance Criteria require unit-first automated coverage for the new/changed behavior (fast, isolated, observable behavior; integration at real seams; no ratio or count quota), and its Validation runs the selected tests plus lint/type-check/format. Where related work is substantial, prefer a dedicatedN.task_add_tests_for_{feature}.mdtask right after the implementation task. Likewise, for any task that touches auth, input handling, secrets/config, network surface, or dependencies, bake the security discipline into it (../guide/authoring.md§5.4); where the security-sensitive work is substantial, prefer a dedicatedN.task_security_hardening_{feature}.mdtask placed after the implementation tasks and before the comprehensive-tests task, so findings are fixed before tests encode the behavior and become regression test cases rather than rework. Finally, bake the documentation discipline (boy-scout) into every task that changes behavior, structure, commands, configuration, or agent surface (../guide/authoring.md§5.5;../spec/DWP_SPECIFICATION.md§6.6): its Touched Surface names the doc files it keeps current and its Acceptance Criteria include their currency; where the obliged documentation is itself substantial, prefer a dedicatedN.task_document_{feature}.mdtask placed with the implementation it documents — never deferred past the Final Review's documentation sweep. - 3.7 Requirements → tasks → gates check. Before leaving this step, confirm: every requirement from 3.2 has an owning task and an observable acceptance criterion; prerequisites are available in order; every task is cohesive, independently verifiable, and fully detailed; every behavior-changing task has a planned Touched Surface and a non-empty, runnable gate. Fix gaps here, not after materialization.
Step 4 — Materialize (Lite first), then expand only if needed
4.0 Lite-first materialization (the normal path — both modes)
Every ordinary create request lands here. There is one plan identity and one
folder from proposal through completion: Lite and Full describe the task
representation, not two different products. create never modifies product
source and never calls execute.
Before writing: resolve dwp_dir via ../shared/context.sh. On a resumed
create request, inspect existing folders with the requested slug and reuse a
matching partial plan only when its recorded objective matches; if several
match, require the full folder name or ID. For a genuinely new plan, allocate
the folder once with python3 ../shared/plan_paths.py --plans-dir
<dwp_dir>/plans allocate <slug> --max-words 4 for v5 (omit the option for
v6). It creates a flat folder such as
PLAN_001_improve_release_docs/; use the printed basename as {PLAN_NAME}
in every artifact and prompt. For v5, keep the slug to 2–4 words so the frozen
v5 manifest and state schemas accept the numeric ID. Reuse this folder on
retry or promotion; never allocate again for partial materialization. Existing
unnumbered folders are left untouched. If the target folder already exists,
see Error Handling — plan exists / partial materialization.
Decide the representation before the second write. Apply Format selection
below to the Step 3 analysis, together with any explicit lite/full
preference, and then branch — a task contract is authored once, never
inline and then again as a file:
| Mode | Chosen format | What to materialize |
| guided | Lite | The Lite representation below. This is the reviewable proposal. |
| guided | Full | The Lite representation below, as the compact proposal to review, recording that Full expansion is required before execution. Expanding on the developer's approval is Step 4.4 — that expansion is the approval action, not a rewrite of settled work. |
| trust | Lite | The Lite representation below. |
| trust | Full | Skip to Step 4.4 for this same folder. Nobody reviews a trust plan, so writing the Lite representation on the way to Full would author every task twice and buy nothing. Write plan_format: "full" in the manifest and go. |
Write order for a Lite plan (resumable at any point):
manifest.json(first write) — immutable creation identity, written once and never edited:schema=https://deepworkplan.com/schema/plan-manifest/v5.json,spec_version"5.0.0",name,title,archetype,rigor,created_at,created_by,task_count(the creation count, Final Review included) andplan_format("lite", or"full"when an explicitfullpreference or the rubric already decided Full). Atomic (write-temp-then-rename); valid against../spec/schema/plan-manifest-v5.schema.json— the schema is closed. A later change of live task count never rewrites this file. Plans created under 4.0.0 keep their v2 schema URL, and plans created under 2.3.0 and earlier keep their v1 URL; all remain conformant and are never rewritten.README.mdskeleton (second write) — everything in Lite README anatomy below except the status line, which readsPlan Status: materializing.analysis_results/— the folder, plusSKILLS_CANDIDATES.mdwith the two-line header. WritePLAN_ANALYSIS.mdonly when the Step 3 evidence warrants a separate record; a small Lite plan does not need one, and an empty analysis file is busywork, not rigor.PROMPTS.md— from../examples/PROMPTS_TEMPLATE.md, stripped of its authoring scaffolding (see Step 4.4 item 4).PROGRESS.md— the bounded working index: goal and invariants, the active task and the exact next action, unresolved blockers, the contracts and decisions still in force, and pointers to the durable records. Not a narrative log —../resume/SKILL.mdStep 2.1 is what reads it back.state.json—schema=https://deepworkplan.com/schema/plan-state/v5.json,plan,updated_at,status: "pending",completed_count: 0,task_count,format("lite"— this branch only writes Lite; a Full plan's state is written by Step 4.4),materialization("ready"once every file above is on disk),approval("pending"in guided mode,"pre_approved"in trust — the same value the README'sApprovalrow shows),promotion: null, and onetasks[]entry per task:{ "id": N, "locator": { "kind": "inline", "value": "#task-N" }, "title": …, "status": "pending", "gates": [] }. Atomic; valid against../spec/schema/plan-state-v5.schema.json— closed schema, so evidence rides in the gateevidencestring, not in new fields.- Flip the README status (last write) — replace
Plan Status: materializingwithPlan Status: 0/N completed. Only now is the plan materialized.
A folder whose README.md is missing or still says materializing is a
partial materialization: create and refine complete or discard it;
execute and resume never run it. That is a different thing from a finished
Lite plan awaiting review — a complete proposal is not a corrupt plan.
Lite README anatomy. One shared rules section, then compact anchored task records. Do not paste the ten-section task template into the README.
# Plan: {Title}
## 1. Goal
## 2. Context
## 3. Global Guidelines
## Plan Variables
| Variable | Value |
| --- | --- |
| Standard | DWP spec 5.0.0 |
| Plan Format | Lite |
| Materialization | ready |
| Approval | pending ← guided; `pre-approved (trust)` in trust mode |
| Rigor | micro \| standard \| deep |
| Pre-approved for unattended execution | no \| yes (trust) |
## Format Decision
Observed signals (task count, touched modules, risk/seams, reversibility,
external coordination, validation cost, ambiguity) → recommendation + why.
One concise record here; machine state is derived from it, never duplicated.
## 4. Task List
- [ ] Task 1: {title} — [#task-1](#task-1)
- [ ] Task N: Final Review — [#task-N](#task-N)
## 5. Execution Rules
## 6. Skills & Agents Used
## 7. Plan Status / Notes → `Plan Status: 0/N completed`
## Task 1 {#task-1}
**Goal:** … · **Context:** (what a fresh session needs to start this task
alone) · **Touched Surface:** (planned surface, planned docs surface, risk
class, test mapping, selected gate and why) · **Acceptance Criteria:** ·
**Validation:** (a runnable command) · **Completion log:** (status, skills
disposition, documentation decision, gate record).
> **The label form is load-bearing, not styling.** Write each field label as
> `**Goal:**` or `**Goal**` — those two, exactly. The checker parses these
> labels to find each field (`verify/plan_contract.py`), so a decorative
> variant like `**Goal.**` makes the field invisible to it and the plan fails
> conformance with one "lacks Goal" issue per task, for zero content reasons.
> Step 4.5 catches it; do not rely on that.
## Task N: Final Review {#task-N}
The same mandatory Final Review — security pass, final-state validation, skills
reconciliation, documentation reconciliation — kept concise and inline. Its
evidence lands in `analysis_results/SECURITY_REVIEW.md`.Anchor rules. Each {#task-N} occurs exactly once; IDs are contiguous
1..N; the Task List checkbox line is the canonical index and the only thing
that defines completion. Checkboxes inside fenced examples are not progress.
A locator is inline (a README anchor) or file (one Full task file) — never a
path with .., an absolute path, or a missing target.
Lite is not ungated. Every task keeps scoped acceptance criteria, a runnable validation gate, a completion log and a state entry. One bounded task plus the Final Review is a valid plan; never pad to reach a count.
Format selection. Choose Lite when the shared rules plus compact task records
carry every requirement and gate. Choose Full when instruction detail,
dependencies or contracts cannot fit a reviewable compact record — risk alone
argues for stronger gates, not necessarily longer task prompts, and unresolved
scope calls for discovery, not an automatic Full. Record the signals and the
reason; this is auditable judgment, not a claim that every model decides alike.
An explicit full wins. An explicit lite is honored unless a requirement or
gate would be lost — then say exactly which one, and why Full is required.
Then, by mode:
- Guided — present the materialized Lite proposal, the recommendation and
the signals behind it, then offer: (1) retain Lite → Step 4.5; (2) expand to
Full → Step 4.4, writing task files for the same task IDs; (3) edit → adjust
and re-present; (4) stop.
Approvalstayspendinguntil they choose. When the recommendation is Full, say so plainly: the proposal is reviewable but the plan is not executable as Lite until it is expanded. - Trust — the format was already chosen and materialized once, per the
branch table above. Record
Pre-approved for unattended execution: yes (trust)andApproval: pre-approved (trust), then go to Step 4.5 and hand off with/dwp-execute {PLAN_NAME}. Never invoke execute.
Promotion after creation is not this step: it is /dwp-refine promote
(../refine/SKILL.md Step 5), which writes a recoverable marker first.
../spec/LITE_PLANS.md is normative for representation, promotion and recovery.
Steps 4.1–4.3 were the refined-draft flows. They were removed in 2.4.0; the numbering below is unchanged so existing cross-references keep resolving.
4.4 Create Final Plan (Full representation)
Reached from Step 4.0 when the format is Full — by the rubric, or by an explicit
full preference, or by a guided promote choice. The folder, manifest.json and
the analysis written in Step 4.0 are reused, not recreated: this step adds
the task files and switches the README to the task-file representation for the
same task IDs. It is never an entry point of its own.
Follow ../guide/authoring.md (§4–§5) and ../guide/structure.md (§1–§2).
Before writing: reuse the folder allocated in Step 4.0; if it already exists, see Error Handling — plan exists / partial materialization. Never overwrite files that are not part of this plan.
Write order (resumable at any point): manifest.json → README.md
skeleton (goal, context, variables, the Format Decision record — the
observed signals and why this plan is Full, including when an explicit full
preference overrode the rubric, so the choice is auditable — guidelines and the
full task list with titles and links, with Plan Status: materializing) → analysis_results/PLAN_ANALYSIS.md
(the Step 3 record) → task files in order → PROMPTS.md → PROGRESS.md →
analysis_results/SKILLS_CANDIDATES.md → state.json → flip the README to
Plan Status: 0/N completed as the last write. From the second write onward,
the plan's intended shape is on disk in human-readable form; from the third, any
agent can regenerate a missing task file faithfully. A folder whose README is
missing, still says materializing, or links a task file that does not exist is
a partial materialization: create and refine complete or discard it,
execute and resume never run it.
Create:
- Folder +
manifest.json(first write): create.dwp/plans/{PLAN_NAME}/and immediately writemanifest.json— plan identity: name, title, archetype, rigor tier,spec_version"5.0.0",plan_format"full",task_count= the number of task files this materialization will write (Final Review included), creating agent — atomically (write-temp-then-rename), valid against../spec/schema/plan-manifest-v5.schema.json(closed schema), written once, never edited after. When Step 4.0 already wrote the manifest, keep it: only a manifest created withplan_format: "lite"that has not yet been materialized may be written with"full"here. Plans created under 4.0.0 keep their v2 schema URL, and plans created under 2.3.0 and earlier keep their v1 schema URL; all remain conformant and are never rewritten. 1b. README skeleton (second write): writeREADME.mdwith everything in item 8 except the final status: the Task List names every intended task with its future filename and link, and the status line readsPlan Status: materializing(no count). This is the resumable record of the plan's shape; it is flipped in item 9 and never left asmaterializingon a finished plan. 1c.analysis_results/PLAN_ANALYSIS.md(third write): the Step 3 record — requirement inventory, tier and why, task decomposition with each task's owned surface, prerequisites and outputs, the planned Touched Surface, risk class and selected gate per behavior-changing task, and the mode. Compact (aim under ~600 words); it lets a fresh agent regenerate a missing task file without re-deriving the plan, and givesrefinethe original reasoning. - User-defined task files —
N.task_{title}.md, each with the ten-section anatomy (../spec/DWP_SPECIFICATION.md§5): Context; Read Before Starting; Goal; Touched Surface (planned surface, affected consumers, risk class, test mapping used, selected gate and reason — from Step 3.5;not applicable — <reason>for pure prose/research); Instructions (with re-anchoring); Acceptance Criteria (incl. the unit-first coverage expectation from 3.6); Outputs; Validation (the selected, runnable gates — scoped where documented, the full suite as fallback, integration checks where the task changes a seam; never a zero-test selector); Rollback (optional); Execution Checklist; Completion & Log. The Execution Checklist MUST include, before the validation step: "Skills decision: recordnone/update/create/deferin the log; append any real candidate toanalysis_results/SKILLS_CANDIDATES.mdby stable IDT{N}-{seq}; do any warranted in-scope authoring now" (../spec/DWP_SPECIFICATION.md§6.2) and "Documentation decision: docs updated for the touched surface — list, ornot applicable — <reason>" (../spec/DWP_SPECIFICATION.md§6.6). The Completion & Log template MUST carry aSkills disposition:line, aDocumentation decision:line, and aGate record:line (command, cwd, scope/reason, revision or fingerprint, result, evidence path). The Final Review task —
{N}.task_final_review.md, last, the single mandatory final task (../spec/DWP_SPECIFICATION.md§6.1;../guide/execution.md§6.1). Its instructions, in order: (a) security pass — review the plan's full accumulated diff for hardcoded secrets, injection risks, unsafe input handling, new attack surface, and auth/permission changes; audit dependencies the plan introduced (best-effort, with the ecosystem's audit tooling where available); verifydocs/SECURITY.mdstill reflects reality and update it when the plan changed secrets handling, the auth model, or data boundaries; writeanalysis_results/SECURITY_REVIEW.mdeven when clean; a verified critical finding (v3, BC-07) blocks completion until fixed or explicitly accepted by the user — unverified critical claims arrive as annotated warnings, and anincomplete/timeoutreview is not a clean pass (BC-04). (b) Final-state validation — run the repository's complete applicable test, lint, type-check and format suites on the final state (§5.1.3); fixes made during review invalidate affected results, which are rerun. (c) Skills reconciliation — confirm every task log has a disposition and everySKILLS_CANDIDATES.mdentry has one; finish any open warranted authoring before (b) is final; no whole-plan rediscovery, no second report. (d) Documentation reconciliation — sweep every behavior-changing task's reconciled surface against the docs that register it (the Touched Surfaces and §6.6 decisions are the ledger): gate registry (docs/TESTING_GUIDE.md) first, then architecture, module and feature docs, then theAGENTS.mdindex for new top-level surface; fix misses in this review, rerun affected validations, and record the result inSECURITY_REVIEW.mdas a "Documentation reconciliation" subsection (checked → current, or the fixed list). Bounded to the plan's touched surface — a whole-repo docs audit belongs to/dwp-verify; the plan does not close with an undocumented behavior-changing surface unless the user explicitly accepted the miss. (e) Completion — report deliverables, evidence, limitations and PR links; offer the Executive Report once (generate only on request; an explicit request recorded in the plan guidelines counts); where a reporting channel is configured (AGENT_PROTOCOL.md§5), send the completion report best-effort; otherwise skip it.Local review step (required): read
addon-augmentations.md(this directory) and add its AI Diff Reviewer post-existing-checks step to the Final Review task's security pass — it applies to every 2.3.0 plan. When the target repo lacks.agents/skills/ai-diff-reviewer/or an extension file at one of the three recognized paths, the step's degradation clause (record alocal reviewer not installedfinding) and carry it into the completion report. Installation belongs to onboarding or an explicit addon invocation; Final Review never surprise-bootstraps it. Do not omit the step.- PROMPTS.md — from
../examples/PROMPTS_TEMPLATE.md, replacing{PLAN_NAME}with the plan name. The template is written for you, so strip its authoring scaffolding before writing the file: drop the "Instructions for Agents Creating This File" block and the closing "For agents:" note, and drop or repoint its relative links (they resolve fromexamples/, not from inside a plan folder). What ships is the copy-paste prompts only. - PROGRESS.md — a bounded working index (
../resume/SKILL.mdStep 2.1 reads it back;../guide/execution.md): goal and constraints; active task and next action; unresolved blockers; current contracts and decisions still in force; direct pointers to durable records (task logs,analysis_results/). Soft budget ~1,000 words for routine carry-forward; completed detail lives in task logs and is retrieved by pointer — never discard an unresolved constraint to fit. - analysis_results/ — the folder, plus
SKILLS_CANDIDATES.mdwith a two-line header (purpose; entry shapeT{task}-{seq} · pattern · evidence · disposition). No other placeholder files. state.json(RECOMMENDED,../spec/PLAN_STATE.md; REQUIRED for unattended runs and for workspaces without git) — the initial projection: every taskpending, empty gates,task_countequal to the manifest's,format: "full",materialization: "ready",approval("pending"guided /"pre_approved"trust),promotion: null, and onelocatorper task —{ "kind": "file", "value": "N.task_….md" }. Atomically (write-temp-then-rename); valid against../spec/schema/plan-state-v5.schema.json(no extra fields — the schema is closed). Existing v2 plans keep their v2 schema URL; existing v1 plans keepfileand their v1 schema URL — neither is ever rewritten.manifest.jsonwas written in item 1 and is not touched here.- README.md (content — written as the skeleton in item 1b) — Goal; Context; Plan Variables (incl.
**Standard:** DWP spec 5.0.0and**Plan Format:** Full, the tier and why, and in trust modePre-approved for unattended execution: yes (trust)); Global Guidelines (incl. an explicit Executive Report request if the user made one); Task List with[ ]checkboxes + links (the Final Review last); Execution Rules; Skills & Agents Used; Plan Status / Notes; Analysis Outputs table (SKILLS_CANDIDATES.md— every task;SECURITY_REVIEW.md— Final Review;EXECUTIVE_REPORT.md— optional, on request); Quick Reference toPROMPTS.md. Add the note: "Every plan ends with a single Final Review (security pass, final-state validation, skills reconciliation, documentation reconciliation). Skills decisions are made inside each task; the Executive Report is optional and offered at completion. Auto-generated by/dwp-create." For a long Full plan (20 or more task files), the README also carries the optional Stage Gates table (../guide/authoring.md§4.3) — one named checkpoint per coherent phase, placed adjacent to Execution Rules. Lite plans never carry it, and shorter Full plans omit it by default. - Flip the README status (last write): replace
Plan Status: materializingwithPlan Status: 0/N completedwhere N equalsmanifest.task_countand the number of task files on disk. Only now is the plan complete.
Conditional branches: if Step 2.6 fired, apply the orchestrator
additions in orchestrator.md; if Step 2.10 fired, apply
the team-agents metadata and, for 5+ user task files where team agents are
available, the accelerated generation in team-agents.md.
Neither branch changes the sequential path: every task must work sequentially,
and the Final Review is always sequential.
4.5 Plan-Quality Check (both modes and both formats — before reporting success)
Run bash ../verify/conformance.sh --plan {PLAN_NAME} from the repository root
after materialization. The checker resolves the plan through the same
shared/context.sh logic every flow uses, so the ordinary case needs nothing
else. Only when the output lives outside the repo's own .dwp/ do you set
DWP_DIR, and it points at the .dwp directory that contains plans/ —
not at the plan folder itself (../shared/dwp-paths.md). Fix findings before
handing off.
When the Final Review task's checklist reaches its closure step, write it so a
review-only outcome is a legitimate close: its whole output lands under the
gitignored .dwp/, so a review that fixed nothing has nothing to commit and
records that step as not applicable. Do not emit a checklist line that
hard-codes a commit — ../execute/SKILL.md forbids manufacturing a cosmetic
one, and a generated step that contradicts the execution contract forces the
executing agent to choose which of the two to disobey.
Invoke the checker by its absolute path (<pack>/verify/conformance.sh) or
from the pack directory — the ../verify/... form above is written relative to
this file, not to any flow's working directory.
../shared/finalize_plan.py is an execute-time helper: at create time there
is no candidate state and no completed log for it to validate, so do not try to
run it here. What create owes is the Final Review task text that will close
through it: the task must require completed logs carrying skills and
documentation decisions, earned gate records, candidate validation against the
real artifacts, and the receipt. Never let that final check depend on a
fabricated success record of its own invocation.
For a Lite plan, verify and fix before continuing:
- Requirements → tasks → gates (Step 3.7) hold for the task records.
- Task IDs are contiguous
1..N; each{#task-N}anchor occurs exactly once; every Task List link resolves to its anchor; the Final Review is taskNand the only final task. - Every task record has a Goal, a Context, a Touched Surface, Acceptance Criteria, a runnable Validation gate and a completion-log placeholder. No task was padded in to reach a count.
manifest.jsonvalidates against the v5 manifest schema withplan_format: "lite";state.jsonvalidates against the v5 state schema, itstask_countandcompleted_countagree with the records, every locator isinlinepointing at that task's anchor, and itsapprovalmatches the README'sApprovalrow.- The README carries the Format Decision,
Plan Format,MaterializationandApproval, no longer saysmaterializing, and no placeholder text remains. - No file under
.dwp/drafts/was written.
For a Full plan, verify and fix before continuing:
- Requirements → tasks → gates (Step 3.7) hold for the materialized files.
- Tasks are atomic, ordered, numbered
1..Nwithout gaps; the Final Review is taskNand the only final task; every README link resolves. - Every task has Acceptance Criteria and a Validation gate; every
behavior-changing task has a Touched Surface with a risk class and a non-empty,
runnable selection (no zero-test selector); tasks that change a seam carry an
integration/contract check; the unit-first coverage expectation is in the
Acceptance Criteria (
../guide/authoring.md§5.3). - Every task's checklist has the skills-decision step;
SKILLS_CANDIDATES.mdexists;PROMPTS.md,PROGRESS.mdandanalysis_results/PLAN_ANALYSIS.mdexist;manifest.jsonvalidates and itstask_countequals the task files written;state.json(when present) validates and agrees with the task files; the README no longer saysmaterializingand every task link resolves. - No placeholder text (
[TODO,[TBD,{...}left unfilled) remains.
Step 5 — Completion & Execute Option
For a Lite plan, report success and the location .dwp/plans/{PLAN_NAME}/,
state the format and why it was chosen, and name the execute command. In guided
mode the plan is still Approval: pending — say so, and that executing it is
what approves its current scope. In trust mode state that it is ready and
pre-approved for unattended execution. Then offer: (1) execute now → run the
Execute sub-skill (../execute/SKILL.md); (2) review the README first, then
ask again; (3) done for now → /dwp-execute {name} later (or
/dwp-execute {name} trust to run to the end without questions); (4) promote to
Full instead → /dwp-refine promote {name}. Return control either way:
create finishes by handing off, never by starting the work — including in
trust mode.
For a Full plan, report success and the location
.dwp/plans/{PLAN_NAME}/ (in trust mode, state that it is pre-approved for
unattended execution), then offer: (1) execute now → run the Execute
sub-skill (../execute/SKILL.md); (2) review the README first, then ask again;
(3) done for now → tell them to run /dwp-execute {name} later (or
/dwp-execute {name} trust to run to the end without questions).
Dailybot kickoff (only when the Dailybot addon is wired — best-effort,
non-blocking): after the plan is materialized and approved, send a regular
(non-milestone) kickoff report via the dailybot report sub-skill — "Starting:
<what is being built and why it matters>" — per the addon's lifecycle event
model (../addons/dailybot/SPEC.md §5.1). One kickoff per plan; skip silently
if Dailybot is absent, unauthenticated, or .dailybot/disabled exists. Never
block on this.
Step 6 — Execute Plan (Optional)
If the user chose to execute, hand off to the Execute sub-skill
(../execute/SKILL.md): read the plan README, check git status, start from the
first [ ] task, execute sequentially, validate, commit per task, report.
Error Handling
- Plan name already exists (complete plan — has
README.md): offer a different name / overwrite (explicit confirmation, even in trust mode — it is a destructive action) / cancel. - Partial materialization found (folder exists and its
README.mdis missing, saysPlan Status: materializing, or links a task file that does not exist): readmanifest.json(intendedtask_count, title) and the README task list when present, and report which intended files exist and which are missing; offer to complete it — regenerate only the missing files fromanalysis_results/PLAN_ANALYSIS.md(or, when that record is also missing, from the manifest, the README task list and the existing task files, rebuilding Step 3 for the gaps; in guided mode ask only for what no file states, in trust mode derive it and say so in the README), leave existing task files and the manifest untouched, then flip the status line — or discard it (explicit confirmation, even in trust mode). Never overwrite unrelated files. A folder with neither a manifest nor a README is handled the same way with the intended count unknown. - Name auto-converted: show an informational notice (not an error).
- Insufficient tasks (<2): in guided mode, ask the user to break the work down. In trust mode there is nobody to ask: if the work is genuinely one atomic change, that is the micro tier — record it per Step 3.1 (the Plan Variables note plus the inline alternative) and materialize the one user task plus the Final Review. Never invent filler tasks to reach a count.
- No documented validation commands in the target repo: proceed with the
full-suite fallback on every behavior-changing task and say so in the README;
suggest onboarding or the harness upgrade (
../spec/DOCUMENTATION_STANDARD.md§3.5). Never invent a scoped command.
Important Notes
- Git ignore: everything under
.dwp/is git-ignored. - Single artifact: the plan folder is the only thing
createproduces. There is no draft file and no.dwp/drafts/directory in 2.4.0. - One final task:
{N}.task_final_review.md. Never generatetask_skills_agents_discoveryortask_executive_reportfiles for a new plan (plans from earlier versions that have them are executed as recorded —../spec/DWP_SPECIFICATION.md§6.5). - Reference: follow
../guide/authoring.mdand../guide/structure.md; orchestrator →../guide/orchestrator.md§13; team agents →../guide/team-agents.md§14. - Archetypes: orchestrator support assumes the orchestrator-hub archetype
(sub-repos under
repositories/); an individual repo creates standard plans. See../shared/adaptation.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

