| name | play |
| description | Opens a Microsoft App in the browser via `ms app play`. Use when opening the live deployed version or a cloud-hosted preview (main branch or specific commit SHA) without starting a local dev server. |
| user-invocable | true |
| allowed-tools | Read, Grep, Bash, AskUserQuestion |
| model | sonnet |
📋 Shared Instructions: shared-instructions.md — Cross-cutting concerns.
Play
Opens a Microsoft App in the browser by fetching its cloud play URL and launching it. No local dev server required.
| Mode | Command | What opens |
|---|
live (default) | ms app play | The most recently deployed version. A snapshot — does not update until ms app deploy is run again. |
preview (main) | ms app play --mode preview | Built from the main branch on demand — always reflects the latest pushed code, even without a deploy. |
preview (commit) | ms app play --mode preview --commit <sha> | App as of a specific commit SHA — useful for code review or regression testing. |
Live vs. preview: Live requires a prior ms app deploy. Preview builds from source on demand — it works without any deployment and always reflects unpublished code.
Workflow
- Memory Bank → 2. Verify Project + Env → 3. Resolve Mode → 4. Run → 5. Surface URL
Step 1: Check Memory Bank
Read memory-bank.md per shared-instructions.md for the app's environment/app identifiers, if recorded.
Step 2: Verify Project + Env
test -f ms.config.json || { echo "Not in a Microsoft App workspace."; exit 1; }
BIN=ms
$BIN auth status
--app and --environment-id can be passed explicitly to run from outside a project directory — ms.config.json is only needed for the defaults.
Step 3: Resolve Mode
If not already clear from the user's request, ask:
"Do you want to open the live deployed version, a preview of the latest code on main, or a preview of a specific commit?"
Map intent to mode:
| User says | Mode |
|---|
| "live", "deployed", no qualifier | live (default — no flag needed) |
| "preview", "latest", "unpublished", "before deploy" | --mode preview |
| "preview at commit X" / specific SHA provided | --mode preview --commit <sha> |
Step 4: Run
Live (default):
$BIN app play
Preview — latest code on main:
$BIN app play --mode preview
Preview — specific commit:
$BIN app play --mode preview --commit <sha>
Full flag reference:
| Flag | Alias | Default | Description |
|---|
--mode | -m | live | live or preview. |
--commit | -c | HEAD on main | Preview only. The commit SHA to open. Ignored for live mode (CLI throws if combined). |
--app | | appId from ms.config.json | App name override for running outside the project directory. |
--no-browser | | false | Print the URL without opening a browser tab. |
--json | | | Emit { success, appName, mode, url, commitHash } instead of human-readable output. |
Step 5: Surface URL
Present the URL the CLI printed. For live mode, surface the CLI's built-in warning:
Live URL for 'my-app':
https://apps.powerapps.com/play/e/<env-id>/app/<guid>
⚠ Live does not auto-update. Run /deploy to publish new code to the live URL.
For preview:
Preview URL for 'my-app' (main):
https://apps.powerapps.com/play/e/<env-id>/app/<guid>/branch/main
For commit-pinned preview:
Preview URL for 'my-app' (commit abc1234):
https://apps.powerapps.com/play/e/<env-id>/app/<guid>/commit/abc1234
Edge Cases
| Situation | Action |
|---|
No live build available — run 'ms app deploy' first | The app has never been deployed. Tell the user to run /deploy, then retry ms app play. |
--commit passed with --mode live | Hard UsageError from the CLI. Explain that --commit only works with --mode preview. |
No appPlayUri for preview mode | App record exists but play URI is missing. Surface the error verbatim and stop. |
| User wants URL without opening a browser | Pass --no-browser; the CLI prints the URL and exits without launching a tab. |
| User is outside a project directory | Pass --app <name> and --environment-id <id> explicitly. |