Official agent skill

Template Instantiation

by dotnet in dotnet/skills

Creates .NET projects from templates with validated parameters, smart defaults, Central Package Management adaptation, and latest NuGet version resolution.

OfficialMITAuto-check passedDevelopment

Install Template Instantiation

skills CLI
$ npx skills add dotnet/skills --skill template-instantiation -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install dotnet/skills template-instantiation --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dotnet-template-engine/skills/template-instantiation .claude/skills/template-instantiation && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
template-instantiation
GitHub stars
5.6k
Used in
1 other repo
Token cost
~2.8k tokens
SKILL.md length
1,277 words
Files
1
Skills in repo
91
Repo updated
First seen
Licence
MIT

At a glance

Creates .NET projects from templates with validated parameters, smart defaults, Central Package Management adaptation, and latest NuGet version resolution.

  • Works in 7 steps: Resolve template and parameters → Analyze the workspace → Preview the creation → …
  • : creating new dotnet projects
  • SKILL.md covers When to Use, When Not to Use, Inputs and Workflow, plus 3 more sections
  • Calls dotnet

What it does

Template Instantiation is an agent skill from dotnet/skills, published by the product's own GitHub organization. Creates .NET projects from templates with validated parameters, smart defaults, Central Package Management adaptation, and latest NuGet version resolution. USE FOR: creating new dotnet projects, scaffolding solutions with multiple projects, installing or uninstalling template packages, creating projects that respect Directory.Packages.props (CPM), composing multi-project solutions (API + tests + library), getting latest NuGet package versions in newly created projects. DO NOT USE FOR: finding templates (use…

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Project scaffolding and API testing. It works with .NET. The repository describes itself as: Repository for skills to assist AI coding agents with .NET and C. The licence is MIT.

When your agent uses it

  • : creating new dotnet projects
  • Scaffolding solutions with multiple projects
  • Uninstalling template packages
  • Creating projects that respect Directory.Packages.props (CPM)

Example prompts

  • “Use the template-instantiation skill to create .NET projects from templates with validated parameters, smart defaults, Central Package Management…”
  • “/template-instantiation”

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Resolve template and parameters
  2. Analyze the workspace
  3. Preview the creation
  4. Create the project
  5. Multi-project composition (optional)
  6. Template package management
  7. Post-creation verification

What it can do on your machine

Read from SKILL.md and the folder at commit a660de8. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • dotnet

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • learn.microsoft.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Template Instantiation loads about 2.8k tokens when it runs. Until then it costs about 232 tokens; SKILL.md has 1,277 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~232
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from dotnet/skills at commit a660de8, republished under its MIT licence (© dotnet). 1,277 words, ~2,827 tokens.

Download SKILL.mdSave it as .claude/skills/template-instantiation/SKILL.md (or your agent's skills folder).
name
template-instantiation
description
Creates .NET projects from templates with validated parameters, smart defaults, Central Package Management adaptation, and latest NuGet version resolution. USE FOR: creating new dotnet projects, scaffolding solutions with multiple projects, installing or uninstalling template packages, creating projects that respect Directory.Packages.props (CPM), composing multi-project solutions (API + tests + library), getting latest NuGet package versions in newly created projects. DO NOT USE FOR: finding templates (use template-discovery), producing a detailed side-by-side comparison of templates (use template-comparison), authoring custom templates (use template-authoring), deciding cross-parameter defaults such as which framework to pair with native AOT or whether to keep HTTPS when auth is enabled (use template-smart-defaults), modifying existing projects or adding NuGet packages to existing projects.
license
MIT

Template Instantiation

This skill creates .NET projects from templates using dotnet new CLI commands, with guidance for parameter validation, Central Package Management adaptation, and multi-project composition.

Match the workspace, then stop. The highest-value move is aligning the new project with the repo it lands in: detect CPM (Directory.Packages.props) and the target framework used by neighbouring .csproj files, and mirror both. Treat the discovered target framework as an explicit choice — pass it as --framework so template-smart-defaults won't override it; deviate only when it's incompatible with a requested feature (then flag the conflict). Do this in as few steps as possible — a --dry-run, the create, and one dotnet build to confirm is usually enough. Extra exploratory turns add cost without improving the result.

Perform the requested creation. Do not return only a plan or statement of intent. Run state-dependent commands sequentially: inspect, dry-run, create, then build. Never launch create and build in parallel; a build-before-create race produces a false failure.

SituationRequired action
Simple standalone projectinspect only the requested template, create at the exact path, then build
Existing neighboring projectsread their TFMs first and pass the matching supported --framework explicitly
Directory.Packages.props foundcreate with --no-restore when supported, normalize generated package references, then restore/build once
Multi-project solutioncreate each project at its final path, add references, add all projects to the solution, then build the solution once
User explicitly requests .slninspect dotnet new sln --help; pass --format sln when supported, otherwise use the older SDK's default .sln output

Do not predict the generated target framework. If the user and workspace do not supply one, inspect dotnet new <template> --help, choose a supported value (normally its documented default), pass it explicitly, then confirm the generated .csproj. Never announce an intermediate framework guess that was not grounded in the template's current choices.

When to Use

  • User asks to create a new .NET project, app, or service
  • User needs a solution with multiple projects (API + tests + library)
  • User wants to create a project that respects existing Directory.Packages.props
  • User needs to install or manage template packages

When Not to Use

  • User is searching for templates — route to template-discovery skill; for a detailed side-by-side comparison — route to template-comparison skill
  • User wants to author a custom template — route to template-authoring skill
  • User wants to add packages to an existing project — use dotnet add package directly

Inputs

InputRequiredDescription
Template name or intentYesTemplate short name (e.g., webapi) or natural-language description
Project nameYesName for the created project
Output pathRecommendedDirectory where the project should be created
ParametersNoTemplate-specific parameters (e.g., --framework, --auth, --aot)

Workflow

Step 1: Resolve template and parameters

If the user provides a natural-language description, map it to a template short name (see the keyword table in the template-discovery skill). If they provide a template name, proceed directly.

Use dotnet new <template> --help to review available parameters, defaults, and types for any parameters the user did not specify.

When a parameter the user chose implies a value for an unset related parameter, invoke the template-smart-defaults skill to resolve the gap before assembling the command line — e.g., native AOT implies a recent AOT-capable target framework, a non-None --auth choice means HTTPS must stay enabled (don't add --no-https), and --use-controllers excludes the minimal-API option. Smart defaults only fill gaps; never let them override a value the user set explicitly. The workspace framework discovered in Step 2 counts as such an explicit value — pass it to smart-defaults as the chosen --framework so it isn't treated as an unset gap; deviate only if it is incompatible with the requested feature/template (then surface the conflict to the user).

Step 2: Analyze the workspace

Check the existing solution structure before creating:

  • Is Central Package Management (CPM) enabled? Look for Directory.Packages.props
  • What target frameworks are in use? Check existing .csproj files
  • Is there a global.json pinning the SDK?

This ensures the new project is consistent with the workspace.

Step 3: Preview the creation

Use dotnet new <template> --dry-run to show the user what files would be created. Confirm before proceeding.

bash
dotnet new webapi --name MyApi --framework net10.0 --dry-run
Step 4: Create the project

Use dotnet new with the template name and all parameters:

bash
dotnet new webapi --name MyApi --output ./src/MyApi --framework net10.0 --auth Individual

Before running it, emit one compact decision line:

Creating <template> at <path>; framework=<value> (<user|workspace|template>); CPM=<on|off>.

This makes workspace adaptations explicit without adding a long report.

Show full SKILL.md (563 more words)Show less
Common parameter combinations
TemplateParametersExample
webapi--auth (None, Individual, SingleOrg, Windows), --aot (native AOT)dotnet new webapi -n MyApi --auth Individual --aot
webapi--use-controllers (use controllers vs minimal APIs)dotnet new webapi -n MyApi --use-controllers
blazor--interactivity (None, Server, WebAssembly, Auto), --authdotnet new blazor -n MyApp --interactivity Server
grpc--aot (native AOT)dotnet new grpc -n MyService --aot
worker--aot (native AOT)dotnet new worker -n MyWorker --aot

Note: Use dotnet new <template> --help to see all available parameters for any template.

After creation, adapt the project to Central Package Management and refresh stale versions:

  1. Detect CPM before creation — walk up from the destination looking for Directory.Packages.props.
  2. Avoid a doomed automatic restore — when CPM is active and the template exposes --no-restore, pass it during creation so package centralization happens first.
  3. Strip inline versions — for each generated <PackageReference Include="X" Version="Y" />, remove the Version attribute (leaving <PackageReference Include="X" />).
  4. Centralize the version — add or merge a <PackageVersion Include="X" Version="Y" /> entry in Directory.Packages.props; preserve unrelated existing entries.
  5. Optionally refresh stale template-default versions — templates often hardcode old versions. Keep the template's versions by default (safest for reproducibility and controlled upgrades). Only refresh when the user asks, and when you do:
    • Prefer a tooling-driven flow: run dotnet list package --outdated and confirm the proposed bumps with the user before changing anything.
    • Constrain upgrades to the same major (or major/minor) version unless the user explicitly opts into larger upgrades, since cross-major bumps can introduce breaking changes.
    • When checking the latest stable version of a package conceptually, the NuGet V3 flat-container index.json endpoint for that package ID lists published versions; never select a prerelease unless requested.
  6. Build — run dotnet build once to restore and confirm the centralized/refreshed versions resolve.
Step 5: Multi-project composition (optional)

For complex structures, create each project sequentially and wire them together:

bash
dotnet new webapi --name MyApi --output ./src/MyApi
dotnet new xunit --name MyApi.Tests --output ./tests/MyApi.Tests
dotnet add ./tests/MyApi.Tests reference ./src/MyApi
dotnet sln add ./src/MyApi ./tests/MyApi.Tests
Step 6: Template package management

Install or uninstall template packages:

bash
dotnet new install Microsoft.DotNet.Web.ProjectTemplates.10.0
dotnet new uninstall Microsoft.DotNet.Web.ProjectTemplates.10.0
Step 7: Post-creation verification
  1. Verify the project builds: dotnet build
  2. For a runnable template such as console, run the generated app when the request is simple and no external service is required; report the observed output rather than only build success.
  3. If added to a solution, verify dotnet build at the solution level
  4. If CPM was adapted, verify Directory.Packages.props has the new entries

Validation

  • Project was created successfully with the expected files
  • Project builds cleanly with dotnet build
  • If CPM is active, .csproj has no version attributes and Directory.Packages.props has matching entries
  • Package versions in the project are current (not stale template defaults)
  • If multi-project, all projects build and reference each other correctly

Common Pitfalls

PitfallSolution
Not checking for CPM before creating a projectIf Directory.Packages.props exists, dotnet new creates projects with inline versions that conflict. After creation, move versions to Directory.Packages.props and remove them from .csproj.
Letting template restore fail before adapting CPMDetect CPM first and use the template's --no-restore option when available; centralize versions before the first restore/build.
Creating projects without specifying the frameworkAlways specify --framework when the template supports multiple TFMs to avoid defaulting to an older version.
Not adding the project to the solutionAfter creation, run dotnet sln add to include the project in the solution.
Not verifying the project buildsAlways run dotnet build after creation to catch missing dependencies or parameter issues early.

More Info

© dotnet, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/dotnet-template-engine/skills/template-instantiation of dotnet/skills.

Open the folder on GitHubat commit a660de8

Used in 1 other repository

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in dotnet/skills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Template Instantiation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Template Instantiation compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Template Instantiation this skilldotnet/skills5.6k1 repos~2.8kAutomated safety check: PassMIT
Scaffoldcodewithmukesh/dotnet-claude-kit751—~1.7kAutomated safety check: PassMIT
Revit Toolkit AnalyzersNice3point/RevitToolkit176—~3.8kAutomated safety check: PassMIT
Revit Toolkit InternalsNice3point/RevitToolkit176—~2.5kAutomated safety check: PassMIT
Corvus Benchmarkscorvus-dotnet/Corvus.JsonSchema199—~1.2kAutomated safety check: PassApache-2.0
Raven Test Triagemarinasundstrom/raven108—~1.4kAutomated safety check: PassMIT

Similar skills

  • Scaffold

    codewithmukesh/dotnet-claude-kit

    Architecture-aware feature scaffolding for .NET 10 projects.

    751 GitHub stars~1.7k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Revit Toolkit Analyzers

    Nice3point/RevitToolkit

    Author and extend the Roslyn tooling bundled in the Nice3point.Revit.Toolkit package: the incremental source generator that emits external-event boilerplate, the analyzers and code fixers that…

    176 GitHub stars~3.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Revit Toolkit Internals

    Nice3point/RevitToolkit

    Uphold the design contract of the Nice3point.Revit.Toolkit runtime library, that wraps the raw Revit add-in API.

    176 GitHub stars~2.5k tokensUpdated today
    DevelopmentAuto-check passed
  • Corvus Benchmarks

    corvus-dotnet/Corvus.JsonSchema

    Run, interpret, and maintain BenchmarkDotNet benchmarks for JSON Schema validation and query languages.

    199 GitHub stars~1.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Raven Test Triage

    marinasundstrom/raven

    Testing and stabilization workflow for the Raven compiler test suite.

    108 GitHub stars~1.4k tokensUpdated today
    Testing & QAAuto-check passed
  • Create Migration

    fullstackhero/dotnet-starter-kit

    Create and apply an EF Core migration for a module's DbContext the FSH way (central Migrations project, per-module folder, correct --context).

    6.8k GitHub stars~757 tokensUpdated 8 days ago
    DevelopmentAuto-check passed

More from dotnet/skills

All 91 skills in this repo
  • Official

    Resolves .NET runtime frames in Apple .ips crash logs to function names, source files and line numbers using dSYM symbols, atos and the Microsoft symbol server.

    5.6k GitHub starsUsed in 1 repo~2.4k tokens
    Auto-check passed
  • Official

    Resolves native crash frames from .NET Android tombstones to function names, source files and line numbers using BuildIds, Microsoft's symbol server and llvm-symbolizer.

    5.6k GitHub starsUsed in 1 repo~2.1k tokens
    Auto-check passed
  • Official

    Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.

    5.6k GitHub starsUsed in 3 repos~3.1k tokens
    Auto-check passed
  • Official

    Statically pairs source files with test files to list code that no test references, using Roslyn for C# or tree-sitter for many languages, with no build.

    5.6k GitHub starsUsed in 1 repo~3.3k tokens
    Auto-check passed
  • Microbenchmarking

    dotnet/skills

    Official

    Activate this skill when BenchmarkDotNet (BDN) is involved in the task — creating, running, configuring, or reviewing BDN benchmarks.

    5.6k GitHub starsUsed in 3 repos~3.3k tokens
    Auto-check passed
  • Official

    Makes .NET projects compatible with Native AOT and trimming by resolving IL trim and AOT analyzer warnings through annotations rather than suppressions.

    5.6k GitHub starsUsed in 2 repos~4.2k tokens
    Auto-check passed

Works with

Questions about Template Instantiation

What does Template Instantiation do?

Creates .NET projects from templates with validated parameters, smart defaults, Central Package Management adaptation, and latest NuGet version resolution. Template Instantiation is an agent skill from dotnet/skills, published by the product's own GitHub organization.NET projects from templates with validated parameters, smart defaults, Central Package Management adaptation, and latest NuGet version resolution.

When should I use Template Instantiation?

Template Instantiation fits situations like: : creating new dotnet projects; scaffolding solutions with multiple projects; uninstalling template packages; creating projects that respect Directory.Packages.props (CPM).

How do I install Template Instantiation in Claude Code?

Run `npx skills add dotnet/skills --skill template-instantiation -a claude-code`. Or copy the skill folder (plugins/dotnet-template-engine/skills/template-instantiation in dotnet/skills) into .claude/skills/template-instantiation in your project. Claude Code loads it when a task matches its description.

How do I install Template Instantiation in Codex?

Run `npx skills add dotnet/skills --skill template-instantiation -a codex`. Or copy the skill folder (plugins/dotnet-template-engine/skills/template-instantiation in dotnet/skills) into .agents/skills/template-instantiation in your project. Codex loads it when a task matches its description.

Can I use Template Instantiation in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dotnet/skills --skill template-instantiation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/template-instantiation, .gemini/skills/template-instantiation, .github/skills/template-instantiation and .opencode/skills/template-instantiation in your project.

What does Template Instantiation need to run?

Going by SKILL.md and its folder, Template Instantiation needs the command-line tools its instructions call (dotnet).

Does Template Instantiation access the network?

SKILL.md names 1 domain. As links in the text: learn.microsoft.com. This is read from the text; nothing was executed.

Is Template Instantiation safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Template Instantiation use?

Template Instantiation is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Template Instantiation use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Template Instantiation?

Skills that share tags, products or a category with Template Instantiation: Scaffold (codewithmukesh/dotnet-claude-kit, 751 stars), Revit Toolkit Analyzers (Nice3point/RevitToolkit, 176 stars), Revit Toolkit Internals (Nice3point/RevitToolkit, 176 stars) and Corvus Benchmarks (corvus-dotnet/Corvus.JsonSchema, 199 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Template Instantiation?

dotnet (a GitHub organization, an official publisher) maintains it in dotnet/skills, which has 5,576 GitHub stars. The repository holds 91 skills in this directory. The repository was last updated on October 8, 2026.

Source: dotnet/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.