Skip to content

Skills: split oversized skills into a core plus references - #1060

Draft
Nikola Metulev (nmetulev) wants to merge 4 commits into
mainfrom
nmetulev-skill-core-reference-splits
Draft

Nikola Metulev (nmetulev) wants to merge 4 commits into
mainfrom
nmetulev-skill-core-reference-splits

Conversation

@nmetulev

@nmetulev Nikola Metulev (nmetulev) commented Oct 10, 2026 •

Copy link
Copy Markdown
Member

Follows #1050, which has merged, and is rebased onto main. Skill names and descriptions don't change.

What this does

The largest skills now keep a short core in SKILL.md and move detail into references that load only when needed. Every reference has a Load when row in its core. Consent and safety rules stay in the core.

Skill Core before → after (~tokens) Moved into references
winapp-ui-automation 9,413 → 4,216 keyboard and hover (input.md), drag, touch, pen, and scrolling (gestures.md), video recording (capture.md), reading state, setting values, and file dialogs (dialogs-and-state.md), troubleshooting, JSON envelope highlights (ui-json-envelope.md)
winapp-find-api 6,396 → 3,048 less common patterns and verb syntax, concepts, troubleshooting
winapp-setup 6,450 → 2,639 private NuGet feeds (nuget-feeds.md). winapp run project mode and single-file .cs apps moved to winapp-identity references
winapp-identity 2,863 → 3,116 receives run-project-mode.md and single-file-apps.md. Its production sparse packaging section moved to production-sparse.md
winui-ui-testing 5,585 → 2,027 batch script template (Step 2), pickers, flyouts, dialogs, and input, Sandbox persistence and file transfer
winui-code-review 1,638 → 1,744 quality-rules.md (3.2k) is split into performance, security, accessibility, code-quality, and globalization references, so a review reads only the topic it needs
winui-design 3,388 → 2,971 window sizing. brushes-and-icons.md is split into brushes.md and icons.md

Totals: unique core bodies drop from 65.5k to 49.5k tokens (−24%). The largest core is now 4.2k (was 9.4k). Always-loaded metadata doesn't change (WinApp 987, WinUI 594).

Stale fixes

  • No wildcard Get-AppxPackage … | Remove-AppxPackage. winapp-package now looks up the exact package by identity name and removes it only after the user confirms.
  • Removed the contributor-only scripts\test-samples.ps1 section from winapp-maui. It now links to the MAUI sample on GitHub.
  • Removed the v0.3.1 envelope history from the winapp ui --json reference.
  • Cross-skill paths: winui-design, winui-code-review, winui-dev-workflow, and winui-wpf-migration now say "load the winui-packaging skill and read its sourcegen-patterns.md reference". Before, a bare references/… path didn't resolve from those skills. The C5 spike copied the file into four skills. This PR keeps one copy instead.
  • The WinUI agent said "chain dependent commands with &&". It now says to use ; in PowerShell, which matches winapp-ui-automation.

The spike's new content (Store reference, Fluent without porting, C++ WinUI guard, AutomationId authoring rule) is not in this PR.

Benchmark capability maps

No capability map changes. Every capability's content still sits in the core: commands, triggers, and the main workflow. References add detail to a capability, but no capability lives only in a reference. So skill-level credit stays correct, and adding file keys would only repeat the parent skill's capabilities. The existing winapp-current/winui-current maps apply to both sides.

Results

Both sides ran on the same harness, at #1050's head (408dc75d), and the baseline plugins come from that commit. Since then, main changed only winapp-find-ui and winapp-sandbox, and this PR doesn't touch either. Configuration both, no agent, 3 models, 2 iterations. Differences are paired (same scenario, model, and iteration). 95% CIs are bootstrapped over scenarios.

Outcomes and routing

Measure Pairs Base Split Δ [95% CI] Better / worse
Held-out routing 674 0.737 0.731 −0.006 [−0.023, +0.012] 19 / 24
Held-out answer 521 0.835 0.840 +0.005 [−0.010, +0.019] 25 / 20
Demand outcome (two judges) 360 0.792 0.796 +0.004 [−0.019, +0.026] 40 / 36

By model:

Model Held-out routing Δ Held-out answer Δ Demand outcome Δ
claude-sonnet-5.5 −0.024 [−0.069, +0.020] +0.003 [−0.036, +0.042] −0.004 [−0.054, +0.042]
claude-opus-5.5 +0.018 [−0.007, +0.046] +0.014 [+0.000, +0.036] −0.010 [−0.044, +0.023]
gpt-6.1-sol −0.011 [−0.033, +0.009] −0.003 [−0.034, +0.024] +0.027 [−0.002, +0.058]

Every CI includes zero. Pairs where neither side loaded a split skill have identical skill text, so they show the noise level: demand +0.004 [−0.019, +0.027], held-out routing −0.001. Pairs where a split skill loaded: demand +0.007 [−0.071, +0.083], held-out answer −0.006 [−0.050, +0.029].

Tokens

Per run Base Split Δ
Held-out, skill context + reference reads 3,287 2,679 −18%
Demand, skill context + reference reads 1,702 1,550 −9%
Runs that loaded a split skill, GPT 9,975 6,834 −31%
Runs that loaded a split skill, Opus 5,628 4,668 −17%
Runs that loaded a split skill, Sonnet 4,681 3,931 −16%

Credits per run are flat (held-out 10.5 → 10.3, demand 9.5 → 9.4), because Copilot's own prompt dominates input.

Reference reads

When a split skill loaded, the agent read one of its references in 34–52% of runs (GPT 34%, Opus 39%, Sonnet 52%). By skill:

Skill Runs that loaded it Read a reference
winui-ui-testing 27 93% (batch-template.md)
winapp-identity 42 88% (mostly production-sparse.md)
winapp-ui-automation 24 54% (mostly ui-json-envelope.md, dialogs-and-state.md)
winui-code-review 20 35%
winui-design 44 27% (mostly window-sizing.md)
winapp-find-api 90 1%
winapp-setup 21 0%

Capabilities whose content partly moved

Held-out + demand, 36 runs per side.

Capability Routed (base → split) Answer met (base → split)
ui.automate 33 → 30 34/34 → 32/32
ui.test 29 → 25 26/26 → 23/23
api.lookup 29 → 27 33/33 → 33/33
project.setup 13 → 16 16/16 → 19/19
project.scaffold 24 → 25 25/25 → 28/28
identity 36 → 35 36/36 → 36/36
winui.review 18 → 20 —
winui.design 20 → 21 —
sandbox.run 35 → 35 26/26 → 26/26

Answers hold for every capability. The ui.test/ui.automate routing dips come from 8 flipped pairs. In 5 of them, Sonnet loaded no skill at all on one side. In the other 3, a different second skill was chosen after the first skill loaded, and one of those favored the split. Routing happens before the skill body loads, and descriptions didn't change, so these flips aren't caused by content moving into a reference. No content was pulled back into a core.

Ship rule

Outcomes and routing hold within noise, and loaded skill text drops. This passes.

Credits

22,912 of the 23,000 cap: runs 20,969 (2,082 runs) and two-judge grading 1,943. Opus held-out iteration 2 stopped at its credit cap with 14 runs left. I finished 8 of them, enough to complete their pairs within the cap. The 3 wrenfall-category-browser-example prompts have no Opus iteration-2 pair; their iteration-1 pairs still count.

Validation

  • scripts\validate-plugin-package.ps1: 0 errors
  • scripts\validate-llm-docs.ps1 against a Debug CLI: command examples match the schema
  • Benchmark Pester: 157 passed
  • run.ps1 -Lint: 0 errors, 54 warnings (same as base)
  • scripts\tests\Test-WinuiUiTestingSandbox.ps1 now checks the skill's core and references together, because the batch template moved into a reference. It passes.

Please check by hand

  • winapp-ui-automation: the core still reads well for a first-time winapp ui user. The new focus and --allow-system-keys lines in Tips restate rules that moved to references.
  • winui-ui-testing: Step 2 now points to references/batch-template.md. The core also restates the Sandbox shutdown consent rule.
  • winapp-package: the uninstall example (exact identity name, user confirmation) replaces the wildcard.
  • winapp-identity now owns winapp run project mode and .cs apps, and winapp-setup points there. Is that the split you want?
  • Whether to share one AOT reference across skills, as done here, or to copy it into each skill, as the spike did.
Coverage checklist: where every section of the changed skills went

Generated by matching each section's lines at 408dc75d against the new tree. Sections marked "(edited)" changed some lines: stale fixes, anchor fixes, or a self-reference.

winapp-find-api/SKILL.md

Section Now in
(intro) winapp-find-api/SKILL.md
This is an agent-first command winapp-find-api/SKILL.md
When to use winapp-find-api/SKILL.md
Use it on compile errors, not just before writing code winapp-find-api/SKILL.md
Batch your lookups — one call, many subjects winapp-find-api/SKILL.md
Use --filter on big member lists — not on enums winapp-find-api/SKILL.md
Prerequisites winapp-find-api/SKILL.md
Search for an API winapp-find-api/SKILL.md
Inspect a type's members winapp-find-api/SKILL.md
Validate a property before you write it winapp-find-api/SKILL.md
List enum values winapp-find-api/SKILL.md
Inspect a large type without dumping it winapp-find-api/references/more-patterns.md
See what the project references winapp-find-api/references/more-patterns.md
Manage the index winapp-find-api/references/more-patterns.md
Explore the SDK with no project winapp-find-api/references/more-patterns.md
Script against it with --json winapp-find-api/references/more-patterns.md
Key concepts winapp-find-api/references/concepts.md
Troubleshooting winapp-find-api/references/scopes-and-troubleshooting.md
Related skills Rewritten as a shorter Related skills list (find-ui kept)
CLI reference winapp-find-api/references/more-patterns.md

winapp-identity/SKILL.md

Section Now in
(intro) winapp-identity/SKILL.md
When to use winapp-identity/SKILL.md
Parallel packaged worktrees winapp-identity/SKILL.md
Prerequisites winapp-identity/SKILL.md
What is package identity? winapp-identity/SKILL.md
Basic usage winapp-identity/SKILL.md
Keep the original package identity winapp-identity/SKILL.md
Generate without installing winapp-identity/SKILL.md
What the command does winapp-identity/SKILL.md
Recommended workflow winapp-identity/SKILL.md
Tips winapp-identity/SKILL.md
Debugging: winapp run vs create-debug-identity winapp-identity/SKILL.md
When to use which winapp-identity/SKILL.md
Common debugging scenarios winapp-identity/SKILL.md
Production sparse packaging (init --sparse / pack / embed-identity) winapp-identity/references/production-sparse.md
Related skills Rewritten as a shorter Related skills list
Troubleshooting winapp-identity/SKILL.md
CLI reference winapp-package/SKILL.md

winapp-maui/SKILL.md

Section Now in
(intro) winapp-maui/SKILL.md
When to use winapp-maui/SKILL.md
The resizetizer dependency (root cause) winapp-maui/SKILL.md
Where the resolved manifest lives winapp-maui/SKILL.md
1. Publish the Windows head first winapp-maui/SKILL.md
2. Publisher must match the certificate winapp-maui/SKILL.md
3. Package a signed MSIX — point --manifest at the resolved manifest winapp-maui/SKILL.md
4. Sign the unpackaged build winapp-maui/SKILL.md
CI/CD (GitHub Actions) winapp-maui/SKILL.md
End-to-end validation script Dropped: contributor-only test-samples command (sample link kept)
Tips winapp-maui/SKILL.md
Related skills winapp-maui/SKILL.md
Troubleshooting winapp-maui/SKILL.md

winapp-package/SKILL.md

Section Now in
(intro) winapp-package/SKILL.md
When to use winapp-package/SKILL.md
Prerequisites winapp-package/SKILL.md
Package directly from a .csproj (project mode) winapp-package/SKILL.md
Basic packaging (unsigned) winapp-package/SKILL.md
Package and sign in one step winapp-package/SKILL.md
Generate certificate + package in one step winapp-package/SKILL.md
Unsigned output (Store submission or external signing) winapp-package/SKILL.md
Self-contained deployment winapp-package/SKILL.md
Custom output path and name winapp-package/SKILL.md
What the command does winapp-package/SKILL.md
Installing the MSIX for testing winapp-package/SKILL.md (edited)
Recommended workflow winapp-package/SKILL.md
Advanced: External content catalog winapp-package/SKILL.md
Bundling multiple architectures winapp-package/SKILL.md
GitHub Actions winapp-package/SKILL.md
Tips winapp-package/SKILL.md
Sparse identity packages winapp-package/SKILL.md
Related skills winapp-package/SKILL.md
Troubleshooting winapp-package/SKILL.md
CLI reference winapp-package/SKILL.md

winapp-setup/SKILL.md

Section Now in
(intro) winapp-setup/SKILL.md
When to use winapp-setup/SKILL.md
Prerequisites winapp-setup/SKILL.md
Key concepts winapp-setup/SKILL.md
Create a new WinUI app winapp-setup/SKILL.md
Initialize a new winapp project winapp-setup/SKILL.md
Initialize a sparse identity package (existing exe) winapp-identity/references/production-sparse.md
Restore after cloning winapp-setup/SKILL.md
Private or custom NuGet feeds winapp-setup/references/nuget-feeds.md
Update SDK versions winapp-setup/SKILL.md
Run and debug with identity winapp-identity/references/run-project-mode.md
Project mode: winapp run on a .csproj (.NET / WinUI) winapp-identity/references/run-project-mode.md (edited)
Project mode: winapp run on a C++ .vcxproj winapp-identity/references/run-project-mode.md
Single-file mode: winapp run on a .cs file-based app winapp-identity/references/single-file-apps.md
Choosing between run and create-debug-identity winapp-identity/references/run-project-mode.md
Recommended workflow winapp-setup/SKILL.md
Tips winapp-setup/SKILL.md
Related skills Rewritten as a shorter Related skills list
Troubleshooting winapp-setup/SKILL.md
CLI reference winapp-package/SKILL.md

winapp-ui-automation/references/ui-json-envelope.md

Section Now in
winapp ui --json envelopes winapp-ui-automation/references/ui-json-envelope.md (edited)
ui inspect --json winapp-ui-automation/references/ui-json-envelope.md (edited)
ui inspect --ancestors --json winapp-ui-automation/references/ui-json-envelope.md
ui inspect --interactive winapp-ui-automation/references/ui-json-envelope.md
ui get-focused --json winapp-ui-automation/references/ui-json-envelope.md (edited)
ui search --json winapp-ui-automation/references/ui-json-envelope.md
ui wait-for --json winapp-ui-automation/references/ui-json-envelope.md
ui get-property --json winapp-ui-automation/references/ui-json-envelope.md
Whole-document formatting winapp-ui-automation/references/ui-json-envelope.md
ui status --json winapp-ui-automation/references/ui-json-envelope.md
ui invoke --json winapp-ui-automation/references/ui-json-envelope.md
Error envelope winapp-ui-automation/references/ui-json-envelope.md
Desktop coordination winapp-ui-automation/references/ui-json-envelope.md

winapp-ui-automation/SKILL.md

Section Now in
(intro) winapp-ui-automation/SKILL.md
When to use winapp-ui-automation/SKILL.md
Prerequisites winapp-ui-automation/SKILL.md
Coordinating with other UI workflows winapp-ui-automation/SKILL.md
Read within a specific container winapp-ui-automation/SKILL.md
Discover and interact winapp-ui-automation/SKILL.md
Find visible text and click it winapp-ui-automation/SKILL.md
Navigate multi-page apps winapp-ui-automation/SKILL.md
Choose an exact action in tests winapp-ui-automation/SKILL.md
Disambiguate duplicate elements winapp-ui-automation/SKILL.md
Key concepts winapp-ui-automation/SKILL.md
Connect and discover winapp-ui-automation/SKILL.md
Inspect element tree winapp-ui-automation/SKILL.md
Find elements winapp-ui-automation/SKILL.md
Screenshot winapp-ui-automation/SKILL.md
Record video (H.264 MP4) winapp-ui-automation/references/capture.md
Hover (for tooltips, flyouts, hover states) winapp-ui-automation/references/input.md
Send keyboard input winapp-ui-automation/references/input.md
Drag (reorder, resize, sliders, drag-and-drop) winapp-ui-automation/references/gestures.md
Touch gestures (tap, swipe, pinch, stretch, long-press) winapp-ui-automation/references/gestures.md
Pen / stylus (taps and ink strokes) winapp-ui-automation/references/gestures.md
Read element state winapp-ui-automation/references/dialogs-and-state.md
Set values winapp-ui-automation/references/dialogs-and-state.md
Scroll containers winapp-ui-automation/references/gestures.md
Wait for UI state winapp-ui-automation/SKILL.md
Tips winapp-ui-automation/SKILL.md (edited)
Why ; instead of && winapp-ui-automation/SKILL.md
File dialog workaround winapp-ui-automation/references/dialogs-and-state.md
JSON output envelopes winapp-ui-automation/references/ui-json-envelope.md (edited)
Automating in Windows Sandbox winapp-ui-automation/SKILL.md
Related skills Dropped: regenerated as a shorter Related skills list
Troubleshooting winapp-ui-automation/references/troubleshooting.md (edited)
CLI reference winapp-package/SKILL.md

winui-code-review/references/quality-rules.md

Section Now in
Quality Rules — Detailed Reference Dropped: intro of the split file
x:Bind vs {Binding} winui-code-review/references/performance.md
Deferred Loading with x:Load winui-code-review/references/performance.md
Incremental Rendering with x:Phase winui-code-review/references/performance.md
Collection Virtualization winui-code-review/references/performance.md
DispatcherQueue for UI-Thread Management winui-code-review/references/performance.md
Async Patterns winui-code-review/references/performance.md
Layout and Visual Tree winui-code-review/references/performance.md
Secrets Management with PasswordVault winui-code-review/references/security.md
DPAPI Encryption for Data at Rest winui-code-review/references/security.md
Input Validation winui-code-review/references/security.md
Secure WebView2 Configuration winui-code-review/references/security.md
Network Security winui-code-review/references/security.md
Package Identity and Secure Storage winui-code-review/references/security.md
AutomationProperties winui-code-review/references/accessibility.md
Keyboard Navigation winui-code-review/references/accessibility.md
Screen Readers winui-code-review/references/accessibility.md
Contrast winui-code-review/references/accessibility.md
Verification Checklist winui-code-review/references/accessibility.md
Roslyn Analyzer Setup winui-code-review/references/code-quality.md
.editorconfig winui-code-review/references/code-quality.md
Code Cleanup Rules (After Every Edit) winui-code-review/references/code-quality.md
Naming Conventions winui-code-review/references/code-quality.md
File Organization winui-code-review/references/code-quality.md
.resw File Structure winui-code-review/references/globalization.md
x:Uid Binding Patterns winui-code-review/references/globalization.md
x:Uid Property Suffix Table winui-code-review/references/globalization.md
ResourceLoader Patterns winui-code-review/references/globalization.md
Culture-Aware Formatting winui-code-review/references/globalization.md
RTL Layout Support winui-code-review/references/globalization.md
Pluralization Handling winui-code-review/references/globalization.md
Testing Localization winui-code-review/references/globalization.md

winui-code-review/SKILL.md

Section Now in
(intro) winui-code-review/SKILL.md
When to Use winui-code-review/SKILL.md
How to Review winui-code-review/SKILL.md
MVVM Compliance winui-code-review/SKILL.md
x:Bind and Data Binding winui-code-review/SKILL.md
Native AOT / Trimming (When Intended) winui-code-review/SKILL.md (edited)
Accessibility winui-code-review/SKILL.md
Theming winui-code-review/SKILL.md
Security winui-code-review/SKILL.md
Performance winui-code-review/SKILL.md
Globalization winui-code-review/SKILL.md
Review Report winui-code-review/SKILL.md
References Replaced by the Load when table

winui-design/references/brushes-and-icons.md

Section Now in
Brushes and icons reference winui-design/references/brushes.md (edited)
Part 1 — Brush catalogue winui-design/references/brushes.md
Text winui-design/references/brushes.md
Control fills (button, slider, combo box, etc.) winui-design/references/brushes.md
Strokes (borders, dividers, focus rings) winui-design/references/brushes.md
Surfaces and layers winui-design/references/brushes.md
Accent winui-design/references/brushes.md
Acrylic and Mica winui-design/references/brushes.md
High Contrast — the only brushes allowed in an HC dictionary winui-design/references/brushes.md
Part 2 — Icons winui-design/references/icons.md
Default pick patterns winui-design/references/icons.md
When icon-only is OK winui-design/references/icons.md
Reusing an icon definition winui-design/references/icons.md
IconElement-bearing controls (cheat-sheet) winui-design/references/icons.md

winui-design/references/layout-review.md

Section Now in
WinUI layout and responsive review reference winui-design/references/layout-review.md
Page planning template winui-design/references/layout-review.md
Responsive techniques (least to most disruptive) winui-design/references/layout-review.md
State coverage for any data-driven page winui-design/references/layout-review.md

winui-design/references/theme-accessibility.md

Section Now in
WinUI theming reference (deep dictionary patterns) winui-design/references/theme-accessibility.md
Minimal ThemeDictionary pattern winui-design/references/theme-accessibility.md
ResourceKey redirects (zero-allocation theming) winui-design/references/theme-accessibility.md
High Contrast rules winui-design/references/theme-accessibility.md
Runtime theme switching winui-design/references/theme-accessibility.md
Custom styles — BasedOn discipline winui-design/references/theme-accessibility.md

winui-design/SKILL.md

Section Now in
(intro) winui-design/SKILL.md
Search samples before writing XAML winui-design/SKILL.md
Verify APIs against the restored project winui-design/SKILL.md
App-shape anchors winui-design/SKILL.md
Reach-for-this control map winui-design/SKILL.md
Window sizing (WinUI 3 specifics) winui-design/references/window-sizing.md
Check the effective x:Bind mode winui-design/SKILL.md (edited)
TextBox two-way needs UpdateSourceTrigger=PropertyChanged winui-design/SKILL.md
Attached properties from C# use static setters, not initializers winui-design/SKILL.md
Converter={x:Null} crashes x:Bind at runtime winui-design/SKILL.md
Prefer x:Bind static functions over IValueConverter winui-design/SKILL.md
Acrylic and ThemeShadow rendering rules winui-design/SKILL.md
Theming rules (short version) winui-design/SKILL.md
Anti-patterns winui-design/SKILL.md
References (load on demand) Replaced by the Load when table

winui-ui-testing/SKILL.md

Section Now in
(intro) winui-ui-testing/SKILL.md
Scope and execution boundary winui-ui-testing/SKILL.md
Approach and command discovery winui-ui-testing/SKILL.md
Step 1: Select a target, then keep the PID and target together winui-ui-testing/SKILL.md
Step 2: Write the host-side batch winui-ui-testing/references/batch-template.md
Step 3: Run, read, and visually verify winui-ui-testing/SKILL.md
Assertions and coverage winui-ui-testing/SKILL.md
File pickers, flyouts, and ContentDialogs winui-ui-testing/references/advanced-interactions.md
Keyboard, hover, drag, touch, and pen winui-ui-testing/references/advanced-interactions.md
Recordings and workflow coordination winui-ui-testing/references/advanced-interactions.md
Guest persistence and arbitrary file transfer winui-ui-testing/references/sandbox-persistence.md
Binding and selector gotchas winui-ui-testing/SKILL.md

… fix stale guidance

Same skill names and descriptions. Moves detail out of winapp-ui-automation, winapp-find-api,
winapp-setup (run/debug content now lives in winapp-identity references), winui-ui-testing,
winui-code-review (quality rules by topic), and winui-design (brushes, icons, window sizing).
Every reference has a 'Load when' row in its core; consent and safety rules stay in core.

Stale fixes: no wildcard Remove-AppxPackage; drop the contributor-only test-samples line and
the v0.3.1 envelope history; name the owning skill for the AOT reference instead of a
cross-skill relative path; the WinUI agent no longer advises chaining with &&.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 00:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A malformed Markdown fence and a stale reference path break two extracted documentation flows.

1 open finding
What changed in this PR

Splits large WinApp and WinUI skills into concise cores with on-demand references, reducing loaded context while preserving workflows and safety guidance.

Changes:

  • Extracts detailed guidance into focused reference files with load conditions.
  • Moves run/identity guidance from setup into the identity skill.
  • Corrects stale uninstall, MAUI, cross-skill, and PowerShell guidance.
File Description
plugins/​winapp/​skills/​winapp-find-api/​SKILL.md Adds on-demand reference routing.
plugins/​winapp/​skills/​winapp-find-api/​references/​concepts.md Extracts API lookup concepts.
plugins/​winapp/​skills/​winapp-find-api/​references/​more-patterns.md Extracts advanced command patterns.
plugins/​winapp/​skills/​winapp-find-api/​references/​scopes-and-troubleshooting.md Extracts scope troubleshooting.
plugins/​winapp/​skills/​winapp-identity/​SKILL.md Adds identity reference routing.
plugins/​winapp/​skills/​winapp-identity/​references/​production-sparse.md Documents production sparse identity.
plugins/​winapp/​skills/​winapp-identity/​references/​run-project-mode.md Documents project-mode execution.
plugins/​winapp/​skills/​winapp-identity/​references/​single-file-apps.md Documents single-file apps.
plugins/​winapp/​skills/​winapp-maui/​SKILL.md Replaces contributor instructions with sample link.
plugins/​winapp/​skills/​winapp-package/​SKILL.md Makes uninstall guidance identity-specific.
plugins/​winapp/​skills/​winapp-setup/​SKILL.md Shortens setup and redirects identity topics.
plugins/​winapp/​skills/​winapp-setup/​references/​nuget-feeds.md Extracts private-feed guidance.
plugins/​winapp/​skills/​winapp-ui-automation/​SKILL.md Retains core UI workflow and routes details.
plugins/​winapp/​skills/​winapp-ui-automation/​references/​capture.md Extracts recording guidance.
plugins/​winapp/​skills/​winapp-ui-automation/​references/​dialogs-and-state.md Extracts state and dialog guidance.
plugins/​winapp/​skills/​winapp-ui-automation/​references/​gestures.md Extracts gesture guidance.
plugins/​winapp/​skills/​winapp-ui-automation/​references/​input.md Extracts keyboard and hover guidance.
plugins/​winapp/​skills/​winapp-ui-automation/​references/​troubleshooting.md Extracts troubleshooting table.
plugins/​winapp/​skills/​winapp-ui-automation/​references/​ui-json-envelope.md Updates JSON envelope summary.
plugins/​winui/​agent-plugin/​com.github.copilot/​agents/​winui-dev.agent.md Corrects PowerShell command chaining.
plugins/​winui/​agent-plugin/​skills/​winui-code-review/​SKILL.md Routes review topics to references.
plugins/​winui/​agent-plugin/​skills/​winui-code-review/​references/​accessibility.md Extracts accessibility rules.
plugins/​winui/​agent-plugin/​skills/​winui-code-review/​references/​code-quality.md Extracts code-quality rules.
plugins/​winui/​agent-plugin/​skills/​winui-code-review/​references/​globalization.md Extracts globalization rules.
plugins/​winui/​agent-plugin/​skills/​winui-code-review/​references/​performance.md Extracts performance rules.
plugins/​winui/​agent-plugin/​skills/​winui-code-review/​references/​quality-rules.md Removes superseded combined reference.
plugins/​winui/​agent-plugin/​skills/​winui-code-review/​references/​security.md Extracts security rules.
plugins/​winui/​agent-plugin/​skills/​winui-design/​SKILL.md Routes detailed design topics.
plugins/​winui/​agent-plugin/​skills/​winui-design/​references/​brushes.md Separates brush catalogue.
plugins/​winui/​agent-plugin/​skills/​winui-design/​references/​icons.md Separates icon guidance.
plugins/​winui/​agent-plugin/​skills/​winui-design/​references/​window-sizing.md Extracts window-sizing guidance.
plugins/​winui/​agent-plugin/​skills/​winui-dev-workflow/​SKILL.md Clarifies cross-skill AOT reference.
plugins/​winui/​agent-plugin/​skills/​winui-ui-testing/​SKILL.md Retains core testing workflow.
plugins/​winui/​agent-plugin/​skills/​winui-ui-testing/​references/​advanced-interactions.md Extracts advanced interaction tests.
plugins/​winui/​agent-plugin/​skills/​winui-ui-testing/​references/​batch-template.md Extracts test batch template.
plugins/​winui/​agent-plugin/​skills/​winui-ui-testing/​references/​sandbox-persistence.md Extracts Sandbox persistence guidance.
plugins/​winui/​agent-plugin/​skills/​winui-wpf-migration/​SKILL.md Clarifies cross-skill binding reference.
plugins/​winui/​agents/​winui-dev.agent.md Corrects PowerShell command chaining.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread plugins/winapp/skills/winapp-ui-automation/references/ui-json-envelope.md Outdated
The batch template and advanced examples now live in references.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The split leaves a dead design reference and duplicates or misroutes framework-specific guidance.

0 open findings

1 resolved since last review
Previously missed (2)

In code that hasn't changed since last review

Low severity Remove duplicated framework debugging section

plugins/​winapp/​skills/​winapp-identity/​SKILL.md:166

This newly duplicates the Debugging by framework section from winapp-frameworks/SKILL.md:117-134 verbatim. That adds always-loaded core text and creates two canonical copies that can diverge when framework commands change, contrary to this PR's core-size goal. Keep the matrix in winapp-frameworks and use a short cross-skill pointer here.

This issue also appears on line 192 of the same file.

Low severity Fix stale High Contrast reference to brushes.md

plugins/​winui/​agent-plugin/​skills/​winui-design/​SKILL.md:153

Loading this reference for High Contrast currently leads to a dead end: references/theme-accessibility.md:38 still tells the reader to open brushes-and-icons.md, but this split removes that file in favor of brushes.md and icons.md. Update the stale pointer to brushes.md so the HC pairing table remains reachable.

🧠 Review effort: Balanced

…ks for framework specifics

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The split preserves guidance and all exercised structural, regression, benchmark, and lint checks passed.

0 open findings

🧠 Review effort: Balanced

@github-actions

Copy link
Copy Markdown
Contributor

Build Metrics Report

Validation passed. All required build and validation jobs succeeded.

Binary Sizes

Artifact Baseline Current Delta
CLI (ARM64) 57.77 MB 57.77 MB ✅ 0.0 KB (0.00%)
CLI (x64) 57.79 MB 57.79 MB ✅ 0.0 KB (0.00%)
MSIX (ARM64) 24.02 MB 24.02 MB 📈 +0.0 KB (+0.00%)
MSIX (x64) 25.49 MB 25.49 MB 📈 +0.0 KB (+0.00%)
NPM Package 50.08 MB 50.08 MB 📉 -0.8 KB (-0.00%)
NuGet Package 50.19 MB 50.19 MB 📉 -0.0 KB (-0.00%)

.NET Test Results (TRX reports)

Other suites are reflected in the overall validation status above.

✅ 8331 passed, 37 skipped out of 8368 tests in 1063.9s (-108.0s vs. baseline)

Test Coverage

✅ 87.5% line coverage, 82.2% branch coverage · ✅ no change vs. baseline

CLI Startup Time

63ms median (x64, winapp --version) · ✅ no change vs. baseline

Try This Build

Installs the MSIX for your architecture, replacing any previously installed build. Needs the GitHub CLI — the command offers to install it and sign you in if it is missing.

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/microsoft/winappCli/main/scripts/winapp-pr.ps1))) 1060
Switching between builds often?

Put the tool on your PATH once:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/microsoft/winappCli/main/scripts/winapp-pr.ps1))) -AddToPath

Then this build is just:

winapp-pr 1060

Run winapp-pr with no arguments to pick from a list of open PRs.


Updated 2026-10-10 01:25:48 UTC · commit 8ca77de · workflow run

@zateutsch Zach Teutsch (zateutsch) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 AI-generated review (winappcli pr-review skill) — verify before acting.

The split looks good. Every moved section lands in a reference, every reference has a Load when row, and the deleted file names aren't referenced anywhere. validate-plugin-package.ps1 (with a CLI schema built from this branch), Test-WinuiUiTestingSandbox.ps1, and the benchmark Pester tests all pass. Please make these three small fixes before merging.

1. The Windows-key shortcut tip gives a command that does nothing

  • What is wrong: The new tip in the core says win+… shortcuts "are refused unless you pass --allow-system-keys". It leaves out --via send-input, which is the option that makes the shortcut fire. The example this PR removed had it.
  • Show me: winapp ui send-keys "win+r" -a myapp --allow-system-keys → prints a warning that "--allow-system-keys only applies to --via send-input", exits 0, and no Run dialog opens. Expected: winapp ui send-keys "win+r" -a myapp --via send-input --allow-system-keys. See UiSendKeysCommand.cs, around line 230. Under the default post-message transport nothing is refused either, so "are refused" is also wrong.
  • Why it matters: An agent that reads only the core runs a command that does nothing and reports success.
  • Smallest fix: Change the tip to say --via send-input --allow-system-keys.
  • Location: plugins/winapp/skills/winapp-ui-automation/SKILL.md:226.

2. The trusted-directory warning for init/restore left the setup core

  • What is wrong: The note "run these commands only against directories you trust" moved to references/nuget-feeds.md. Agents load that file only for a private feed or a 401/403 error, but the risk applies to every init and restore. This contradicts "consent and safety rules stay in the core".
  • Show me: Clone a repo whose nuget.config adds an unknown feed, then ask the agent to "set up this project with winapp". It loads only the core, sees no warning, and runs winapp restore against that feed.
  • Why it matters: Packages from an untrusted feed can run code during restore or build.
  • Smallest fix: Put one sentence back in the core next to init/restore: "init and restore use the target directory's nuget.config. Run them only on directories you trust."
  • Location: plugins/winapp/skills/winapp-setup/SKILL.md, near the Load when table (line ~161)

3. The ; chaining advice no longer separates dependent steps

  • What is wrong: "Chain dependent commands with &&" became "chain commands with ;". In PowerShell, ; runs the next command even if the previous one failed.
  • Show me: dotnet build ; winapp run . → the build fails, then the old binary launches anyway.
  • Why it matters: The agent tests stale output and reports success on code that didn't build.
  • Smallest fix: Add "Use ; only for independent commands. For dependent steps, check $LASTEXITCODE before the next command."
  • Location: line 24 of both plugins/winui/agents/winui-dev.agent.md and plugins/winui/agent-plugin/com.github.copilot/agents/winui-dev.agent.md

On your two questions: moving winapp run project mode and single-file apps to winapp-identity makes them easier to find, because that skill's description mentions running with identity and winapp-setup's doesn't. Keeping one shared sourcegen-patterns.md instead of four copies is the right call.

@nmetulev
Nikola Metulev (nmetulev) marked this pull request as draft October 12, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants