Source profileQuality 94/100Review permissions

dotnet/skills/plugins/dotnet-template-engine/skills/template-discovery/SKILL.md

template-discovery

Helps find, inspect, and compare (at a high level) .NET project templates. Resolves natural-language project descriptions to ranked template matches with pre-filled parameters. USE FOR: finding the right dotnet new template for a task, inspecting a template's parameters and constraints, understanding what a template produces before creating a project, resolving intent like "web API with auth" to concrete template + parameters. DO NOT USE FOR: actually creating projects (use template-instantiatio

Source repository stars
5,248
Declared platforms
0
Static risk flags
1
Last source update
2026-08-26
Source checked
2026-08-26

Decision brief

What it does: where it fits

This skill helps an agent find, inspect, and select the right dotnet new template for a given task using dotnet new CLI commands for search, listing, and parameter inspection.

Best for

  • User asks "What templates are available for X?"
  • User describes a project in natural language ("I need a web API with authentication")
  • User wants to compare templates or understand parameters before creating a project

Not for

  • User wants to create a project — route to template-instantiation skill
  • User wants to author or validate a custom template — route to template-authoring skill

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/dotnet/skills --skill "plugins/dotnet-template-engine/skills/template-discovery"
Safe inspection promptEditorial

Inspect the Agent Skill "template-discovery" from https://github.com/dotnet/skills/blob/1b896e91feb0f613cb54a914f1efd2897810ae02/plugins/dotnet-template-engine/skills/template-discovery/SKILL.md at commit 1b896e91feb0f613cb54a914f1efd2897810ae02. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Workflow

    Do Step 1 and write the recommendation to the user before running Step 2–4 commands. Steps 2–4 only confirm the answer; a dotnet new failure must never leave the turn empty.

    Key parameters and recommended values (with the choices, e.g. --auth: None | Individual | SingleOrg | Windows)What to expect (files created, project structure)Any prerequisites — name the exact package to install (dotnet new install ), or say "no install needed — ships with the SDK" for a built-in template
  2. 02

    Step 1: Resolve intent to template candidates

    Map the user's natural-language description to template short names and parameters using these mappings.

    Map the user's natural-language description to template short names and parameters using these mappings.Intent → template short name(s):These are starting guesses. Always confirm the real parameter names/choices with dotnet new --help, because parameter names vary by template (e.g., --auth vs --Authentication).
  3. 03

    Step 2: Search for templates

    Use dotnet new search to find templates by keyword across both locally installed templates and NuGet.org:

    Use dotnet new search to find templates by keyword across both locally installed templates and NuGet.org:Use dotnet new list to show only installed templates, with optional filters:
  4. 04

    Step 3: Inspect template details

    Use dotnet new --help to get full parameter details for a specific template — parameter names, types, defaults, and allowed values:

    Use dotnet new --help to get full parameter details for a specific template — parameter names, types, defaults, and allowed values:
  5. 05

    Step 4: Preview output

    Use dotnet new --dry-run to show what files and directories a template would create without writing anything to disk:

    Use dotnet new --dry-run to show what files and directories a template would create without writing anything to disk:If the dry-run fails (transient "mutex"/"persistence" error), retry once; if it still fails, give a representative structure (template family and typical file kinds) and note it isn't CLI-confirmed. Do not invent specif…

Permission review

Static risk signals and limitations

Runs scripts

medium · line 24

The documentation asks the agent to run terminal commands or scripts.

command) from the mapping, **before you run any `dotnet new` command**. Only then use the CLI

Runs scripts

medium · line 135

The documentation asks the agent to run terminal commands or scripts.

*Lead with the answer as a ready-to-run command**, then justify it. Required shape:

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score94/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars5,248SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
dotnet/skills
Skill path
plugins/dotnet-template-engine/skills/template-discovery/SKILL.md
Commit
1b896e91feb0f613cb54a914f1efd2897810ae02
License
MIT
Collected
2026-08-26
Default branch
main
View the original SKILL.md

Template Discovery

This skill helps an agent find, inspect, and select the right dotnet new template for a given task using dotnet new CLI commands for search, listing, and parameter inspection.

When to Use

  • User asks "What templates are available for X?"
  • User describes a project in natural language ("I need a web API with authentication")
  • User wants to compare templates or understand parameters before creating a project
  • User needs to know what a template produces (files, structure) before committing

When Not to Use

  • User wants to create a project — route to template-instantiation skill
  • User wants to author or validate a custom template — route to template-authoring skill
  • User wants a detailed side-by-side comparison of templates — route to template-comparison skill
  • User wants smart cross-parameter defaults during creation — route to template-smart-defaults skill
  • User is troubleshooting build issues — route to dotnet-msbuild plugin

Answer first, confirm second — required, in this order. The Step 1 intent → template and keyword → parameter mappings are a complete answer on their own. Your first action is to write a concrete template + parameter recommendation (with a ready-to-run dotnet new command) from the mapping, before you run any dotnet new command. Only then use the CLI to confirm exact names/choices and update the answer. Never make a dotnet new call your final action — the engine's global mutex can make it fail with an empty "persistence"/"mutex" result under load, leaving the user nothing. Always close with the written recommendation, and never end a turn on a "let me confirm from the CLI…" teaser.

Inputs

InputRequiredDescription
User intent or keywordsYesNatural-language description or keywords (e.g., "web API", "console app", "MAUI")
Language preferenceNoC#, F#, or VB — defaults to C#
Framework preferenceNoTarget framework (e.g., net10.0, net9.0)

Workflow

Do Step 1 and write the recommendation to the user before running Step 2–4 commands. Steps 2–4 only confirm the answer; a dotnet new failure must never leave the turn empty.

Step 1: Resolve intent to template candidates

Map the user's natural-language description to template short names and parameters using these mappings.

Intent → template short name(s):

Intent / phraseTemplate short name(s)
web api, web service, rest api, restful, api, minimal apiwebapi
web app, web applicationwebapp, blazorserver
mvcmvc
razor, razor pageswebapp
blazor, blazor web appblazor
blazor serverblazorserver
blazor wasm, blazor webassemblyblazorwasm
grpcgrpc
signalrwebapi, webapp
console, console app, command line, cliconsole
worker, background service, daemon, windows serviceworker
class library, library, lib, nuget packageclasslib
maui, mobile, cross-platform app, ios, androidmaui
desktopmaui, wpf, winforms
wpfwpf
winforms, windows formswinforms
winui, winui3winui3
test, unit testxunit, nunit, mstest
xunit / nunit / mstestxunit / nunit / mstest
solutionsln
aspire, .net aspireaspire-starter, aspire
azure functions, function app, serverlessfunc
orleansorleans
razor component, web componentrazorcomponent
razor class libraryrazorclasslib
gitignore / editorconfig / nuget config / global jsongitignore / editorconfig / nugetconfig / globaljson

Keyword → parameter:

Keyword / phraseParameterValue
authentication, auth, individual auth, individual accounts--authIndividual
windows auth--authWindows
azure ad, entra id--authSingleOrg
no auth, no authentication--authNone
controllers, with controllers--use-controllers(flag)
minimal api(default)
aot, native aot--aot(flag)
docker, containerthe template's Docker/container optionvaries by template — confirm with --help (not all templates expose one)
net8 / .net 8 / dotnet 8--frameworknet8.0
net9 / .net 9 / dotnet 9--frameworknet9.0
net10 / .net 10 / dotnet 10--frameworknet10.0

These are starting guesses. Always confirm the real parameter names/choices with dotnet new <template> --help, because parameter names vary by template (e.g., --auth vs --Authentication).

Some mapped short names are not present in a default SDK install — templates like maui, winui3, aspire-starter/aspire, func, and orleans typically require a workload (dotnet workload install <id>) and/or an additional template package (dotnet new install <package>). If a mapped short name does not appear in dotnet new list, fall back to dotnet new list/dotnet new search to find the right template and the package/workload that provides it before recommending it.

Resilience — always answer, even if the CLI fails. The intent mapping above is a usable answer on its own. Run dotnet new commands sequentially, one at a time — the template engine uses a global mutex, so firing several dotnet new <template> --help/--dry-run calls concurrently can produce a transient "mutex"/"persistence" error and empty output. If a command fails, retry it once; if it still fails, fall back to this intent/parameter mapping and give the user a concrete recommendation, noting that the exact parameter names/choices could not be CLI-confirmed. Never end the turn with no answer because a CLI call errored.

Step 2: Search for templates

Use dotnet new search to find templates by keyword across both locally installed templates and NuGet.org:

dotnet new search blazor

Use dotnet new list to show only installed templates, with optional filters:

dotnet new list --language C# --type project
dotnet new list web

Step 3: Inspect template details

Use dotnet new <template> --help to get full parameter details for a specific template — parameter names, types, defaults, and allowed values:

dotnet new webapi --help

Step 4: Preview output

Use dotnet new <template> --dry-run to show what files and directories a template would create without writing anything to disk:

dotnet new webapi --name MyApi --auth Individual --dry-run

If the dry-run fails (transient "mutex"/"persistence" error), retry once; if it still fails, give a representative structure (template family and typical file kinds) and note it isn't CLI-confirmed. Do not invent specific values, choices, or file paths. When the dry-run succeeds, present the actual file list from its output faithfully — don't summarize, regroup, or invent files — and add a one-line purpose for the key entry points (e.g. Program.cs, App.razor).

Step 5: Present findings

Lead with the answer as a ready-to-run command, then justify it. Required shape:

Use <template> — one-line why.

dotnet new <template> --name <Name> [--key params]

Then add supporting detail:

  • Key parameters and recommended values (with the choices, e.g. --auth: None | Individual | SingleOrg | Windows)
  • What to expect (files created, project structure)
  • Any prerequisites — name the exact package to install (dotnet new install <id>), or say "no install needed — ships with the SDK" for a built-in template

An answer without a concrete, copy-pasteable command is what makes this skill tie with a plain reply — always give the command to run next.

Validation

  • At least one template match was found for the user's intent
  • Template parameters are explained with types and defaults
  • User understands what the template produces before proceeding to creation

Common Pitfalls

PitfallSolution
Not searching NuGet for templatesIf dotnet new list shows no matches, use dotnet new search <keyword> to find installable templates on NuGet.org.
Not checking template constraintsSome templates require specific SDKs or workloads. Use dotnet new <template> --help to surface constraints before recommending.
Recommending a template without previewing outputAlways use dotnet new <template> --dry-run to confirm the template produces what the user expects.
A dotnet new call fails with a "mutex"/"persistence" error and you return nothingThese are transient (often from concurrent invocations). Run dotnet new calls sequentially, retry once, then fall back to the Step 1 intent mapping and still give the user a concrete answer.

More Info

Frequently asked questions

What to verify before installation and use

What does the template-discovery source document cover?

This skill helps an agent find, inspect, and select the right dotnet new template for a given task using dotnet new CLI commands for search, listing, and parameter inspection.

How do I install template-discovery?

The source record exposes this install command: npx skills add https://github.com/dotnet/skills --skill "plugins/dotnet-template-engine/skills/template-discovery". Inspect the command and pinned source before running it.

Which permission-related actions were detected?

Static rules flagged exec-script in the source; the page lists the matching lines and excerpts.

Alternatives

Compare before choosing

Computed 10029,095

garrytan/gbrain

bulk-ingestion

End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.

Computed 10024,975

alirezarezvani/claude-skills

app-store-optimization

App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist

Computed 1005,248

dotnet/skills

migrate-vstest-to-mtp

Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing

Computed 100146

oaustegard/claude-skills

featuring

Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre