microsoft/plan-generation
How to create plans, scenario-instructions, and progress documents
npx skills add https://github.com/microsoft/upgrade-agent-plugins --skill plan-generation
Instructions for creating planning artifacts after assessment is approved.
> This skill covers 5 sections. Read all before starting work.
>
> | # | Section | Key Content |
> |---|---------|-------------|
> | 1 | Planning Flow | Sequence from assessment approval to user review |
> | 2 | Reading Assessment Data | How to handle large assessments |
> | 3 | plan.md Specification | Template, task description guidelines, naming, sizing |
> | 4 | scenario-instructions.md Specification | Template, preferences format, append-only decisions |
> | 5 | tasks.md Specification + Presenting Plan | Template, status emojis, approval triggers |
Assessment approved
↓
Load scenario planning instructions (if available)
↓
Extract key information from assessment.md
↓
Apply scenario-specific planning logic
↓
Create plan.md with tasks
↓
Create/update scenario-instructions.md
↓
Initialize tasks.md
↓
Present summary, wait for approval
Important: Scenario skills may have planning-stage instructions. Load and follow them in combination with these generic instructions. Scenario instructions define what to plan (e.g., strategy selection, task ordering rules). This skill defines how to write the artifacts.
assessment.md can be large (sometimes too large for context). Check scenario planning instructions (if present) for how to read assessment data:
assessment.md directly| Document | Purpose | Who Reads |
|----------|---------|-----------|
| plan.md | Task descriptions, scope | User (review), Executor (task lookup) |
| scenario-instructions.md | Strategy, preferences, decisions | Executor (ongoing reference) |
| tasks.md | Visual progress tracking | User (status), Executor (overview) |
Reference document containing task descriptions. Created during planning, queried on-demand during execution. Executor loads relevant sections when starting tasks.
<plan-template>
Target: {what's being modernized}
Scope: {qualitative size — e.g., "3 projects, ~2k LOC" or "large solution, 45 projects"}
{Description of what needs to happen and why. Intent-based, 1-3 paragraphs.}
{Optional: affected items, key concerns — only when helpful}
Done when: {concrete, verifiable success criteria — what must be true when this task is complete}
...
</plan-template>
plan.md must contain only the sections shown in the template above: ## Overview and ## Tasks. Do not add extra top-level sections. Common sections LLMs add that do not belong in plan.md:
| Section | Why it's excluded |
|---------|-------------------|
| Rollback Plan / Rollback Instructions | Users know how to use git (git reset, git revert). Not actionable. |
| Estimated Timeline / Time Estimates | LLMs cannot accurately estimate duration. Misleading. |
| Risk Matrix / Risk Assessment | Already in assessment.md — don't duplicate. |
| Prerequisites / Assumptions | Belongs in scenario-instructions.md or assessment.md. |
| Dependencies / Dependency Graph | Already in assessment.md — don't duplicate. |
| Notes / Additional Considerations | Catch-all that accumulates noise. Put concerns in relevant tasks. |
If a scenario strategy file adds sections to plan.md (e.g., a strategy declaration block), those are allowed — they come from the strategy, not from LLM improvisation.
Include:
Omit:
Use plain descriptors when characterizing scope, never numeric scores:
| Do | Don't |
|----|-------|
| "small project, minimal dependencies" | "complexity: 3/10" |
| "large solution with heavy inter-project refs" | "estimated effort: 8/10" |
| "straightforward — no breaking changes expected" | "risk score: low (2/5)" |
Task IDs must follow the canonical format NN-slug — a two-digit, zero-padded sequence
number, a hyphen, then a lowercase kebab-case slug (letters, digits, hyphens). Sub-tasks use a
dotted sequence: NN.NN-slug.
| Valid | Invalid | Why invalid |
|-------|---------|-------------|
| 01-upgrade-htmlsanitizer | T-01 | No letter prefix — sequence must be digits |
| 02-core-contracts | 1-core | Sequence must be two digits (01, not 1) |
| 02.01-data-access | 02_data_access | Use hyphens, not underscores |
| 03-web-apps | Task3 | Must be NN-slug |
The state tools (start_task / complete_task) parse this format. IDs that don't match (e.g.
T-01) are silently ignored and task tracking breaks — always emit NN-slug ids.
Task IDs must describe what is being done, not the strategy slot or structural position. A user reading just the task list should understand the work without knowing the strategy.
Never use strategy jargon as task names — words like tier, phase, batch, layer, group, step, or stage describe the *plan structure*, not the *work content*. Use the actual content being upgraded.
| Avoid | Prefer | Why |
|-------|--------|-----|
| 02-tier1 | 02-foundation-libs | Names the projects, not the tier |
| 03-tier2 | 03-business-logic | Describes what's in the tier |
| 04-tier3 | 04-web-apps | Reader knows what gets upgraded |
| phase-1-batch-a | 02-data-access | Describes the concern |
| dependency-layer-0 | 02-core-contracts | Names the actual libraries |
| task-batch-final | 06-integration-validation | Describes the validation scope |
| group-a | 03-legacy-services | Names the group's content |
Guideline: If you removed the sequence number, would the name still tell you what work happens? tier1 → no. foundation-libs → yes.
Include when helpful, omit when not:
# Few items - list them
Affects UserService, OrderService, PaymentService.
# Pattern-based
Affects all repositories in src/services/.
# Too many
~25 components. Query assessment for full list.
*Continue reading — Sections 4-5 cover scenario-instructions.md and tasks.md specifications.*
Living document for user preferences and key decisions. Always in context when workflow is active. User can edit to influence behavior. Keep it minimal — no information that belongs in plan.md or assessment.md.
<scenario-instructions-template>
{chosen approach — one line}
<!-- Task-specific overrides: "For {taskId}: {instruction}" -->
</scenario-instructions-template>
## Source Control: it is written at initialization and owned by pre-init andbranch-sync. When updating this file, preserve every field in that section verbatim —
dropping Source Branch, Source Type, Source Commit, or Branch Sync breaks syncing.
Always write a Commit Strategy value when creating scenario-instructions.md. Use this priority order:
This ensures every scenario has a visible, editable commit strategy — even scenarios that don't mention commits at all.
*Continue reading — Section 5 covers tasks.md template and how to present the plan for approval.*
Visual progress document for user consumption. During execution, task status is written by the workflow tools (start_task/complete_task) — don't hand-edit this file to mark a task complete.
Follow the tasks_template template below, replacing placeholders with actual data, never add new sections or content outside of the specified in the template.
<tasks_template>
[Brief description of the upgrade - 2-3 sentences maximum describing what is being upgraded and the approach being used.]
Progress: 0/X tasks complete <progress value="0" max="100"></progress> 0%
...
</tasks_template>
| Status | Emoji |
|--------|-------|
| completed | ✅ |
| in-progress | 🔄 |
| pending (not started) | 🔲 |
| blocked/failed | ❌ |
After creating all documents:
plan.md and tasks.md in the editor (regardless of flow mode) so the user can see them. Follow this fallback chain: first search your available tools for one that opens files in the IDE; if none exists, include the full file paths in your response. Never launch external programs via the terminal.commit at the end or I'll commit myself to change."Recognize the approve intent — user may say "approve", "looks good", "lgtm", "let's do it", "go ahead", "start", or similar. Match meaning, not literal keywords.
DO NOT proceed to execution until user approves.
commit at the end or I'll commit myself to change."pause to review first."pause if needed.Take microsoft/plan-generation from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.