From engy
This skill should be used when the user asks to 'plan my project', 'plan milestones', 'break down into tasks', or 'create tasks for milestone'. Plans spec milestones in detail — task groups, tasks, dependencies, and priorities.
How this skill is triggered — by the user, by Claude, or both
Slash command
/engy:milestone-planThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The spec already contains a high-level list of milestones. This skill plans **one milestone at a time** in detail — defining task groups, individual tasks, dependencies, and priorities. Everything is presented to the user for approval before creating anything in the system.
The spec already contains a high-level list of milestones. This skill plans one milestone at a time in detail — defining task groups, individual tasks, dependencies, and priorities. Everything is presented to the user for approval before creating anything in the system.
When a workspace manages multiple repos, task scoping rules apply:
repos field to all repos the group's tasks touch.web/").blockedBy — upstream repo tasks (e.g., shared types in common/) should be completed before downstream consumers (e.g., web/).Call getProjectDetails(projectId) and inspect workspace.repos (an array of local repo paths). If the array has more than one entry, apply the multi-repo rules above when planning task groups and tasks.
For single-repo workspaces, these rules are effectively no-ops — all tasks naturally target the same repo.
specDir via getProjectDetails.{specDir}/spec.md and extract the existing milestone list.Glob("{specPath}/milestones/m*-*.plan.md") or task groups via listTaskGroups. Find the next unplanned milestone in sequence.Do NOT create task groups or tasks yet. Level 1 is purely about selecting and confirming which milestone to plan.
One milestone per run. Do not plan multiple milestones unless the user explicitly asks.
For the selected milestone:
listProjects to find the project whose specDir matches the spec you're working with. Do NOT assume projectId=1.getProjectDetails(projectId) and check workspace.repos. If the workspace has multiple repos, apply the multi-repo task scoping rules (see above) throughout the remaining steps.repos field on each group to the repos its tasks touch. For each group, define its functional requirements using hierarchical numbering (e.g., FR-DC.1 for Dev Containers group). FRs live under each TG, not at the top level — this keeps each group self-contained for agent dispatch.web/"). For cross-repo dependencies, use blockedBy to order upstream tasks before downstream consumers.ai or human)blockedBy)m{N}-{slug}.plan.md with status: draft) using the template below. This doc is the presentation — approval happens on this doc.When the user asks to plan a specific TG:
planning if still draft./engy:plan to produce a detailed implementation plan.createTaskGroup / createTask.
milestoneRef on every task (e.g., "m3") to link it to the milestone.specId to the spec directory name so the task resolves to the correct spec path.repos array when calling createTaskGroup.needsPlan: false — tasks already have detailed plans from step 2.listTasks and listTaskGroups.complete.Use vertical slices, not horizontal layers. Each task should deliver a thin, end-to-end slice of functionality that touches all necessary layers (database, service, API, UI). A good slice is small but complete — something that can be tested and verified independently.
Bad (horizontal): "Create all database tables" then "Build all API endpoints" then "Add all UI components"
Good (vertical): "User can create a task and see it in a list" then "User can mark a task complete" then "User can filter tasks by status"
Within each vertical slice, order subtasks as:
Each task should be:
/engy:plan pass with the task description + milestone plan context should produce a complete implementation plan. The milestone task defines what and where; the planning pass discovers how.pnpm test, pnpm lint)blockedBy or combined into a single taskWhen reviewing the breakdown, watch for and restructure:
blockedBy for orderingblockedBy, never placed in the same parallel wave. If two tasks both need to add to the same file (e.g., both add routes to a router or message types to a protocol), either combine them into one task or serialize them explicitly via blockedBy.blockedBy A. Pattern-establishing tasks must be identified and serialized before pattern-consuming tasks.Use importance and urgency to classify tasks:
| Urgent | Not Urgent | |
|---|---|---|
| Important | Critical path, blockers | Architecture, quality |
| Not Important | Quick wins, polish | Nice-to-haves, defer |
important + urgentimportant + not_urgentnot_important + urgentnot_important + not_urgent (consider deferring)After the task breakdown is approved and created, produce a m{N}-{slug}.plan.md document at {specPath}/milestones/m{N}-{slug}.plan.md (where specPath is resolved from getProjectDetails). This is the canonical location where /engy:implement and /engy:implement-milestone look for plan docs.
---
title: {Milestone Name}
status: draft
---
# Plan: M{N} {Milestone Name}
## Overview
{1-2 paragraphs: what this milestone delivers and its boundary. End with an explicit "Boundary: no X, no Y, no Z." sentence listing what is NOT included.}
## Codebase Context
{Key existing files, patterns, and components that this milestone builds on. Reference actual paths and describe what each does — this orients the implementer. Include a note on what previous milestones shipped if relevant.}
## Task Group Sequencing
{Dependency graph between TGs. Which TGs can start immediately, which
depend on others, and what specifically they depend on.}
- **TG1: {Name}** — no dependencies. Can start immediately.
- **TG2: {Name}** — depends on TG1 ({what specifically}).
- ...
## TG1: {Task Group Name}
{One paragraph: what this group delivers and why it's sequenced here.}
### Requirements
1. The system shall {concrete, testable behavior}. *(source: user request | inferred | elicited)* (FR-TG1.1)
2. ...
### Tasks
1. **{Task title}**
- Files: `path/to/file.ts` [NEW], `path/to/other.ts` [MODIFY]
- Implements FR-TG1.1, FR-TG1.2
- {Brief description of what to build}
2. **{Task title}** (depends on task 1)
- Files: `path/to/another.ts` [NEW]
- Implements FR-TG1.3
- {Brief description}
**Parallelizable:** Tasks 1, 3 have no dependencies and can run concurrently.
### Completion Summary
{Updated after TG completes — what was actually shipped, key APIs/patterns
created, anything the next TG's agents need to know. Leave blank until done.}
## TG2: {Task Group Name}
{Repeat structure. Can reference TG1's completion summary for context.}
...
## Out of Scope
- {Feature} (deferred to M{X})
- ...
draft → planning → completeFR-TG1.1, FR-TG2.1, etc. — scoped to task group number, deletions in one TG don't affect another(user request), (inferred: reason), or (elicited) — tracks provenancecreateTaskGroup or createTask.Previous: write-spec | Next: plan
When milestones and tasks are created and approved, proceed with /engy:plan to write a detailed implementation plan for the first milestone.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub zanderadam/engy --plugin engy