Add initial MAUI dev skills (bindings + workload info)#59
Add initial MAUI dev skills (bindings + workload info)#59jfversluis wants to merge 4 commits intomainfrom
Conversation
Sets up the plugin/marketplace plumbing so this repo can distribute agent skills, compatible with the Copilot CLI / Claude Code / VS Code plugin system. Mirrors dotnet/skills conventions. Infrastructure: - marketplace.json registry with two plugins (devflow, general dev) - skill-check.yml: static validation on PRs (skill-validator from dotnet/skills) - skill-evaluation.yml: LLM-based /evaluate gating with permission checks - AGENTS.md: repo-level agent instructions - plugins/CONTRIBUTING.md: contributor guide with evaluation writing guidance - plugins/README.md: marketplace landing page - eng/allowed-external-deps.txt: reference URL allowlist Example skill: - devflow-connect: DevFlow agent connectivity troubleshooting - 4 evaluation scenarios testing platform-specific guidance Closes #51 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adds initial end-user “agent skills” content to the MAUI skills marketplace in this repo, including skill docs and evaluation scenarios for DevFlow connectivity, slim native bindings (Android/iOS), and .NET workload/version discovery.
Changes:
- Adds 3 new MAUI-dev skills (Android slim bindings, iOS slim bindings, workload discovery) plus one DevFlow connectivity skill, with accompanying long-form reference docs.
- Adds evaluation scenario suites (
eval.yaml) for each skill and updates marketplace-facing docs (root README + plugins catalog). - Introduces/updates skill validation/evaluation workflows and contributing guidance for adding future skills.
Reviewed changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/dotnet-maui-devflow/devflow-connect/eval.yaml | Adds DevFlow connectivity evaluation scenarios (ports, adb reverse, broker checks). |
| tests/dotnet-maui-dev/ios-slim-bindings/eval.yaml | Adds iOS slim binding evaluation scenarios (CocoaPods, selector mismatches, async patterns, Sharpie). |
| tests/dotnet-maui-dev/dotnet-workload-info/eval.yaml | Adds workload discovery evaluation scenarios (NuGet APIs, workload set conversion, SDK deps). |
| tests/dotnet-maui-dev/android-slim-bindings/eval.yaml | Adds Android slim binding evaluation scenarios (Gradle/AAR, XA424x dependency mapping, wrapper patterns). |
| README.md | Documents the repo as a skills marketplace and lists available plugins. |
| plugins/README.md | Adds a plugin catalog and installation instructions for the skills marketplace. |
| plugins/dotnet-maui-devflow/skills/devflow-connect/SKILL.md | Adds DevFlow connectivity troubleshooting skill documentation. |
| plugins/dotnet-maui-devflow/plugin.json | Introduces the dotnet-maui-devflow plugin manifest. |
| plugins/dotnet-maui-dev/skills/ios-slim-bindings/SKILL.md | Introduces iOS slim bindings skill documentation. |
| plugins/dotnet-maui-dev/skills/ios-slim-bindings/references/ios-slim-bindings-implementation.md | Adds a detailed iOS slim binding implementation reference. |
| plugins/dotnet-maui-dev/skills/ios-slim-bindings/references/ios-bindings-guide.md | Adds a comprehensive iOS bindings guide reference. |
| plugins/dotnet-maui-dev/skills/dotnet-workload-info/SKILL.md | Introduces .NET workload discovery skill documentation (NuGet/live API approach). |
| plugins/dotnet-maui-dev/skills/dotnet-workload-info/references/workload-discovery-process.md | Adds a detailed workload discovery reference (NuGet API + naming/versioning rules). |
| plugins/dotnet-maui-dev/skills/android-slim-bindings/SKILL.md | Introduces Android slim bindings skill documentation. |
| plugins/dotnet-maui-dev/skills/android-slim-bindings/references/android-slim-bindings-implementation.md | Adds a detailed Android slim binding implementation reference. |
| plugins/dotnet-maui-dev/skills/android-slim-bindings/references/android-bindings-guide.md | Adds a comprehensive Android bindings guide reference. |
| plugins/dotnet-maui-dev/plugin.json | Introduces the dotnet-maui-dev plugin manifest. |
| plugins/CONTRIBUTING.md | Adds contributor guidance for writing skills and eval scenarios. |
| eng/allowed-external-deps.txt | Adds an allowlist file for skill-validator external deps enforcement (currently comments/template). |
| AGENTS.md | Adds repo instructions for agents, including skills structure and validation commands. |
| .github/workflows/skill-evaluation.yml | Adds/updates the /evaluate-triggered skill evaluation workflow. |
| .github/workflows/skill-check.yml | Adds/updates the PR/push skill-validator “check” workflow. |
| .github/plugin/marketplace.json | Adds marketplace registry metadata for the two plugins. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -0,0 +1,318 @@ | |||
| --- | |||
| name: android-slim-bindings | |||
| description: Create and update slim/native platform interop bindings for Android in .NET MAUI and .NET for Android projects. Guides through creating Java/Kotlin wrappers, configuring Gradle projects, resolving Maven dependencies, generating C# bindings, and integrating native Android libraries using the Native Library Interop (NLI) approach. Use when asked about Android bindings, AAR/JAR integration, Kotlin interop, Maven dependencies, or bridging native Android SDKs to .NET. | |||
There was a problem hiding this comment.
The skill frontmatter description doesn’t include explicit "USE FOR" / "DO NOT USE FOR" guidance. plugins/CONTRIBUTING.md documents this as required for activation/scoping; without it, activation can be overly broad and may fail validation if enforced. Update the frontmatter description to include clear USE FOR / DO NOT USE FOR clauses (keep the rest of the details in the body).
| description: Create and update slim/native platform interop bindings for Android in .NET MAUI and .NET for Android projects. Guides through creating Java/Kotlin wrappers, configuring Gradle projects, resolving Maven dependencies, generating C# bindings, and integrating native Android libraries using the Native Library Interop (NLI) approach. Use when asked about Android bindings, AAR/JAR integration, Kotlin interop, Maven dependencies, or bridging native Android SDKs to .NET. | |
| description: USE FOR: Helping with creating or updating slim/native Android platform interop bindings (Native Library Interop) in .NET MAUI or .NET for Android, including Java/Kotlin wrapper design, Gradle configuration, Maven/AAR/JAR integration, and C# binding generation for native Android SDKs. DO NOT USE FOR: Non-Android platforms, general .NET MAUI app UI or architecture questions, or scenarios that do not involve Android native library/SDK bindings or interop. |
| @@ -0,0 +1,277 @@ | |||
| --- | |||
| name: ios-slim-bindings | |||
| description: Create and update slim/native platform interop bindings for iOS in .NET MAUI and .NET for iOS projects. Guides through creating Swift/Objective-C wrappers, configuring Xcode projects, generating C# API definitions, and integrating native iOS libraries using the Native Library Interop (NLI) approach. Use when asked about iOS bindings, xcframework integration, Swift interop, Objective Sharpie, or bridging native iOS SDKs to .NET. | |||
There was a problem hiding this comment.
The skill frontmatter description is missing explicit "USE FOR" / "DO NOT USE FOR" clauses, which plugins/CONTRIBUTING.md calls out as required to keep activation scoped and predictable. Please add those clauses to the frontmatter description (and keep the longer guidance in the body / references).
| description: Create and update slim/native platform interop bindings for iOS in .NET MAUI and .NET for iOS projects. Guides through creating Swift/Objective-C wrappers, configuring Xcode projects, generating C# API definitions, and integrating native iOS libraries using the Native Library Interop (NLI) approach. Use when asked about iOS bindings, xcframework integration, Swift interop, Objective Sharpie, or bridging native iOS SDKs to .NET. | |
| description: Create and update slim/native platform interop bindings for iOS in .NET MAUI and .NET for iOS projects. Guides through creating Swift/Objective-C wrappers, configuring Xcode projects, generating C# API definitions, and integrating native iOS libraries using the Native Library Interop (NLI) approach. USE FOR: questions about iOS slim/native bindings, xcframework integration, Swift/Objective-C wrappers, Objective Sharpie, or bridging native iOS SDKs to .NET in .NET MAUI or .NET for iOS. DO NOT USE FOR: non-iOS platforms, general .NET MAUI issues unrelated to bindings, or iOS app questions that do not involve native library interop. |
| Discover .NET SDK versions, workload sets, manifest versions, and workload dependencies (Xcode, JDK, Android SDK) from live NuGet APIs. Use when asked about: .NET SDK | ||
| requirements/versions, workload set versions, workload manifest versions, Xcode version requirements, JDK version requirements, Android SDK packages, or MAUI NuGet package | ||
| versions. Triggers on questions like "What Xcode is required for .NET 10?" or "What's the latest workload set?" |
There was a problem hiding this comment.
The frontmatter description doesn’t follow the documented convention of including explicit "USE FOR" and "DO NOT USE FOR" guidance (see plugins/CONTRIBUTING.md). Adding those clauses will help runtimes make better activation decisions and keeps this skill from triggering too broadly.
| Discover .NET SDK versions, workload sets, manifest versions, and workload dependencies (Xcode, JDK, Android SDK) from live NuGet APIs. Use when asked about: .NET SDK | |
| requirements/versions, workload set versions, workload manifest versions, Xcode version requirements, JDK version requirements, Android SDK packages, or MAUI NuGet package | |
| versions. Triggers on questions like "What Xcode is required for .NET 10?" or "What's the latest workload set?" | |
| Discover .NET SDK versions, workload sets, manifest versions, and workload dependencies (Xcode, JDK, Android SDK) from live NuGet APIs. USE FOR: questions about .NET SDK | |
| requirements/versions, workload set versions, workload manifest versions, Xcode version requirements, JDK version requirements, Android SDK packages, or MAUI NuGet package | |
| versions, including questions like "What Xcode is required for .NET 10?" or "What's the latest workload set?". DO NOT USE FOR: general .NET development help, debugging build | |
| errors unrelated to workloads, or questions about installing IDEs or configuring non-.NET tooling. |
| EVAL_FAILED=0 | ||
| echo "$ENTRIES" | jq -c '.[]' | while read -r entry; do | ||
| name=$(echo "$entry" | jq -r '.name') | ||
| plugin=$(echo "$entry" | jq -r '.plugin') | ||
| skills_path=$(echo "$entry" | jq -r '.skills_path') | ||
|
|
||
| echo "=== Evaluating: $name ===" | ||
| if ! /tmp/skill-validator/bin/skill-validator evaluate \ | ||
| --verdict-warn-only \ | ||
| --results-dir "$RESULTS_DIR/$name" \ | ||
| --reporter console --reporter json --reporter markdown \ | ||
| --runs 3 \ | ||
| --tests-dir "./tests/$plugin" \ | ||
| "./$skills_path"; then | ||
| echo "::warning::Evaluation failed for $name" | ||
| EVAL_FAILED=1 | ||
| fi | ||
| done | ||
| exit $EVAL_FAILED |
There was a problem hiding this comment.
The evaluation loop sets EVAL_FAILED=1 inside a while loop fed by a pipe (... | while read ...). In bash, that loop runs in a subshell, so EVAL_FAILED won’t be updated in the parent shell and exit $EVAL_FAILED will always exit 0. Restructure the loop to avoid the subshell (e.g., process substitution) so evaluation failures correctly fail the job.
| - name: Discover skills to evaluate | ||
| id: discover | ||
| run: | | ||
| # Find all plugins with both skills and tests | ||
| ENTRIES="[]" | ||
| for plugin_dir in plugins/*/; do | ||
| plugin_name=$(basename "$plugin_dir") | ||
| skills_path="$plugin_dir/skills" | ||
| tests_dir="tests/$plugin_name" | ||
|
|
||
| if [ -d "$skills_path" ] && [ -d "$tests_dir" ]; then | ||
| for skill_dir in "$tests_dir"/*/; do | ||
| [ -f "$skill_dir/eval.yaml" ] || continue | ||
| skill_name=$(basename "$skill_dir") | ||
| ENTRIES=$(echo "$ENTRIES" | jq --arg name "$skill_name" --arg plugin "$plugin_name" \ | ||
| --arg skills_path "$skills_path" \ | ||
| '. + [{"name": $name, "plugin": $plugin, "skills_path": $skills_path}]') | ||
| done |
There was a problem hiding this comment.
The evaluation job iterates over each eval.yaml entry but calls skill-validator evaluate on the entire plugin skills/ directory each time (./$skills_path). Unless skill-validator automatically filters to a single skill, this will re-run the full plugin evaluation repeatedly and increase runtime/cost. Consider evaluating once per plugin, or pass a per-skill path like ./$skills_path/$name when looping per skill.
| { | ||
| "name": "dotnet-maui-dev", | ||
| "version": "0.1.0", | ||
| "description": "Skills for .NET MAUI development: profiling, accessibility, UI design patterns, platform-specific guidance, and best practices.", |
There was a problem hiding this comment.
dotnet-maui-dev’s plugin manifest description doesn’t match the skills being added in this PR (bindings + workload discovery). Since plugin.json is what users see in the marketplace, update the description to reflect the current skill set (e.g., native bindings/NLI and workload info) to avoid misleading installs.
| "description": "Skills for .NET MAUI development: profiling, accessibility, UI design patterns, platform-specific guidance, and best practices.", | |
| "description": "Skills for .NET MAUI development, including native bindings/NLI assistance, .NET workload discovery and configuration, plus profiling, accessibility, UI design patterns, platform-specific guidance, and best practices.", |
| | Plugin | Description | | ||
| |--------|-------------| | ||
| | [`dotnet-maui-devflow`](plugins/dotnet-maui-devflow/) | DevFlow automation: agent connectivity, visual tree, screenshots, debugging | | ||
| | [`dotnet-maui-dev`](plugins/dotnet-maui-dev/) | General MAUI development: profiling, accessibility, design patterns | |
There was a problem hiding this comment.
The root README describes dotnet-maui-dev as focusing on profiling/accessibility/design patterns, but the plugin’s current skills in this PR are about native slim bindings and workload discovery. Updating this description will keep the repo’s landing page aligned with what the plugin actually provides.
| | [`dotnet-maui-dev`](plugins/dotnet-maui-dev/) | General MAUI development: profiling, accessibility, design patterns | | |
| | [`dotnet-maui-dev`](plugins/dotnet-maui-dev/) | General MAUI development: native slim bindings, workload discovery | |
- Use process substitution instead of piped while loop so EVAL_FAILED persists outside the subshell - Handle gh api 404 for non-collaborators gracefully (fall back to 'none') - Deduplicate evaluation by running once per plugin instead of once per skill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Import 3 end-user focused skills from Redth/maui-skillz: - android-slim-bindings: Create Android binding libraries for .NET MAUI - ios-slim-bindings: Create iOS binding libraries for .NET MAUI - dotnet-workload-info: Discover installed .NET workloads and dependencies Each skill includes: - SKILL.md adapted for skill-validator compliance (<500 lines) - Reference docs with detailed implementation guides - eval.yaml with 4 scenarios (12 total, 240s timeout) Skills target MAUI app developers, not framework engineers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1a51755 to
0a3a957
Compare
- Android scenario 1: Setup with MAUI project, file_exists/file_contains on build.gradle.kts for created binding project - Android scenario 2: Setup with broken .csproj, file_contains to verify PackageReferences for AndroidX.Core and Kotlin.StdLib are added - iOS scenario 1: Setup with MAUI project, file_exists on project.yml and Podfile, file_contains for CocoaPods dependency - iOS scenario 2: Setup with broken Swift/ApiDefinition files, file_contains to verify selector fix applied Prompts changed from guidance-oriented to directive (create files in X/) so the agent produces verifiable artifacts, not just explanations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Adds 3 end-user focused skills to the
dotnet-maui-devplugin, imported from Redth/maui-skillz and adapted for skill-validator compliance.Depends on: #58 (skills marketplace merge that first so
/evaluateworks from the pipeline.infrastructure)Skills Added
Adaptations from Source
references/maui-release-notes(framework-internal, not end-user facing)setupblocks andfile_exists/file_containsassertions for verifiable outputLocal Evaluation Results (3 runs, Opus 4.6)
All 12 scenarios passed with significant quality improvements:
After Merge
Post
/evaluateon this PR to run full pipeline evaluation (requires #58 merged first).