Individual skill
generate-pcf-companion
Generate the dispatcher PCF for a third-party `.ppmplugin` (wrap-runtime) control. Runs `pac pcf init` in the pcf/ subfolder, rewrites ControlManifest.Input.xml from ARCHITECTURE §6, and writes index.ts derived from ARCHITECTURE §4 (message contract), §8 (PCF surface), §9 (error UX) — no placeholders. The bridge dispatches the composite key `<name>/<receiver>` to `NativeModules.<nativeModule>.<method>` via the host-injected `window.PowerApps.NativeExtension.sendAsync` global (never `cordova.exec` — not in the PCF sandbox); also emits a `PowerAppsNativeExtension.d.ts` ambient declaration. Responses are peeled with `extractResponse`. Emits structured JSON debug/error logs. Validated by `npm run build`. **Local only** — does not deploy. Needs only `pac` CLI. Run after the native module exists. Uses npm (not pnpm).
plugins/power-apps-mobile-extension/skills/generate-pcf-companion/SKILL.md
Source commit 9a3cf2e61277cb3d96e103b0cdd73017829476fa
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 5, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 1,126
- Repository last updated
- Nov 8, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- claude-code-plugin Repository topic
- claude-code-skills Repository topic
- power-apps Repository topic
- power-pages Repository topic
- power-platform Repository topic
- code-apps Repository topic
- github-copilot-plugin Repository topic
- engineering Derived category
- design Derived category
- legal Derived category
- design-interface Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytesSKILL.mdcore · 96,982 bytes
Read excerpt
# /generate-pcf-companion
Generates the dispatcher PCF — the Canvas Studio control that calls the third-party native module through the host-injected `window.PowerApps.NativeExtension.sendAsync` global, routed by the composite key `<name>/<receiver>` read from the committed `./manifest.json` (the source of truth `/generate-native-extension` authors at scaffold time). Lives at `pcf/<Pascal>PCF/` in the same repo the native module lives in. The PCF is a Studio-side companion; it is **NOT** part of the `.ppmplugin` bundle (the bundle ships native binaries only — `manifest.json` + `android/`/`ios/`).
This skill assumes the native module already exists in the repo. Run it after the module is in place.
> **PCF framework reference (public Microsoft Learn docs).** Ground `pac pcf init`, the `ControlManifest.Input.xml` schema, the `init`/`updateView`/`getOutputs`/`destroy` lifecycle, and the `usage` (`bound`/`input`/`output`) rules against the official Power Apps Component Framework docs — they are the authority when this skill's templates and the live framework disagree. (The `sendAsync` transport + `extractResponse` response-unwrap specifics are this track's own, in [`shared/ppmplugin-format.md §2`](../../shared/ppmplugin-format.md) — not in these generic PCF docs.)
> - Overview: <https://learn.microsoft.com/en-us/power-apps/developer/component-framework/overview>
> - Create a code component: <https://learn.microsoft.com/en-us/power-apps/developer/component-framework/create-custom-controls-using-pcf>
> - Custom controls overview: <https://learn.microsoft.com/en-us/power-apps/developer/component-framework/custom-controls-overview>
---
## Step 1 — Read the shared docs and the PRD