outdated — Claude Code skill: .NET NuGet dependency audit
Builds a dependency health report for .NET solutions: stale NuGet packages, vulnerable versions, and commercial-license traps.
npx skills add codewithmukesh/dotnet-claude-kit --skill outdated -a claude-codeWhat outdated does
The skill runs a three-layer pass over your solution. First, inventory: every PackageReference per project, with target frameworks and central package management awareness, pulled through the get_nuget_packages MCP tool — no network. Then staleness and known CVEs via the dotnet CLI. Last comes a license screen that flags packages which moved to commercial terms.
That last layer is the point. A plain dotnet outdated --upgrade can quietly shift your legal footing: MediatR from 13+, MassTransit from 9+, FluentAssertions from 8+, AutoMapper from 15+. The skill fires a LICENSE flag when a project sits on the free major and a naive update-all would cross the boundary.
You get one priority-ordered table: vulnerabilities first, license traps second, staleness last, each row with a recommended action. Steps two and three need a successful restore — fix a broken restore before auditing, or the version output is unreliable. Updates can then run through /migrate Flow C, one package at a time, with dotnet build && dotnet test between each.
What it helps with
- find vulnerable NuGet versions, transitive ones included
- catch a package crossing into a commercial license before you upgrade
- list every PackageReference across the solution's projects
- spot target frameworks that drifted apart between projects
- sort updates by priority instead of blind update-all
Example prompts for the agent
- /outdated
- check my dependencies and show vulnerable packages
- run a NuGet package audit and check licenses
How to install outdated
1Skills CLI (Vercel)
npx skills add codewithmukesh/dotnet-claude-kit --skill outdated -a claude-code2Manually: put the files in place
~/.claude/skills/outdated/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/outdated/
1Skills CLI (Vercel)
npx skills add codewithmukesh/dotnet-claude-kit --skill outdated -a codex2Manually: put the files in place
.agents/skills/outdated/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add codewithmukesh/dotnet-claude-kit --skill outdated -a cursor2Manually: put the files in place
.cursor/skills/outdated/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install codewithmukesh/dotnet-claude-kit outdated2Manually: put the files in place
.github/skills/outdated/SKILL.md1Skills CLI (Vercel)
npx skills add codewithmukesh/dotnet-claude-kit --skill outdated -a gemini-cli2Platform CLI
gemini skills install https://github.com/codewithmukesh/dotnet-claude-kit --path skills/outdatedManually: put the files in place
.devin/skills/outdated/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add codewithmukesh/dotnet-claude-kit --skill outdated -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about outdated
How do I install outdated in Claude?
Run npx skills add codewithmukesh/dotnet-claude-kit --skill outdated -a claude-code. The skill lands at ~/.claude/skills/outdated/SKILL.md.
What does outdated do?
It produces a three-layer dependency health report for .NET: package inventory, staleness plus vulnerabilities, and a license screen. The output is a single prioritized table with an action per row.
Does the skill need network access?
Inventory runs through the get_nuget_packages MCP tool with no network. The version and CVE steps use the dotnet CLI and need a successful restore first.
Source text
SKILL.md · MIT
---
name: outdated
description: >
Dependency health report for .NET solutions: outdated NuGet packages,
vulnerable versions, and commercial-license traps (MediatR, MassTransit,
FluentAssertions, AutoMapper) — powered by the get_nuget_packages MCP tool.
Invoke when: "outdated packages", "check dependencies", "stale packages",
"package audit", "dependency health", "are my packages up to date",
"license check", "vulnerable packages", "nuget audit".
---
# /outdated
## What
A three-layer dependency health report:
1. **Inventory** — every `PackageReference` per project, with TFMs and central
package management awareness, via the `get_nuget_packages` MCP tool (no
network, token-cheap).
2. **Staleness + vulnerabilities** — current vs latest stable, and known CVEs,
via the `dotnet` CLI.
3. **License screen** — flags packages that moved to commercial licenses so an
innocent `dotnet outdated --upgrade` doesn't silently change your legal
position.
The output is a single prioritized table — vulnerabilities first, license traps
second, staleness last — with a recommended action per row.
## When
- "check for outdated packages", "package audit", "dependency health"
- Before a .NET version upgrade (pairs with `/migrate` Flow B)
- After inheriting an unfamiliar codebase
- Dependabot/NuGet audit warnings appeared and you want the full picture
- Periodically on long-lived projects — quarterly is a good cadence
## How
**Step 1: Inventory (MCP, no network)**
```
get_nuget_packages() -- whole solution
get_nuget_packages(projectFilter: "Api") -- or one project
```
Returns per-project `{Name, TargetFramework, Cpm, Packages: [{Id, Version}]}`.
Note `Cpm: true` — updates then belong in `Directory.Packages.props`, not the
csproj. Flag mixed TFMs across projects while you're here.
**Step 2: Staleness and vulnerabilities (CLI)**
```bash
dotnet list package --outdated
dotnet list package --vulnerable --include-transitive
```
Both need a successful restore first. If restore fails, fix that before
auditing — a broken lock state makes version output unreliable.
**Step 3: License screen**
Check the inventory against the known commercial moves (full rationale in
`knowledge/package-recommendations.md`):
| Package | Commercial from | Free alternative |
|---|---|---|
| MediatR | 13+ (Lucky Penny, RPL) | `Mediator` (martinothamar) — source-generated, MIT |
| MassTransit | 9+ (v8 Apache, patches end 2026 then EOL) | Wolverine 6.x, or stay on v8 short-term |
| FluentAssertions | 8+ (v7 stays Apache, frozen) | xUnit built-in `Assert` (kit default), Shouldly, AwesomeAssertions |
| AutoMapper | 15+ (Lucky Penny) | Manual mapping (kit default) or Mapperly (MIT) |
A license flag fires when the project is on the free major and a naive
"update all" would cross the boundary — that is the trap this step exists for.
**Step 4: Report**
One table, priority-ordered:
| Priority | Meaning | Action |
|---|---|---|
| VULNERABLE | Known CVE in current version | Update now, test, deploy |
| LICENSE | Next major crosses a commercial boundary | Pin below boundary or plan migration |
| MAJOR | Behind a major (breaking changes likely) | One at a time, release notes first |
| MINOR/PATCH | Routine drift | Batch patches; minors one at a time |
**Step 5: Act (optional)**
Offer to execute updates via `/migrate` Flow C — one package at a time,
`dotnet build && dotnet test` between each. Never batch major updates:
batched failures are unattributable.
### MCP Tools Used
- `get_nuget_packages` — inventory, CPM detection, TFM audit
- `get_diagnostics` — verify the solution still compiles clean after updates
## Example
```
User: /outdated
Claude: Inventorying packages (get_nuget_packages)...
3 projects, CPM enabled (Directory.Packages.props), all net10.0.
Checking versions and CVEs...
| Package | Current | Latest | Priority | Action |
|--------------------------|---------|---------|------------|---------------------------------|
| System.Text.Json (trans.)| 10.0.2 | 10.0.10 | VULNERABLE | Update now (CVE-2026-XXXX) |
| MassTransit | 8.3.0 | 9.1.2 | LICENSE | v9 is commercial. Stay on v8 |
| | | | | (EOL end 2026) or plan Wolverine|
| Serilog.AspNetCore | 9.0.0 | 10.0.0 | MAJOR | Update alone, check sink compat |
| FluentValidation | 12.0.1 | 12.1.1 | PATCH | Batch with other patches |
1 vulnerability, 1 license trap, 1 major, 1 patch.
Want me to apply these via /migrate Flow C?
```
## Related
- `/migrate` — Flow C executes the updates this report recommends
- `knowledge/package-recommendations.md` — vetted packages + licensing detail
- `knowledge/mediatr-to-mediator-migration.md` — step-by-step MediatR exit
- `/verify` — full pipeline after applying updates
© codewithmukesh · MIT · codewithmukesh/dotnet-claude-kit