genpage
Creates, updates, and deploys Power Apps generative pages for model-driven apps using React v17, TypeScript, and Fluent UI V9. Orchestrates specialist agents for planning, entity creation, and code generation.
Install / Use
npx skills add microsoft/power-platform-skills --skill genpageInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
OperationsSupported Platforms
Our assessment of genpage
genpage scores 85/100 on our quality scale, 500th of 736 Operations skills we index.
Its SKILL.md is 60 KB long, well organised into 38 sections with 20 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
It has 919 GitHub stars, a meaningful sign that others use it.
Maintenance, license and trust
- The repository was last updated 12 days ago, so genpage 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.
genpage compared with similar skills
All 4 of these similar skills score higher than genpage; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| genpage (this skill)by microsoft | 85 | 919 | 12d ago | SKILL.md |
| headroomby headroomlabs-ai | 100 | 74.5k | today | CLAUDE.md |
| rufloby ruvnet | 100 | 74.0k | today | MCP Server |
| algorithmic-artby anthropics | 100 | 177.9k | 14d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 14d ago | SKILL.md |
Frequently asked questions
- How do I install genpage?
- Run
npx skills add microsoft/power-platform-skills --skill genpage. The install tabs above show the steps for each supported agent. - Which AI agents does genpage 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 genpage 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 genpage still maintained?
- The repository was last updated 12 days ago, so genpage is actively maintained.
Skill content
View source on GitHubname: genpage version: 2.3.1 description: Creates, updates, and deploys Power Apps generative pages for model-driven apps using React v17, TypeScript, and Fluent UI V9. Orchestrates specialist agents for planning, entity creation, and code generation. Use it when user asks to build, retrieve, or update a page in an existing Microsoft Power Apps model-driven app. Use it when user mentions "generative page", "page in a model-driven", or "genux". This skill stands alone and does not require /app-builder — but if the user wants a whole app built (tables, forms, views, sitemap) rather than pages for an app that already exists, use /app-builder instead. author: Microsoft Corporation argument-hint: "<page description> | edit" user-invocable: true model: sonnet allowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, Task, AskUserQuestion, EnterPlanMode, ExitPlanMode, TaskCreate, TaskUpdate, TaskList, read, edit, execute, search, web, agent, todo
Plugin check: Run
node "${PLUGIN_ROOT}/scripts/check-version.js"— if it outputs a message, show it to the user before proceeding.
Power Apps Generative Pages Builder
Triggers: genpage, generative page, create genpage, genux page, build genux, power apps page, model page Keywords: power apps, generative pages, genux, model-driven, dataverse, react, fluent ui, pac cli Aliases: /genpage, /gen-page, /genux
Overview
This skill orchestrates specialist agents across the create and edit flows:
Create flow:
genpage-planner— validates prerequisites, gathers requirements, detects what entities and apps exist, and returns a proposed plan for the orchestrator to present. Writesgenpage-plan.mdonce the orchestrator re-invokes it with the approval outcome. May pause and returnconnector_discovery_required(see 2).genpage-connector-builder— top-level orchestrator dispatch for connector feature-gating and discovery; writesconnector-bindings.md+connectors.json. Runs after the planner has resolved create-vs-edit and the target environment (discovery is mutating), then the planner is re-invoked with its contract.genpage-customapi-builder— the same top-level dispatch for server-side Custom API (Action/Function) needs; writescustom-api-bindings.md+actions.json.genpage-entity-builder— creates Dataverse entities (tables, columns, relationships, choices, sample data) via the plugin's Node.js Web API scriptsgenpage-page-builder— generates one complete.tsxfile per page; multiple builders run in parallel for multi-page requests
Edit flow:
genpage-connector-builder— top-level orchestrator dispatch when an edit adds, replaces, discovers, removes, or clears connector bindings; preserves unchanged bindings when the edit does not touch them.genpage-customapi-builder— the same top-level dispatch when an edit adds, replaces, discovers, removes, or clears Custom API bindings.genpage-edit-planner— reads the downloaded page artifacts, gathers change requirements, presents an edit plan, writesgenpage-edit-plan.md
You (the skill) coordinate the agents and own connector and Custom API dispatch, app creation, RuntimeTypes generation, deployment, browser verification, and the inline application of planned edits.
References
- Code generation rules: rules.md
- Troubleshooting: troubleshooting.md
- Sample pages: samples/
Development Standards
- React 17 + TypeScript — all generated code
- Fluent UI V9 —
@fluentui/react-componentsexclusively (DatePicker from@fluentui/react-datepicker-compat, TimePicker from@fluentui/react-timepicker-compat) - Single file architecture — all components, utilities, styles in one
.tsxfile - No external libraries — only React, Fluent UI V9, approved Fluent icons, D3.js for charts
- Type-safe DataAPI — use RuntimeTypes when Dataverse entities are involved
- Responsive design — flexbox, relative units, never
100vh/100vw - Accessibility — WCAG AA, ARIA labels, keyboard navigation, semantic HTML
- Complete code — no placeholders, TODOs, or ellipses in final output
Instructions
Follow these phases in order for every /genpage invocation.
Every <…> you fill into a command goes in single quotes ('<working-dir>/prompt.txt', '<App Name>').
PowerShell and bash expand nothing inside them — not $name, not $(…), not a backtick — and a space does not split
the value. Escape a single quote inside the value the shell's way: in PowerShell double it, the typographic ‘ ’
included ('Bob''s app'); in bash close, escape and reopen ('Bob'\''s app'). Never use double quotes for a value
("Revenue $100" arrived as Revenue ) and never leave one bare (D:\Work Projects\… became two arguments). A value
holding a double quote " is not put on a command line at all — Windows PowerShell 5.1 drops it and can split the
argument there — so ask for an app or solution name without one. Free text (a prompt, an agent message, a page's
display name) never goes into a shell command at all, however it is quoted: even a single-quoted here-string ends at a
line that begins with '@, and the rest of that line runs. Write it with your file-writing tool and pass the path
(Phase 6).
Phase 0: Create Working Directory
Derive a short folder name from the user's requirements:
- Extract the page name or a 2-4 word summary from
$ARGUMENTS - Convert to kebab-case (e.g., "Candidate Tracker" →
candidate-tracker) - Create the folder:
mkdir -p '<folder-name>'(PowerShell or bash, the shells every command in this skill is written for) - Resolve its absolute path — this is the working directory for all subsequent phases
Phase 0.5: Initialize Local-Dev Manifest
Write package.json and genpage.d.ts into the working directory so the
developer can npm install and get IntelliSense, type-checking, and "go to
definition" in their editor. Versions come from
references/supported-dependencies.md (single source of truth:
scripts/lib/supported-dependencies.js).
node "${PLUGIN_ROOT}/scripts/generate-page-manifest.js" '<working-dir>' '<kebab-slug>'
<kebab-slug>is the same slug used for the working directory.- Add
--features charts,datepicker,timepicker(comma-separated) only when the requirements clearly call for them; otherwise omit and keep the manifest lean. - The script keeps an existing
package.json(no--force) only when it already lists every package the requested features need. A package present at a version the user changed is kept and listed asversionDriftin the JSON summary — mention it, since local type-checking then differs from the versions pages are written for. Pass--forceto overwrite (used in regeneration flows when versions drift). - Output is a JSON summary on stdout. Continue only on exit 0.
- Exit 2 — halt and show the user the error line. When it names
packages a requested feature needs that the existing
package.jsonlacks, ask whether they will merge them into it or want a rerun with--force(which replaces the file), and rerun until it exits 0 before Phase 1 — continuing would leave a--features chartsrun on a manifest withoutd3, the stale state this check exists to stop. Exit 2 also reports a working directory that is a link or not a directory: never write through it. - Any other non-zero exit is a usage error in the command above: fix it and rerun.
- Exit 2 — halt and show the user the error line. When it names
packages a requested feature needs that the existing
Phase 1: Plan
⚠️ CRITICAL — the interactive steps run HERE, in the main conversation loop. You MUST NOT dispatch them to a
Tasksubagent.A
Tasksubagent is headless:AskUserQuestion,EnterPlanModeandExitPlanModenever reach the user from inside one. A flow that specifies them there cannot complete — the question is never answered and the approval never given. This is the same rule/app-builderfollows, and the reason its subagents are headless workers only.
genpage-planneris therefore a headless discovery agent. It runs the read-only work and returns what it found; you ask the questions and present the plan.Run in the main loop (never delegated):
- Prerequisite validation (
node --version,pac helpversion > 2.10.0)- Auth verification (
pac auth list, environment selection)- The structured "Create new / Edit existing" question (
AskUserQuestion)- Language detection (
pac model list-languages) — only on new-page path- Entity existence detection (
pac model list-tables --search)- App detection (
pac model list) with proper selection prompts- Plan-mode presentation and approval (
EnterPlanMode/ExitPlanMode)- Telling
genpage-plannerthe approval outcome — it writesgenpage-plan.mditself — and confirming the file exists before Phase 2Steps 1, 2, 4, 5, 6 are read-only discovery and may be delegated to
genpage-planner; steps 3, 7 and 8 never can. Delegating the discovery is an optimisation, not a requirement — running it inline is equally correct, butgenpage-plan.mdis still written by the planner either way (see step 6 of the Steps list): its section headings are a machine-readable contract every downstream phase parses by name, so it has exactly one author. If you ran the discovery inline, dispatch the planner once with what you found, so it has the context to produce the plan without repeating your reads.Never skip the prereq/auth steps, even when
$ARGUMENTSalready states the intent. A stated intent lets you skip question 3; it does not establish that the CLI is present, authenticated, or pointed at the right environment.Whoever runs a step records it in
workflow-log.mdin the documented format —AskUserQuestion: <question> → <answer>,EnterPlanMode calledfollowed by the response. The log is the contract the eval harness reads, and it does not care which loop made the call.
Unattended runs (Copilot autopilot / Claude auto-accept)
Copilot CLI autopilot and Claude Code auto-accept drive this skill with no user watching. Every gate below is written as "ask the user", and in those modes there is nobody to answer: the run either stalls on a question no one sees or, worse, records an answer nobody gave. Resolve the mode once, at the start of Phase 1, and carry it through every gate:
node "${PLUGIN_ROOT}/scripts/resolve-interaction-mode.js"
One JSON line, always exit 0 — "there is no user" is a fact about the run, not a failure of it:
{ "ok": true, "interactive": false, "reason": "POWER_PLATFORM_SKILLS_NONINTERACTIVE is set" }
A run is unattended when --non-interactive is passed or
POWER_PLATFORM_SKILLS_NONINTERACTIVE is 1/true — the same switch
/app-builder already uses, so one setting covers both skills.
When interactive is false, do not call AskUserQuestion, EnterPlanMode or
ExitPlanMode at all. Take the documented default and record it in
workflow-log.md as Unattended default: <question> → <answer> (<reason>), so
the log still shows what decided the run:
| Gate | Attended | Unattended |
| --- | --- | --- |
| Recording the resolved mode | Nothing to record | Write the mode itself as Unattended default: interaction mode → unattended (<reason>) before the first gate. Record it with this marker, not as free prose such as Interaction mode: unattended — the evaluator keys on the marker, and prose forms are indistinguishable from an attended log that merely mentions the word (Mode: unattended = false, not unattended). |
| Create new / edit existing (step 2) | AskUserQuestion | Whatever $ARGUMENTS states. With nothing stated, create new — the only additive choice.
Truncated for display — read the full file on GitHub.
Related Skills
headroom
74.5kCompress 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.
ruflo
74.0k🌊 The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, federation, vector RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
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.
