activate-site
Activates and provisions a Power Pages website in a Power Platform environment via the Power Platform REST API
Install / Use
npx skills add microsoft/power-platform-skills --skill activate-siteInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of activate-site
activate-site scores 90/100 on our quality scale, 1436th of 4,620 Development & Engineering skills we index (top 32%).
Its SKILL.md is 19 KB long, well organised into 39 sections with 16 code examples: a thorough specification that gives an agent plenty to work with.
It has 919 GitHub stars, a meaningful sign that others use it.
Maintenance, license and trust
- The repository was last updated 11 days ago, so activate-site is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
activate-site compared with similar skills
All 4 of these similar skills score higher than activate-site; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| activate-site (this skill)by microsoft | 90 | 919 | 11d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 91.6k | 20d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.4k | today | CLAUDE.md |
| ai-job-searchby MadsLorentzen | 100 | 45.0k | 2d ago | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 41.8k | 5d ago | CLAUDE.md |
Frequently asked questions
- How do I install activate-site?
- Run
npx skills add microsoft/power-platform-skills --skill activate-site. The install tabs above show the steps for each supported agent. - Which AI agents does activate-site work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is activate-site safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is activate-site still maintained?
- The repository was last updated 11 days ago, so activate-site is actively maintained.
Skill content
View source on GitHubname: activate-site description: >- Activates and provisions a Power Pages website in a Power Platform environment via the Power Platform REST API. Use when the user wants to activate, provision, turn on, or enable a Power Pages website or portal. user-invocable: true allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion, TaskCreate, TaskUpdate, TaskList model: sonnet
Plugin check: Run
node "${PLUGIN_ROOT}/scripts/check-version.js"— if it outputs a message, show it to the user before proceeding.
Activate Power Pages Site
Provision a new Power Pages website in a Power Platform environment via the Power Platform REST API.
Prerequisite: This skill expects an existing Power Pages code site created via
/create-site. Run that skill first if the site does not exist yet.
Core Principles
- Cloud-aware URL resolution — Never hardcode API base URLs or site URL domains. Always derive them from the Cloud value returned by
pac auth who. - Token handling — The agent only needs to verify the user is logged in to Azure CLI.
- Confirm before mutating — Always present the full activation parameters to the user and get explicit approval before POSTing to the websites API.
- Preserve the caller's environment — When another skill passes
environmentUrl, verify PAC and Azure CLI still target that environment and tenant before activation. - Caller status updates — When
/create-sitesupplies astatusPath, update that file before and after activation prompts so the open template status page shows when user input is required.
Initial request: $ARGUMENTS
Workflow
- Phase 1: Verify Prerequisites — PAC CLI auth + Azure CLI login + activation status check
- Phase 2: Gather Parameters — Site name, subdomain, website record ID
- Phase 3: Confirm — Present all parameters to user for approval
- Phase 4: Activate & Poll — Run activation script (POST + poll provisioning status)
- Phase 5: Present Summary — Show site URL, suggest next steps
Phase 1: Verify Prerequisites
Goal: Ensure PAC CLI is installed and authenticated, and verify the user is logged in to Azure CLI.
Actions
1.1 Verify PAC CLI
Run pac help to check if the PAC CLI is installed and available on the system PATH.
pac help
If the command fails (command not found / not recognized):
-
Tell the user: "PAC CLI is not installed. You can install it by running:"
dotnet tool install --global Microsoft.PowerApps.CLI.Tool -
If
dotnetis also not available, direct the user to https://aka.ms/PowerPlatformCLI for full installation instructions. -
After installation, verify by running
pac helpagain.
1.2 Check Authentication
Run pac auth who to check current authentication status.
pac auth who
If authenticated: Extract these values from the output:
- Environment ID — the GUID after
Environment ID: - Organization ID — the GUID after
Organization ID:(this is the Dataverse org ID) - Cloud — the value after
Cloud:(e.g.,Public,UsGov,UsGovHigh,UsGovDod,China)
If not authenticated: Follow the same authentication flow as deploy-site — ask the user for their environment URL and run pac auth create --environment "<URL>".
1.3 Verify Azure CLI Login
Verify the user is logged in to Azure CLI:
az account show
If az is not installed or not logged in: Instruct the user to install Azure CLI and run az login --allow-no-subscriptions (this form works whether or not the user has an Azure subscription — the activation flow only needs an AAD token).
1.4 Check If Already Activated
First inspect $ARGUMENTS for explicit imported-site identity from another skill:
siteName: <name>
websiteRecordId: <guid>
environmentUrl: <url>
statusPath: <path>
When both values are present, set SITE_IDENTITY_SOURCE = "arguments" immediately and skip the local-project activation status check below. That check resolves identity from powerpages.config.json / .powerpages-site, which may be absent or unrelated when /create-site activates an imported template site. Continue to Phase 2 with the explicit identity.
When environmentUrl is present, store it as EXPECTED_ENVIRONMENT_URL and verify the current CLI context before Phase 2:
node "${PLUGIN_ROOT}/scripts/validate-cli-tenant-alignment.js" --envUrl "<EXPECTED_ENVIRONMENT_URL>"
Continue only when the JSON result has ok: true. This check compares the active PAC environment URL with the caller's URL and verifies that PAC, the Azure account, and the Dataverse access token use the same tenant. If it fails, stop and ask the user to switch PAC or Azure CLI authentication. Do not activate the imported Website Record ID in a different environment.
When source is create-site template path and statusPath is present, store it as ACTIVATION_STATUS_PATH. This is the existing template status file created by /create-site; do not create a separate status page.
When SITE_IDENTITY_SOURCE !== "arguments", check whether the local project site is already activated by running the shared activation status script:
node "${PLUGIN_ROOT}/scripts/check-activation-status.js" --projectRoot "<PROJECT_ROOT>"
Where <PROJECT_ROOT> is the directory containing powerpages.config.json or .powerpages-site folder.
Evaluate the JSON result:
- If
activatedistrue: Inform the user their site is already activated atwebsiteUrl. Suggest next steps (Phase 5.3) and stop — do NOT proceed to Phase 2. - If
activatedisfalse: Proceed to Phase 2. - If
erroris present: Proceed to Phase 2 (do not block the activation flow).
When SITE_IDENTITY_SOURCE = "arguments", skip this entire local-project status check and continue to Phase 2 with the supplied site identity.
Output
- PAC CLI installed and authenticated
- Environment ID, Organization ID, and Cloud value extracted
- Azure CLI login confirmed
- Activation status checked for a local project, or skipped for an argument-based imported site
Phase 2: Gather Parameters
Goal: Determine the site name, generate or accept a subdomain, and look up the website record ID needed for the activation API call.
Actions
2.1 Read Site Name
If the skill was invoked by another skill with explicit imported-site identity in $ARGUMENTS, use it before local project discovery:
siteName: <name>
websiteRecordId: <guid>
When both values are present:
- Set
siteNamefrom the explicit value. - Set
websiteRecordIdfrom the explicit value. - Set
SITE_IDENTITY_SOURCE = "arguments". - Skip the
powerpages.config.jsonlookup below and skip Phase 2.3 (pac pages list) because the caller already resolved the imported website record.
If either explicit value is missing, continue with the existing local-project discovery flow.
Look for powerpages.config.json in the current directory or one level of subdirectories using Glob:
**/powerpages.config.json
Read the file and extract the siteName field. If not found, ask the user for the site name using AskUserQuestion.
2.2 Generate Subdomain Suggestion
CRITICAL — This step is MANDATORY. You MUST ask the user about the subdomain before proceeding. Do NOT skip this step or auto-select a subdomain without user input.
Run the subdomain generator script to create a random suggestion:
node "${PLUGIN_ROOT}/skills/activate-site/scripts/generate-subdomain.js"
This outputs a string like site-a3f2b1. Resolve the correct site URL domain from the Cloud value obtained in Phase 1.2:
| Cloud | Site URL Domain |
|---|---|
| Public | powerappsportals.com |
| UsGov | powerappsportals.us |
| UsGovHigh | high.powerappsportals.us |
| UsGovDod | appsplatform.us |
| China | powerappsportals.cn |
🚦 Gate (plan · activate-site:2.2.subdomain): Confirm or override the generated subdomain. Subdomain is part of the resulting site URL; Cancel exits before any provisioning call.
Present the generated subdomain to the user and ask them to accept or enter their own using AskUserQuestion:
| Question | Header | Options |
|----------|--------|---------|
| Your site subdomain will be: <suggestion> (full URL: https://<suggestion>.<siteUrlDomain>). Would you like to use this subdomain or enter your own? | Subdomain | Use <suggestion> (Recommended), Enter a custom subdomain |
When ACTIVATION_STATUS_PATH is set, use Write to atomically overwrite it immediately before AskUserQuestion:
{
"state": "running",
"phase": "activation",
"message": "Waiting for subdomain selection",
"awaitingInput": true,
"inputPrompt": "Choose the site subdomain in the agent terminal."
}
Immediately after the user responds, overwrite the file again so the toast disappears:
{
"state": "running",
"phase": "activation",
"message": "Preparing site activation",
"awaitingInput": false
}
If the user cancels the prompt, clear awaitingInput before stopping. Apply the same status updates whenever a subdomain conflict loops back to this step.
If custom: The user provides their own subdomain via "Other" free text input. Validate it is lowercase, alphanumeric with hyphens only, and 3-50 characters.
2.3 Get Website Record ID
Skip this step when SITE_IDENTITY_SOURCE = "arguments" and websiteRecordId is already set.
Run pac pages list to get the website record ID:
pac pages list
Parse the output to find the website record that matches the site name. Extract the Website Record ID (GUID). If pac pages list returns no results or the command is not available, set websiteRecordId to $null — the API will create a new website record.
Output
- Site name determined (from config file or user input)
- Subdomain chosen (generated or custom)
- Website record ID resolved (GUID or null)
Phase 3: Confirm
Goal: Present all activation parameters to the user and get explicit approval before making the API call.
Actions
<!-- gate: activate-site:3.confirm | category=final | cancel-leaves=nothing -->🚦 Gate (final · activate-site:3.confirm): Last-call before the activation API call. All activation parameters echoed back; Cancel exits cleanly before provisioning. Fires fresh on every skill invocation. When
plan-almorchestrates multi-stage activation (Staging + Production), it invokesactivate-siteonce per stage — each invocation hits this gate fresh with its ownsiteName,subdomain, and target env. The Staging activation consent does NOT cover Production. Each stage's site URL is a separate go-live decision (different audiences, different timing).
Present all activation parameters to the user using AskUserQuestion:
| Question | Header | Options |
|----------|--------|---------|
| Ready to activate your Power Pages site with these settings:\n\n- Site name: <siteName>\n- Subdomain: <subdomain>.powerappsportals.com\n- Environment ID: <environmentId>\n\nProceed with activation? | Activate | Yes, activate the site (Recommended), No, cancel |
If "No": Stop the skill and inform the user they can re-run it later.
If "Yes": Proceed to Phase 4.
Output
- User has explicitly approved the activation parameters
Phase 4: Activate & Poll
Goal: POST to the Power Platform websites API to start provisioning, poll until completion, and report the result.
Actions
4.1 Run Activation Script
Run the shared activation script, passing all parameters gathered in Phases 1–2:
node "${PLUGIN_ROOT}/skills/activate-site/scripts/activate-site.js" --siteName "<siteName>" --subdomain "<subdomain>" --organizationId "<organizationId>" --env
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
91.6kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
74.4kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ai-job-search
45.0kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.8kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
