/local-tools
Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines.
$ npx -y skills add aaronontheweb/dotnet-skills --skill local-tools --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/local-tools
Context preview
The summary Claude sees to decide when to auto-load this skill.
Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines.
SKILL.md
local-tools.SKILL.mdname: dotnet-local-tools
description: Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines.
invocable: false
.NET Local Tools
When to Use This Skill
Use this skill when:
- Setting up consistent tooling across a development team
- Ensuring CI/CD pipelines use the same tool versions as local development
- Managing project-specific CLI tools (docfx, incrementalist, dotnet-ef, etc.)
- Avoiding global tool version conflicts between projects
What Are Local Tools?
Local tools are .NET CLI tools that are installed and versioned per-repository rather than globally. They're defined in `.config/dotnet-tools.json` and restored with `dotnet tool restore`.
Local vs Global Tools
| Aspect | Global Tools | Local Tools | |--------|--------------|-------------| | Installation | `dotnet tool install -g` | `dotnet tool restore` | | Scope | Machine-wide | Per-repository | | Version control | Manual | In `.config/dotnet-tools.json` | | CI/CD | Must install each tool | Single restore command | | Conflicts | Can have version conflicts | Isolated per project |
---
Setting Up Local Tools
Initialize the Manifest
# Create .config/dotnet-tools.json
dotnet new tool-manifest
This creates:
.config/
└── dotnet-tools.json
Install Tools Locally
# Install a tool locally
dotnet tool install docfx
# Install specific version
dotnet tool install docfx --version 2.78.3
# Install from a specific source
dotnet tool install MyTool --add-source https://mycompany.pkgs.visualstudio.com/_packaging/feed/nuget/v3/index.json
Restore Tools
# Restore all tools from manifest
dotnet tool restore
---
dotnet-tools.json Format
{
"version": 1,
"isRoot": true,
"tools": {
"docfx": {
"version": "2.78.3",
"commands": [
"docfx"
],
"rollForward": false
},
"dotnet-ef": {
"version": "9.0.0",
"commands": [
"dotnet-ef"
],
"rollForward": false
},
"incrementalist.cmd": {
"version": "1.2.0",
"commands": [
"incrementalist"
],
"rollForward": false
},
"dotnet-reportgenerator-globaltool": {
"version": "5.4.1",
"commands": [
"reportgenerator"
],
"rollForward": false
}
}
}Fields
| Field | Description | |-------|-------------| | `version` | Manifest schema version (always 1) | | `isRoot` | Marks this as the root manifest (prevents searching parent directories) | | `tools` | Dictionary of tool configurations | | `tools.<name>.version` | Exact version to install | | `tools.<name>.commands` | CLI commands the tool provides | | `tools.<name>.rollForward` | Allow newer versions (usually false for reproducibility) |
---
Common Tools
Documentation
# DocFX - API documentation generator
dotnet tool install docfx
"docfx": {
"version": "2.78.3",
"commands": ["docfx"],
"rollForward": false
}**Usage:**
dotnet docfx docfx.json
dotnet docfx serve _site
Entity Framework Core
# EF Core CLI for migrations
dotnet tool install dotnet-ef
"dotnet-ef": {
"version": "9.0.0",
"commands": ["dotnet-ef"],
"rollForward": false
}**Usage:**
dotnet ef migrations add InitialCreate
dotnet ef database update
Code Coverage
# ReportGenerator for coverage reports
dotnet tool install dotnet-reportgenerator-globaltool
"dotnet-reportgenerator-globaltool": {
"version": "5.4.1",
"commands": ["reportgenerator"],
"rollForward": false
}**Usage:**
dotnet reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html
Incremental Builds
# Incrementalist - build only changed projects
dotnet tool install incrementalist.cmd
"incrementalist.cmd": {
"version": "1.2.0",
"commands": ["incrementalist"],
"rollForward": false
}**Usage:**
# Get projects affected by changes since main branch
incrementalist --branch main
Code Formatting
# CSharpier - opinionated C# formatter
dotnet tool install csharpier
"csharpier": {
"version": "0.30.3",
"commands": ["dotnet-csharpier"],
"rollForward": false
}**Usage:**
dotnet csharpier .
dotnet csharpier --check . # CI mode - fails if changes needed
Code Analysis
# JB dotnet-inspect (requires license)
dotnet tool install jb
"jb": {
"version": "2024.3.4",
"commands": ["jb"],
"rollForward": false
}---
CI/CD Integration
GitHub Actions
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Restore tools
run: dotnet tool restore
- name: Build
run: dotnet build
- name: Test with coverage
run: dotnet test --collect:"XPlat Code Coverage"
- name: Generate coverage report
run: dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:coveragereport
- name: Build documentation
run: dotnet docfx docs/docfx.jsonAzure Pipelines
steps:
- task: UseDotNet@2
inputs:
useGlobalJson: true
- script: dotnet tool restore
displayName: 'Restore .NET tools'
- script: dotnet build -c Release
displayName: 'Build'
- script: dotnet test -c Release --collect:"XPlat Code Coverage"
displayName: 'Test'
- script: dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:$(Build.ArtifactStagingDirectory)/coverage
displayName: 'Generate coverage report'---
Managing Tool Versions
Update a Tool
# Update to latest version
dotnet tool update docfx
# Update to specific version
dotnet tool update docfx --ve
Read more
name: dotnet-local-tools description: Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines. invocable: false
.NET Local Tools
When to Use This Skill
Use this skill when:
- Setting up consistent tooling across a development team
- Ensuring CI/CD pipelines use the same tool versions as local development
- Managing project-specific CLI tools (docfx, incrementalist, dotnet-ef, etc.)
- Avoiding global tool version conflicts between projects
What Are Local Tools?
Local tools are .NET CLI tools that are installed and versioned per-repository rather than globally. They're defined in `.config/dotnet-tools.json` and restored with `dotnet tool restore`.
Local vs Global Tools
| Aspect | Global Tools | Local Tools | |--------|--------------|-------------| | Installation | `dotnet tool install -g` | `dotnet tool restore` | | Scope | Machine-wide | Per-repository | | Version control | Manual | In `.config/dotnet-tools.json` | | CI/CD | Must install each tool | Single restore command | | Conflicts | Can have version conflicts | Isolated per project |
---
Setting Up Local Tools
Initialize the Manifest
# Create .config/dotnet-tools.json dotnet new tool-manifest
This creates:
.config/ └── dotnet-tools.json
Install Tools Locally
# Install a tool locally dotnet tool install docfx # Install specific version dotnet tool install docfx --version 2.78.3 # Install from a specific source dotnet tool install MyTool --add-source https://mycompany.pkgs.visualstudio.com/_packaging/feed/nuget/v3/index.json
Restore Tools
# Restore all tools from manifest dotnet tool restore
---
dotnet-tools.json Format
{
"version": 1,
"isRoot": true,
"tools": {
"docfx": {
"version": "2.78.3",
"commands": [
"docfx"
],
"rollForward": false
},
"dotnet-ef": {
"version": "9.0.0",
"commands": [
"dotnet-ef"
],
"rollForward": false
},
"incrementalist.cmd": {
"version": "1.2.0",
"commands": [
"incrementalist"
],
"rollForward": false
},
"dotnet-reportgenerator-globaltool": {
"version": "5.4.1",
"commands": [
"reportgenerator"
],
"rollForward": false
}
}
}Fields
| Field | Description | |-------|-------------| | `version` | Manifest schema version (always 1) | | `isRoot` | Marks this as the root manifest (prevents searching parent directories) | | `tools` | Dictionary of tool configurations | | `tools.<name>.version` | Exact version to install | | `tools.<name>.commands` | CLI commands the tool provides | | `tools.<name>.rollForward` | Allow newer versions (usually false for reproducibility) |
---
Common Tools
Documentation
# DocFX - API documentation generator dotnet tool install docfx
"docfx": {
"version": "2.78.3",
"commands": ["docfx"],
"rollForward": false
}**Usage:**
dotnet docfx docfx.json dotnet docfx serve _site
Entity Framework Core
# EF Core CLI for migrations dotnet tool install dotnet-ef
"dotnet-ef": {
"version": "9.0.0",
"commands": ["dotnet-ef"],
"rollForward": false
}**Usage:**
dotnet ef migrations add InitialCreate dotnet ef database update
Code Coverage
# ReportGenerator for coverage reports dotnet tool install dotnet-reportgenerator-globaltool
"dotnet-reportgenerator-globaltool": {
"version": "5.4.1",
"commands": ["reportgenerator"],
"rollForward": false
}**Usage:**
dotnet reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html
Incremental Builds
# Incrementalist - build only changed projects dotnet tool install incrementalist.cmd
"incrementalist.cmd": {
"version": "1.2.0",
"commands": ["incrementalist"],
"rollForward": false
}**Usage:**
# Get projects affected by changes since main branch incrementalist --branch main
Code Formatting
# CSharpier - opinionated C# formatter dotnet tool install csharpier
"csharpier": {
"version": "0.30.3",
"commands": ["dotnet-csharpier"],
"rollForward": false
}**Usage:**
dotnet csharpier . dotnet csharpier --check . # CI mode - fails if changes needed
Code Analysis
# JB dotnet-inspect (requires license) dotnet tool install jb
"jb": {
"version": "2024.3.4",
"commands": ["jb"],
"rollForward": false
}---
CI/CD Integration
GitHub Actions
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Restore tools
run: dotnet tool restore
- name: Build
run: dotnet build
- name: Test with coverage
run: dotnet test --collect:"XPlat Code Coverage"
- name: Generate coverage report
run: dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:coveragereport
- name: Build documentation
run: dotnet docfx docs/docfx.jsonAzure Pipelines
steps:
- task: UseDotNet@2
inputs:
useGlobalJson: true
- script: dotnet tool restore
displayName: 'Restore .NET tools'
- script: dotnet build -c Release
displayName: 'Build'
- script: dotnet test -c Release --collect:"XPlat Code Coverage"
displayName: 'Test'
- script: dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:$(Build.ArtifactStagingDirectory)/coverage
displayName: 'Generate coverage report'---
Managing Tool Versions
Update a Tool
# Update to latest version dotnet tool update docfx # Update to specific version dotnet tool update docfx --ve
A comprehensive AI coding plugin with 30 skills and 5 specialized agents for professional .NET development. Battle-tested patterns from production systems covering C#, Akka.NET, Aspire, EF Core, testing, and performance optimization.
Other skills on dotnet-skills.
- /akka-aspire-configuration
Configure Akka.NET with .NET Aspire for local development and production deployments. Covers actor system setup, clustering, persistence, Akka.Management integration, and Aspire orchestration patterns.
Open skill - /akka-best-practices
Critical Akka.NET best practices including EventStream vs DistributedPubSub, supervision strategies, error handling, Props vs DependencyResolver, work distribution patterns, and cluster/local mode abstractions for testability.
Open skill - /akka-hosting-actor-patterns
Patterns for building entity actors with Akka.Hosting - GenericChildPerEntityParent, message extractors, cluster sharding abstraction, akka-reminders, and ITimeProvider. Supports both local testing and clustered production modes.
Open skill - /akka-management
Akka.Management for cluster bootstrapping, service discovery (Kubernetes, Azure, Config), health checks, and dynamic cluster formation without static seed nodes.
Open skill - /akka-testing-patterns
Write unit and integration tests for Akka.NET actors using modern Akka.Hosting.TestKit patterns. Covers dependency injection, TestProbes, persistence testing, and actor interaction verification. Includes guidance on when to use traditional TestKit.
Open skill - /aspire-configuration
Configure Aspire AppHost to emit explicit app config via environment variables; keep app code free of Aspire clients and service discovery.
Open skill

