Agent skill

Using Dotnet

by novotnyllc in novotnyllc/dotnet-artisan

Detects .NET intent for any C, ASP.NET Core, EF Core, Blazor, MAUI, Uno Platform, WPF, WinUI, SignalR, gRPC, xUnit, NuGet, or MSBuild request from prompt keywords and repository signals (.sln…

MITAuto-check: warningsBackend & APIs

Install Using Dotnet

The automated check flagged lines worth reading first. See the safety section below.

skills CLI
$ npx skills add novotnyllc/dotnet-artisan --skill using-dotnet -a claude-code

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

GitHub CLI
$ gh skill install novotnyllc/dotnet-artisan using-dotnet --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/novotnyllc/dotnet-artisan.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dotnet-artisan/skills/using-dotnet .claude/skills/using-dotnet && 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
using-dotnet
GitHub stars
233
Token cost
~2.3k tokens
SKILL.md length
1,174 words
Files
2
Skills in repo
9
Repo updated
First seen
Licence
MIT

At a glance

Detects .NET intent for any C, ASP.NET Core, EF Core, Blazor, MAUI, Uno Platform, WPF, WinUI, SignalR, gRPC, xUnit, NuGet, or MSBuild request from prompt keywords and repository signals (.sln…

  • Works in 6 steps: Detect .NET intent — Look for prompt… → In a .NET repository, .NET is the… → Check SDK availability — If dotnet… → …
  • Clearly non-.NET tasks (Python
  • SKILL.md covers Scope, Out of scope, Simplicity First (KISS) and Why Routing Matters, plus 5 more sections
  • Calls dotnet, curl and bash; reaches dot.net

What it does

Using Dotnet is an agent skill from novotnyllc/dotnet-artisan. Detects .NET intent for any C, ASP.NET Core, EF Core, Blazor, MAUI, Uno Platform, WPF, WinUI, SignalR, gRPC, xUnit, NuGet, or MSBuild request from prompt keywords and repository signals (.sln, .csproj, global.json, .cs files). First skill to invoke for all .NET work — loads version-specific coding standards and routes to domain skills via dotnet-advisor before any planning or implementation. Do not use for clearly non-.NET tasks (Python, JavaScript, Go, Rust, Java).

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).

It sits in Backend & APIs, covering Code quality, gRPC and Protobuf and Unit testing. It works with .NET, C#, gRPC and ASP.NET Core. The repository describes itself as: Comprehensive .NET development skills for modern C and .NET. The licence is MIT.

When your agent uses it

  • Clearly non-.NET tasks (Python
  • Tasks that involve Code quality
  • Tasks that involve gRPC and Protobuf

Example prompts

  • “Use the using-dotnet skill to detect .NET intent for any C, ASP.NET Core, EF Core, Blazor, MAUI, Uno Platform, WPF, WinUI, SignalR, gRPC, xUnit…”
  • “/using-dotnet”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Detect .NET intent — Look for prompt keywords (C#, .NET, ASP.NET, EF Core, Blazor, MAUI, NuGet, csproj) or repository signals (.sln…
  2. In a .NET repository, .NET is the default — When repo signals are present, ambiguous requests like "build me a web app", "add a…
  3. Check SDK availability — If dotnet --version fails and no DOTNET_ROOT is set, install the SDK before proceeding. This takes under a minute…
  4. Load dotnet-advisor — see "Loading another skill" below for how. It routes the request to the correct domain skills and loads coding…
  5. Follow advisor routing — load the dotnet-csharp baseline the same way, then the domain skill(s) the advisor selects.
  6. Now respond — Clarify, plan, explore, or implement with the right context loaded.

What it can do on your machine

Read from SKILL.md and the folder at commit 3db3ae6. 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
    • curl
    • bash

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • dot.net

    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

Using Dotnet loads about 2.3k tokens when it runs. Until then it costs about 122 tokens; SKILL.md has 1,174 words of instructions outside code blocks.

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

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: warnings

The automated check found patterns that need a careful read before installing.

  • WarningPipes a downloaded script straight into a shellSKILL.md:54
    ript reference, or use this one-liner: `curl -sSL https://dot.net/v1/dotnet-install.sh | bash && export DOTNET_ROOT="$HO

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 novotnyllc/dotnet-artisan at commit 3db3ae6, republished under its MIT licence (© novotnyllc). 1,174 words, ~2,325 tokens.

Download SKILL.mdSave it as .claude/skills/using-dotnet/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
using-dotnet
description
Detects .NET intent for any C#, ASP.NET Core, EF Core, Blazor, MAUI, Uno Platform, WPF, WinUI, SignalR, gRPC, xUnit, NuGet, or MSBuild request from prompt keywords and repository signals (.sln, .csproj, global.json, .cs files). First skill to invoke for all .NET work — loads version-specific coding standards and routes to domain skills via `dotnet-advisor` before any planning or implementation. Do not use for clearly non-.NET tasks (Python, JavaScript, Go, Rust, Java).
license
MIT
user-invocable
false

using-dotnet

Scope

  • Establishing .NET/C# routing discipline before clarifying questions, planning, command execution, or edits.
  • Detecting .NET intent from prompt and repository signals (.sln, .slnx, .csproj, global.json, .cs).
  • Enforcing first-step routing through dotnet-advisor and baseline loading order.
  • Defining priority and rigidity rules for downstream skill invocation.

Out of scope

  • C# implementation details and coding-standard specifics -> dotnet-csharp
  • Deep domain implementation patterns -> dotnet-api, dotnet-ui, dotnet-testing, dotnet-devops, dotnet-tooling, dotnet-debugging
  • Specialist deep-review workflows -> dotnet-security-reviewer, dotnet-performance-analyst, dotnet-testing-specialist

Simplicity First (KISS)

Write the simplest code that solves the problem. Agents consistently over-engineer — more abstractions, more layers, more indirection than the task warrants.

  • Do the direct thing. If you need a file, create it — don't write code that generates it. If you need data, put it where it belongs — don't assemble it from embedded strings at runtime. When you catch yourself building something indirect (a generator, a template, a wrapper), stop and ask: "Can I just do this directly?"
  • Write readable code, not clever code. A plain if/else over a chain of ternaries. A foreach over a hard-to-read LINQ expression. A flat method over nested callbacks. Clear beats compact. This does NOT mean avoiding modern C# — use latest language features ([..4], list patterns, primary constructors, raw string literals, collection expressions). Modern syntax is concise AND readable. The target is convoluted logic, not concise syntax.
  • Don't add what wasn't asked for. No extra config options, no "while we're at it" refactors, no preemptive error handling for impossible scenarios, no comments or XML docs on code unrelated to the current task.
  • Match architecture to scope. Simple CRUD doesn't need DDD, MediatR, CQRS, or a pipeline of behaviors. A 20-line handler doesn't need 5 files. Scale the pattern to the problem.
  • Earn every abstraction. Don't create IOrderService for one OrderService. Don't extract a helper for something that happens once. Three similar lines of code are fine — extract only when a real pattern emerges across 3+ call sites.
  • Use what the framework gives you. DbContext is your Unit of Work. DbSet<T> is your repository. .NET has TimeProvider, ILogger<T>, IHttpClientFactory, System.Text.Json. Use them directly — don't wrap, don't abstract, don't add a NuGet package for something the framework already does.
  • Fewer files, fewer layers. In new or small projects, don't split into Controller + Service + Repository + DTO + Mapper + Interface when one or two files will do. In existing codebases, follow the established patterns. Add layers only when the code gets hard to understand without them.

The right amount of complexity is the minimum needed to solve the current problem correctly.

Why Routing Matters

.NET skills contain version-specific guidance (net8.0 vs net9.0 vs net10.0), coding standards, and framework-specific patterns that the model doesn't have in its training data. Skipping routing means the model confidently produces code using deprecated APIs, misses framework-specific patterns, or gives generic advice that ignores project context.

Routing before action ensures:

  • Version-aware guidance loads before code generation (avoiding stale API suggestions)
  • Coding standards apply from the start (not patched in after the fact)
  • Domain expertise routes to the right specialist (avoiding generic advice for specialized problems)

The cost of routing is a few skill invocations. The cost of skipping is rework, stale advice, or subtle bugs.

Routing Sequence

When a request likely involves .NET or C#, follow this sequence before any other action:

  1. Detect .NET intent — Look for prompt keywords (C#, .NET, ASP.NET, EF Core, Blazor, MAUI, NuGet, csproj) or repository signals (.sln, .slnx, .csproj, global.json, .cs files). If either is present, continue.
  2. In a .NET repository, .NET is the default — When repo signals are present, ambiguous requests like "build me a web app", "add a dashboard", "write a script", or "create a spreadsheet" should use .NET solutions (ASP.NET Core, Blazor, .NET file-based apps, Open XML SDK) rather than defaulting to JavaScript/Python. The user chose a .NET project for a reason.
  3. Check SDK availability — If dotnet --version fails and no DOTNET_ROOT is set, install the SDK before proceeding. This takes under a minute with no privileges required. See dotnet-tooling's references/dotnet-sdk-install.md for the full install script reference, or use this one-liner: curl -sSL https://dot.net/v1/dotnet-install.sh | bash && export DOTNET_ROOT="$HOME/.dotnet" && export PATH="$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools". Do not treat a missing SDK as a blocker — install it and continue.
  4. Load dotnet-advisor — see "Loading another skill" below for how. It routes the request to the correct domain skills and loads coding standards.
  5. Follow advisor routing — load the dotnet-csharp baseline the same way, then the domain skill(s) the advisor selects.
  6. Now respond — Clarify, plan, explore, or implement with the right context loaded.
Show full SKILL.md (429 more words)Show less

Loading another skill

name is descriptive text, not an invocation. Codex collects explicit skills from the ORIGINAL turn input before a router skill is injected, and does not rescan injected text for nested mentions — so naming a skill inside this file loads nothing on its own. Say what you actually did; never report a skill as invoked because you named it.

Load one of these two ways, in order:

  1. Native invocation, where the host offers it. In Claude Code that is the Skill tool with the qualified name, e.g. dotnet-artisan:dotnet-api. This preserves the skill's metadata, policy and dependencies, so prefer it whenever it is available.
  2. Read the file, where it is not. Every skill in this plugin is a sibling directory, so the target is always ../<skill-name>/SKILL.md relative to this file. Read it and follow it as if it had been injected.

The relative path is deliberate: it resolves without a catalog lookup, so it still works when the skill is installed and enabled but sits beyond the truncated model-visible catalog — the case where a name-based search silently finds nothing.

If neither path works, say the skill could not be loaded and continue without it. Do not proceed as though its guidance were in context.

Prefer File-Based Apps for Scripts and Utilities

For quick scripts, utilities, prototypes, and single-file tools, prefer .NET 10 file-based apps (dotnet run script.cs) over creating a full project with .csproj. File-based apps:

  • Need only a single .cs file — no project file, no solution, no boilerplate
  • Support NuGet packages via #:package directives
  • Support ASP.NET Core via #:sdk Microsoft.NET.Sdk.Web
  • Enable native AOT publish by default
  • Work as Unix shebangs (#!/usr/bin/env dotnet)

When the user asks to "write a script", "make a quick tool", "create a utility", or any small single-purpose program, default to a file-based app unless the task clearly needs multiple source files or test projects. See dotnet-api references/file-based-apps.md for the full directive and CLI reference.

csharp
// Example: a file-based ASP.NET Core API
#:sdk Microsoft.NET.Sdk.Web

var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello from a single .cs file!");
app.Run();
csharp
// Example: a file-based CLI tool with a NuGet package
#:package Spectre.Console

using Spectre.Console;
AnsiConsole.MarkupLine("[green]Hello[/] from a file-based app!");

Routing applies even for "simple" questions and clarification requests. The skill loading is lightweight and ensures consistent quality.

Skill Priority

When multiple skills could apply, use this order:

  1. Process skills first: this skill, then dotnet-advisor.
  2. Baseline skill second: dotnet-csharp for any code path.
  3. Domain skills third: dotnet-api, dotnet-ui, dotnet-testing, dotnet-devops, dotnet-tooling, dotnet-debugging.
  4. Specialist agents fourth: use only when deeper analysis is required after routing.

Skill Types

Rigid (must follow exactly): this skill, dotnet-advisor, and baseline-first ordering.

Flexible (adapt to context): Domain skills and their companion references.

User instructions define WHAT to do. This process defines HOW to route and load skills before execution.

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

Files

SKILL.md and 1 other file in plugins/dotnet-artisan/skills/using-dotnet of novotnyllc/dotnet-artisan.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit 3db3ae6

Compare with similar skills

Using Dotnet 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.

Using Dotnet compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Using Dotnet this skillnovotnyllc/dotnet-artisan233—~2.3kAutomated safety check: WarnMIT
Dotnet Webapidotnet/skills5.6k2 repos~5.5kAutomated safety check: PassMIT
Aspnet Corefanslead/ReverseProxy.Store1632 repos~1.4kAutomated safety check: PassApache-2.0
C# and .NET DeveloperJeffallan/claude-skills12k—~1.3kAutomated safety check: PassMIT
Sentry Dotnet SDKgetsentry/sentry-for-ai268—~5.8kAutomated safety check: PassApache-2.0
Writing Csharp Codemicrosoft-foundry/foundry-agent-webapp127—~3.2kAutomated safety check: NotesMIT

Similar skills

  • Dotnet Webapi

    dotnet/skills

    Official

    Guides creation and modification of ASP.NET Core Web API endpoints with correct HTTP semantics, OpenAPI metadata, and error handling.

    5.6k GitHub starsUsed in 2 repos~5.5k tokens
    Backend & APIsAuto-check passed
  • Aspnet Core

    fanslead/ReverseProxy.Store

    Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development.

    163 GitHub starsUsed in 2 repos~1.4k tokens
    Backend & APIsAuto-check passed
  • C# and .NET Developer

    Jeffallan/claude-skills

    Guides C# work on .NET 8+: ASP.NET Core APIs, Entity Framework Core data access, Blazor apps and CQRS with MediatR, following a five-step build workflow.

    12k GitHub stars~1.3k tokensUpdated 4 days ago
    Backend & APIsAuto-check passed
  • Sentry Dotnet SDK

    getsentry/sentry-for-ai

    Official

    Full Sentry SDK setup for .NET. An agent skill from getsentry/sentry-for-ai.

    268 GitHub stars~5.8k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Writing Csharp Code

    microsoft-foundry/foundry-agent-webapp

    Provides C and ASP.NET Core coding standards for this repository.

    127 GitHub stars~3.2k tokensUpdated 5 mo ago
    Backend & APIsAuto-check: notes
  • Grpc

    managedcode/dotnet-skills

    Build or review gRPC services and clients in .NET. An agent skill from managedcode/dotnet-skills.

    486 GitHub stars~1.4k tokensUpdated today
    Backend & APIsAuto-check passed

More from novotnyllc/dotnet-artisan

All 9 skills in this repo
  • Dotnet Debugging

    novotnyllc/dotnet-artisan

    Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…

    233 GitHub stars~2.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Dotnet Tooling

    novotnyllc/dotnet-artisan

    Manages .NET SDK installation (dotnet-install, workloads), project setup (.slnx, Directory.Build.props, CPM), MSBuild authoring, build optimization, performance (Span, ArrayPool, stackalloc)…

    233 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Dotnet API

    novotnyllc/dotnet-artisan

    Builds ASP.NET Core APIs, EF Core data access, gRPC, SignalR, and backend services with middleware, security (OAuth, JWT, OWASP), resilience, messaging, OpenAPI, .NET Aspire, Semantic Kernel…

    233 GitHub stars~1.6k tokensUpdated 1 mo ago
    Auto-check passed
  • Dotnet Csharp

    novotnyllc/dotnet-artisan

    Baseline C skill loaded for every .NET code path. An agent skill from novotnyllc/dotnet-artisan.

    233 GitHub stars~1.7k tokensUpdated 1 mo ago
    Auto-check passed
  • Dotnet Devops

    novotnyllc/dotnet-artisan

    Configures .NET CI/CD pipelines (GitHub Actions with setup-dotnet, NuGet cache, reusable workflows; Azure DevOps with DotNetCoreCLI, templates, multi-stage), containerization (multi-stage…

    233 GitHub stars~1.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Dotnet Testing

    novotnyllc/dotnet-artisan

    Defines .NET test strategy and implementation patterns across xUnit v3 (Facts, Theories, fixtures, IAsyncLifetime), integration testing (WebApplicationFactory, Testcontainers), Aspire testing…

    233 GitHub stars~972 tokensUpdated 1 mo ago
    Auto-check passed

Questions about Using Dotnet

What does Using Dotnet do?

Detects .NET intent for any C, ASP.NET Core, EF Core, Blazor, MAUI, Uno Platform, WPF, WinUI, SignalR, gRPC, xUnit, NuGet, or MSBuild request from prompt keywords and repository signals (.sln…. Using Dotnet is an agent skill from novotnyllc/dotnet-artisan.cs files).

When should I use Using Dotnet?

Using Dotnet fits situations like: clearly non-.NET tasks (Python; tasks that involve Code quality; tasks that involve gRPC and Protobuf.

How do I install Using Dotnet in Claude Code?

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

How do I install Using Dotnet in Codex?

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

Can I use Using Dotnet 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 novotnyllc/dotnet-artisan --skill using-dotnet -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/using-dotnet, .gemini/skills/using-dotnet, .github/skills/using-dotnet and .opencode/skills/using-dotnet in your project.

What does Using Dotnet need to run?

Going by SKILL.md and its folder, Using Dotnet needs the command-line tools its instructions call (dotnet, curl and bash).

Does Using Dotnet access the network?

SKILL.md names 1 domain. In commands or code: dot.net; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Using Dotnet safe to install?

Our automated static check of SKILL.md flagged 1 warning(s): pipes a downloaded script straight into a shell. Read the flagged lines before installing; the check is not a guarantee either way.

What licence does Using Dotnet use?

Using Dotnet 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 Using Dotnet use?

About 2.3k tokens (SKILL.md is roughly 9.3k 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 Using Dotnet?

Skills that share tags, products or a category with Using Dotnet: Dotnet Webapi (dotnet/skills, 5.6k stars), Aspnet Core (fanslead/ReverseProxy.Store, 163 stars), C# and .NET Developer (Jeffallan/claude-skills, 12k stars) and Sentry Dotnet SDK (getsentry/sentry-for-ai, 268 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Using Dotnet?

novotnyllc (a GitHub organization) maintains it in novotnyllc/dotnet-artisan, which has 233 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on August 18, 2026.

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