Azure Architecture Autopilot
GitHubOfficialFirst committed by whoniiiiDistributed by GitHub
- Skill
- Workflow
- Cloud and DevOps
- MIT
- Low risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Azure Architecture Autopilot is a multi-phase agentic workflow designed to assist users in creating or modifying Azure infrastructure. It guides users through an interactive design process, generates architecture diagrams using an embedded engine, produces Bicep templates, and manages the deployment lifecycle. The skill integrates with Azure services and utilizes official Microsoft documentation to ensure configurations align with current service specifications.
What it does
- Designs new Azure infrastructure based on natural language requirements.
- Analyzes existing Azure resources to generate visual architecture diagrams.
- Refines infrastructure designs through interactive conversation.
- Generates and reviews Bicep templates for infrastructure as code.
- Executes deployment workflows including validation and what-if analysis.
- Detects user language to provide localized support and documentation.
When to use it
- When you need to design a new Azure environment or RAG architecture.
- When you want to visualize your current Azure resource configuration.
- When you need to generate or update Bicep templates for Azure deployments.
- When you require guidance on modifying existing Azure infrastructure to meet new requirements.
Advantages
- Automated diagram generation using an embedded engine with official Azure icons.
- Structured multi-phase workflow ensuring design confirmation before deployment.
- Integration with Microsoft documentation for dynamic service property lookups.
- Supports natural language interaction for complex infrastructure tasks.
- Includes built-in safety checks like what-if analysis prior to deployment.
Usage examples
- “Create a RAG architecture on Azure.”
- The agent will initiate the design phase, suggest a baseline architecture, generate a diagram, and guide you through the Bicep generation and deployment process.
- “Analyze my current Azure infrastructure and draw a diagram.”
- The agent will scan your existing resources, infer relationships, and produce an interactive HTML diagram of your current setup.
- “I want to strengthen security for my existing Azure resources.”
- The agent will analyze your current configuration and propose modifications to your infrastructure design to align with security patterns.
Install
1 of its files are not mirrored here, so install it from its source:
https://github.com/github/awesome-copilot/tree/797337f33f73e35d08d82f840e21c4b8c4932d88/skills/azure-architecture-autopilot
Documentation by whoniiii
Azure Architecture Builder
A pipeline that designs Azure infrastructure using natural language, or analyzes existing resources to visualize architecture and proceed through modification and deployment.
The diagram engine is embedded within the skill (scripts/ folder).
No pip install needed — it directly uses the bundled Python scripts
to generate interactive HTML diagrams with 605+ official Azure icons.
Ready to use immediately without network access or package installation.
Automatic User Language Detection
🚨 Detect the language of the user's first message and provide all subsequent responses in that language. This is the highest-priority principle.
If the user writes in Korean → respond in Korean
If the user writes in English → respond in English (ask_user, progress updates, reports, Bicep comments — all in English)
The instructions and examples in this document are written in English, and all user-facing output must match the user's language
⚠️ Do not copy examples from this document verbatim to the user. Use only the structure as reference, and adapt text to the user's language.
Tool Usage Guide (GHCP Environment)
| Feature | Tool Name | Notes |
|---|---|---|
| Fetch URL content | web_fetch | For MS Docs lookups, etc. |
| Web search | web_search | URL discovery |
| Ask user | ask_user | choices must be a string array |
| Sub-agents | task | explore/task/general-purpose |
| Shell command execution | powershell | Windows PowerShell |
All sub-agents (explore/task/general-purpose) cannot use
web_fetchorweb_search. Fact-checking that requires MS Docs lookups must be performed directly by the main agent.
External Tool Path Discovery
az, python, bicep, etc. are often not on PATH.
Discover once before starting a Phase and cache the result. Do not re-discover every time.
⚠️ Do not use
Get-Command python— risk of Windows Store alias. Direct filesystem discovery ($env:LOCALAPPDATA\Programs\Python) takes priority.
az CLI path:
$azCmd = $null
if (Get-Command az -ErrorAction SilentlyContinue) { $azCmd = 'az' }
if (-not $azCmd) {
$azExe = Get-ChildItem -Path "$env:ProgramFiles\Microsoft SDKs\Azure\CLI2\wbin", "$env:LOCALAPPDATA\Programs\Azure CLI\wbin" -Filter "az.cmd" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
if ($azExe) { $azCmd = $azExe }
}Python path + embedded diagram engine: refer to the diagram generation section in references/phase1-advisor.md.
Progress Updates Required
Use blockquote + emoji + bold format:
> **⏳ [Action]** — [Reason]
> **✅ [Complete]** — [Result]
> **⚠️ [Warning]** — [Details]
> **❌ [Failed]** — [Cause]Parallel Preload Principle
While waiting for user input via ask_user, preload information needed for the next step in parallel.
| ask_user Question | Preload Simultaneously |
|---|---|
| Project name / scan scope | Reference files, MS Docs, Python path discovery, diagram module path verification |
| Model/SKU selection | MS Docs for next question choices |
| Architecture confirmation | az account show/list, az group list |
| Subscription selection | az group list |
Path Branching — Automatically Determined by User Request
Path A: New Design (New Build)
Trigger: "create", "set up", "deploy", "build", etc.
Phase 1 (references/phase1-advisor.md) — Interactive architecture design + diagram
↓
Phase 2 (references/bicep-generator.md) — Bicep code generation
↓
Phase 3 (references/bicep-reviewer.md) — Code review + compilation verification
↓
Phase 4 (references/phase4-deployer.md) — validate → what-if → deployPath B: Existing Analysis + Modification (Analyze & Modify)
Trigger: "analyze", "current resources", "scan", "draw a diagram", "show my infrastructure", etc.
Phase 0 (references/phase0-scanner.md) — Existing resource scan + diagram
↓
Modification conversation — "What would you like to change here?" (natural language modification request → follow-up questions)
↓
Phase 1 (references/phase1-advisor.md) — Confirm modifications + update diagram
↓
Phase 2~4 — Same as aboveWhen Path Determination Is Ambiguous
Ask the user directly:
ask_user({
question: "What would you like to do?",
choices: [
"Design a new Azure architecture (Recommended)",
"Analyze + modify existing Azure resources"
]
})Phase Transition Rules
Each Phase reads and follows the instructions in its corresponding
references/*.mdfileWhen transitioning between Phases, always inform the user about the next step
Do not skip Phases (especially the what-if between Phase 3 → Phase 4)
🚨 Required condition for Phase 1 → Phase 2 transition:
01_arch_diagram_draft.htmlmust have been generated using the embedded diagram engine and shown to the user. Do not proceed to Bicep generation without a diagram. Completing spec collection alone does not mean Phase 1 is done — Phase 1 includes diagram generation + user confirmation.Modification request after deployment → return to Phase 1, not Phase 0 (Delta Confirmation Rule)
Service Coverage & Fallback
Optimized Services
Microsoft Foundry, Azure OpenAI, AI Search, ADLS Gen2, Key Vault, Microsoft Fabric, Azure Data Factory, VNet/Private Endpoint, AML/AI Hub
Other Azure Services
All supported — MS Docs are automatically consulted to generate at the same quality standard. Do not send messages that cause user anxiety such as "out of scope" or "best-effort".
Stable vs Dynamic Information Handling
| Category | Handling Method | Examples |
|---|---|---|
| Stable | Reference files first | isHnsEnabled: true, PE triple set |
| Dynamic | Always fetch MS Docs | API version, model availability, SKU, region |
Quick Reference
| File | Role |
|---|---|
references/phase0-scanner.md | Existing resource scan + relationship inference + diagram |
references/phase1-advisor.md | Interactive architecture design + fact checking |
references/bicep-generator.md | Bicep code generation rules |
references/bicep-reviewer.md | Code review checklist |
references/phase4-deployer.md | validate → what-if → deploy |
references/service-gotchas.md | Required properties, PE mappings |
references/azure-dynamic-sources.md | MS Docs URL registry |
references/azure-common-patterns.md | PE/security/naming patterns |
references/ai-data.md | AI/Data service guide |
assets/06-architecture-diagram.png | Example generated architecture diagram |
assets/07-azure-portal-resources.png | Example Azure portal resource view |
assets/08-deployment-succeeded.png | Example successful deployment result |
Files
- .gitignore508 B
- ATTRIBUTION.mdAdded by AutoGineer889 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md7.5 KiB
- assets/06-architecture-diagram.png326.8 KiB
- assets/07-azure-portal-resources.png171.4 KiB
- assets/08-deployment-succeeded.png41.0 KiB
- references/ai-data.md7.1 KiB
- references/architecture-guidance-sources.md6.9 KiB
- references/azure-common-patterns.md4.2 KiB
- references/azure-dynamic-sources.md4.7 KiB
- references/bicep-generator.md19.9 KiB
- references/bicep-reviewer.md7.1 KiB
- references/phase0-scanner.md24.9 KiB
- references/phase1-advisor.md46.9 KiB
- references/phase4-deployer.md11.7 KiB
- references/service-gotchas.md6.4 KiB
- scripts/cli.pyScript5.7 KiB
- scripts/generator.pyScript137.2 KiB
- scripts/icons.py(opens on GitHub)Not mirrored: opens on GitHub2.0 MiB
references/bicep-generator.md
Bicep Generator Agent
Receives the finalized architecture spec from Phase 1 and generates deployable Bicep templates.
Step 0: Verify Latest Specs (Required Before Bicep Generation)
Do not hardcode API versions in Bicep code. Always fetch the MS Docs Bicep reference for the services you intend to use and confirm the latest stable apiVersion before using it.
Verification Steps
Identify the list of services to be used
Fetch the MS Docs URL for each service (using the web_fetch tool)
Confirm the latest stable API version from the page
Write Bicep using that version
Model Deployment Availability Check (Required When Using Foundry/OpenAI Models)
Verify that the model name specified by the user is actually deployable in the target region before generating Bicep. Model availability varies by region and changes frequently — do not rely on static knowledge.
Verification Methods (in priority order):
Check the MS Docs model availability page: https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models
Or query directly via Azure CLI:
az cognitiveservices account list-models --name "<FOUNDRY_NAME>" --resource-group "<RG_NAME>" -o table(When the Foundry resource already exists)
If the model is not available in the target region:
Inform the user and suggest available regions or alternative models
Do not substitute a different model or region without user approval
Per-Service MS Docs URLs
The full URL registry is in references/azure-dynamic-sources.md. Refer to this file when fetching.
Reference files are located under the .github/skills/azure-architecture-autopilot/ path.
Important: Fetch directly from the URL using web_fetch to confirm the latest stable apiVersion. Do not blindly use hardcoded versions from reference files or previous conversations.
Always verify child resources too: Check the API versions for child resources (accounts/projects, accounts/deployments, privateDnsZones/virtualNetworkLinks, privateEndpoints/privateDnsZoneGroups, etc.) from the parent resource page. Parent and child API versions may differ.
Same principle applies when errors/warnings occur: If an API version–related error occurs during what-if or deployment, do not trust the version in the error message as the "latest version" and apply it directly. Always re-fetch the MS Docs URL to confirm the actual latest stable version before making corrections.
Information Reference Principles (Stable vs Dynamic)
Always Fetch (Dynamic)
API version → Fetch from URLs in
azure-dynamic-sources.mdModel availability (name, version, region) → Fetch
SKU list/pricing → Fetch
Region availability → Fetch
Reference First (Stable)
Required property patterns (
isHnsEnabled,allowProjectManagement, etc.) →service-gotchas.mdPE groupId & DNS Zone mappings (major services) →
service-gotchas.mdPE/security/naming common patterns →
azure-common-patterns.mdAI/Data service configuration guide →
ai-data.md
If unsure about stable information, re-verify with MS Docs. But there is no need to fetch every time.
Unknown Service Fallback Workflow
When the user requests a service not covered by the v1 scope (ai-data.md):
Notify the user: "This service is outside the v1 default scope. It will be generated on a best-effort basis by referencing MS Docs."
Fetch API version: Construct the URL in the format
https://learn.microsoft.com/en-us/azure/templates/microsoft.{provider}/{resourceType}and fetchIdentify resource type/required properties: Confirm the resource type and required properties from the fetched Docs
Verify PE mapping: Fetch
https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-dnsto confirm groupId/DNS ZoneApply common patterns: Apply security/network/naming patterns from
azure-common-patterns.mdWrite Bicep: Generate the module based on the above information
Hand off to reviewer: Validate compilation with
az bicep build
Input Information
The following information must be finalized upon completion of Phase 1:
- services: [Service list + SKU]
- networking: Whether private_endpoint is used
- resource_group: Resource group name
- location: Deployment location (confirmed with user in Phase 1)
- subscription_id: Azure subscription IDOutput File Structure
<project-name>/
├── main.bicep # Main orchestration — module calls and parameter passing
├── main.bicepparam # Parameter file — environment-specific values, excluding sensitive info
└── modules/
├── network.bicep # VNet, Subnet (including pe-subnet)
├── ai.bicep # AI services (configured per user requirements)
├── storage.bicep # ADLS Gen2 (isHnsEnabled: true required)
├── fabric.bicep # Microsoft Fabric Capacity (only when needed)
├── keyvault.bicep # Key Vault
├── monitoring.bicep # Application Insights, Log Analytics (only needed for Hub-based configurations)
└── private-endpoints.bicep # All PEs + Private DNS Zones + VNet Links + DNS Zone GroupsModule Responsibilities
network.bicep
VNet — CIDR received as a parameter (to avoid conflicts with existing address spaces in the customer environment)
pe-subnet —
privateEndpointNetworkPolicies: 'Disabled'requiredAdditional subnets handled via parameters as needed
ai.bicep
Microsoft Foundry resource (
Microsoft.CognitiveServices/accounts,kind: 'AIServices') — Top-level AI resourcecustomSubDomainName: foundryNamerequired — Cannot be changed after creation. If omitted, the resource must be deleted and recreatedidentity: { type: 'SystemAssigned' }requiredallowProjectManagement: truerequiredModel deployment (
Microsoft.CognitiveServices/accounts/deployments) — Performed at the Foundry resource level
⚠️ Foundry Project (
Microsoft.CognitiveServices/accounts/projects) — Must be created as a child resourceResource type:
Microsoft.CognitiveServices/accounts/projects(never create as a standaloneaccountsresource)Use
parent: foundryAccountin BicepIncorrect example: Creating a Project as a separate
kind: 'AIServices'account → Not recognized in the portalCorrect example:
resource foundryProject 'Microsoft.CognitiveServices/accounts/projects@<apiVersion>' = { parent: foundryAccount name: 'project-${uniqueString(resourceGroup().id)}' location: location kind: 'AIServices' properties: {} }
Azure AI Search — Semantic Ranking, vector search configuration
Hub-based (
Microsoft.MachineLearningServices/workspaces) should only be considered when the user explicitly requests it or when ML training/open-source models are needed. For standard AI/RAG workloads, Foundry (AIServices) is the default choice
⛔ CognitiveServices Prohibited Properties:
apiProperties.statisticsEnabled— This property does not exist. Never use it. CausesApiPropertiesInvaliderror during deploymentapiProperties.qnaAzureSearchEndpointId— QnA Maker only. Do not use with FoundryDo not arbitrarily add unvalidated properties to
properties.apiProperties
storage.bicep
ADLS Gen2:
isHnsEnabled: true← Never omit thisContainers: raw, processed, curated (or as per requirements)
allowBlobPublicAccess: false,minimumTlsVersion: 'TLS1_2'
keyvault.bicep
enableRbacAuthorization: true(do not use access policy model)enableSoftDelete: true,softDeleteRetentionInDays: 90enablePurgeProtection: true
monitoring.bicep
Log Analytics Workspace
Application Insights (only needed for Hub-based configurations — not required for Foundry AIServices)
private-endpoints.bicep
3-piece set for each service:
Microsoft.Network/privateEndpoints(placed in pe-subnet)Microsoft.Network/privateDnsZones+ VNet Link (registrationEnabled: false)Microsoft.Network/privateEndpoints/privateDnsZoneGroups
For per-service DNS Zone mappings, refer to
references/service-gotchas.md
⚠️ Foundry/AIServices PE DNS Rules:
PE groupId:
accountDNS Zone Group must include 2 zones:
privatelink.cognitiveservices.azure.comprivatelink.openai.azure.com
Including only one causes DNS resolution failure for OpenAI API calls → connection error
⚠️ ADLS Gen2 (isHnsEnabled: true) PE Rules:
2 PEs required:
blob→privatelink.blob.core.windows.netdfs→privatelink.dfs.core.windows.net
Without the DFS PE, Data Lake operations (file system creation, directory manipulation) will fail
rbac.bicep (or inline in main.bicep)
⚠️ RBAC Role Assignment — Never Omit
Any service with a Managed Identity (identity.type: 'SystemAssigned') must have RBAC role assignments created.
Having an identity without role assignments causes inter-service authentication failures.
This is not optional — it is a mandatory item.
Omission will be reported as CRITICAL in Phase 3 review.
Required RBAC mappings:
| Source Service | Target Service | Role | Role Definition ID |
|---|---|---|---|
| Foundry | Storage | Storage Blob Data Contributor | ba92f5b4-2d11-453d-a403-e96b0029c9fe |
| Foundry | AI Search | Search Index Data Contributor | 8ebe5a00-799e-43f5-93ac-243d3dce84a7 |
| Foundry | AI Search | Search Service Contributor | 7ca78c08-252a-4471-8644-bb5ff32d4ba0 |
| App Service | Key Vault | Key Vault Secrets User | 4633458b-17de-408a-b874-0445c86b69e6 |
| AKS (kubeletIdentity) | ACR | AcrPull | 7f951dda-4ed3-4680-a7ca-43fe172d538d |
| Data Factory | Storage | Storage Blob Data Contributor | ba92f5b4-2d11-453d-a403-e96b0029c9fe |
| Data Factory | Key Vault | Key Vault Secrets User | 4633458b-17de-408a-b874-0445c86b69e6 |
| Databricks | Storage | Storage Blob Data Contributor | ba92f5b4-2d11-453d-a403-e96b0029c9fe |
AKS Special Rule: AKS uses
identityProfile.kubeletidentity.objectId, notidentity.principalId.
// RBAC Example — Foundry → Storage Blob Data Contributor
resource foundryStorageRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(storageAccount.id, foundry.id, 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')
scope: storageAccount
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')
principalId: foundry.identity.principalId
principalType: 'ServicePrincipal'
}
}SQL Server Rules
Password management: Declare
@secure() param sqlAdminPassword stringin main.bicep and pass it to modulesDo not generate with
newGuid()inside modules — the password changes on redeploymentStore as a Key Vault Secret so it can be retrieved after deployment
Authentication method: Default to
administrators.azureADOnlyAuthentication: trueMany organizational policies (MCAPS, etc.) block standalone SQL authentication
AAD-only authentication + Managed Identity is the most secure configuration
Network Secret Handling
VPN Gateway shared key:
@secure() param vpnSharedKey string—@secure()is mandatoryNever include plaintext VPN keys in
.bicepparam— provide at deployment time or use Key Vault referenceThis rule applies the same as for SQL passwords
Applies to: VPN shared key, ExpressRoute authorization key, Wi-Fi PSK, and all other network secrets
Module params must also include the
@secure()decorator
⚠️ Network Isolation Consistency Rules
When setting
publicNetworkAccess: 'Disabled', you must also create the corresponding PE for that serviceSetting publicNetworkAccess to Disabled without a PE makes the service unreachable → unusable after deployment
The Phase 3 reviewer must report this inconsistency as CRITICAL
When an inconsistency is found: either add a PE module or revert publicNetworkAccess to Enabled
Mandatory Coding Principles
Naming Conventions
// Use uniqueString to prevent naming collisions — always required
param foundryName string = 'foundry-${uniqueString(resourceGroup().id)}'
param searchName string = 'srch-${uniqueString(resourceGroup().id)}'
param storageName string = 'st${uniqueString(resourceGroup().id)}' // No special characters allowed
param keyVaultName string = 'kv-${uniqueString(resourceGroup().id)}'⚠️ Resources requiring
customSubDomainName(Foundry, Cognitive Services, etc.) must includeuniqueString(). Static strings (e.g.,'my-rag-chatbot') may already be in use by another tenant, causing deployment failures. The same applies to Foundry Project names —'project-${uniqueString(resourceGroup().id)}'
Network Isolation
// Required for all services when using Private Endpoints
publicNetworkAccess: 'Disabled'
networkAcls: {
defaultAction: 'Deny'
ipRules: []
virtualNetworkRules: []
}Dependency Management
// Use implicit dependencies via resource references instead of explicit dependsOn
resource aiProject '...' = {
properties: {
hubResourceId: aiHub.id // Reference to aiHub → aiHub is automatically deployed first
}
}Security
// Use Key Vault references for sensitive values — never store plaintext in parameter files
@secure()
param adminPassword string // Do not put plaintext values in main.bicepparamCode Comments
// Microsoft Foundry resource — kind: 'AIServices'
// customSubDomainName: Required, globally unique. Cannot be changed after creation — if omitted, resource must be deleted and recreated
// allowProjectManagement: true is required or Foundry Project creation will fail
// Replace apiVersion with the latest version fetched in Step 0
resource foundry 'Microsoft.CognitiveServices/accounts@<version fetched in Step 0>' = {
kind: 'AIServices'
properties: {
customSubDomainName: foundryName
allowProjectManagement: true
...
}
}⚠️ Bicep Code Quality Validation (Required After Generation)
Module Declaration Validation:
Verify that the
name:property in each module block is not duplicatedCorrect example:
name: 'deploy-sql'Incorrect example:
name: 'name: 'deploy-sql'(duplicated name: → compilation error)
Duplicate Property Prevention:
If the same property name appears more than once within a single resource block, it causes a compilation error
Especially common in complex resources like VPN Gateway (
gatewayType), Firewall, AKS, etc.Check for
BCP025: The property "xxx" is declared multiple timesin theaz bicep buildoutput
az bicep build Must Be Run:
After generating all Bicep files, always run
az bicep build --file main.bicepFix errors and recompile
Warnings (BCP081, etc.) can be ignored after verifying the API version in MS Docs
main.bicep Base Structure
// ============================================================
// Azure [Project Name] Infrastructure — main.bicep
// Generated: [Date]
// ============================================================
targetScope = 'resourceGroup'
// ── Common Parameters ─────────────────────────────────────
param location string // Location confirmed in Phase 1 — do not hardcode
param projectPrefix string
param vnetAddressPrefix string // ← Confirm with user. Prevent conflicts with existing networks
param peSubnetPrefix string // ← PE-dedicated subnet CIDR within the VNet
// ── Network ───────────────────────────────────────────────
module network './modules/network.bicep' = {
name: 'deploy-network'
params: {
location: location
vnetAddressPrefix: vnetAddressPrefix
peSubnetPrefix: peSubnetPrefix
}
}
// ── AI/Data Services ──────────────────────────────────────
module ai './modules/ai.bicep' = {
name: 'deploy-ai'
params: {
location: location
// Add separate params if regions differ per service — verify available regions in MS Docs
}
dependsOn: [network]
}
// ── Storage ───────────────────────────────────────────────
module storage './modules/storage.bicep' = {
name: 'deploy-storage'
params: {
location: location
}
}
// ── Key Vault ─────────────────────────────────────────────
module keyVault './modules/keyvault.bicep' = {
name: 'deploy-keyvault'
params: {
location: location
}
}
// ── Private Endpoints (All Services) ──────────────────────
module privateEndpoints './modules/private-endpoints.bicep' = {
name: 'deploy-private-endpoints'
params: {
location: location
vnetId: network.outputs.vnetId
peSubnetId: network.outputs.peSubnetId
foundryId: ai.outputs.foundryId
searchId: ai.outputs.searchId
storageId: storage.outputs.storageId
keyVaultId: keyVault.outputs.keyVaultId
}
}
// ── Outputs ───────────────────────────────────────────────
output vnetId string = network.outputs.vnetId
output foundryEndpoint string = ai.outputs.foundryEndpoint
output searchEndpoint string = ai.outputs.searchEndpointmain.bicepparam Base Structure
using './main.bicep'
param location = '<Location confirmed in Phase 1>'
param projectPrefix = '<Project prefix>'
// Do not put sensitive values here — use Key Vault references
// Set regions after verifying per-service availability in MS Docs@secure() Parameter Handling
When a .bicepparam file contains a using directive, additional --parameters flags cannot be used with az deployment.
Therefore, @secure() parameters must follow these rules:
Set a default value when possible:
@secure() param password string = newGuid()If user input is required for @secure() parameters: Generate a JSON parameter file (
main.parameters.json) alongside instead of using.bicepparamNever do this: Generate a command that uses
.bicepparamand--parameters key=valuesimultaneously
Common Mistake Checklist
The full checklist is in references/service-gotchas.md. Key summary:
| Item | ❌ Incorrect | ✅ Correct |
|---|---|---|
| ADLS Gen2 | isHnsEnabled omitted | isHnsEnabled: true |
| PE Subnet | Policy not set | privateEndpointNetworkPolicies: 'Disabled' |
| PE Configuration | PE only created | PE + DNS Zone + VNet Link + DNS Zone Group |
| Foundry | kind: 'OpenAI' | kind: 'AIServices' + allowProjectManagement: true |
| Foundry | customSubDomainName omitted | customSubDomainName: foundryName — cannot be changed after creation |
| Foundry Project | Not created | Must always be created as a set with the Foundry resource |
| Hub Usage | Used for standard AI | Only when explicitly requested by user or ML/open-source models needed |
| Public Network | Not configured | publicNetworkAccess: 'Disabled' |
| Storage Name | Contains hyphens | Lowercase + digits only, uniqueString() recommended |
| API version | Copied from previous value | Fetch from MS Docs (Dynamic) |
| Region | Hardcoded | Parameter + verify availability in MS Docs (Dynamic) |
After Generation Is Complete
When Bicep generation is complete:
Provide the user with a summary report of the generated file list and each file's role
Immediately transition to Phase 3 (Bicep Reviewer)
The reviewer proceeds with automated review and corrections following the
references/bicep-reviewer.mdguidelines
Requirements and compatibility
Written for: GitHub Copilot
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
What our scanner noticed· Low risk
- Phrasing that asks for actions without confirmation
- Instructions that use the network
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- First committed by
whoniiii
- Publisher
- GitHub (Official)
- Distributed by
- GitHub
- Source
- github/awesome-copilot · skills/azure-architecture-autopilot · commit 797337f
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- whoniiii, NehaGitHubAcc, Sertxito, stbenjam
AutoGineer is not affiliated with or endorsed by whoniiii or GitHub.
Get it from the source
1 of this skill’s files are not mirrored here, so there is no ZIP. Get the complete skill from its source: github/awesome-copilot