You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Plugin format for skills + local NuGet flow + agent kit
Restructures the agent-facing skills around the Copilot CLI / Claude
plugin layout (plugins/reactor/{plugin.json, agents/, skills/<name>/SKILL.md})
so the SDK's native skill-loading subsystem fires `skill.invoked` instead
of the agent treating SKILL.md as an ordinary file. Each topical skill
gets a focused SKILL.md with keyword-rich frontmatter; deeper content
lives under references/.
New skills (under plugins/reactor/skills/):
- reactor-getting-started — minimal single-file `#:package` starter, .csproj
template, mode detection, package consumption, cache map fallback
- reactor-dsl — DSL essentials, hooks, components, theme tokens, gotchas;
references/reactor.api.txt is the full alphabetized signatures index
- reactor-build-and-check — `mur check` usage, common-build-errors cheat
table mapping REACTOR_* / CS* IDs to one-line fixes
- reactor-{async,design,forms,navigation,input,charts,commanding,devtools}
— migrated from skills/<name>.md with plugin-format frontmatter
- reactor-recipes — paste-ready single-file recipes in references/
Local NuGet flow + agent kit:
- tools/Reactor.SignaturesGen — reflection-based generator emitting
skills/reactor.api.txt from the built Reactor.dll. AfterBuild target
skips when RuntimeIdentifier is set so cross-arch publishes don't fail.
- nuget.config + local-nupkgs/ — repo-level local feed
- mur pack-local — packs Microsoft.UI.Reactor.0.0.0-local.nupkg into the
feed and clears NuGet's HTTP cache
- mur api / --regen-api — print / regenerate the signatures index
- mur check — runs `dotnet build` and emits one-line diagnostics with
skill-file pointers for known REACTOR_* analyzer IDs
- Reactor.csproj packs the full plugin tree into agentkit/plugins/reactor/
alongside the legacy SKILL.md + skills/ + reactor.api.txt
New analyzer:
- REACTOR_DSL_001 (MissingWithKeyAnalyzer) — flags Select(...) into a
layout container without .WithKey on items
Recipes (skills/recipes/):
- async-fetch-list, form-with-validation, list-add-delete, sidebar-nav,
themed-card — all compile against the local feed; verified end-to-end
via c:\temp\nuget-test*.
Root SKILL.md is preserved as a fallback for environments without plugin
loading and now leads with a pointer to the plugin path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`#:package Microsoft.UI.Reactor@…` for single-file). The package carries
32
+
the framework, the analyzers, and an **agent kit** (signatures index +
33
+
this SKILL.md). Two paths:
34
+
35
+
| Mode | How to detect | Bootstrap |
36
+
|---|---|---|
37
+
|**Selfhost** — you're in a Reactor source clone (`src/Reactor/Reactor.csproj` exists) | The repo's `local-nupkgs/` folder is the package source — see `nuget.config` at repo root. | Build `mur` once, then **`mur pack-local`** to populate `local-nupkgs/Microsoft.UI.Reactor.0.0.0-local.nupkg`. Re-run after framework changes. |
38
+
|**Consumer** — you're in an app that depends on Microsoft.UI.Reactor | No `src/Reactor/` next to your project. | Nothing extra — the package already carries the analyzers and agent kit. If `mur` is on PATH, `mur --skill` and `mur --api` print the embedded docs. Otherwise read `<package-cache>/microsoft.ui.reactor/<version>/agentkit/`. |
39
+
40
+
If you're in selfhost and `local-nupkgs/` is empty, restore will fail with
41
+
"package Microsoft.UI.Reactor 0.0.0-local was not found." Run `mur pack-local`
42
+
to fix it.
43
+
44
+
### Bootstrap (selfhost, fresh clone)
45
+
46
+
```powershell
47
+
# Build the CLI; on first build the SignaturesGen project also writes
48
+
# skills/reactor.api.txt as part of its AfterBuild target.
49
+
dotnet build src/Reactor.Cli -p:Platform=ARM64
50
+
51
+
# `mur` mirrors itself to <repo>/bin/<arch>/. Add that to PATH or invoke directly.
52
+
.\bin\arm64\mur.exe pack-local
53
+
```
54
+
55
+
After this, any project under the clone resolves
56
+
`Microsoft.UI.Reactor 0.0.0-local` from `local-nupkgs/` automatically (the
57
+
repo-level `nuget.config` configures it). A consumer **outside** the clone
58
+
needs a project-local `nuget.config` pointing at the absolute path of
59
+
`<repo>/local-nupkgs/`.
60
+
61
+
## Where to find docs (`mur --skill`, `mur --api`)
62
+
63
+
The `mur` CLI ships these embedded — works from any directory:
64
+
65
+
| Command | What it prints | Source |
66
+
|---|---|---|
67
+
|`mur --skill`| This SKILL.md | embedded in `mur`|
68
+
|`mur --api`| The signatures index (≈12K tokens, every factory/modifier/hook/Theme token/enum) | embedded in `mur`|
69
+
|`mur --regen-api`| Rebuilds `skills/reactor.api.txt` from a freshly-built `Reactor.dll` (selfhost only) | rebuilds `tools/Reactor.SignaturesGen`|
70
+
|`mur check <path>`| Runs `dotnet build` and emits one-line diagnostics with skill-file pointers for known REACTOR_* IDs | wraps MSBuild |
71
+
72
+
A consumer who doesn't have `mur` can read the same files directly from the
"description": "Agents and skills for building WinUI 3 desktop apps with Microsoft.UI.Reactor — a React-inspired declarative C# projection (no XAML, no data binding, no ViewModels). Use for creating new apps, adding features, fixing bugs, or any Reactor / Microsoft.UI.Reactor / functional WinUI task.",
description: "Builds WinUI 3 desktop apps with Microsoft.UI.Reactor — a React-inspired declarative C# projection (no XAML, no data binding, no ViewModels). Use for creating new Reactor apps, adding features, converting from XAML/MVVM to Reactor, fixing bugs, or any Microsoft.UI.Reactor / functional WinUI task."
4
+
user-invocable: true
5
+
---
6
+
7
+
## Process
8
+
9
+
You build Reactor apps following this process: understand requirements → write a minimal app → expand → build & verify. Reactor is novel (post-training), so **you must ground every API call in real signatures** from the bundled reference — not from memory.
10
+
11
+
Before writing any Reactor code, load these two skills (the plugin SDK does this efficiently — far cheaper than reading files via tool calls):
2.**`reactor-dsl`** — DSL essentials, hooks, components, theme tokens, critical gotchas, full signatures index in `references/`.
15
+
16
+
Load other skills only when the task explicitly calls for them — see the table below. Loading every skill up front is the failure mode that bloats context.
17
+
18
+
**Always prefer the loaded skill over invoking `mur --skill` / `mur --api` / cache-map file reads.** The plugin SDK ships these contents to you directly; falling back to tool calls (PowerShell, Read, Bash) wastes turns and tokens. Use those fallbacks only when the plugin isn't installed.
19
+
20
+
## When to load each skill
21
+
22
+
| Skill | Trigger |
23
+
|---|---|
24
+
|`reactor-getting-started`| Any new Reactor work. Always first. |
25
+
|`reactor-dsl`| Any Reactor work. Always second. Has the api index pointer. |
26
+
|`reactor-build-and-check`| Build fails, you see a `REACTOR_*` analyzer warning, or you want one-line diagnostic output. |
|`reactor-commanding`| Actions in multiple surfaces, keyboard shortcuts, `CanExecute`. |
34
+
|`reactor-devtools`| Driving a running app via `mur devtools` for screenshots / inspection. |
35
+
|`reactor-recipes`| You need a paste-ready snippet for a common pattern (list with add/delete, themed card, sidebar nav, etc.). |
36
+
37
+
## Best Practices
38
+
39
+
-**Ground every API call.** Reactor is novel. If you're not 100% sure a method exists with the signature you remember, consult the api index from `reactor-dsl` references — never guess.
40
+
-**Single-file `#:package` is the default for new apps.** Use a `.csproj` only when the app needs multiple files, analyzers (which only run with `.csproj`), or shared project references.
41
+
-**Don't grep `src/Reactor/`.** The bundled api index is the source of truth for public API. Source-code grep is slower and includes private/internal noise.
42
+
-**Don't add features beyond what's asked.** Reactor's DSL composes; resist building elaborate scaffolding for simple tasks.
43
+
-**Hooks must be called unconditionally.** Same order every render. Conditionally use the *result*, not the call.
44
+
-**Run `mur check <path>` after non-trivial edits.** It emits one-line diagnostics with skill pointers for known `REACTOR_*` IDs.
"description": "Agents and skills for building WinUI 3 desktop apps with Microsoft.UI.Reactor — a React-inspired declarative C# projection (no XAML, no data binding, no ViewModels). Use for creating new apps, adding features, fixing bugs, or any Reactor / Microsoft.UI.Reactor / functional WinUI task.",
0 commit comments