Repository navigation
Make win-dev-skills a catalog of Windows dev plugins: winui and winappcli from microsoft/winappCli - #207
Merged
Nikola Metulev (nmetulev) merged 8 commits intoOct 7, 2026
Conversation
…ase machinery Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…inappCli Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…solve to the pinned sha Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…CODEOWNERS, local-plugin fixture test Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Nikola Metulev (nmetulev)
marked this pull request as ready for review
October 7, 2026 02:21
… as first-class Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Nikola Metulev (nmetulev)
force-pushed
the
nmetulev-flip-to-winappcli-catalog
branch
from
October 7, 2026 02:29
1e3a2c3 to
cbc2ec2
Compare
… with migration; OpenClaw route for winappcli Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Nikola Metulev (nmetulev)
deleted the
nmetulev-flip-to-winappcli-catalog
branch
October 7, 2026 02:55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
win-dev-skills now hosts agent plugins for Windows app development under
plugins/<name>/and also lists plugins maintained in other repos, pinned to a release. Both kinds are first-class, as in dotnet/skills. This PR moveswinuito microsoft/winappCli, where it is now maintained, and addswinappclifrom the same repo.winui(unchanged for users: 0.7.1, same name, agent, and 8 skills)plugins/winui5a064a42, the merge of microsoft/winappCli#976. All 24 blob SHAs match v0.7.1winappcli(new, 0.7.1, 12 skills + agent)plugins/winappv0.7.1= commite3cd0b94(a lightweight tag)Note
OpenClaw users must reinstall
winuionce. OpenClaw rejects the whole.claude-plugin/marketplace.jsononce any entry points to another repo, so after this PR both--marketplace microsoft/win-dev-skillsandopenclaw plugins updatefail for existing OpenClaw users. They reinstall withopenclaw plugins install winui --marketplace microsoft/winappCli(available since microsoft/winappCli#1007). README and CHANGELOG say this.OpenClaw and
winappcli:openclaw plugins install winappcli --marketplace microsoft/winappClishould installplugins/winappas a Claude-format skills-only bundle, loading its 12 skills but not the agent. Evidence:src/plugins/marketplace.tsaccepts winappCli's catalog because both of its entries are relative paths inside that repo.src/plugins/bundle-manifest.tsdetects.claude-plugin/plugin.jsonas aclaudebundle, andskills/is loaded by default. Theagentspath is ignored without error.This is source-only; there was no live install. The
openclawpackage is blocked by the npm feed policy here (403), and the public registry isn't reachable. The README footnotes it.Catalogs. The Copilot and Claude catalog name
win-dev-skillsis unchanged. The Codex catalog is renamed frommicrosoft-winuitowin-dev-skills, so<plugin>@win-dev-skillsworks on every host (see the Codex rename section below). Codex'sdisplayNameis now "Windows app development".Catalog checknow requires the same catalog name in all three files..github/plugin/marketplace.json{"source":"github","repo":"microsoft/winappCli","path":…,"ref"?,"sha":…}(refis optional; winui has only asha, winappcli has a tag and asha).claude-plugin/marketplace.json{"source":"git-subdir","url":"https://github.com/microsoft/winappCli.git","path":…,"ref"?,"sha":…}.agents/plugins/marketplace.jsongit-subdirform (openai/codexcodex-rs/core-plugins/src/marketplace.rs)Codex decision:
winappcliis in the Codex catalog.plugins/winappat v0.7.1 has no.codex-plugin/plugin.json. Codex finds the plugin through its rootplugin.jsoninstead, which declares the Agent Plugins$schema. Codex checks that location first; seecodex-rs/utils/plugins/src/plugin_namespace.rs. A real install worked, so no subset allowlist was needed.Deleted:
plugins/winui/**scripts/tests/*.ps1,scripts/open-release-pr.ps1,.github/skills/pr-review/(all WinUI-specific; winappCli has its own)release-policy.ymland the staging gatesCI:
Catalog check(scripts/check-catalogs.mjs):refmust resolve to the pinnedsha, which catches a moved tag.Local plugin lint (vally)lints every plugin hosted underplugins/. This PR adds none, so it passes trivially for now. The job also runsscripts/tests/test-catalog-tools.mjson a fixture underscripts/tests/fixtures/local-plugin. The fixture proves that a localplugins/<name>/entry gets checked and linted, and that a version mismatch, catalogs that disagree, and an invalid skill all fail.auto-tagtagsvX.Y.Zonly whenmetadata.versionchanges. This PR keeps 0.7.1, so it creates no tag.codeql,dependency-review, andstale-issuesare untouched.Docs and ownership:
README leads with "Agents and skills for Windows app development". The plugin table (name, purpose, where it's maintained, supported hosts) is the only place plugin names appear. Each host section shows one generic command, e.g.
copilot plugin install <plugin>@win-dev-skills, so adding a plugin only needs a new table row. Host caveats stay short: Codex, OpenClaw and OpenCode load skills but not agents, and OpenClaw is footnoted. It warns not to install the same plugin from two catalogs. OpenClaw usesopenclaw plugins install <plugin> --marketplace microsoft/winappCli; OpenCode links a skills folder from a clone.CONTRIBUTING describes two ways to add a plugin:
plugins/<name>/(Agent Plugins layout, plus a Claude manifest)It sets a bar for inclusion: Windows app development; small and curated; skill descriptions of 300 characters or fewer with "Use when… Not for…"; no overlap with winappcli, winui, or dotnet/skills' dotnet-diag, dotnet-winforms, and dotnet-maui; two or more owners. It also covers who reviews and how pins get bumped.
CODEOWNERS (new): catalog files, CI, and scripts are owned by Nikola Metulev (@nmetulev) Alexandre Zollinger Chohfi (@azchohfi) Niels Laute (@niels9001). There's a template for
/plugins/<name>/entries.RELEASING, CHANGELOG, SUPPORT, and the issue and PR templates are updated. Issues and PRs for winui and winappcli content go to winappCli.
Codex catalog rename: test and decision
I tested Codex 0.159.1 in an isolated
CODEX_HOMEagainst a throwawaytest/codex-renamebranch, since deleted. I registered the branch asmicrosoft-winuiand installedwinuiandwinappcli, then fast-forwarded the branch to a commit that renames the catalog towin-dev-skills:codex plugin marketplace upgrade [microsoft-winui]win-dev-skillsdoes not match configured marketplacemicrosoft-winui. The snapshot stays at the old commit.installed, enabled), but frozen: they won't get updates until migratedmicrosoft-winui); no duplicate registrationcodex plugin add winui@win-dev-skillsbefore migratingwinuiwas not found in marketplacewin-dev-skillscodex plugin marketplace add microsoft/win-dev-skillsagainmicrosoft-winui(it de-duplicates by URL)[plugins."winui@microsoft-winui"] enabled = trueorphaned inconfig.toml.codex plugin removestill cleans it up.plugin remove <p>@microsoft-winui→marketplace remove microsoft-winui→marketplace add microsoft/win-dev-skills→plugin add <p>@win-dev-skillswin-dev-skills, files byte-identical (8 and 12 skills); a latermarketplace upgradesucceedsChoice: rename, with a documented one-time migration. The migration commands are in the README Codex section and the CHANGELOG. Codex does not follow the rename on its own. An explicit upgrade fails with a clear message naming both catalogs, and nothing breaks. One caveat: users who never run
marketplace upgradedon't see the error; their plugins just stop updating. The CHANGELOG and README note is how they'll find out. A fresh install from this branch aswin-dev-skillswas verified as well.Test matrix
Real installs from the GitHub-hosted catalog (
microsoft/win-dev-skills#nmetulev-flip-to-winappcli-catalog). Each host ran in an isolated home under%TEMP%with otherCOPILOT_*vars stripped. Hosts: Copilot CLI 1.0.87, Claude Code 2.1.285 via npx, Codex 0.159.1 via npx. "Identical" means the installed skill and agent files match the pinned commit's git blobs.winuifreshwinappclifresh (installed alongsidewinui)winuiversion unchanged (main → this catalog)winuifake 0.7.2 bumpv0.7.1 → v0.7.2plugin validatepasses0.7.1 → 0.7.2, source = winappCliref v0.7.1+ sha0.7.2, source = winappCliFor Claude and Codex, skill loading was verified by the files on disk and the plugin list. A model session wasn't run because the isolated homes have no auth. The fake bump used throwaway
test/*branches here and in winappCli, and both are deleted. Takeaway: the next realwinuiversion bump moves every Copilot, Claude, and Codex user to winappCli.Rulesets / admin follow-ups
mainhas only the org ruleset (PR review, no force-push/delete), so the renamed jobs break nothing.require_code_owner_review: true, so PRs tomainwill need a review from one of the three owners. Confirm the owner list.stagingruleset (id 16382425) and thestagingbranch after the staging PRs below are handled.staginghas no content beyondmain.winui(pinned to win-dev-skillsv0.7.1, which still works because tags keep the content) andwinappcli. Repointwinuito winappCli at the next release.winuito the release tag + sha, and bump both plugins together.Open PRs targeting
stagingplugins/winui)main(catalog docs)plugins/winui)plugins/winui)src/winapp-Analyzer(local analyzer already removed)plugins/winui); overlaps #88src/toolsis gone); closeplugins/winui)plugins/winui); overlaps #134