<< All versions

Skill v1.0.0

currentTrusted Publisher100/100
microsoft/github-copilot-for-azure/prepare
──Details
PublishedOctober 4, 2026 at 01:19 PM
Content Hashsha256:a7cb3b8bbe0a8e02...
Git SHA
──Files
Files (1 file, 6.5 KB)
SKILL.md6.5 KBactive
SKILL.md · 79 lines · 6.5 KB

version: "1.0.0"


Prepare — Architecture Planning & Cost Estimation

Quick Reference

PropertyValue
Best forMapping app components to Azure services with cost estimation and quota validation
Inputsprereq-output.json + context.json from .copilot-azure/sessions/{id}/
Outputsprepare-plan.json written to session directory
Parentazure-app-onboard

When to Use This Skill

Invoked by the azure-app-onboard orchestrator at Phase 2 when prereq-output.json exists. Not directly user-routable.

Return to orchestrator: When complete, return control to azure-app-onboard. Do NOT directly invoke scaffold or deploy.

When NOT to Use

ScenarioUse Instead
Code readiness or prereq scanningazure-app-onboard Step 3 (prereq)
IaC generation from a completed planazure-app-onboard Step 7 (scaffold)
Deploying resources to Azureazure-app-onboard Step 9 (deploy)
Optimizing existing Azure spendcost-optimization from the optional azure-cost plugin
Estimating VM-specific costsazure-compute
Enterprise landing zone architectureazure-enterprise-infra-planner

If cost-optimization is unavailable, explain that it is provided by the optional azure-cost plugin and direct the user to their client's supported plugin installation flow; do not imply the handoff completed.

MCP Tools

ToolPurpose
mcp_azure_mcp_pricing / azure-pricing (router → command: pricing_get)Cost estimation (inline — see Step 6). Fallback: dispatch `subagent-pricing.md`
mcp_azure_mcp_policySubscription policy constraints
az restQuota validation (via sub-agent — see Step 5)
mcp_azure_mcp_cloudarchitect → cloudarchitect_designWAF-aligned architecture design
mcp_azure_mcp_wellarchitectedframeworkPer-service WAF guidance
mcp_azure_mcp_advisor → advisor_recommendation_listOptimization recommendations

Workflow

#StepActionReference
1Read session stateLoad prereq-output.json + context.json. Resolve subscriptionCross-ref subscription-resolution.md if needed
2Query policy constraintsInline MCP: fetch policy + advisor recommendationsmcp_azure_mcp_policy + mcp_azure_mcp_advisor
3Map components to servicesPer-component Azure service selection, Dockerfile routing, deploy-as-is⛔ You MUST read [service-mapping.md](references/service-mapping.md) and [deploy-strategy.md](references/deploy-strategy.md)
4Select SKUs + WAF analysisBudget-aware SKU selection, inline WAF service guidance⛔ You MUST read [sku-matrix.md](references/sku-matrix.md)
5Validate quotas + region capacity⛔ Read `subagent-quota.md` → dispatch as task (NEXT action MUST be task, ⛔ agent_type: "task" — NEVER "general-purpose"). Copy the COMPLETE and UNMODIFIED template text into the task prompt between <<<TEMPLATE_START>>> / <<<TEMPLATE_END>>> delimiters — do NOT summarize. Append the caller-provided inputs listed in `subagent-quota.md`'s Input table AFTER the template block. ⛔ After dispatching, proceed to Step 6 (cost estimation) while the subagent runs. Do NOT run quota checks yourself — the subagent handles it. Collect subagent results before Step 9 (write plan).⛔ You MUST read [`subagent-quota.md`](references/subagent-quota.md)
6Estimate costs⛔ You MUST read [pricing-guide.md](references/pricing-guide.md) for methodology, then pricing-guide-services.md for per-service filters. Call the pricing router (mcp_azure_mcp_pricing/azure-pricing) with command: "pricing_get" + a parameters{} object inline per paid service. If MCP unavailable or fails → ⛔ Read `subagent-pricing.md` → dispatch as task (NEXT action MUST be task, ⛔ agent_type: "task" — NEVER "general-purpose"). Copy the COMPLETE and UNMODIFIED template text into the task prompt between <<<TEMPLATE_START>>> / <<<TEMPLATE_END>>> delimiters — do NOT summarize. Append data (services[], region, budget tier) AFTER the template block. Write results to prepare-plan.json.costEstimate.pricing-guide.md
7Generate namingCentralized naming: suffix, prefix, all resource names⛔ You MUST read [naming-patterns.md](references/naming-patterns.md)
8Determine IaC formatExisting non-Azure .tf → ask_user Bicep vs TF, write to overrides[].iacFormat. No .tf → default Bicep.(inline)
9Write prepare-plan.jsonPer PreparePlan schema. Include postDeployRecommendations, deploymentVariables⛔ You MUST read [prepare-schemas.ts](references/prepare-schemas.ts) for PreparePlan schema
10Return summaryStructured summary for orchestrator approval gate(inline — 1 line)
11Validate plan4-dimension check: Goal Alignment, WAF Alignment, Dependency Completeness, Deployment Viability. Fix inline on failure, document tradeoffs in assumptions[].All must pass before writing

Step 5 — Post-Quota Validation

⛔ NEVER present a region without checking quota first. Skipping quota validation causes cascading deploy failures and extended healing loops.
⛔ If plan includes PostgreSQL/MySQL, verify offerRestrictionsVerified: true — if false/missing, region is blocked. Do NOT proceed to scaffold with unchecked DB services.
⛔ Free ≠ unlimited. Every compute SKU — including F1, Consumption, and Serverless tiers — has a per-subscription, per-region quota. Do NOT skip quota checks because a SKU is free.
⛔ After region fallback, update ALL services[].region in prepare-plan.json. Do not leave stale values.

Error Handling

ErrorRemediation
Pricing API 400Verify --sku included. Free tiers: skip API
MCP pricing unavailableDispatch `subagent-pricing.md` as task fallback (uses direct HTTP to prices.azure.com)
Prereq output missingTrigger prereq backfill
Quota check failsFall back to best-effort estimate + disclaimer
Override conflictsRe-run from Step 3 with new constraints
All versions