[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BVPVP9SPEY44ZG7PBDPQF":3,"skill-same:01M69BVPVP9SPEY44ZG7PBDPQF":62},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M69BVPVP9SPEY44ZG7PBDPQF","dev",null,"Runs a Microsoft App locally with hot reload via `ms app dev`. Use when starting or restarting local development and surfacing the App Player URL.","microsoft\u002Fmanaged-apps","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69BTSR13CCGCPK40C03N7CN",36,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Fdev\u002FSKILL.md",[],[5,9,19,20,21,22,23,24,25,26,27,28,29,30,31],"development","Bash","grep","read","use","ms","local","app","via","local development","with","URL","player","2026-11-10 10:12:30",false,"---\nname: dev\ndescription: Runs a Microsoft App locally with hot reload via `ms app dev`. Use when starting or restarting local development and surfacing the App Player URL.\nallowed-tools: Read Grep Bash AskUserQuestion\n---\n\n**? Shared Instructions: [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md)** — Cross-cutting concerns.\n\n# Local Dev\n\nStarts `ms app dev` in the project's working directory. The CLI runs two servers — a dev script (Vite or equivalent, default port 8080) and a config server — and prints the App Player URL the user opens in their browser.\n\nThis skill does NOT deploy to the cloud. For that, use `\u002Fdeploy`.\n\n## Workflow\n\n1. Memory Bank → 2. Verify Project + Env → 3. Start Dev Server → 4. Hand Off URL\n\n---\n\n### Step 1: Check Memory Bank\n\nRead `memory-bank.md` from the project root (the project the user has `cd`'d into, or the path captured from a prior skill invocation) for context — the app slug\u002FGUID and which environment this project targets — so you can confirm you're starting the right app.\n\n`ms app dev` does **not** need `environmentId` or `appId` passed to it: it runs in the project working directory and reads `ms.config.json` itself. The memory bank is only for orienting yourself; if it's missing, that's fine — skip straight to Step 2.\n\n### Step 2: Verify Project + Env\n\n```bash\ntest -f ms.config.json || { echo \"Not in a Microsoft App workspace (no ms.config.json).\"; exit 1; }\n```\n\nProbe the CLI binary and confirm auth:\n\n```bash\nBIN=ms\n$BIN auth status\n```\n\nIf auth status reports the wrong UPN or is signed out, prompt the user to fix it before continuing (`ms auth login`). Don't try to repair auth silently — wrong-account dev sessions waste time downstream.\n\n### Step 3: Start the Dev Server\n\nDefault invocation:\n\n```bash\n$BIN app dev\n```\n\nFlags worth surfacing (only when the user mentions a need):\n\n| Flag                       | When to use                                                                 |\n| -------------------------- | --------------------------------------------------------------------------- |\n| `--port \u003Cn>` (`-p`)        | Port 8080 is busy. Pick another (e.g., `--port 8081`).                      |\n| `--local-app-url \u003Curl>` (`-l`) | The user's Vite\u002Fdev script is on a non-default URL (default `http:\u002F\u002Flocalhost:3000`). |\n| `--config-only` (`-C`)     | Only run the config server. Useful when the user runs `npm run dev` separately. |\n\nIf the user invoked `\u002Fdev` without arguments, run plain `$BIN app dev` first; surface flags only if the run fails.\n\n**Run in the background** (`run_in_background: true`) so the session can continue. Stream stdout via `Monitor` until the line `Ready. You can play your app locally at: \u003CURL>` appears — that's the App Player URL.\n\n### Step 4: Open the Browser and Hand Off the URL\n\n**Open the browser automatically** — run `Start-Process \"\u003Ccaptured URL>\"` (Windows) or `open \"\u003Ccaptured URL>\"` (macOS) \u002F `xdg-open \"\u003Ccaptured URL>\"` (Linux) so the user sees their app immediately without copy-pasting. If the open command fails, fall back to printing the URL.\n\nPrint the App Player URL as a **markdown link** so it stays clickable even in narrow terminals. **Also show the URL on its own line** — markdown links can render as plain label text in some environments (e.g. tables), hiding the actual URL from the user.\n\n```\nLocal dev running — opened the app in your default browser.\n\nLocal URL: [Open app in browser](\u003Ccaptured URL>)\n           \u003Ccaptured URL>\nStop:      Ctrl+C in the dev terminal (or kill the background task).\nRestart:   \u002Fdev (from this project folder)\n```\n\nDo **not** show the git remote URL in the dev summary — it's an internal detail that confuses users who expect a browser-openable link. The only URL to surface is the App Player URL printed by `ms app dev` (the domain varies by cloud\u002Fregion — always use the exact URL the CLI outputs, never hardcode the host).\n\nThen add a one-liner reminder of the iterate → preview → deploy loop:\n\n> \"The browser tab hot-reloads as I edit code — tell me what to change. When you're happy with it, I'll commit + push your changes, run `ms app play --mode preview` for a cloud preview URL in your environment, and then ask if you want me to `\u002Fdeploy`.\"\n\nWhen the user signals readiness, follow the **Ready-to-Ship Gate** in [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md) — commit, push, preview, then ask about `\u002Fdeploy`.\n\nIf the dev server prints an error during startup (port conflict, missing `ms.config.json`, expired auth), stop the background task, surface the error verbatim, and propose the targeted fix:\n\n| Error                                                | Fix                                                                                         |\n| ---------------------------------------------------- | ------------------------------------------------------------------------------------------- |\n| `EADDRINUSE` on 8080                                  | Re-run with `$BIN app dev --port 8081` (or kill whatever's on 8080).                        |\n| `ms.config.json not found`                         | The user is in the wrong directory, or this isn't a Microsoft App workspace. Verify and stop. |\n| `Authentication failed` (token expired)               | Run `$BIN auth login` (interactive) and retry.                                              |\n| `Failed to fetch app metadata for \u003Capp-id>`           | App was deleted in the service. Confirm with `$BIN app list --json` and restore or recreate.|\n\nDo NOT push or deploy from this skill, even if the user mentions it mid-session — bounce them to `\u002Fdeploy` (which requires explicit confirmation).\n\n> **Sharing a cloud preview:** The App Player URL from `ms app dev` is local-only. Once code is pushed to main, use `\u002Fplay` (`ms app play --mode preview`) to open a cloud-hosted preview URL that works for others without a deploy.","**? Shared Instructions: [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md)** — Cross-cutting concerns.\n\n# Local Dev\n\nStarts `ms app dev` in the project's working directory. The CLI runs two servers — a dev script (Vite or equivalent, default port 8080) and a config server — and prints the App Player URL the user opens in their browser.\n\nThis skill does NOT deploy to the cloud. For that, use `\u002Fdeploy`.\n\n## Workflow\n\n1. Memory Bank → 2. Verify Project + Env → 3. Start Dev Server → 4. Hand Off URL\n\n---\n\n### Step 1: Check Memory Bank\n\nRead `memory-bank.md` from the project root (the project the user has `cd`'d into, or the path captured from a prior skill invocation) for context — the app slug\u002FGUID and which environment this project targets — so you can confirm you're starting the right app.\n\n`ms app dev` does **not** need `environmentId` or `appId` passed to it: it runs in the project working directory and reads `ms.config.json` itself. The memory bank is only for orienting yourself; if it's missing, that's fine — skip straight to Step 2.\n\n### Step 2: Verify Project + Env\n\n```bash\ntest -f ms.config.json || { echo \"Not in a Microsoft App workspace (no ms.config.json).\"; exit 1; }\n```\n\nProbe the CLI binary and confirm auth:\n\n```bash\nBIN=ms\n$BIN auth status\n```\n\nIf auth status reports the wrong UPN or is signed out, prompt the user to fix it before continuing (`ms auth login`). Don't try to repair auth silently — wrong-account dev sessions waste time downstream.\n\n### Step 3: Start the Dev Server\n\nDefault invocation:\n\n```bash\n$BIN app dev\n```\n\nFlags worth surfacing (only when the user mentions a need):\n\n| Flag                       | When to use                                                                 |\n| -------------------------- | --------------------------------------------------------------------------- |\n| `--port \u003Cn>` (`-p`)        | Port 8080 is busy. Pick another (e.g., `--port 8081`).                      |\n| `--local-app-url \u003Curl>` (`-l`) | The user's Vite\u002Fdev script is on a non-default URL (default `http:\u002F\u002Flocalhost:3000`). |\n| `--config-only` (`-C`)     | Only run the config server. Useful when the user runs `npm run dev` separately. |\n\nIf the user invoked `\u002Fdev` without arguments, run plain `$BIN app dev` first; surface flags only if the run fails.\n\n**Run in the background** (`run_in_background: true`) so the session can continue. Stream stdout via `Monitor` until the line `Ready. You can play your app locally at: \u003CURL>` appears — that's the App Player URL.\n\n### Step 4: Open the Browser and Hand Off the URL\n\n**Open the browser automatically** — run `Start-Process \"\u003Ccaptured URL>\"` (Windows) or `open \"\u003Ccaptured URL>\"` (macOS) \u002F `xdg-open \"\u003Ccaptured URL>\"` (Linux) so the user sees their app immediately without copy-pasting. If the open command fails, fall back to printing the URL.\n\nPrint the App Player URL as a **markdown link** so it stays clickable even in narrow terminals. **Also show the URL on its own line** — markdown links can render as plain label text in some environments (e.g. tables), hiding the actual URL from the user.\n\n```\nLocal dev running — opened the app in your default browser.\n\nLocal URL: [Open app in browser](\u003Ccaptured URL>)\n           \u003Ccaptured URL>\nStop:      Ctrl+C in the dev terminal (or kill the background task).\nRestart:   \u002Fdev (from this project folder)\n```\n\nDo **not** show the git remote URL in the dev summary — it's an internal detail that confuses users who expect a browser-openable link. The only URL to surface is the App Player URL printed by `ms app dev` (the domain varies by cloud\u002Fregion — always use the exact URL the CLI outputs, never hardcode the host).\n\nThen add a one-liner reminder of the iterate → preview → deploy loop:\n\n> \"The browser tab hot-reloads as I edit code — tell me what to change. When you're happy with it, I'll commit + push your changes, run `ms app play --mode preview` for a cloud preview URL in your environment, and then ask if you want me to `\u002Fdeploy`.\"\n\nWhen the user signals readiness, follow the **Ready-to-Ship Gate** in [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md) — commit, push, preview, then ask about `\u002Fdeploy`.\n\nIf the dev server prints an error during startup (port conflict, missing `ms.config.json`, expired auth), stop the background task, surface the error verbatim, and propose the targeted fix:\n\n| Error                                                | Fix                                                                                         |\n| ---------------------------------------------------- | ------------------------------------------------------------------------------------------- |\n| `EADDRINUSE` on 8080                                  | Re-run with `$BIN app dev --port 8081` (or kill whatever's on 8080).                        |\n| `ms.config.json not found`                         | The user is in the wrong directory, or this isn't a Microsoft App workspace. Verify and stop. |\n| `Authentication failed` (token expired)               | Run `$BIN auth login` (interactive) and retry.                                              |\n| `Failed to fetch app metadata for \u003Capp-id>`           | App was deleted in the service. Confirm with `$BIN app list --json` and restore or recreate.|\n\nDo NOT push or deploy from this skill, even if the user mentions it mid-session — bounce them to `\u002Fdeploy` (which requires explicit confirmation).\n\n> **Sharing a cloud preview:** The App Player URL from `ms app dev` is local-only. Once code is pushed to main, use `\u002Fplay` (`ms app play --mode preview`) to open a cloud-hosted preview URL that works for others without a deploy.",{"name":5,"description":7,"allowed-tools":37},"Read Grep Bash AskUserQuestion","main","5e4bd47de38c9ae0327efb7c0003d250afff31b6","plugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Fdev",11,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FCopilot-Managed-Runtime","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-06 04:02:23",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add microsoft\u002Fmanaged-apps --skill dev",{"tool":54,"command":55},"bunx","bunx skills add microsoft\u002Fmanaged-apps --skill dev",{"tool":57,"command":58},"pnpm","pnpm dlx skills add microsoft\u002Fmanaged-apps --skill dev","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Fdev\u002FSKILL.md",true,[],[63,85,96,112,127,143],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":32},"01M69BW0D2HDW3YFJJX4QEYJF2","state","Store and query a Microsoft Managed App's built-in state and file attachments with `ms project state` CLI schema commands and generated TypeScript clients. First, with the user signed in to the CLI, run `ms feature status --name state --json`; if `feature.enabled` is not `true`, recommend an alternative connector or data source.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Fstate\u002FSKILL.md",[],[65,70,71,72,73,26,24,74,75,76,20,77,22,78,79,80,81,82,83,84],"status","cli","run","typescript","project","generated","query","Connector","write","edit","recommend","commands","data","source","feature",{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":32},"01M69BVYVZ0YYRMDY1WPVJ98VV","share","Shares (or unshares) a Microsoft App with users via `ms app share` \u002F `ms app unshare`. Use when updating app access control.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Fshare\u002FSKILL.md",[],[87,9,26,92,24,23,93,20,94,29,95,27,22,21],"Access Control","access","users","control",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":32},"01M69BVX6TTS1A17ZA2BDP13KP","share-link","Manages tenant-wide share links for a Microsoft App via `ms app share link create`, `ms app share link list`, and `ms app share link revoke`. Use when you want to distribute app access via a URL instead of named principals.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Fshare-link\u002FSKILL.md",[],[103,87,104,105,9,26,106,24,107,23,93,30,108,20,27,109,22,21,110,111],"share link","link","create","links","for","you","distribute","wide","list",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":32},"01M69BVVFK3WFDMJW2R5CYCRD4","play","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.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Fplay\u002FSKILL.md",[],[114,5,119,9,120,26,121,24,25,38,23,122,20,123,124,125,126,27,22,21],"commit","local dev","branch","version","preview","local dev server","browser","server",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":32},"01M69BVSSESTPDA4Z5WP8WEN01","list-connectors","Lists connectors available in the active environment — including whether each is allowed or blocked by your organization's policy — plus the connection-bound data sources already wired into a Microsoft App. Use when discovering connectors and their operations before adding data sources.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Flist-connectors\u002FSKILL.md",[],[134,135,111,9,136,26,137,138,23,20,139,140,141,22,82,142],"list connectors","connectors","policy","sources","environment","organization","operations","active","connection",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":32},"01M69BVRDCYENNS8XXM1E5RBYQ","list-apps","Discovers managed apps in the active environment via `ms app list --json` and optional `ms app show --json`. Use when listing or locating apps.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmanaged-apps\u002Fblob\u002Fmain\u002Fplugins\u002Fmicrosoft-managed-apps\u002Fskills\u002Flist-apps\u002FSKILL.md",[],[150,151,111,26,152,24,138,23,20,27,141,153,22,21],"list apps","apps","show","json"]