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 is troubleshooting build issues — route to
dotnet-msbuild plugin
Inputs
| Input |
Required |
Description |
| User intent or keywords |
Yes |
Natural-language description or keywords (e.g., "web API", "console app", "MAUI") |
| Language preference |
No |
C#, F#, or VB — defaults to C# |
| Framework preference |
No |
Target framework (e.g., net10.0, net9.0) |
Workflow
Step 1: Resolve intent to template candidates
Map the user's natural-language description to template short names using these common keyword mappings:
| User Intent |
Template |
Suggested Parameters |
| web API, REST API |
webapi |
--auth Individual --use-controllers if auth requested |
| web app, website |
webapp |
|
| Blazor, interactive web |
blazor |
|
| console app, CLI tool |
console |
|
| class library, shared code |
classlib |
|
| worker service, background job |
worker |
|
| gRPC service |
grpc |
|
| MAUI app, mobile app |
maui |
|
| test project, unit tests |
xunit, mstest, or nunit |
|
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
Step 5: Present findings
Summarize the best template match with:
- Template name and short description
- Key parameters and recommended values
- What the user should expect (files created, project structure)
- Any constraints or prerequisites
Validation
Common Pitfalls
| Pitfall |
Solution |
| Not searching NuGet for templates |
If dotnet new list shows no matches, use dotnet new search <keyword> to find installable templates on NuGet.org. |
| Not checking template constraints |
Some templates require specific SDKs or workloads. Use dotnet new <template> --help to surface constraints before recommending. |
| Recommending a template without previewing output |
Always use dotnet new <template> --dry-run to confirm the template produces what the user expects. |
More Info
1---2name: template-discovery3description: Helps find, inspect, and compare .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, comparing templates side by side, inspecting template 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-instantiation), authoring custom templates (use template-authoring), MSBuild or build issues (use dotnet-msbuild plugin), NuGet package management unrelated to template packages.4license: MIT5---6
7# Template Discovery
8
9This 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.
10
11## When to Use
12
13- User asks "What templates are available for X?"
14- User describes a project in natural language ("I need a web API with authentication")
15- User wants to compare templates or understand parameters before creating a project
16- User needs to know what a template produces (files, structure) before committing
17
18## When Not to Use
19
20- User wants to create a project — route to `template-instantiation` skill
21- User wants to author or validate a custom template — route to `template-authoring` skill
22- User is troubleshooting build issues — route to `dotnet-msbuild` plugin
23
24## Inputs
25
26| Input | Required | Description |
27|-------|----------|-------------|
28| User intent or keywords | Yes | Natural-language description or keywords (e.g., "web API", "console app", "MAUI") |
29| Language preference | No | C#, F#, or VB — defaults to C# |
30| Framework preference | No | Target framework (e.g., net10.0, net9.0) |
31
32## Workflow
33
34### Step 1: Resolve intent to template candidates
35
36Map the user's natural-language description to template short names using these common keyword mappings:
37
38| User Intent | Template | Suggested Parameters |
39|-------------|----------|---------------------|
40| web API, REST API | `webapi` | `--auth Individual --use-controllers` if auth requested |
41| web app, website | `webapp` | |
42| Blazor, interactive web | `blazor` | |
43| console app, CLI tool | `console` | |
44| class library, shared code | `classlib` | |
45| worker service, background job | `worker` | |
46| gRPC service | `grpc` | |
47| MAUI app, mobile app | `maui` | |
48| test project, unit tests | `xunit`, `mstest`, or `nunit` | |
49
50### Step 2: Search for templates
51
52Use `dotnet new search` to find templates by keyword across both locally installed templates and NuGet.org:
53
54```bash
55dotnet new search blazor
56```
57
58Use `dotnet new list` to show only installed templates, with optional filters:
59
60```bash
61dotnet new list --language C# --type project
62dotnet new list web
63```
64
65### Step 3: Inspect template details
66
67Use `dotnet new <template> --help` to get full parameter details for a specific template — parameter names, types, defaults, and allowed values:
68
69```bash
70dotnet new webapi --help
71```
72
73### Step 4: Preview output
74
75Use `dotnet new <template> --dry-run` to show what files and directories a template would create without writing anything to disk:
76
77```bash
78dotnet new webapi --name MyApi --auth Individual --dry-run
79```
80
81### Step 5: Present findings
82
83Summarize the best template match with:
84- Template name and short description
85- Key parameters and recommended values
86- What the user should expect (files created, project structure)
87- Any constraints or prerequisites
88
89## Validation
90
91- [ ] At least one template match was found for the user's intent
92- [ ] Template parameters are explained with types and defaults
93- [ ] User understands what the template produces before proceeding to creation
94
95## Common Pitfalls
96
97| Pitfall | Solution |
98|---------|----------|
99| Not searching NuGet for templates | If `dotnet new list` shows no matches, use `dotnet new search <keyword>` to find installable templates on NuGet.org. |
100| Not checking template constraints | Some templates require specific SDKs or workloads. Use `dotnet new <template> --help` to surface constraints before recommending. |
101| Recommending a template without previewing output | Always use `dotnet new <template> --dry-run` to confirm the template produces what the user expects. |
102
103## More Info
104
105- [dotnet new templates](https://learn.microsoft.com/dotnet/core/tools/dotnet-new-sdk-templates) — built-in template reference
106- [Template Engine Wiki](https://github.com/dotnet/templating/wiki) — template engine internals