[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-set-app-registration-native":3,"mdc-7dj0z3-key":42,"related-repo-microsoft-set-app-registration-native":1360,"related-org-microsoft-set-app-registration-native":1459},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":37,"sourceUrl":40,"mdContent":41},"set-app-registration-native","configure Power Apps Wrap Entra ID registration","Use when the user wants to wire a Power Apps Wrap mobile app to an Entra ID app registration by opening the Power Apps Wrap app-registration page, pasting the resulting client ID, and updating auth.config.json.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Auth","auth","tag",{"name":17,"slug":18,"type":15},"Mobile","mobile",{"name":20,"slug":21,"type":15},"Power Apps","power-apps",{"name":23,"slug":24,"type":15},"Entra ID","entra-id",564,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills","2026-07-21T05:40:14.590542",null,114,[31,32,33,34,21,35,36],"claude-code-plugin","claude-code-skills","code-apps","github-copilot-plugin","power-pages","power-platform",{"repoUrl":26,"stars":25,"forks":29,"topics":38,"description":39},[31,32,33,34,21,35,36],"A plugin marketplace for Claude Code\u002FGitHub Copilot that provides Power Platform development plugins, including reusable skills, agents, and commands for building and deploying solutions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fmobile-apps\u002Fskills\u002Fset-app-registration-native","---\nname: set-app-registration-native\ndescription: Use when the user wants to wire a Power Apps Wrap mobile app to an Entra ID app registration by opening the Power Apps Wrap app-registration page, pasting the resulting client ID, and updating auth.config.json.\nuser-invocable: true\nallowed-tools: Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion\nmodel: sonnet\n---\n\n**Shared instructions: [shared-instructions.md](${PLUGIN_ROOT}\u002Fshared\u002Fshared-instructions.md)** — read first.\n\n# Set App Registration Native\n\nWire `auth.config.json` to an Entra ID app registration for a Power Apps Wrap mobile app.\n\nThis skill is manual by design:\n- Do **not** create or patch app registrations from this skill.\n- Use the public Power Apps Wrap app-registration page to create\u002Fconfigure the\n  registration, then write the pasted client ID into `auth.config.json`.\n- Do not direct the user to add redirect URIs or API permissions manually.\n  Tenant-wide admin consent is not required for this Wrap registration flow.\n\n## Workflow\n\n1. Verify app root -> 2. Resolve environment + tenant -> 3. Open Wrap registration URL -> 4. Capture client ID -> 5. Write `auth.config.json` -> 6. Validate JSON -> 7. Summary\n\n---\n\n## Step 1 — Verify app root\n\nFrom the current directory, verify a generated mobile app root:\n\n```bash\ntest -f auth.config.json && test -f app.config.js && test -f power.config.json\n```\n\nIf this fails, stop and tell the user to run `\u002Fcreate-mobile-app` first or open the generated app folder.\n\n## Step 2 — Resolve environment + tenant\n\nUse the same environment selected by the generated app. Prefer `.resolved-environment.json`, then `auth.config.json.environment`, then `power.config.json` + resolver:\n\n```bash\nENV_ID=$(node -e \"console.log(require('.\u002Fpower.config.json').environmentId || '')\")\nTENANT_ID=$(node -e \"try { const j=require('.\u002F.resolved-environment.json'); console.log(j.tenantId || '') } catch { console.log('') }\" 2>\u002Fdev\u002Fnull)\nif [ -z \"$TENANT_ID\" ]; then\n  TENANT_ID=$(node -e \"try { const j=require('.\u002Fauth.config.json'); console.log((j.environment && j.environment.tenantId) || '') } catch { console.log('') }\" 2>\u002Fdev\u002Fnull)\nfi\nif [ -z \"$TENANT_ID\" ] && [ -n \"$ENV_ID\" ]; then\n  node \"${PLUGIN_ROOT}\u002Fscripts\u002Fresolve-environment.js\" \"$ENV_ID\" > .resolved-environment.json\n  TENANT_ID=$(node -e \"const j=require('.\u002F.resolved-environment.json'); console.log(j.tenantId || '')\")\nfi\necho \"$ENV_ID\"\necho \"$TENANT_ID\"\n```\n\nIf `ENV_ID` is empty, stop: `power.config.json` is not initialized.\n\nIf `TENANT_ID` is empty, stop: environment resolution failed. Do not guess the tenant and do not use a stale `msal.tenantId` as the authority source.\n\n## Step 3 — Open Wrap app-registration page\n\nPrint the public Power Apps Wrap URL for the active environment:\n\n```text\nhttps:\u002F\u002Fmake.powerapps.com\u002Fenvironments\u002F\u003Cenvironment-id>\u002Fwraps#create-app-registration\n```\n\nTell the user:\n\n```text\nOpen the Power Apps Wrap app-registration page for this environment:\nhttps:\u002F\u002Fmake.powerapps.com\u002Fenvironments\u002F\u003Cenvironment-id>\u002Fwraps#create-app-registration\n\nCreate\u002Fregister the app there, then paste the Application (client) ID here.\nThe Wrap page configures the native registration. Do not add redirect URIs or\nAPI permissions manually; tenant-wide admin consent is not required.\nIf you already have a client ID, paste it directly.\nIf you cannot configure auth now, type skip.\n```\n\n## Step 4 — Capture client ID\n\nAsk:\n\n```text\nPaste the Entra ID app registration client ID for tenant \u003Ctenant-guid> (GUID format), or type skip:\n```\n\n- If the user enters `skip`, leave `msal.clientId` blank, ensure `msal.tenantId` is set to the resolved tenant, preserve\u002Fadd the `environment` cache, print the skip warning in Step 7, and stop.\n- Otherwise validate GUID format before editing.\n\n## Step 5 — Write `auth.config.json`\n\nUpdate `auth.config.json`:\n- `msal.clientId` = pasted client ID\n- `msal.tenantId` = resolved tenant ID from Step 2\n- Preserve any top-level `environment` object.\n- If `environment` is missing and `.resolved-environment.json` exists, copy the non-secret resolved environment fields into top-level `environment`.\n\nUse structured JSON editing. Do not store tokens, secrets, or current-user Dataverse identity fields.\n\nExample target shape:\n\n```json\n{\n  \"msal\": {\n    \"clientId\": \"\u003Cclient-id>\",\n    \"tenantId\": \"\u003Ctenant-guid>\"\n  },\n  \"environment\": {\n    \"environmentId\": \"\u003Cenvironment-id>\",\n    \"environmentUrl\": \"https:\u002F\u002Forg.crm.dynamics.com\",\n    \"tenantId\": \"\u003Ctenant-guid>\",\n    \"cachedAt\": \"\u003Ciso timestamp>\"\n  }\n}\n```\n\nDo not touch `src\u002FplayerConfig.ts`; auth identifiers live in `auth.config.json` only.\n\n## Step 6 — Validate JSON\n\n```bash\nnode -e \"JSON.parse(require('fs').readFileSync('auth.config.json','utf8')); console.log('auth.config.json OK')\"\n```\n\nIf dependencies are installed, optionally run:\n\n```bash\nnpx tsc --noEmit\n```\n\nDo not run npm install or native builds from this skill.\n\n## Step 7 — Summary\n\nIf a client ID was written:\n\n```text\nApp registration wired.\nClient ID : \u003Cclient-id>\nTenant    : \u003Ctenant-guid>\nConfig    : auth.config.json\n```\n\nIf skipped:\n\n```text\nAuth client ID was not configured.\nTenant was preserved in auth.config.json: \u003Ctenant-guid>\nThe app will fail to sign in until a client ID is added.\nRun \u002Fset-app-registration-native later, or paste a client ID into auth.config.json.\n```\n",{"data":43,"body":47},{"name":4,"description":6,"user-invocable":44,"allowed-tools":45,"model":46},true,"Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion","sonnet",{"type":48,"children":49},"root",[50,71,77,91,96,130,137,153,157,163,168,239,252,258,286,693,712,731,737,742,752,757,766,772,777,786,830,841,853,912,917,922,1228,1248,1254,1285,1290,1315,1320,1326,1331,1340,1345,1354],{"type":51,"tag":52,"props":53,"children":54},"element","p",{},[55,69],{"type":51,"tag":56,"props":57,"children":58},"strong",{},[59,62],{"type":60,"value":61},"text","Shared instructions: ",{"type":51,"tag":63,"props":64,"children":66},"a",{"href":65},"$%7BPLUGIN_ROOT%7D\u002Fshared\u002Fshared-instructions.md",[67],{"type":60,"value":68},"shared-instructions.md",{"type":60,"value":70}," — read first.",{"type":51,"tag":72,"props":73,"children":74},"h1",{"id":4},[75],{"type":60,"value":76},"Set App Registration Native",{"type":51,"tag":52,"props":78,"children":79},{},[80,82,89],{"type":60,"value":81},"Wire ",{"type":51,"tag":83,"props":84,"children":86},"code",{"className":85},[],[87],{"type":60,"value":88},"auth.config.json",{"type":60,"value":90}," to an Entra ID app registration for a Power Apps Wrap mobile app.",{"type":51,"tag":52,"props":92,"children":93},{},[94],{"type":60,"value":95},"This skill is manual by design:",{"type":51,"tag":97,"props":98,"children":99},"ul",{},[100,113,125],{"type":51,"tag":101,"props":102,"children":103},"li",{},[104,106,111],{"type":60,"value":105},"Do ",{"type":51,"tag":56,"props":107,"children":108},{},[109],{"type":60,"value":110},"not",{"type":60,"value":112}," create or patch app registrations from this skill.",{"type":51,"tag":101,"props":114,"children":115},{},[116,118,123],{"type":60,"value":117},"Use the public Power Apps Wrap app-registration page to create\u002Fconfigure the\nregistration, then write the pasted client ID into ",{"type":51,"tag":83,"props":119,"children":121},{"className":120},[],[122],{"type":60,"value":88},{"type":60,"value":124},".",{"type":51,"tag":101,"props":126,"children":127},{},[128],{"type":60,"value":129},"Do not direct the user to add redirect URIs or API permissions manually.\nTenant-wide admin consent is not required for this Wrap registration flow.",{"type":51,"tag":131,"props":132,"children":134},"h2",{"id":133},"workflow",[135],{"type":60,"value":136},"Workflow",{"type":51,"tag":138,"props":139,"children":140},"ol",{},[141],{"type":51,"tag":101,"props":142,"children":143},{},[144,146,151],{"type":60,"value":145},"Verify app root -> 2. Resolve environment + tenant -> 3. Open Wrap registration URL -> 4. Capture client ID -> 5. Write ",{"type":51,"tag":83,"props":147,"children":149},{"className":148},[],[150],{"type":60,"value":88},{"type":60,"value":152}," -> 6. Validate JSON -> 7. Summary",{"type":51,"tag":154,"props":155,"children":156},"hr",{},[],{"type":51,"tag":131,"props":158,"children":160},{"id":159},"step-1-verify-app-root",[161],{"type":60,"value":162},"Step 1 — Verify app root",{"type":51,"tag":52,"props":164,"children":165},{},[166],{"type":60,"value":167},"From the current directory, verify a generated mobile app root:",{"type":51,"tag":169,"props":170,"children":175},"pre",{"className":171,"code":172,"language":173,"meta":174,"style":174},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","test -f auth.config.json && test -f app.config.js && test -f power.config.json\n","bash","",[176],{"type":51,"tag":83,"props":177,"children":178},{"__ignoreMap":174},[179],{"type":51,"tag":180,"props":181,"children":184},"span",{"class":182,"line":183},"line",1,[185,191,197,202,208,213,217,222,226,230,234],{"type":51,"tag":180,"props":186,"children":188},{"style":187},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[189],{"type":60,"value":190},"test",{"type":51,"tag":180,"props":192,"children":194},{"style":193},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[195],{"type":60,"value":196}," -f",{"type":51,"tag":180,"props":198,"children":199},{"style":193},[200],{"type":60,"value":201}," auth.config.json",{"type":51,"tag":180,"props":203,"children":205},{"style":204},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[206],{"type":60,"value":207}," &&",{"type":51,"tag":180,"props":209,"children":210},{"style":187},[211],{"type":60,"value":212}," test",{"type":51,"tag":180,"props":214,"children":215},{"style":193},[216],{"type":60,"value":196},{"type":51,"tag":180,"props":218,"children":219},{"style":193},[220],{"type":60,"value":221}," app.config.js",{"type":51,"tag":180,"props":223,"children":224},{"style":204},[225],{"type":60,"value":207},{"type":51,"tag":180,"props":227,"children":228},{"style":187},[229],{"type":60,"value":212},{"type":51,"tag":180,"props":231,"children":232},{"style":193},[233],{"type":60,"value":196},{"type":51,"tag":180,"props":235,"children":236},{"style":193},[237],{"type":60,"value":238}," power.config.json\n",{"type":51,"tag":52,"props":240,"children":241},{},[242,244,250],{"type":60,"value":243},"If this fails, stop and tell the user to run ",{"type":51,"tag":83,"props":245,"children":247},{"className":246},[],[248],{"type":60,"value":249},"\u002Fcreate-mobile-app",{"type":60,"value":251}," first or open the generated app folder.",{"type":51,"tag":131,"props":253,"children":255},{"id":254},"step-2-resolve-environment-tenant",[256],{"type":60,"value":257},"Step 2 — Resolve environment + tenant",{"type":51,"tag":52,"props":259,"children":260},{},[261,263,269,271,277,278,284],{"type":60,"value":262},"Use the same environment selected by the generated app. Prefer ",{"type":51,"tag":83,"props":264,"children":266},{"className":265},[],[267],{"type":60,"value":268},".resolved-environment.json",{"type":60,"value":270},", then ",{"type":51,"tag":83,"props":272,"children":274},{"className":273},[],[275],{"type":60,"value":276},"auth.config.json.environment",{"type":60,"value":270},{"type":51,"tag":83,"props":279,"children":281},{"className":280},[],[282],{"type":60,"value":283},"power.config.json",{"type":60,"value":285}," + resolver:",{"type":51,"tag":169,"props":287,"children":289},{"className":171,"code":288,"language":173,"meta":174,"style":174},"ENV_ID=$(node -e \"console.log(require('.\u002Fpower.config.json').environmentId || '')\")\nTENANT_ID=$(node -e \"try { const j=require('.\u002F.resolved-environment.json'); console.log(j.tenantId || '') } catch { console.log('') }\" 2>\u002Fdev\u002Fnull)\nif [ -z \"$TENANT_ID\" ]; then\n  TENANT_ID=$(node -e \"try { const j=require('.\u002Fauth.config.json'); console.log((j.environment && j.environment.tenantId) || '') } catch { console.log('') }\" 2>\u002Fdev\u002Fnull)\nfi\nif [ -z \"$TENANT_ID\" ] && [ -n \"$ENV_ID\" ]; then\n  node \"${PLUGIN_ROOT}\u002Fscripts\u002Fresolve-environment.js\" \"$ENV_ID\" > .resolved-environment.json\n  TENANT_ID=$(node -e \"const j=require('.\u002F.resolved-environment.json'); console.log(j.tenantId || '')\")\nfi\necho \"$ENV_ID\"\necho \"$TENANT_ID\"\n",[290],{"type":51,"tag":83,"props":291,"children":292},{"__ignoreMap":174},[293,338,386,429,475,484,551,606,643,651,673],{"type":51,"tag":180,"props":294,"children":295},{"class":182,"line":183},[296,302,307,313,318,323,328,333],{"type":51,"tag":180,"props":297,"children":299},{"style":298},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[300],{"type":60,"value":301},"ENV_ID",{"type":51,"tag":180,"props":303,"children":304},{"style":204},[305],{"type":60,"value":306},"=$(",{"type":51,"tag":180,"props":308,"children":310},{"style":309},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[311],{"type":60,"value":312},"node",{"type":51,"tag":180,"props":314,"children":315},{"style":193},[316],{"type":60,"value":317}," -e",{"type":51,"tag":180,"props":319,"children":320},{"style":204},[321],{"type":60,"value":322}," \"",{"type":51,"tag":180,"props":324,"children":325},{"style":193},[326],{"type":60,"value":327},"console.log(require('.\u002Fpower.config.json').environmentId || '')",{"type":51,"tag":180,"props":329,"children":330},{"style":204},[331],{"type":60,"value":332},"\"",{"type":51,"tag":180,"props":334,"children":335},{"style":204},[336],{"type":60,"value":337},")\n",{"type":51,"tag":180,"props":339,"children":341},{"class":182,"line":340},2,[342,347,351,355,359,363,368,372,377,382],{"type":51,"tag":180,"props":343,"children":344},{"style":298},[345],{"type":60,"value":346},"TENANT_ID",{"type":51,"tag":180,"props":348,"children":349},{"style":204},[350],{"type":60,"value":306},{"type":51,"tag":180,"props":352,"children":353},{"style":309},[354],{"type":60,"value":312},{"type":51,"tag":180,"props":356,"children":357},{"style":193},[358],{"type":60,"value":317},{"type":51,"tag":180,"props":360,"children":361},{"style":204},[362],{"type":60,"value":322},{"type":51,"tag":180,"props":364,"children":365},{"style":193},[366],{"type":60,"value":367},"try { const j=require('.\u002F.resolved-environment.json'); console.log(j.tenantId || '') } catch { console.log('') }",{"type":51,"tag":180,"props":369,"children":370},{"style":204},[371],{"type":60,"value":332},{"type":51,"tag":180,"props":373,"children":374},{"style":204},[375],{"type":60,"value":376}," 2>",{"type":51,"tag":180,"props":378,"children":379},{"style":193},[380],{"type":60,"value":381},"\u002Fdev\u002Fnull",{"type":51,"tag":180,"props":383,"children":384},{"style":204},[385],{"type":60,"value":337},{"type":51,"tag":180,"props":387,"children":389},{"class":182,"line":388},3,[390,396,401,406,410,415,419,424],{"type":51,"tag":180,"props":391,"children":393},{"style":392},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[394],{"type":60,"value":395},"if",{"type":51,"tag":180,"props":397,"children":398},{"style":204},[399],{"type":60,"value":400}," [",{"type":51,"tag":180,"props":402,"children":403},{"style":204},[404],{"type":60,"value":405}," -z",{"type":51,"tag":180,"props":407,"children":408},{"style":204},[409],{"type":60,"value":322},{"type":51,"tag":180,"props":411,"children":412},{"style":298},[413],{"type":60,"value":414},"$TENANT_ID",{"type":51,"tag":180,"props":416,"children":417},{"style":204},[418],{"type":60,"value":332},{"type":51,"tag":180,"props":420,"children":421},{"style":204},[422],{"type":60,"value":423}," ];",{"type":51,"tag":180,"props":425,"children":426},{"style":392},[427],{"type":60,"value":428}," then\n",{"type":51,"tag":180,"props":430,"children":432},{"class":182,"line":431},4,[433,438,442,446,450,454,459,463,467,471],{"type":51,"tag":180,"props":434,"children":435},{"style":298},[436],{"type":60,"value":437},"  TENANT_ID",{"type":51,"tag":180,"props":439,"children":440},{"style":204},[441],{"type":60,"value":306},{"type":51,"tag":180,"props":443,"children":444},{"style":309},[445],{"type":60,"value":312},{"type":51,"tag":180,"props":447,"children":448},{"style":193},[449],{"type":60,"value":317},{"type":51,"tag":180,"props":451,"children":452},{"style":204},[453],{"type":60,"value":322},{"type":51,"tag":180,"props":455,"children":456},{"style":193},[457],{"type":60,"value":458},"try { const j=require('.\u002Fauth.config.json'); console.log((j.environment && j.environment.tenantId) || '') } catch { console.log('') }",{"type":51,"tag":180,"props":460,"children":461},{"style":204},[462],{"type":60,"value":332},{"type":51,"tag":180,"props":464,"children":465},{"style":204},[466],{"type":60,"value":376},{"type":51,"tag":180,"props":468,"children":469},{"style":193},[470],{"type":60,"value":381},{"type":51,"tag":180,"props":472,"children":473},{"style":204},[474],{"type":60,"value":337},{"type":51,"tag":180,"props":476,"children":478},{"class":182,"line":477},5,[479],{"type":51,"tag":180,"props":480,"children":481},{"style":392},[482],{"type":60,"value":483},"fi\n",{"type":51,"tag":180,"props":485,"children":487},{"class":182,"line":486},6,[488,492,496,500,504,508,512,517,521,525,530,534,539,543,547],{"type":51,"tag":180,"props":489,"children":490},{"style":392},[491],{"type":60,"value":395},{"type":51,"tag":180,"props":493,"children":494},{"style":204},[495],{"type":60,"value":400},{"type":51,"tag":180,"props":497,"children":498},{"style":204},[499],{"type":60,"value":405},{"type":51,"tag":180,"props":501,"children":502},{"style":204},[503],{"type":60,"value":322},{"type":51,"tag":180,"props":505,"children":506},{"style":298},[507],{"type":60,"value":414},{"type":51,"tag":180,"props":509,"children":510},{"style":204},[511],{"type":60,"value":332},{"type":51,"tag":180,"props":513,"children":514},{"style":204},[515],{"type":60,"value":516}," ]",{"type":51,"tag":180,"props":518,"children":519},{"style":204},[520],{"type":60,"value":207},{"type":51,"tag":180,"props":522,"children":523},{"style":204},[524],{"type":60,"value":400},{"type":51,"tag":180,"props":526,"children":527},{"style":204},[528],{"type":60,"value":529}," -n",{"type":51,"tag":180,"props":531,"children":532},{"style":204},[533],{"type":60,"value":322},{"type":51,"tag":180,"props":535,"children":536},{"style":298},[537],{"type":60,"value":538},"$ENV_ID",{"type":51,"tag":180,"props":540,"children":541},{"style":204},[542],{"type":60,"value":332},{"type":51,"tag":180,"props":544,"children":545},{"style":204},[546],{"type":60,"value":423},{"type":51,"tag":180,"props":548,"children":549},{"style":392},[550],{"type":60,"value":428},{"type":51,"tag":180,"props":552,"children":554},{"class":182,"line":553},7,[555,560,565,570,575,580,584,588,592,596,601],{"type":51,"tag":180,"props":556,"children":557},{"style":309},[558],{"type":60,"value":559},"  node",{"type":51,"tag":180,"props":561,"children":562},{"style":204},[563],{"type":60,"value":564}," \"${",{"type":51,"tag":180,"props":566,"children":567},{"style":298},[568],{"type":60,"value":569},"PLUGIN_ROOT",{"type":51,"tag":180,"props":571,"children":572},{"style":204},[573],{"type":60,"value":574},"}",{"type":51,"tag":180,"props":576,"children":577},{"style":193},[578],{"type":60,"value":579},"\u002Fscripts\u002Fresolve-environment.js",{"type":51,"tag":180,"props":581,"children":582},{"style":204},[583],{"type":60,"value":332},{"type":51,"tag":180,"props":585,"children":586},{"style":204},[587],{"type":60,"value":322},{"type":51,"tag":180,"props":589,"children":590},{"style":298},[591],{"type":60,"value":538},{"type":51,"tag":180,"props":593,"children":594},{"style":204},[595],{"type":60,"value":332},{"type":51,"tag":180,"props":597,"children":598},{"style":204},[599],{"type":60,"value":600}," >",{"type":51,"tag":180,"props":602,"children":603},{"style":193},[604],{"type":60,"value":605}," .resolved-environment.json\n",{"type":51,"tag":180,"props":607,"children":609},{"class":182,"line":608},8,[610,614,618,622,626,630,635,639],{"type":51,"tag":180,"props":611,"children":612},{"style":298},[613],{"type":60,"value":437},{"type":51,"tag":180,"props":615,"children":616},{"style":204},[617],{"type":60,"value":306},{"type":51,"tag":180,"props":619,"children":620},{"style":309},[621],{"type":60,"value":312},{"type":51,"tag":180,"props":623,"children":624},{"style":193},[625],{"type":60,"value":317},{"type":51,"tag":180,"props":627,"children":628},{"style":204},[629],{"type":60,"value":322},{"type":51,"tag":180,"props":631,"children":632},{"style":193},[633],{"type":60,"value":634},"const j=require('.\u002F.resolved-environment.json'); console.log(j.tenantId || '')",{"type":51,"tag":180,"props":636,"children":637},{"style":204},[638],{"type":60,"value":332},{"type":51,"tag":180,"props":640,"children":641},{"style":204},[642],{"type":60,"value":337},{"type":51,"tag":180,"props":644,"children":646},{"class":182,"line":645},9,[647],{"type":51,"tag":180,"props":648,"children":649},{"style":392},[650],{"type":60,"value":483},{"type":51,"tag":180,"props":652,"children":654},{"class":182,"line":653},10,[655,660,664,668],{"type":51,"tag":180,"props":656,"children":657},{"style":187},[658],{"type":60,"value":659},"echo",{"type":51,"tag":180,"props":661,"children":662},{"style":204},[663],{"type":60,"value":322},{"type":51,"tag":180,"props":665,"children":666},{"style":298},[667],{"type":60,"value":538},{"type":51,"tag":180,"props":669,"children":670},{"style":204},[671],{"type":60,"value":672},"\"\n",{"type":51,"tag":180,"props":674,"children":676},{"class":182,"line":675},11,[677,681,685,689],{"type":51,"tag":180,"props":678,"children":679},{"style":187},[680],{"type":60,"value":659},{"type":51,"tag":180,"props":682,"children":683},{"style":204},[684],{"type":60,"value":322},{"type":51,"tag":180,"props":686,"children":687},{"style":298},[688],{"type":60,"value":414},{"type":51,"tag":180,"props":690,"children":691},{"style":204},[692],{"type":60,"value":672},{"type":51,"tag":52,"props":694,"children":695},{},[696,698,703,705,710],{"type":60,"value":697},"If ",{"type":51,"tag":83,"props":699,"children":701},{"className":700},[],[702],{"type":60,"value":301},{"type":60,"value":704}," is empty, stop: ",{"type":51,"tag":83,"props":706,"children":708},{"className":707},[],[709],{"type":60,"value":283},{"type":60,"value":711}," is not initialized.",{"type":51,"tag":52,"props":713,"children":714},{},[715,716,721,723,729],{"type":60,"value":697},{"type":51,"tag":83,"props":717,"children":719},{"className":718},[],[720],{"type":60,"value":346},{"type":60,"value":722}," is empty, stop: environment resolution failed. Do not guess the tenant and do not use a stale ",{"type":51,"tag":83,"props":724,"children":726},{"className":725},[],[727],{"type":60,"value":728},"msal.tenantId",{"type":60,"value":730}," as the authority source.",{"type":51,"tag":131,"props":732,"children":734},{"id":733},"step-3-open-wrap-app-registration-page",[735],{"type":60,"value":736},"Step 3 — Open Wrap app-registration page",{"type":51,"tag":52,"props":738,"children":739},{},[740],{"type":60,"value":741},"Print the public Power Apps Wrap URL for the active environment:",{"type":51,"tag":169,"props":743,"children":747},{"className":744,"code":746,"language":60,"meta":174},[745],"language-text","https:\u002F\u002Fmake.powerapps.com\u002Fenvironments\u002F\u003Cenvironment-id>\u002Fwraps#create-app-registration\n",[748],{"type":51,"tag":83,"props":749,"children":750},{"__ignoreMap":174},[751],{"type":60,"value":746},{"type":51,"tag":52,"props":753,"children":754},{},[755],{"type":60,"value":756},"Tell the user:",{"type":51,"tag":169,"props":758,"children":761},{"className":759,"code":760,"language":60,"meta":174},[745],"Open the Power Apps Wrap app-registration page for this environment:\nhttps:\u002F\u002Fmake.powerapps.com\u002Fenvironments\u002F\u003Cenvironment-id>\u002Fwraps#create-app-registration\n\nCreate\u002Fregister the app there, then paste the Application (client) ID here.\nThe Wrap page configures the native registration. Do not add redirect URIs or\nAPI permissions manually; tenant-wide admin consent is not required.\nIf you already have a client ID, paste it directly.\nIf you cannot configure auth now, type skip.\n",[762],{"type":51,"tag":83,"props":763,"children":764},{"__ignoreMap":174},[765],{"type":60,"value":760},{"type":51,"tag":131,"props":767,"children":769},{"id":768},"step-4-capture-client-id",[770],{"type":60,"value":771},"Step 4 — Capture client ID",{"type":51,"tag":52,"props":773,"children":774},{},[775],{"type":60,"value":776},"Ask:",{"type":51,"tag":169,"props":778,"children":781},{"className":779,"code":780,"language":60,"meta":174},[745],"Paste the Entra ID app registration client ID for tenant \u003Ctenant-guid> (GUID format), or type skip:\n",[782],{"type":51,"tag":83,"props":783,"children":784},{"__ignoreMap":174},[785],{"type":60,"value":780},{"type":51,"tag":97,"props":787,"children":788},{},[789,825],{"type":51,"tag":101,"props":790,"children":791},{},[792,794,800,802,808,810,815,817,823],{"type":60,"value":793},"If the user enters ",{"type":51,"tag":83,"props":795,"children":797},{"className":796},[],[798],{"type":60,"value":799},"skip",{"type":60,"value":801},", leave ",{"type":51,"tag":83,"props":803,"children":805},{"className":804},[],[806],{"type":60,"value":807},"msal.clientId",{"type":60,"value":809}," blank, ensure ",{"type":51,"tag":83,"props":811,"children":813},{"className":812},[],[814],{"type":60,"value":728},{"type":60,"value":816}," is set to the resolved tenant, preserve\u002Fadd the ",{"type":51,"tag":83,"props":818,"children":820},{"className":819},[],[821],{"type":60,"value":822},"environment",{"type":60,"value":824}," cache, print the skip warning in Step 7, and stop.",{"type":51,"tag":101,"props":826,"children":827},{},[828],{"type":60,"value":829},"Otherwise validate GUID format before editing.",{"type":51,"tag":131,"props":831,"children":833},{"id":832},"step-5-write-authconfigjson",[834,836],{"type":60,"value":835},"Step 5 — Write ",{"type":51,"tag":83,"props":837,"children":839},{"className":838},[],[840],{"type":60,"value":88},{"type":51,"tag":52,"props":842,"children":843},{},[844,846,851],{"type":60,"value":845},"Update ",{"type":51,"tag":83,"props":847,"children":849},{"className":848},[],[850],{"type":60,"value":88},{"type":60,"value":852},":",{"type":51,"tag":97,"props":854,"children":855},{},[856,866,876,888],{"type":51,"tag":101,"props":857,"children":858},{},[859,864],{"type":51,"tag":83,"props":860,"children":862},{"className":861},[],[863],{"type":60,"value":807},{"type":60,"value":865}," = pasted client ID",{"type":51,"tag":101,"props":867,"children":868},{},[869,874],{"type":51,"tag":83,"props":870,"children":872},{"className":871},[],[873],{"type":60,"value":728},{"type":60,"value":875}," = resolved tenant ID from Step 2",{"type":51,"tag":101,"props":877,"children":878},{},[879,881,886],{"type":60,"value":880},"Preserve any top-level ",{"type":51,"tag":83,"props":882,"children":884},{"className":883},[],[885],{"type":60,"value":822},{"type":60,"value":887}," object.",{"type":51,"tag":101,"props":889,"children":890},{},[891,892,897,899,904,906,911],{"type":60,"value":697},{"type":51,"tag":83,"props":893,"children":895},{"className":894},[],[896],{"type":60,"value":822},{"type":60,"value":898}," is missing and ",{"type":51,"tag":83,"props":900,"children":902},{"className":901},[],[903],{"type":60,"value":268},{"type":60,"value":905}," exists, copy the non-secret resolved environment fields into top-level ",{"type":51,"tag":83,"props":907,"children":909},{"className":908},[],[910],{"type":60,"value":822},{"type":60,"value":124},{"type":51,"tag":52,"props":913,"children":914},{},[915],{"type":60,"value":916},"Use structured JSON editing. Do not store tokens, secrets, or current-user Dataverse identity fields.",{"type":51,"tag":52,"props":918,"children":919},{},[920],{"type":60,"value":921},"Example target shape:",{"type":51,"tag":169,"props":923,"children":927},{"className":924,"code":925,"language":926,"meta":174,"style":174},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"msal\": {\n    \"clientId\": \"\u003Cclient-id>\",\n    \"tenantId\": \"\u003Ctenant-guid>\"\n  },\n  \"environment\": {\n    \"environmentId\": \"\u003Cenvironment-id>\",\n    \"environmentUrl\": \"https:\u002F\u002Forg.crm.dynamics.com\",\n    \"tenantId\": \"\u003Ctenant-guid>\",\n    \"cachedAt\": \"\u003Ciso timestamp>\"\n  }\n}\n","json",[928],{"type":51,"tag":83,"props":929,"children":930},{"__ignoreMap":174},[931,939,966,1005,1038,1046,1069,1106,1143,1178,1211,1219],{"type":51,"tag":180,"props":932,"children":933},{"class":182,"line":183},[934],{"type":51,"tag":180,"props":935,"children":936},{"style":204},[937],{"type":60,"value":938},"{\n",{"type":51,"tag":180,"props":940,"children":941},{"class":182,"line":340},[942,947,953,957,961],{"type":51,"tag":180,"props":943,"children":944},{"style":204},[945],{"type":60,"value":946},"  \"",{"type":51,"tag":180,"props":948,"children":950},{"style":949},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[951],{"type":60,"value":952},"msal",{"type":51,"tag":180,"props":954,"children":955},{"style":204},[956],{"type":60,"value":332},{"type":51,"tag":180,"props":958,"children":959},{"style":204},[960],{"type":60,"value":852},{"type":51,"tag":180,"props":962,"children":963},{"style":204},[964],{"type":60,"value":965}," {\n",{"type":51,"tag":180,"props":967,"children":968},{"class":182,"line":388},[969,974,979,983,987,991,996,1000],{"type":51,"tag":180,"props":970,"children":971},{"style":204},[972],{"type":60,"value":973},"    \"",{"type":51,"tag":180,"props":975,"children":976},{"style":309},[977],{"type":60,"value":978},"clientId",{"type":51,"tag":180,"props":980,"children":981},{"style":204},[982],{"type":60,"value":332},{"type":51,"tag":180,"props":984,"children":985},{"style":204},[986],{"type":60,"value":852},{"type":51,"tag":180,"props":988,"children":989},{"style":204},[990],{"type":60,"value":322},{"type":51,"tag":180,"props":992,"children":993},{"style":193},[994],{"type":60,"value":995},"\u003Cclient-id>",{"type":51,"tag":180,"props":997,"children":998},{"style":204},[999],{"type":60,"value":332},{"type":51,"tag":180,"props":1001,"children":1002},{"style":204},[1003],{"type":60,"value":1004},",\n",{"type":51,"tag":180,"props":1006,"children":1007},{"class":182,"line":431},[1008,1012,1017,1021,1025,1029,1034],{"type":51,"tag":180,"props":1009,"children":1010},{"style":204},[1011],{"type":60,"value":973},{"type":51,"tag":180,"props":1013,"children":1014},{"style":309},[1015],{"type":60,"value":1016},"tenantId",{"type":51,"tag":180,"props":1018,"children":1019},{"style":204},[1020],{"type":60,"value":332},{"type":51,"tag":180,"props":1022,"children":1023},{"style":204},[1024],{"type":60,"value":852},{"type":51,"tag":180,"props":1026,"children":1027},{"style":204},[1028],{"type":60,"value":322},{"type":51,"tag":180,"props":1030,"children":1031},{"style":193},[1032],{"type":60,"value":1033},"\u003Ctenant-guid>",{"type":51,"tag":180,"props":1035,"children":1036},{"style":204},[1037],{"type":60,"value":672},{"type":51,"tag":180,"props":1039,"children":1040},{"class":182,"line":477},[1041],{"type":51,"tag":180,"props":1042,"children":1043},{"style":204},[1044],{"type":60,"value":1045},"  },\n",{"type":51,"tag":180,"props":1047,"children":1048},{"class":182,"line":486},[1049,1053,1057,1061,1065],{"type":51,"tag":180,"props":1050,"children":1051},{"style":204},[1052],{"type":60,"value":946},{"type":51,"tag":180,"props":1054,"children":1055},{"style":949},[1056],{"type":60,"value":822},{"type":51,"tag":180,"props":1058,"children":1059},{"style":204},[1060],{"type":60,"value":332},{"type":51,"tag":180,"props":1062,"children":1063},{"style":204},[1064],{"type":60,"value":852},{"type":51,"tag":180,"props":1066,"children":1067},{"style":204},[1068],{"type":60,"value":965},{"type":51,"tag":180,"props":1070,"children":1071},{"class":182,"line":553},[1072,1076,1081,1085,1089,1093,1098,1102],{"type":51,"tag":180,"props":1073,"children":1074},{"style":204},[1075],{"type":60,"value":973},{"type":51,"tag":180,"props":1077,"children":1078},{"style":309},[1079],{"type":60,"value":1080},"environmentId",{"type":51,"tag":180,"props":1082,"children":1083},{"style":204},[1084],{"type":60,"value":332},{"type":51,"tag":180,"props":1086,"children":1087},{"style":204},[1088],{"type":60,"value":852},{"type":51,"tag":180,"props":1090,"children":1091},{"style":204},[1092],{"type":60,"value":322},{"type":51,"tag":180,"props":1094,"children":1095},{"style":193},[1096],{"type":60,"value":1097},"\u003Cenvironment-id>",{"type":51,"tag":180,"props":1099,"children":1100},{"style":204},[1101],{"type":60,"value":332},{"type":51,"tag":180,"props":1103,"children":1104},{"style":204},[1105],{"type":60,"value":1004},{"type":51,"tag":180,"props":1107,"children":1108},{"class":182,"line":608},[1109,1113,1118,1122,1126,1130,1135,1139],{"type":51,"tag":180,"props":1110,"children":1111},{"style":204},[1112],{"type":60,"value":973},{"type":51,"tag":180,"props":1114,"children":1115},{"style":309},[1116],{"type":60,"value":1117},"environmentUrl",{"type":51,"tag":180,"props":1119,"children":1120},{"style":204},[1121],{"type":60,"value":332},{"type":51,"tag":180,"props":1123,"children":1124},{"style":204},[1125],{"type":60,"value":852},{"type":51,"tag":180,"props":1127,"children":1128},{"style":204},[1129],{"type":60,"value":322},{"type":51,"tag":180,"props":1131,"children":1132},{"style":193},[1133],{"type":60,"value":1134},"https:\u002F\u002Forg.crm.dynamics.com",{"type":51,"tag":180,"props":1136,"children":1137},{"style":204},[1138],{"type":60,"value":332},{"type":51,"tag":180,"props":1140,"children":1141},{"style":204},[1142],{"type":60,"value":1004},{"type":51,"tag":180,"props":1144,"children":1145},{"class":182,"line":645},[1146,1150,1154,1158,1162,1166,1170,1174],{"type":51,"tag":180,"props":1147,"children":1148},{"style":204},[1149],{"type":60,"value":973},{"type":51,"tag":180,"props":1151,"children":1152},{"style":309},[1153],{"type":60,"value":1016},{"type":51,"tag":180,"props":1155,"children":1156},{"style":204},[1157],{"type":60,"value":332},{"type":51,"tag":180,"props":1159,"children":1160},{"style":204},[1161],{"type":60,"value":852},{"type":51,"tag":180,"props":1163,"children":1164},{"style":204},[1165],{"type":60,"value":322},{"type":51,"tag":180,"props":1167,"children":1168},{"style":193},[1169],{"type":60,"value":1033},{"type":51,"tag":180,"props":1171,"children":1172},{"style":204},[1173],{"type":60,"value":332},{"type":51,"tag":180,"props":1175,"children":1176},{"style":204},[1177],{"type":60,"value":1004},{"type":51,"tag":180,"props":1179,"children":1180},{"class":182,"line":653},[1181,1185,1190,1194,1198,1202,1207],{"type":51,"tag":180,"props":1182,"children":1183},{"style":204},[1184],{"type":60,"value":973},{"type":51,"tag":180,"props":1186,"children":1187},{"style":309},[1188],{"type":60,"value":1189},"cachedAt",{"type":51,"tag":180,"props":1191,"children":1192},{"style":204},[1193],{"type":60,"value":332},{"type":51,"tag":180,"props":1195,"children":1196},{"style":204},[1197],{"type":60,"value":852},{"type":51,"tag":180,"props":1199,"children":1200},{"style":204},[1201],{"type":60,"value":322},{"type":51,"tag":180,"props":1203,"children":1204},{"style":193},[1205],{"type":60,"value":1206},"\u003Ciso timestamp>",{"type":51,"tag":180,"props":1208,"children":1209},{"style":204},[1210],{"type":60,"value":672},{"type":51,"tag":180,"props":1212,"children":1213},{"class":182,"line":675},[1214],{"type":51,"tag":180,"props":1215,"children":1216},{"style":204},[1217],{"type":60,"value":1218},"  }\n",{"type":51,"tag":180,"props":1220,"children":1222},{"class":182,"line":1221},12,[1223],{"type":51,"tag":180,"props":1224,"children":1225},{"style":204},[1226],{"type":60,"value":1227},"}\n",{"type":51,"tag":52,"props":1229,"children":1230},{},[1231,1233,1239,1241,1246],{"type":60,"value":1232},"Do not touch ",{"type":51,"tag":83,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":60,"value":1238},"src\u002FplayerConfig.ts",{"type":60,"value":1240},"; auth identifiers live in ",{"type":51,"tag":83,"props":1242,"children":1244},{"className":1243},[],[1245],{"type":60,"value":88},{"type":60,"value":1247}," only.",{"type":51,"tag":131,"props":1249,"children":1251},{"id":1250},"step-6-validate-json",[1252],{"type":60,"value":1253},"Step 6 — Validate JSON",{"type":51,"tag":169,"props":1255,"children":1257},{"className":171,"code":1256,"language":173,"meta":174,"style":174},"node -e \"JSON.parse(require('fs').readFileSync('auth.config.json','utf8')); console.log('auth.config.json OK')\"\n",[1258],{"type":51,"tag":83,"props":1259,"children":1260},{"__ignoreMap":174},[1261],{"type":51,"tag":180,"props":1262,"children":1263},{"class":182,"line":183},[1264,1268,1272,1276,1281],{"type":51,"tag":180,"props":1265,"children":1266},{"style":309},[1267],{"type":60,"value":312},{"type":51,"tag":180,"props":1269,"children":1270},{"style":193},[1271],{"type":60,"value":317},{"type":51,"tag":180,"props":1273,"children":1274},{"style":204},[1275],{"type":60,"value":322},{"type":51,"tag":180,"props":1277,"children":1278},{"style":193},[1279],{"type":60,"value":1280},"JSON.parse(require('fs').readFileSync('auth.config.json','utf8')); console.log('auth.config.json OK')",{"type":51,"tag":180,"props":1282,"children":1283},{"style":204},[1284],{"type":60,"value":672},{"type":51,"tag":52,"props":1286,"children":1287},{},[1288],{"type":60,"value":1289},"If dependencies are installed, optionally run:",{"type":51,"tag":169,"props":1291,"children":1293},{"className":171,"code":1292,"language":173,"meta":174,"style":174},"npx tsc --noEmit\n",[1294],{"type":51,"tag":83,"props":1295,"children":1296},{"__ignoreMap":174},[1297],{"type":51,"tag":180,"props":1298,"children":1299},{"class":182,"line":183},[1300,1305,1310],{"type":51,"tag":180,"props":1301,"children":1302},{"style":309},[1303],{"type":60,"value":1304},"npx",{"type":51,"tag":180,"props":1306,"children":1307},{"style":193},[1308],{"type":60,"value":1309}," tsc",{"type":51,"tag":180,"props":1311,"children":1312},{"style":193},[1313],{"type":60,"value":1314}," --noEmit\n",{"type":51,"tag":52,"props":1316,"children":1317},{},[1318],{"type":60,"value":1319},"Do not run npm install or native builds from this skill.",{"type":51,"tag":131,"props":1321,"children":1323},{"id":1322},"step-7-summary",[1324],{"type":60,"value":1325},"Step 7 — Summary",{"type":51,"tag":52,"props":1327,"children":1328},{},[1329],{"type":60,"value":1330},"If a client ID was written:",{"type":51,"tag":169,"props":1332,"children":1335},{"className":1333,"code":1334,"language":60,"meta":174},[745],"App registration wired.\nClient ID : \u003Cclient-id>\nTenant    : \u003Ctenant-guid>\nConfig    : auth.config.json\n",[1336],{"type":51,"tag":83,"props":1337,"children":1338},{"__ignoreMap":174},[1339],{"type":60,"value":1334},{"type":51,"tag":52,"props":1341,"children":1342},{},[1343],{"type":60,"value":1344},"If skipped:",{"type":51,"tag":169,"props":1346,"children":1349},{"className":1347,"code":1348,"language":60,"meta":174},[745],"Auth client ID was not configured.\nTenant was preserved in auth.config.json: \u003Ctenant-guid>\nThe app will fail to sign in until a client ID is added.\nRun \u002Fset-app-registration-native later, or paste a client ID into auth.config.json.\n",[1350],{"type":51,"tag":83,"props":1351,"children":1352},{"__ignoreMap":174},[1353],{"type":60,"value":1348},{"type":51,"tag":1355,"props":1356,"children":1357},"style",{},[1358],{"type":60,"value":1359},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1361,"total":1458},[1362,1375,1388,1398,1413,1426,1442],{"slug":1363,"name":1363,"fn":1364,"description":1365,"org":1366,"tags":1367,"stars":25,"repoUrl":26,"updatedAt":1374},"activate-site","provision and activate Power Pages sites","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1368,1371,1372],{"name":1369,"slug":1370,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":1373,"slug":35,"type":15},"Power Pages","2026-04-06T18:34:34.732549",{"slug":1376,"name":1376,"fn":1377,"description":1378,"org":1379,"tags":1380,"stars":25,"repoUrl":26,"updatedAt":1387},"add-connector","add Power Platform connectors to apps","Adds any Power Platform connector to a Power Apps code app. Generic fallback for connectors not covered by a specific skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1381,1384,1385],{"name":1382,"slug":1383,"type":15},"Integrations","integrations",{"name":20,"slug":21,"type":15},{"name":1386,"slug":36,"type":15},"Power Platform","2026-07-31T05:54:47.042251",{"slug":1389,"name":1389,"fn":1390,"description":1391,"org":1392,"tags":1393,"stars":25,"repoUrl":26,"updatedAt":1397},"add-datasource","add data sources to Power Apps","Adds a data source or connector to a Power Apps code app. Asks what the user wants to accomplish and routes to the appropriate specialized skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1394,1395,1396],{"name":1382,"slug":1383,"type":15},{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-03T16:31:47.822186",{"slug":1399,"name":1399,"fn":1400,"description":1401,"org":1402,"tags":1403,"stars":25,"repoUrl":26,"updatedAt":1412},"add-dataverse","add Dataverse tables to Power Apps","Use when the user wants to add Dataverse tables (existing or new) to a Power Apps mobile app, extend an existing Dataverse table with new columns, or apply an approved data model plan.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1404,1407,1410,1411],{"name":1405,"slug":1406,"type":15},"Data Modeling","data-modeling",{"name":1408,"slug":1409,"type":15},"Dataverse","dataverse",{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-31T05:54:46.078014",{"slug":1414,"name":1414,"fn":1415,"description":1416,"org":1417,"tags":1418,"stars":25,"repoUrl":26,"updatedAt":1425},"add-excel","integrate Excel Online into Power Apps","Adds Excel Online (Business) connector to a Power Apps code app. Use when reading or writing Excel workbook data from OneDrive or SharePoint.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1419,1422,1423,1424],{"name":1420,"slug":1421,"type":15},"Excel","excel",{"name":1382,"slug":1383,"type":15},{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-31T05:54:44.030943",{"slug":1427,"name":1427,"fn":1428,"description":1429,"org":1430,"tags":1431,"stars":25,"repoUrl":26,"updatedAt":1441},"add-mcscopilot","add Copilot Studio connectors to Power Apps","Adds Microsoft Copilot Studio connector to a Power Apps code app. Use when invoking Copilot Studio agents, sending prompts to agents, or integrating agent responses.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1432,1435,1438,1439,1440],{"name":1433,"slug":1434,"type":15},"Agents","agents",{"name":1436,"slug":1437,"type":15},"Copilot Studio","copilot-studio",{"name":1382,"slug":1383,"type":15},{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-31T05:54:39.025597",{"slug":1443,"name":1443,"fn":1444,"description":1445,"org":1446,"tags":1447,"stars":25,"repoUrl":26,"updatedAt":1457},"add-sample-data","populate Power Pages tables with sample data","Populates Dataverse tables with sample records for testing and demoing a Power Pages site. Use when the user wants to add sample data, seed data, generate test records, or insert demo data into their tables.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1448,1451,1452,1453,1454],{"name":1449,"slug":1450,"type":15},"Database","database",{"name":1408,"slug":1409,"type":15},{"name":9,"slug":8,"type":15},{"name":1373,"slug":35,"type":15},{"name":1455,"slug":1456,"type":15},"Testing","testing","2026-04-06T18:34:41.141155",26,{"items":1460,"total":1651},[1461,1483,1502,1523,1538,1555,1566,1579,1594,1609,1626,1639],{"slug":1462,"name":1462,"fn":1463,"description":1464,"org":1465,"tags":1466,"stars":1480,"repoUrl":1481,"updatedAt":1482},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1467,1470,1473,1474,1477],{"name":1468,"slug":1469,"type":15},"Engineering","engineering",{"name":1471,"slug":1472,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1475,"slug":1476,"type":15},"Project Management","project-management",{"name":1478,"slug":1479,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1484,"name":1484,"fn":1485,"description":1486,"org":1487,"tags":1488,"stars":1499,"repoUrl":1500,"updatedAt":1501},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1489,1492,1493,1496],{"name":1490,"slug":1491,"type":15},".NET","net",{"name":1433,"slug":1434,"type":15},{"name":1494,"slug":1495,"type":15},"Azure","azure",{"name":1497,"slug":1498,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1503,"name":1503,"fn":1504,"description":1505,"org":1506,"tags":1507,"stars":1499,"repoUrl":1500,"updatedAt":1522},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1508,1511,1512,1515,1518,1519],{"name":1509,"slug":1510,"type":15},"Analytics","analytics",{"name":1494,"slug":1495,"type":15},{"name":1513,"slug":1514,"type":15},"Data Analysis","data-analysis",{"name":1516,"slug":1517,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1520,"slug":1521,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1524,"name":1524,"fn":1525,"description":1526,"org":1527,"tags":1528,"stars":1499,"repoUrl":1500,"updatedAt":1537},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1529,1532,1533,1534],{"name":1530,"slug":1531,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1494,"slug":1495,"type":15},{"name":1516,"slug":1517,"type":15},{"name":1535,"slug":1536,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1539,"name":1539,"fn":1540,"description":1541,"org":1542,"tags":1543,"stars":1499,"repoUrl":1500,"updatedAt":1554},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1544,1545,1548,1549,1550,1553],{"name":1494,"slug":1495,"type":15},{"name":1546,"slug":1547,"type":15},"Compliance","compliance",{"name":1497,"slug":1498,"type":15},{"name":9,"slug":8,"type":15},{"name":1551,"slug":1552,"type":15},"Python","python",{"name":1535,"slug":1536,"type":15},"2026-07-18T05:14:23.017504",{"slug":1556,"name":1556,"fn":1557,"description":1558,"org":1559,"tags":1560,"stars":1499,"repoUrl":1500,"updatedAt":1565},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1561,1562,1563,1564],{"name":1509,"slug":1510,"type":15},{"name":1494,"slug":1495,"type":15},{"name":1497,"slug":1498,"type":15},{"name":1551,"slug":1552,"type":15},"2026-07-31T05:54:29.068751",{"slug":1567,"name":1567,"fn":1568,"description":1569,"org":1570,"tags":1571,"stars":1499,"repoUrl":1500,"updatedAt":1578},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1572,1575,1576,1577],{"name":1573,"slug":1574,"type":15},"API Development","api-development",{"name":1494,"slug":1495,"type":15},{"name":9,"slug":8,"type":15},{"name":1551,"slug":1552,"type":15},"2026-07-18T05:14:16.988376",{"slug":1580,"name":1580,"fn":1581,"description":1582,"org":1583,"tags":1584,"stars":1499,"repoUrl":1500,"updatedAt":1593},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1585,1586,1589,1592],{"name":1494,"slug":1495,"type":15},{"name":1587,"slug":1588,"type":15},"Computer Vision","computer-vision",{"name":1590,"slug":1591,"type":15},"Images","images",{"name":1551,"slug":1552,"type":15},"2026-07-18T05:14:18.007737",{"slug":1595,"name":1595,"fn":1596,"description":1597,"org":1598,"tags":1599,"stars":1499,"repoUrl":1500,"updatedAt":1608},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1600,1601,1604,1607],{"name":1494,"slug":1495,"type":15},{"name":1602,"slug":1603,"type":15},"Configuration","configuration",{"name":1605,"slug":1606,"type":15},"Feature Flags","feature-flags",{"name":1516,"slug":1517,"type":15},"2026-07-03T16:32:01.278468",{"slug":1610,"name":1610,"fn":1611,"description":1612,"org":1613,"tags":1614,"stars":1499,"repoUrl":1500,"updatedAt":1625},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1615,1618,1619,1622],{"name":1616,"slug":1617,"type":15},"Cosmos DB","cosmos-db",{"name":1449,"slug":1450,"type":15},{"name":1620,"slug":1621,"type":15},"NoSQL","nosql",{"name":1623,"slug":1624,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1627,"name":1627,"fn":1611,"description":1628,"org":1629,"tags":1630,"stars":1499,"repoUrl":1500,"updatedAt":1638},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1631,1632,1633,1634,1635],{"name":1616,"slug":1617,"type":15},{"name":1449,"slug":1450,"type":15},{"name":9,"slug":8,"type":15},{"name":1620,"slug":1621,"type":15},{"name":1636,"slug":1637,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1640,"name":1640,"fn":1641,"description":1642,"org":1643,"tags":1644,"stars":1499,"repoUrl":1500,"updatedAt":1650},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1645,1646,1647,1648,1649],{"name":1494,"slug":1495,"type":15},{"name":1616,"slug":1617,"type":15},{"name":1449,"slug":1450,"type":15},{"name":1516,"slug":1517,"type":15},{"name":1620,"slug":1621,"type":15},"2026-05-13T06:14:17.582229",267]