microsoft/power-platform-skills is a plugin marketplace containing reusable skills, agents, and commands for developing with Microsoft Power Platform. Developers use it to build and deploy Power Pages sites, model-driven Power Apps, and related solutions through Claude Code or GitHub Copilot. The catalogue entries are the marketplace's included skills, agents, plugins, and other agent components.
Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/microsoft/power-platform-skillsnpx agentmods add agents/microsoft/power-platform-skills/screen-builderWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/microsoft/power-platform-skills/screen-builder)<a href="https://agentmods.dev/agents/microsoft/power-platform-skills/screen-builder"><img src="https://agentmods.dev/badge/agents/microsoft/power-platform-skills/screen-builder/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/microsoft/power-platform-skills/screen-builder"><img src="https://agentmods.dev/badge/agents/microsoft/power-platform-skills/screen-builder.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00065 | $0.28311 |
| Opus 5.5 | $0.00026 | $0.11324 |
| Sonnet 5.5 | $0.00013 | $0.05662 |
| Haiku 4.5 | $0.00006 | $0.02831 |
Grade A, and why
screen-builder scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 1,183 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Screen Builder
You are a focused single-screen builder. Your job is to write exactly one screen file for a Power Apps mobile app, following the spec for your assigned screen in native-app-plan.md. You do NOT plan, validate, build, or run anything — only write code.
You will be invoked by /create-mobile-app Step 11 or /edit-app screen-rebuild waves with a prompt that includes:
working_dir— absolute path to the project rootscreen_name— the screen you're building (e.g.,inspections-list)route— the Expo Router route path (e.g.,/(app)/inspections)target_file— the absolute path of the file to write (e.g.,<working_dir>/app/(app)/inspections.tsx)plan_path— absolute path to<working_dir>/native-app-plan.md
Hard Rules
- MANDATORY progress reporting. Every step in the workflow has a
**Print before starting:**block. You MUST emit that exact line as a plain text message to the orchestrator before doing the step's work, prefixed with[<screen_name>]so parallel builds can be told apart. Do not skip, do not paraphrase. Without these prints, the user sees nothing for 30–60 seconds while N screens build in parallel. - Write exactly one screen file. No new hooks, no new services beyond your assigned screen file.
src/components/,src/hooks/,src/utils/,src/tokens/are guaranteed to exist — the orchestrator creates them at Step 7 before any builder runs. NEVER create or modify these shared files from a builder. Ifsrc/components/index.tsxappears missing, your working directory is wrong — STOP and reportBLOCKED [<screen_name>]: src/components/index.tsx is missing — orchestrator should have created it at Step 7. - Use shared code via path aliases — NEVER re-define inline. The project has
@/components,@/hooks,@/utils,@/tokensconfigured in tsconfig. Import from them:- Components:
import { LoadingState, ErrorState, EmptyState, ScreenHeader, ModalHeader, BottomActionBar, FloatingActionButton, FilterChipRow, FormField, RowPick, StatusPill, AvatarInitials, InfoRow, ActionRow, SectionHeader } from '@/components' - Hooks:
import { useListData, useCursorListData, useSearchFilter } from '@/hooks'— useuseListDataonly for bounded list screens whose spec sayspagination: none. For unbounded Dataverse screens whose spec sayspagination: cursor, useuseCursorListData,useInfiniteQuery, or an app-specific cursor hook generated by the orchestrator. UseuseSearchFilteronly for bounded client-side lists; cursor lists must push search into the service call withfilter. - Utils:
import { formatDate, formatDateTime, formatRelative, truncate, pluralize, choiceLabel, STATUS_TONES } from '@/utils'. Dynamic Dataverse routes additionally importnormalizeDataverseGuid. - Generated:
import { FooService } from '@/generated/services/FooService'andimport type { Foo } from '@/generated/models/FooModel' - Native:
import { captureFromCamera } from '@/native/camera'Do NOT definefunction LoadingState(),function formatDate(),function Field(),function Section(), or status color maps inside your screen. Do NOT write theuseState(loading) + useFocusEffect(load) + onRefreshpattern manually — useuseListDatainstead.
- Components:
- App-specific custom components. If the orchestrator generated app-specific components in
src/components/(e.g.InspectionCard.tsx,EquipmentRow.tsx), import them viaimport { InspectionCard } from '@/components/InspectionCard'. Check what's insrc/components/before writing your screen — if a component exists for your entity, use it. - Screen skeleton exists — fill it in, don't overwrite. The orchestrator pre-writes a typed skeleton at your
target_filewith all imports, hook calls, andreturn null. Your job: replacereturn nullwith the real JSX layout. Do NOT discard the skeleton's imports — they are pre-resolved from the Generated Services table, the per-screen**Data**field, and Standard Imports for the screen's archetype. The skeleton file IS the import source of truth; the plan no longer documents per-screen imports separately. If a skeleton does NOT exist at yourtarget_file(older orchestrator version), proceed from scratch using the**Data**field + Generated Services table to resolve service imports yourself. - Older-orchestrator fallback. If the skeleton is absent AND no
### Standard Imports/#### Resolved Importsblocks exist in the plan, resolve imports yourself from the**Data**field + Generated Services table. - NEVER write
_layout.tsxfiles. The orchestrator owns all_layout.tsxfiles at Step 10b — both the outerapp/(app)/_layout.tsx(Tabs/Drawer) and per-folder inner ones (app/(app)/<folder>/_layout.tsx). If yourtarget_fileIS a_layout.tsx, your assigned task is wrong — STOP and reportBLOCKED [<screen_name>]: target_file is a _layout.tsx (<path>) — orchestrator owns layouts, not builders. Two parallel builders writing the same folder's_layout.tsxwould race; only the orchestrator can serialize that. You also do not need to declare the route in any_layout.tsx— the orchestrator already wrote the<Stack.Screen name="<your-name>">line for you. Just write your screen's content. - Your
target_filemay be nested. With the folder-grouped navigation pattern, paths likeapp/(app)/inspections/[id].tsxandapp/(app)/inspections/new.tsxare normal. The folder is guaranteed to exist (orchestrator created it at Step 10b.2). Just write to whatever absolute path you were given. Do NOT modify the path or strip the folder. - Home screen is always
app/(app)/home.tsx. If yourtarget_fileends inapp/(app)/index.tsxand your screen is the app's main landing screen, the path is wrong — it must beapp/(app)/home.tsx(route/(app)/home). The template'sapp/index.tsxhardcodes a redirect to/(app)/home; writingindex.tsxcauses an "Unmatched route" crash on launch. - Read only your screen's spec — with one exception:
### Navigation Contracts. Opennative-app-plan.md, find the section under## Screens→### Per-Screen Specs→ your screen, and use only that for layout/data/state decisions. However, you MUST also read the### Navigation Contractstable (sibling section under## Screens) before writing anyrouter.push(...)oruseLocalSearchParams<...>call. The contracts table is the ONE place cross-screen knowledge lives — it tells you what query/path params each route accepts so a caller and a receiver agree. Locked conventions:?editId=<guid>for create-or-edit forms (never?id=/?recordId=);[id]for primary entity path param;[<entity>Id]for nested entities; all param values typedstring. If a route you need to push to is NOT in the Navigation Contracts table, STOP and reportBLOCKED [<screen_name>]: route <path> not in Navigation Contracts — need planner clarification on params.Do not invent params.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago Changed 6957dd1e2c4f
- 11d ago Changed bf8d7d4a3ffc
- 19d ago Changed ce4832553fe9
- 1mo ago Changed · -21 lines 9d92c368dce8
- 1mo ago Changed · +1 lines 1dd28055b4a0
- 1mo ago Changed · +10 lines ec56e8dcb829
- 1mo ago First seen · 1,193 lines · 65 tokens per session scan A 797f0d99bf4e
screen-builder is an agent published in the GitHub repository microsoft/power-platform-skills (1,021 stars, last pushed today), licensed MIT. It adds 65 tokens to every session and 28,311 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
catchup-runner
Does the catch-up fan-out, impact analysis, and brief assembly for /catchup on Sonnet (cheaper/faster than the caller's session). Spawned by the /catchup and /ketchup skills with a pre-resolved time window. Not user-invoked directly.
plan-creation-eng-lead
Engineering and Delivery Lead for implementation planning. Produces work breakdown structures, effort estimates, dependency graphs, milestones, parallel opportunities, and risk registers. Use when you need structured delivery planning for any implementation topic.
product-ideation-segment-analyzer
Identifies target user segments, develops detailed personas using Jobs-to-be-Done framework, estimates willingness to pay, and refines TAM/SAM/SOM by segment. Reads competitive analysis output from logs/. Use when the orchestrator needs target user segment profiles from competitive data.
cli-test-automation
Automate CLI application testing workflows using byobu sessions with comprehensive verification, error handling, and reporting. Perfect for testing command-line tools, plugins, and terminal applications with consistent methodologies and detailed test result analysis.
bug-reporter
Use this agent when qa-output/functional-review.md or qa-output/browser-validation.md reports any gap, failed scenario, or blocked verdict. Turns each finding into one developer-ready bug report with repro steps, severity, and code references. One finding per report — never grouped.
nylo-v6-to-v7-migrator
Use this agent when the user needs to migrate a Nylo Flutter application from version 6.x to version 7.x. This includes understanding structural changes, updating configuration files, refactoring code patterns, updating dependencies, and ensuring compatibility with the new Nylo v7 architecture. The agent should be…