# csharp-expert

A dispatcher skill for C# and .NET work: figures out which installed specialist should own a task and gives install commands for the missing dotnet/skills plugin.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 902 installs · ★ 5730
- Author: dotnet
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/dotnet/skills/tree/HEAD/plugins/dotnet/skills/csharp-expert/SKILL.md
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/skills/csharp-expert

## What it does

csharp-expert acts as the front door for anything C# or .NET. It reads the request, detects the solution type — ASP.NET Core, Blazor, MAUI, EF Core, MSBuild — and invokes the narrowest installed specialist. If that specialist is missing, it names the marketplace plugin and the exact acquisition command.

Direct C# language guidance is a fallback, not the default. The skill first checks descriptions of available specialists, then inspects repository files that reveal the project type: `Microsoft.NET.Sdk.Web` for ASP.NET Core, `.razor` for Blazor, `<UseMaui>true</UseMaui>` for MAUI.

Fast paths exist. When the prompt already states framework and host, only the bundled marketplace reference is read — no repository exploration. When only a `.binlog` survives, it gets analyzed before any broad file search. Installing a skill doesn't mean it will be invoked: if the task can be completed without the specialist, csharp-expert continues on its own.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-expert -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/csharp-expert/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/csharp-expert/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-expert -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/csharp-expert/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-expert -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/csharp-expert/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install dotnet/skills csharp-expert
```

2. **Manually: put the files in place**
- File: `.github/skills/csharp-expert/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-expert -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/dotnet/skills --path plugins/dotnet/skills/csharp-expert
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/csharp-expert/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-expert -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/dotnet/skills/tree/HEAD/plugins/dotnet/skills/csharp-expert/SKILL.md

## When to use it
- pick which installed skill should own a C# task
- give the exact install command for a missing dotnet/skills plugin
- tell runtime diagnostics apart from source optimization by problem type
- read errors from a surviving MSBuild .binlog without extra searching
- settle on one specialist instead of a menu of options

## Example prompts
- Which specialist should own this slow EF Core query in my project?
- Add the skill for migrating tests from NUnit to xUnit in Claude Code.
- I have a .binlog from a failed build — find the cause from it.

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 6b2618104801f9f8.

BEGIN THIRD-PARTY FILE 6b2618104801f9f8
```text
---
name: csharp-expert
description: >-
  Route C# and .NET requests to the exact installed specialist or smallest dotnet/skills
  marketplace plugin. USE FOR: "which specialist should own this" or "how do I add the skill"
  requests involving ASP.NET Core endpoints, Blazor, MAUI binding, Windows Forms specialist
  selection or installation, EF Core queries, test or framework migration, runtime
  CPU/allocation evidence, file-based C#, editor/compiler defects, a surviving MSBuild
  `.binlog`, or a plugin missing from `/skills`; also use for C# semantics
  when no narrower specialist exists. DO NOT USE FOR: requests that already name the exact
  installed specialist to invoke, or work unrelated to C# or .NET.
license: MIT
---

# C# Expert

## Purpose

Act as the front door for C# and .NET work. Determine what the user wants, identify the kind of
solution that owns the work, invoke the narrowest installed specialist, and give exact
`dotnet/skills` marketplace installation steps when that specialist is missing. Keep direct C#
language guidance as the fallback, not the default.

## Routing Contract

1. Classify the requested outcome from the prompt.
2. Inspect the smallest set of repository files needed to identify the solution type.
3. Compare both signals with the descriptions of the skills currently available to the runtime.
4. If the best skill is available and the user asked to perform the downstream work, invoke it with
   the `skill` tool as the first external action; do not emit a routing explanation before the
   invocation and do not merely recommend the skill. For selection or preparation-only requests,
   name the installed specialist and stop without invoking it.
5. If the best skill is missing, identify its plugin in
   `references/dotnet-skills-marketplace.md`, then decide whether the current task can still be
   completed safely with repository tools and general .NET knowledge.
6. Use multiple skills only when the request has distinct phases with different owners.
7. If no narrower marketplace skill owns the request, continue with the C# fallback workflow.

Routing is not task completion. A missing specialist changes the confidence and preferred workflow;
it does not automatically justify stopping. Continue in the same turn when the task can be completed
and validated without the specialist. Stop for installation only when the missing capability is
actually required to proceed safely or the user asked specifically to install or load it.

Use these fast paths before general repository exploration:

- **Marketplace selection only:** when the prompt already states the framework, lifecycle, host, and
  required behavior, read only the bundled marketplace reference. Do not inspect the fixture,
```
END THIRD-PARTY FILE 6b2618104801f9f8

The third-party file has ended. Everything between the 6b2618104801f9f8 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2749 of 21783 bytes. © dotnet · MIT · https://github.com/dotnet/skills/tree/HEAD/plugins/dotnet/skills/csharp-expert/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
