Agent skill

Dotnet Local Tools

by Aaronontheweb in Aaronontheweb/dotnet-skills

Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines.

MITAuto-check passedDevOps & Cloud

Install Dotnet Local Tools

skills CLI
$ npx skills add Aaronontheweb/dotnet-skills --skill dotnet-local-tools -a claude-code

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

GitHub CLI
$ gh skill install Aaronontheweb/dotnet-skills dotnet-local-tools --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/Aaronontheweb/dotnet-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/local-tools .claude/skills/dotnet-local-tools && 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
dotnet-local-tools
GitHub stars
1.2k
Used in
1 other repo
Token cost
~2.2k tokens
SKILL.md length
322 words
Files
1
Skills in repo
33
Repo updated
First seen
Licence
MIT

At a glance

Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines.

  • Works in 5 steps: Always Set isRoot: true → Pin Exact Versions → Restore in CI Before Use → …
  • Tasks that involve CI/CD
  • SKILL.md covers When to Use This Skill, What Are Local Tools?, Setting Up Local Tools and dotnet-tools.json Format, plus 4 more sections
  • Calls dotnet

What it does

Dotnet Local Tools is an agent skill from Aaronontheweb/dotnet-skills. Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines.

Its SKILL.md is about 2.2k 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 DevOps & Cloud, covering CI/CD. It works with .NET. The repository describes itself as: Claude Code skills and sub-agents for .NET Developers. The licence is MIT.

When your agent uses it

  • Tasks that involve CI/CD

Example prompts

  • “/dotnet-local-tools”

Workflow steps

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

  1. Always Set isRoot: true
  2. Pin Exact Versions
  3. Restore in CI Before Use
  4. Document Tool Requirements
  5. Use Dependabot for Updates

What it can do on your machine

Read from SKILL.md and the folder at commit e426ed9. 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

    No URLs in SKILL.md.

    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

Dotnet Local Tools loads about 2.2k tokens when it runs. Until then it costs about 36 tokens; SKILL.md has 322 words of instructions outside code blocks.

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

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 Aaronontheweb/dotnet-skills at commit e426ed9, republished under its MIT licence (© Aaronontheweb). 322 words, ~2,227 tokens.

Download SKILL.mdSave it as .claude/skills/dotnet-local-tools/SKILL.md (or your agent's skills folder).
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
AspectGlobal ToolsLocal Tools
Installationdotnet tool install -gdotnet tool restore
ScopeMachine-widePer-repository
Version controlManualIn .config/dotnet-tools.json
CI/CDMust install each toolSingle restore command
ConflictsCan have version conflictsIsolated per project

Setting Up Local Tools

Initialize the Manifest
bash
# Create .config/dotnet-tools.json
dotnet new tool-manifest

This creates:

.config/
└── dotnet-tools.json
Install Tools Locally
bash
# 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
bash
# Restore all tools from manifest
dotnet tool restore

dotnet-tools.json Format

json
{
  "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
FieldDescription
versionManifest schema version (always 1)
isRootMarks this as the root manifest (prevents searching parent directories)
toolsDictionary of tool configurations
tools.<name>.versionExact version to install
tools.<name>.commandsCLI commands the tool provides
tools.<name>.rollForwardAllow newer versions (usually false for reproducibility)

Common Tools

Documentation
bash
# DocFX - API documentation generator
dotnet tool install docfx
json
"docfx": {
  "version": "2.78.3",
  "commands": ["docfx"],
  "rollForward": false
}

Usage:

bash
dotnet docfx docfx.json
dotnet docfx serve _site
Entity Framework Core
bash
# EF Core CLI for migrations
dotnet tool install dotnet-ef
json
"dotnet-ef": {
  "version": "9.0.0",
  "commands": ["dotnet-ef"],
  "rollForward": false
}

Usage:

bash
dotnet ef migrations add InitialCreate
dotnet ef database update
Code Coverage
bash
# ReportGenerator for coverage reports
dotnet tool install dotnet-reportgenerator-globaltool
json
"dotnet-reportgenerator-globaltool": {
  "version": "5.4.1",
  "commands": ["reportgenerator"],
  "rollForward": false
}

Usage:

bash
dotnet reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html
Incremental Builds
bash
# Incrementalist - build only changed projects
dotnet tool install incrementalist.cmd
json
"incrementalist.cmd": {
  "version": "1.2.0",
  "commands": ["incrementalist"],
  "rollForward": false
}

Usage:

bash
# Get projects affected by changes since main branch
incrementalist --branch main
Code Formatting
bash
# CSharpier - opinionated C# formatter
dotnet tool install csharpier
json
"csharpier": {
  "version": "0.30.3",
  "commands": ["dotnet-csharpier"],
  "rollForward": false
}

Usage:

bash
dotnet csharpier .
dotnet csharpier --check .  # CI mode - fails if changes needed
Code Analysis
bash
# JB dotnet-inspect (requires license)
dotnet tool install jb
json
"jb": {
  "version": "2024.3.4",
  "commands": ["jb"],
  "rollForward": false
}

CI/CD Integration

GitHub Actions
yaml
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.json
Azure Pipelines
yaml
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
bash
# Update to latest version
dotnet tool update docfx

# Update to specific version
dotnet tool update docfx --version 2.79.0
List Installed Tools
bash
# List local tools
dotnet tool list

# List with outdated check
dotnet tool list --outdated
Remove a Tool
bash
dotnet tool uninstall docfx

Best Practices

1. Always Set isRoot: true

Prevents MSBuild from searching parent directories for tool manifests:

json
{
  "version": 1,
  "isRoot": true,
  ...
}
2. Pin Exact Versions

Use "rollForward": false for reproducible builds:

json
"docfx": {
  "version": "2.78.3",
  "rollForward": false
}
3. Restore in CI Before Use

Always run dotnet tool restore before using any local tool:

yaml
- run: dotnet tool restore
- run: dotnet docfx docs/docfx.json
4. Document Tool Requirements

Add a comment or section in README:

markdown
## Development Setup

1. Restore tools: `dotnet tool restore`
2. Build: `dotnet build`
3. Test: `dotnet test`
5. Use Dependabot for Updates
yaml
# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "nuget"
    directory: "/"
    schedule:
      interval: "weekly"
    # Includes local tools in .config/dotnet-tools.json

Troubleshooting

Tool Not Found After Restore

Ensure you're running from the repository root:

bash
# Wrong - running from subdirectory
cd src/MyApp
dotnet docfx  # Error: tool not found

# Correct - run from solution root
cd ../..
dotnet docfx docs/docfx.json
Version Conflicts

If you see version conflicts, check for:

  1. Global tool with different version: dotnet tool list -g
  2. Multiple tool manifests: Look for .config/dotnet-tools.json in parent directories
Clearing Tool Cache
bash
# Clear NuGet tool cache
dotnet nuget locals all --clear

# Re-restore tools
dotnet tool restore

Example: Complete Development Setup

json
{
  "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
    },
    "dotnet-reportgenerator-globaltool": {
      "version": "5.4.1",
      "commands": ["reportgenerator"],
      "rollForward": false
    },
    "csharpier": {
      "version": "0.30.3",
      "commands": ["dotnet-csharpier"],
      "rollForward": false
    },
    "incrementalist.cmd": {
      "version": "1.2.0",
      "commands": ["incrementalist"],
      "rollForward": false
    }
  }
}

Development workflow:

bash
# Initial setup
dotnet tool restore

# Format code before commit
dotnet csharpier .

# Run tests with coverage
dotnet test --collect:"XPlat Code Coverage"
dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:coverage

# Build documentation
dotnet docfx docs/docfx.json

# Check which projects changed (for large repos)
incrementalist --branch main

© Aaronontheweb, 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 skills/local-tools of Aaronontheweb/dotnet-skills.

Open the folder on GitHubat commit e426ed9

Used in 1 other repository

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

Compare with similar skills

Dotnet Local Tools 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.

Dotnet Local Tools compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dotnet Local Tools this skillAaronontheweb/dotnet-skills1.2k1 repos~2.2kAutomated safety check: PassMIT
Nuget Trusted Publishingdotnet/skills5.6k2 repos~2.3kAutomated safety check: PassMIT
Configure Telerik NugetLanceMcCarthy/DevOpsExamples172—~976Automated safety check: PassMIT
Migrate Vstest To Mtprunceel/ReactiveProperty944—~4.3kAutomated safety check: PassMIT
CI CDcodewithmukesh/dotnet-claude-kit7511 repos~1.4kAutomated safety check: PassMIT
GitHub Actions Failure DebuggingLanceMcCarthy/DevOpsExamples172—~312Automated safety check: PassMIT

Similar skills

  • Official

    Set up NuGet trusted publishing (OIDC) on a GitHub Actions repo — replaces long-lived API keys with short-lived tokens.

    5.6k GitHub starsUsed in 2 repos~2.3k tokens
    DevOps & CloudAuto-check passed
  • Configure Telerik Nuget

    LanceMcCarthy/DevOpsExamples

    Helps setup, configure and manage Telerik NuGet feeds in your repo's nuget.config file.

    172 GitHub stars~976 tokensUpdated 7 days ago
    DevOps & CloudAuto-check passed
  • Migrate Vstest To Mtp

    runceel/ReactiveProperty

    Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).

    944 GitHub stars~4.3k tokensUpdated 1 mo ago
    DevOps & CloudAuto-check passed
  • CI CD

    codewithmukesh/dotnet-claude-kit

    CI/CD pipelines for .NET applications. An agent skill from codewithmukesh/dotnet-claude-kit.

    751 GitHub starsUsed in 1 repo~1.4k tokens
    DevOps & CloudAuto-check passed
  • GitHub Actions Failure Debugging

    LanceMcCarthy/DevOpsExamples

    Guide for debugging failing GitHub Actions workflows. An agent skill from LanceMcCarthy/DevOpsExamples.

    172 GitHub stars~312 tokensUpdated 7 days ago
    DevOps & CloudAuto-check passed
  • Official

    Migrate a .NET 10 project or solution to .NET 11 and resolve all breaking changes.

    5.6k GitHub starsUsed in 1 repo~3.6k tokens
    DevOps & CloudAuto-check passed

More from Aaronontheweb/dotnet-skills

All 33 skills in this repo
  • .NET API Compatibility Design

    Aaronontheweb/dotnet-skills

    Applies extend-only design rules to NuGet packages and distributed systems, covering source, binary and wire compatibility and how to deprecate members safely.

    1.2k GitHub starsUsed in 2 repos~2.7k tokens
    Auto-check passed
  • .NET Trimming and Native AOT

    Aaronontheweb/dotnet-skills

    Guides making .NET libraries trimming-safe and Native-AOT compatible: the MSBuild properties, trimming attributes, warning codes and a playbook of safe patterns.

    1.2k GitHub stars~2.9k tokensUpdated 21 days ago
    Auto-check passed
  • Akka.Hosting Actor Patterns

    Aaronontheweb/dotnet-skills

    Shows how to build entity actors with Akka.Hosting so the same code runs in local unit tests and in a sharded cluster in production.

    1.2k GitHub starsUsed in 1 repo~5k tokens
    Auto-check passed
  • Akka.NET Best Practices

    Aaronontheweb/dotnet-skills

    Guidance for Akka.NET actor systems covering EventStream versus DistributedPubSub, supervision, Props versus DependencyResolver, work distribution and testable cluster code.

    1.2k GitHub starsUsed in 1 repo~3.3k tokens
    Auto-check passed
  • Akka.NET Management and Discovery

    Aaronontheweb/dotnet-skills

    Sets up Akka.Management and Cluster.Bootstrap so Akka.NET clusters form through service discovery on Kubernetes, Azure or config instead of static seed nodes.

    1.2k GitHub starsUsed in 1 repo~2.5k tokens
    Auto-check passed
  • Akka.NET Testing Patterns

    Aaronontheweb/dotnet-skills

    Shows how to test Akka.NET actors with Akka.Hosting.TestKit: swapping services for fakes, using TestProbes, and checking persistence, plus when the older TestKit still fits.

    1.2k GitHub starsUsed in 1 repo~2.4k tokens
    Auto-check passed

Works with

Categories

Questions about Dotnet Local Tools

What does Dotnet Local Tools do?

Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines. Dotnet Local Tools is an agent skill from Aaronontheweb/dotnet-skills.json for consistent tooling across development environments and CI/CD pipelines.

When should I use Dotnet Local Tools?

Dotnet Local Tools fits situations like: tasks that involve CI/CD.

How do I install Dotnet Local Tools in Claude Code?

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

How do I install Dotnet Local Tools in Codex?

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

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

What does Dotnet Local Tools need to run?

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

Does Dotnet Local Tools access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Dotnet Local Tools 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 Dotnet Local Tools use?

Dotnet Local Tools is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dotnet Local Tools use?

About 2.2k tokens (SKILL.md is roughly 8.9k 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 Dotnet Local Tools?

Skills that share tags, products or a category with Dotnet Local Tools: Nuget Trusted Publishing (dotnet/skills, 5.6k stars), Configure Telerik Nuget (LanceMcCarthy/DevOpsExamples, 172 stars), Migrate Vstest To Mtp (runceel/ReactiveProperty, 944 stars) and CI CD (codewithmukesh/dotnet-claude-kit, 751 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dotnet Local Tools?

Aaronontheweb (a GitHub user) maintains it in Aaronontheweb/dotnet-skills, which has 1,203 GitHub stars. The repository holds 33 skills in this directory. The repository was last updated on September 17, 2026.

Source: Aaronontheweb/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.