From maui-skillz
Discovers .NET SDK versions, workload sets, manifest versions, and platform dependencies from live metadata and NuGet feeds. Useful for Xcode/JDK/Android SDK/MAUI requirements and prerelease workloads.
npx claudepluginhub redth/maui-skillz --plugin maui-skillzThis skill uses the workspace's default tool permissions.
Query live .NET release metadata and NuGet feeds to discover authoritative SDK
Diagnoses and fixes .NET MAUI dev environment: .NET SDK/workloads, JDK, Android SDK, Xcode, Windows SDK. Dynamic NuGet version checks. For setup, build errors, post-update verification.
Generates or updates .NET MAUI workload release notes markdown from live workload and manifest data via dotnet-workload-info. For version rollups, custom NuGet feeds, prerelease packages, pinned versions, and index updates.
Queries .NET APIs across NuGet packages, platform libraries, and local files. Searches types, lists members, diffs versions, finds extensions and implementors for .NET library questions.
Share bugs, ideas, or general feedback.
Query live .NET release metadata and NuGet feeds to discover authoritative SDK versions, workload sets, manifest versions, and dependency requirements.
Prefer user-provided NuGet sources and exact versions when supplied. This is important for pre-publication scenarios where the packages are not yet available on NuGet.org.
Use this skill when you need to:
| Parameter | Required | Example | Notes |
|---|---|---|---|
| dotnetVersion | yes | 9.0, 10.0 | Major.minor format |
| prerelease | no | true/false | Default false |
| workload | no | ios, android, maui | Alias or full id |
| sdkVersion | no | 10.0.103 | Use this instead of latest-sdk discovery when pinned |
| nugetSources | no | https://pkgs.dev.azure.com/.../index.json, myfeed | Search these sources in the supplied order before NuGet.org |
| nugetConfig | no | NuGet.config | Use this to resolve named/custom sources |
| localPackages | no | /tmp/*.nupkg | Inspect local packages directly when provided |
| workloadSetVersion | no | 10.103.0 or 10.0.103 | Use the exact requested workload set version |
| manifestVersions | no | ios=26.2.11425, maui=10.0.30 | Per-workload exact version overrides |
nugetSources, treat them as authoritative and check
them in the order given.NuGet.config, source name, service-index URL, or
local .nupkg, treat that input as authoritative and use it directly.dotnet nuget list source.workloadSetVersion or manifestVersions override is supplied,
do not substitute a different version just because a newer one exists.| Alias | Full ID |
|---|---|
| ios | microsoft.net.sdk.ios |
| android | microsoft.net.sdk.android |
| maccatalyst | microsoft.net.sdk.maccatalyst |
| macos | microsoft.net.sdk.macos |
| tvos | microsoft.net.sdk.tvos |
| maui | microsoft.net.sdk.maui |
If sdkVersion is provided, use it directly.
If an exact workloadSetVersion is provided, preserve that version and derive
the corresponding CLI format and SDK band from it.
Otherwise, get the latest SDK version from the .NET release metadata:
curl -s "https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json" | \
jq '.["releases-index"][] | select(.["channel-version"]=="{MAJOR}.0")'
Extract latest-sdk and derive SDK band:
10.0.103 → band 10.0.100 (hundreds digit)10.0.205 → band 10.0.200For each custom source, resolve the NuGet V3 service index and extract the
package base/search endpoints from that source instead of hardcoding
api.nuget.org or azuresearch-usnc.nuget.org.
curl -s "{SOURCE_INDEX}" | jq -r '
.resources[] |
select(
(."@type" | tostring | contains("PackageBaseAddress")) or
(."@type" | tostring | contains("SearchQueryService"))
) | ."@id"'
If no custom sources are supplied, use NuGet.org as the fallback/default source.
Use the dotnet workload search version command to discover the latest workload set version:
dotnet workload search version --format json --take 1
# Returns: [{"workloadVersion":"10.0.103"}]
dotnet workload search version --format json --take 1 | ConvertFrom-Json
The returned workloadVersion is the CLI version to use with --version flag.
Version conversion: To convert this to the NuGet package version used in the later package lookups:
CLI 10.0.103 → NuGet 10.103.0 (remove middle .0., combine) The NuGet package is: Microsoft.NET.Workloads.{band} where band = CLI version (e.g., Microsoft.NET.Workloads.10.0.100)
If the user provided an exact workloadSetVersion, use that version instead of
searching for latest and try the custom sources first.
curl -o workloadset.nupkg "{PACKAGE_BASE}/microsoft.net.workloads.{band}/{version}/microsoft.net.workloads.{band}.{version}.nupkg"
unzip -p workloadset.nupkg data/microsoft.net.workloads.workloadset.json
Format: "{workload_id}": "{manifestVersion}/{sdkBand}"
Build package id: {WorkloadId}.Manifest-{sdkBand} (e.g., Microsoft.NET.Sdk.iOS.Manifest-10.0.100)
curl -o manifest.nupkg "{PACKAGE_BASE}/{packageid}/{version}/{packageid}.{version}.nupkg"
unzip -p manifest.nupkg data/WorkloadDependencies.json
Use the version from microsoft.net.workloads.workloadset.json unless the user
provided an explicit manifestVersions override. Try the workload set source
first so pre-release/private-feed manifests resolve correctly.
Android (microsoft.net.sdk.android):
{
"jdk": { "version": "[17.0,22.0)", "recommendedVersion": "17.0.14" },
"androidsdk": {
"packages": ["build-tools;35.0.0", "platform-tools", "platforms;android-35"],
"apiLevel": "35", "buildToolsVersion": "35.0.0"
}
}
iOS/macOS (microsoft.net.sdk.ios):
{
"xcode": { "version": "[26.2,)", "recommendedVersion": "26.2" },
"sdk": { "version": "26.2" }
}
Version ranges: [17.0,22.0) = >=17.0 AND <22.0; [26.2,) = >=26.2
MAUI packages may be newer than workload versions. Query the selected
SearchQueryService (or NuGet.org if no custom source was supplied) for the
latest compatible version:
curl -s "{SEARCH_QUERY_SERVICE}?q=packageid:Microsoft.Maui.Controls&prerelease=false" | \
jq '.data[0].versions | map(select(.version | startswith("{MAJOR}."))) | last'
Key packages: Microsoft.Maui.Controls, Microsoft.Maui.Essentials, Microsoft.Maui.Graphics
To use newer version than workload:
<PackageReference Include="Microsoft.Maui.Controls" Version="10.0.30" />
{
"dotnetVersion": "10.0",
"latestSdk": "10.0.102",
"sdkBand": "10.0.100",
"workloadSet": {
"packageId": "...",
"nugetVersion": "10.102.0",
"cliVersion": "10.0.102",
"source": "https://api.nuget.org/v3/index.json"
},
"workloads": [{
"workloadId": "microsoft.net.sdk.ios",
"manifestVersion": "26.2.10191",
"sdkBand": "10.0.100",
"source": "https://pkgs.dev.azure.com/...",
"dependencies": { "xcode": { "versionRange": "[26.2,)", "recommendedVersion": "26.2" } }
}],
"mauiNugets": [{ "packageId": "Microsoft.Maui.Controls", "latestVersion": "10.0.30" }]
}
prerelease=true only when the user did not pin an exact versionSee references/workload-discovery-process.md for detailed NuGet API documentation and complete examples.