
dx-devops-pipeline-manage
Use this skill to manage the full lifecycle of a DevOps Center pipeline — list all pipelines, get a single pipeline's details, create a new pipeline linked to a Git repository, add or remove stages, rename a stage, add or remove Salesforce environments on stages, attach or detach projects, and activate or deactivate the pipeline. Invoke when the user wants to set up a release pipeline, wire promotion stages across integration, UAT, staging, and production orgs, connect environments to stages, attach a project, or activate a continuous delivery pipeline. Uses sf devops pipeline and sf devops stage commands with --json output. DO NOT TRIGGER for work-item lifecycle, promotion or deployment execution, conflict detection, or standalone project creation (separate skills).
- Installs
- 2.3K
- Last 24h
- +10
- Trending rank
- #8747
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/forcedotcom/sf-skills --skill dx-devops-pipeline-manage- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads dx-devops-pipeline-manage automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
DevOps Center Pipeline Management
Manages the complete pipeline lifecycle in DevOps Center — from creation against a repository, through stage and environment configuration and project attachment, to activation of a ready-to-promote release pipeline. Provides headless CLI-driven operations for autonomous release workflows.
Scope
- In scope: List pipelines, get pipeline details, create a pipeline (linked to an existing or new Git repo), add/delete/rename stages, add/delete Salesforce environments on stages, attach/detach projects, and activate/deactivate/rename the pipeline
- Out of scope: Work-item lifecycle, promotion/deployment execution, conflict detection, standalone project creation (separate skills)
Required Inputs
Gather or infer before proceeding:
- Operation type: list, get, create, add-stage, delete-stage, rename-stage, add-environment, delete-environment, attach-project, detach-project, activate, or deactivate
- For get / any stage or environment op: pipeline ID (required) — obtain via
sf devops pipeline list --json - For create: pipeline name (required) and a Git repo (
--repo, required). Repo flags differ by scenario:- Existing repo (GitHub or Bitbucket): only
--repo <url>— do not pass--repo-type/--create-repo - New GitHub repo:
--repo <name> --create-repo --repo-type github --repo-owner <org-or-user> - New Bitbucket repo:
--repo <name> --create-repo --repo-type bitbucket --bitbucket-workspace <workspace>(--bitbucket-project-key <key>optional) - Description (
--description) optional in all cases
- Existing repo (GitHub or Bitbucket): only
- For add-stage: pipeline ID, new stage name, and
--next-stage-id(the stage the new one precedes) — get stage IDs viasf devops pipeline get - For add-environment: pipeline ID, stage ID, environment name, and
--org-type(Production or Sandbox) - For attach/detach-project: pipeline ID and project ID
- For activate/deactivate/rename: pipeline ID
Defaults unless specified:
- Output format:
--jsonfor headless consumption - Target org: use
--target-org <alias>if not relying on the default org
If the user gives a clear request ("create a pipeline on repo myorg/myrepo", "add a UAT stage before Production", "activate pipeline 0XB..."), proceed immediately without unnecessary questions.
Workflow
All operations use sf devops pipeline and sf devops stage CLI commands with --json output for structured consumption. Pipeline IDs and stage IDs are the primary identifiers — resolve them via list and get before mutating.
Phase 1 — Identify Operation
- Determine the operation type from user intent:
- "list", "show all pipelines" → list; "details of pipeline", "show stages" → get
- "create", "set up", "new pipeline" → create
- "add stage", "insert stage" → add-stage; "rename stage" → rename-stage; "remove/delete stage" → delete-stage
- "connect environment", "add org to stage" → add-environment; "remove environment" → delete-environment
- "attach project", "connect project" → attach-project; "detach project" → detach-project
- "activate", "turn on"; "deactivate", "turn off"; "rename pipeline" → lifecycle update
Phase 2 — Execute Operation
-
Verify org authentication before any operation:
sf org display --json- If no default org is set or auth has expired, instruct the user to run
sf org login web --set-default --alias <alias> - Confirm the org has DevOps Center enabled by running
sf devops pipeline list --json - Add
--target-org <alias>to every command when targeting a specific org
- If no default org is set or auth has expired, instruct the user to run
-
Inspect pipelines:
sf devops pipeline list --json # all pipelines in the org sf devops pipeline get --pipeline-id <pipeline-id> --json # one pipeline, with stages/repos/projectslistreturns SObject records under.result.pipelines[]with capitalized fields (.Id,.Name,.IsActive) — it does not include stages or connected projectsgetreturns a single pipeline under.resultwith camelCase fields (.id,.name,.stages[],.connectedProjects[]); each stage has.id,.name,.nextStageId,.branchName, and.environment.{id,name}. Stages are a linked list — order is defined bynextStageId, and the terminal stage hasnextStageId: null. Usegetto discover stage IDs before any stage or environment operation
-
Create a pipeline — the pipeline must be linked to a Git repository.
--nameand--repoare always required; the remaining flags depend on the repo scenario:# Existing repo (GitHub or Bitbucket) — pass the full repo URL, nothing else sf devops pipeline create --name "<pipeline-name>" --repo <repo-url> --json # New GitHub repo — requires --repo-owner sf devops pipeline create --name "<pipeline-name>" --repo <repo-name> \ --create-repo --repo-type github --repo-owner <org-or-user> --json # New Bitbucket repo — requires --bitbucket-workspace (--bitbucket-project-key optional) sf devops pipeline create --name "<pipeline-name>" --repo <repo-name> \ --create-repo --repo-type bitbucket --bitbucket-workspace <workspace> \ --bitbucket-project-key <key> --json # Custom stage chain (any scenario) — repeat --stage in promotion order sf devops pipeline create --name "<pipeline-name>" --repo <repo-url> \ --stage Dev --stage QA --stage Prod --json- Provider-specific required flags: GitHub new repo →
--repo-owner; Bitbucket new repo →--bitbucket-workspace. Omitting the provider's required flag fails the create - Do not pass
--repo-type/--create-repofor an existing repo — supply only the repo URL via--repo - Custom stages at create time: a new pipeline seeds the default stage chain Integration → UAT → Staging → Production. To seed different stages, repeat
-s/--stageonce per stage in promotion order — e.g.--stage Dev --stage QA --stage Prod. This avoids adding/renaming stages afterward - Add
--description "<text>"optionally in any scenario - Capture the returned pipeline ID for subsequent stage/environment/project/activation steps
- Idempotency: the CLI does not dedupe. Before creating, run
sf devops pipeline list --jsonand check for a pipeline with the same name/repo; return the existing one if found. Seereferences/parsing-patterns.mdfor the check-before-create snippet
- Provider-specific required flags: GitHub new repo →
-
Configure stages — a stage is added relative to an existing stage, then bound to an environment. Read
references/cli-commands.mdfor full flag details before multi-stage work:# Insert an empty stage BEFORE an existing stage (get the next-stage-id from `pipeline get`) sf devops pipeline stage add --pipeline-id <id> --name "<stage-name>" --next-stage-id <stage-id> --json # Rename a stage sf devops pipeline stage update --pipeline-id <id> --stage-id <stage-id> --name "<new-name>" --json # Delete a stage (predecessor auto-relinks to successor) sf devops pipeline stage delete --pipeline-id <id> --stage-id <stage-id> --jsonstage addinserts an empty stage (no branch/environment) before--next-stage-id; configure its environment separately- Build the promotion chain by inserting each new stage before the stage that should follow it
-
Bind environments to stages — attach a Salesforce org to a stage:
# Validate the org-type against the fixed enum BEFORE calling the CLI bash scripts/validate-org-type.sh "<Production|Sandbox>" # exits non-zero on an invalid value sf devops stage environment add --pipeline-id <id> --stage-id <stage-id> \ --environment-name "<env-name>" --org-type <Production|Sandbox> --json # Remove an environment (pipeline must be inactive) sf devops stage environment delete --pipeline-id <id> --environment-id <env-id> --json--org-typemust be exactlyProductionorSandbox— runscripts/validate-org-type.sh <value>first and only proceed on exit 0- Headless caveat:
stage environment addtriggers an OAuth browser flow. In headless/CI runs pass--no-browser— the CLI prints a redirect URL for manual authentication
-
Attach / detach a project — a project can be attached to only one pipeline:
sf devops pipeline project add --pipeline-id <id> --project-id <project-id> --json sf devops pipeline project delete --pipeline-id <id> --project-id <project-id> --json- If the user names a project instead of providing its ID, resolve it via
sf devops project list --json(seereferences/parsing-patterns.md)
- If the user names a project instead of providing its ID, resolve it via
-
Activate / deactivate / rename the pipeline:
# Before activating, confirm the deterministic ≥1-stage prerequisite bash scripts/check-activation-ready.sh <id> [target-org] # exits non-zero if stage-less sf devops pipeline update --pipeline-id <id> --activate --json # activate sf devops pipeline update --pipeline-id <id> --deactivate --json # deactivate sf devops pipeline update --pipeline-id <id> --name "<new-name>" --json # rename- Before
--activate, runscripts/check-activation-ready.sh <id>and only proceed on exit 0 — it fails with an actionable message when the pipeline has no stages - Stages cannot be modified after the pipeline is activated and changes are promoted through it — finish stage/environment configuration before activating
--activateand--deactivateare mutually exclusive;--deactivateand--namemay be combined in one command
- Before
Phase 3 — Verify and Report
-
Verify operation success — use
scripts/verify-operation.sh, which performs the deterministic JSON-status and post-state field checks and exits non-zero with an actionable message on mismatch:# Assert a captured command's JSON status is 0 (pipe the CLI output in) sf devops pipeline update --pipeline-id <id> --activate --json | bash scripts/verify-operation.sh status - # Assert post-state after activate / stage / project ops bash scripts/verify-operation.sh active <id> true [target-org] # isActive == true bash scripts/verify-operation.sh has-stage <id> "<stage>" [target-org] # stage present in chain bash scripts/verify-operation.sh has-project <id> "<project>" [target-org] # project connected- Create: confirm the pipeline appears in
sf devops pipeline list --jsonby.Nameand capture its.Id - Stage / environment / project changes: verify with the
has-stage/has-projectmodes above (they readsf devops pipeline getand check.result.stages[]/.result.connectedProjects[]) - Activate: verify with the
active <id> truemode
- Create: confirm the pipeline appears in
-
Report results:
- List: pipeline name, ID, and active state per pipeline (no stages — that's what
getis for) - Get: pipeline name, ID, active state, stage chain (each stage's name → environment → branch, ordered via
nextStageId), connected projects - Create: pipeline ID, name, and linked repo (or "existing pipeline returned" on idempotent match)
- Stage / environment / project op: the resulting stage chain with each stage's environment, in promotion order
- Lifecycle: the new active state and/or name
- List: pipeline name, ID, and active state per pipeline (no stages — that's what
Verification Checklist (gate before reporting success)
Confirm the items for the operation you performed. Do not report success until every applicable box holds:
- Every
sf devopscommand was run with--jsonand returnedstatus: 0(scripts/verify-operation.sh status -) - Create: the new pipeline appears in
sf devops pipeline list --jsonby name, and (for a new repo) the provider-specific flags were supplied (--repo-ownerfor GitHub,--bitbucket-workspacefor Bitbucket) - Add-stage / add-environment: the stage exists in the chain and
--org-typepassedscripts/validate-org-type.sh(scripts/verify-operation.sh has-stage ...) - Attach-project: the project shows in
.result.connectedProjects[](scripts/verify-operation.sh has-project ...) - Activate:
scripts/check-activation-ready.shpassed beforehand and.result.isActiveis nowtrue(scripts/verify-operation.sh active <id> true) - Delete-environment: the pipeline was inactive before the delete
Rules / Constraints
| Constraint | Rationale |
|---|---|
All sf devops commands must use --json flag | Structured output is required for headless consumption; human-readable output is unreliable for parsing |
| A pipeline requires a Git repo at create time | sf devops pipeline create requires --name and --repo; for an existing repo pass only the URL, for a new repo add --create-repo and --repo-type |
| New-repo create needs provider-specific flags | GitHub requires --repo-owner; Bitbucket requires --bitbucket-workspace (--bitbucket-project-key optional). The wrong provider's flags fail the command |
| Pipeline ID required for get, update, and all stage/environment/project ops | These commands identify the pipeline only by --pipeline-id; obtain it via sf devops pipeline list |
Stage IDs come from pipeline get | stage add (--next-stage-id), stage update/delete (--stage-id), and stage environment add (--stage-id) all need stage IDs |
stage add inserts an empty stage before --next-stage-id | Stages carry no environment until one is added; build the chain by anchoring to the following stage |
--org-type must be exactly Production or Sandbox | The flag is a fixed enum; other values fail |
| Pipeline must have ≥1 stage before activation | sf devops pipeline update --activate rejects a stage-less pipeline |
| Do not modify stages after activate + promote | DevOps Center locks stage structure once changes have been promoted through an active pipeline |
| Environment delete requires an inactive pipeline | stage environment delete only succeeds while the pipeline is inactive |
| A project attaches to only one pipeline | pipeline project add fails if the project is already attached elsewhere; detach first |
| Idempotent create via check-before-create | The CLI does not dedupe; list existing pipelines and return the match instead of erroring |
Prefer --no-browser in headless runs | stage environment add opens an OAuth browser flow; --no-browser prints a redirect URL for CI |
Gotchas
| Issue | Resolution |
|---|---|
| No default org set | Run sf org display --json first; if it fails, instruct user to run sf org login web --set-default |
| Create fails — missing repo | --repo is required; pass an existing repo URL, or --create-repo + --repo-type for a new repo |
| New-repo create fails — missing provider flag | GitHub new repo needs --repo-owner; Bitbucket new repo needs --bitbucket-workspace. Don't mix providers' flags (--repo-owner with bitbucket, or --bitbucket-workspace with github) |
stage add fails — no next-stage-id | --next-stage-id is required; run sf devops pipeline get --pipeline-id <id> --json to find the stage IDs and pick the one the new stage should precede |
| Environment add hangs in CI | The OAuth browser flow blocks headless runs; add --no-browser and complete auth via the printed redirect URL |
| Activation rejected | The pipeline needs at least one stage; add a stage (and its environment) before --activate |
| Cannot modify stages | The pipeline is active and has promoted changes; stage structure is locked — configuration must complete before activation |
| Environment delete fails | The pipeline is active; deactivate with pipeline update --deactivate before deleting the environment |
| Project already attached | A project attaches to only one pipeline; detach from the other pipeline first via pipeline project delete |
| Pipeline / stage / project not found | The ID is invalid; run sf devops pipeline list --json, sf devops pipeline get --json, or sf devops project list --json to find valid IDs |
Output Expectations
Deliverables vary by operation:
- List: pipelines with ID, name, and active state (no stages/projects in the list view)
- Get: a pipeline with ID, name, active state, its stage chain (each with environment and branch, ordered via
nextStageId), and connected projects - Create: pipeline ID, name, and linked repository (or the pre-existing pipeline on idempotent match)
- Stage op: the updated ordered stage chain
- Environment op: the stage with its bound environment (name, org-type)
- Project op: confirmation of attach/detach
- Lifecycle: the new active state and/or pipeline name
Outputs are derived from sf devops pipeline and sf devops stage CLI commands.
Cross-Skill Integration
| Delegate to | When |
|---|---|
dx-devops-work-item-manage | The user wants to create or advance work items once the pipeline is active |
If a project the user wants to attach can't be found, resolve or list existing projects with sf devops project list --json (see references/parsing-patterns.md) rather than delegating — project creation is out of scope for this skill.
Reference File Index
| File | When to read |
|---|---|
references/cli-commands.md | When you need detailed CLI flag documentation and JSON output schemas for each sf devops pipeline / sf devops stage command |
references/parsing-patterns.md | When you need jq snippets to parse the JSON (stage chains, pipeline/project ID resolution), error-handling reference, the check-before-create idempotent pattern, or auth requirements |
examples/common-workflows.md | When the user's request matches a common pattern (end-to-end pipeline setup, inserting a stage, binding an environment, attaching a project, activation) |
scripts/validate-org-type.sh | Run before stage environment add to validate --org-type against the Production/Sandbox enum |
scripts/check-activation-ready.sh | Run before pipeline update --activate to confirm the pipeline has ≥1 stage |
scripts/verify-operation.sh | Run in Phase 3 to assert a command's JSON status and post-state fields (status / active / has-stage / has-project) |
FAQ
What does the dx-devops-pipeline-manage skill do?
Use this skill to manage the full lifecycle of a DevOps Center pipeline — list all pipelines, get a single pipeline's details, create a new pipeline linked to a Git repository, add or remove stages, rename a stage, add or remove Salesforce environments on stages, attach or detach projects, and activate or deactivate the pipeline. Invoke when the user wants to set up a release pipeline, wire promotion stages across integration, UAT, staging, and production orgs, connect environments to stages, attach a project, or activate a continuous delivery pipeline. Uses sf devops pipeline and sf devops stage commands with --json output. DO NOT TRIGGER for work-item lifecycle, promotion or deployment execution, conflict detection, or standalone project creation (separate skills).
How do I install dx-devops-pipeline-manage?
Run npx skills add https://github.com/forcedotcom/sf-skills --skill dx-devops-pipeline-manage in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/dx-devops-pipeline-manage/ (personal) or .claude/skills/dx-devops-pipeline-manage/ (project).
Which AI agents can use dx-devops-pipeline-manage?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is dx-devops-pipeline-manage safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains dx-devops-pipeline-manage?
It is published by forcedotcom in forcedotcom/sf-skills. It has 2,253 recorded installs.
More from forcedotcom/sf-skills
platform-apex-generate
forcedotcom/sf-skills
Primary Apex authoring skill for class generation, refactoring, and review. ALWAYS ACTIVATE when the user mentions Apex, .cls, triggers, or asks to create/refactor a class (service, selector, domain, batch, queueable, schedulable, invocable, DTO, utility, interface, abstract, exception, REST resource). Use this skill for requests involving SObject CRUD, mapping collections, fetching related records, scheduled jobs, batch jobs, trigger design, @AuraEnabled controllers, @RestResource endpoints, custom REST APIs, or code review of existing Apex.
platform-apex-test-generate
forcedotcom/sf-skills
Use to generate and validate Apex test classes with TestDataFactory patterns, bulk testing (251+ records), mocking, assertions, and disciplined test-fix loops. Use when creating Apex test classes (for triggers, services, controllers, batch jobs, queueables, and callouts), improving coverage, debugging or fixing failing Apex tests, or running test/coverage analysis. Triggers on Test.cls files, sf apex run test, coverage reports. Do NOT trigger for production Apex (use platform-apex-generate) or Jest/LWC tests.
platform-apex-test-run
forcedotcom/sf-skills
Apex test execution, coverage analysis, and test-fix loops with 120-point scoring. Use when the user runs Apex tests, checks code coverage, fixes failing tests, or touches Test.cls / Test.cls files. DO NOT TRIGGER when writing Apex production code (use platform-apex-generate), Agentforce agent testing (use agentforce-test), or Jest/LWC tests (use experience-lwc-generate).
platform-apex-logs-debug
forcedotcom/sf-skills
Salesforce debug log analysis and troubleshooting with 100-point scoring. TRIGGER when: user analyzes debug logs, hits governor limits, reads stack traces, or touches .log files from Salesforce orgs. DO NOT TRIGGER when: running Apex tests (use platform-apex-test-run), generating or fixing Apex code (use platform-apex-generate), or Agentforce session tracing (use agentforce-observe).
platform-soql-query
forcedotcom/sf-skills
Use when the user needs SOQL/SOSL authoring or optimization: natural-language-to-query generation, relationship queries, aggregates, query-plan/selectivity analysis, and performance or safety improvements. TRIGGER when the user writes, optimizes, or debugs SOQL/SOSL, touches .soql files, or asks about relationship queries, aggregates, or query performance. DO NOT TRIGGER for bulk data operations (use platform-data-manage), Apex DML logic (use platform-apex-generate), or report/dashboard queries.
platform-metadata-deploy
forcedotcom/sf-skills
Salesforce DevOps automation using sf CLI v2. TRIGGER when: user deploys metadata, validates a deploy or does a dry-run, deploys to a Production org, quick-deploys a validated job ID, ships/promotes to prod, creates/manages scratch orgs or sandboxes, sets up CI/CD pipelines, or troubleshoots deployment errors with sf project deploy. DO NOT TRIGGER when: writing Apex code, building LWC components (use experience-lwc-generate), creating metadata definitions (use platform-custom-object-generate), deleting metadata from an org (use platform-destructive-deploy), or querying org data (use platform-data-manage).
Popular devops & cloud skills
microsoft-foundry
microsoft/azure-skills
Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, azd provision/deploy, hosted agent scaffold/develop/run/deploy/troubleshoot, prompt agent create, managed harness agent create, GitHub Copilot harness agent, create agent, update agent, add tool to agent, invoke agent, agent insights, evaluate agent, batch eval, continuous eval, continuous monitoring, agent CI/CD, optimize prompt, improve prompt, optimize agent instructions, Agent Optimizer scaffold, dataset curation from traces, deploy model, model fine-tuning (SFT/DPO/RFT), Foundry project, RBAC, role assignment, permissions, quota, capacity, region, deployment failure, AI Services, create Foundry resource, knowledge index, customize deployment, onboard, availability, training-data, grader, distillation, large file upload. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure
azure-diagnostics
microsoft/azure-skills
Debug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe triage. WHEN: debug production issues, troubleshoot app service, app service high CPU, app service deployment failure, troubleshoot container apps, container app 503 or target port mismatch, troubleshoot functions, function telemetry missing or stopped after a config/connection-string change, troubleshoot AKS, VM RDP, Linux SSH, VM black screen, can't connect to VM, reset VM password, NSG or firewall blocking, kubectl cannot connect, kube-system/CoreDNS failures, pod pending, crashloop, node not ready, upgrade failures, analyze logs, KQL, insights, image pull failures, cold start issues, health probe failures, resource health, root cause of errors, troubleshoot event hubs, troubleshoot service bus, messaging SDK error, AMQP connection failure, message lock lost, lock renewal during long-running processing, service bus dead letter.
azure-prepare
microsoft/azure-skills
Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.
azure-ai
microsoft/azure-skills
Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. WHEN: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech.
azure-deploy
microsoft/azure-skills
Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.
azure-validate
microsoft/azure-skills
Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.