plugins/github-copilot-modernization/skills/list-plans/SKILL.md
Discovers valid migration plans in the workspace and returns the selected plan path. A valid plan is a subdirectory of .github/modernize/ that contains plan.md AND tasks.json (tasks.json may be in the plan folder or in a .metadata subfolder). Handles 0, 1, or multiple plans and prompts the user when a choice is needed. Triggers: "list plans", "find plans", "select plan", "list-and-select-plan", "discover plans".
npx skillsauth add microsoft/github-copilot-modernization list-plansInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You MUST run this in a terminal — do NOT use file tools (list_dir, file_search, grep_search) to discover plans.
Detect the OS and run the matching script in the terminal. Replace <workspace-root> with the absolute path to the workspace root before running.
Windows (PowerShell) — run in terminal:
Set-Location "<workspace-root>"
$modernizeDir = ".github/modernize"
$plans = @()
if (Test-Path $modernizeDir) {
Get-ChildItem -Path $modernizeDir -Directory | ForEach-Object {
$hasPlan = Test-Path (Join-Path $_.FullName "plan.md")
$hasTasks = (Test-Path (Join-Path $_.FullName "tasks.json")) -or (Test-Path (Join-Path $_.FullName ".metadata/tasks.json"))
if ($hasPlan -and $hasTasks) {
$plans += @{ folder = $_.Name; planPath = "$modernizeDir/$($_.Name)/plan.md" }
}
}
}
$plans | ConvertTo-Json -Depth 2
macOS / Linux (bash) — run in terminal:
cd "<workspace-root>"
modernize_dir=".github/modernize"
entries="[]"
if [ -d "$modernize_dir" ]; then
for folder in "$modernize_dir"/*/; do
[ -d "$folder" ] || continue
name=$(basename "$folder")
if [ -f "$folder/plan.md" ] && ([ -f "$folder/tasks.json" ] || [ -f "$folder/.metadata/tasks.json" ]); then
entry="{\"folder\":\"$name\",\"planPath\":\"$modernize_dir/$name/plan.md\"}"
if [ "$entries" = "[]" ]; then
entries="[$entry]"
else
entries="${entries%]},$entry]"
fi
fi
done
fi
echo "$entries"
Parse the JSON output from the terminal as the list of valid plans for the next step.
Return no-plans-found to the caller. Do not prompt the user.
Return its path immediately — no user prompt needed:
.github/modernize/<folder>/plan.md
.github/modernize/<folder>/plan.md, extract the first heading, strip the leading # and any prefix of the form <Word> Plan: (e.g. Modernization Plan: , Migration Plan: ), and use the remainder as the title.Searched for plan.md and tasks.json files... There are multiple plans in this repository.header: plan-selectionquestion: Which plan would you like to execute?allowFreeformInput: falseoptions: one entry per plan — label = folder name, description = plan title from step 1Return the selected plan path to the caller:
.github/modernize/<selected-folder>/plan.md
development
Scan dependency manifests against known CVEs and remediate by upgrading vulnerable dependencies to patched versions, then rebuild and re-scan to confirm. Self-contained scan→fix→verify loop for any project with a dependency manifest. Use when: a cve-remediation task is dispatched; dependency set changed (version bump, new framework); assessment flagged vulnerable or EOL dependencies; or user asked to "fix CVEs", "patch vulnerabilities", or "dependency security". Triggers: "cve", "remediate cve", "fix cves", "patch vulnerable dependencies", "vulnerability scanning", "dependency security", "vulnerable dependencies", "security advisories", "npm audit", "pnpm audit", "maven audit", "gradle audit", "dependency scan", "vulnerability remediation". NOT for: security audit of auth/input/secrets/OWASP code paths (use security-review).
development
Generate dependency map diagram from project build files
documentation
Generate data architecture and persistence layer documentation with data model diagram
documentation
Generate core business workflow documentation with sequence diagram