Official agent skill

Update .NET OS Packages

by dotnet in dotnet/core

Audits and updates os-packages.json files listing the Linux packages each .NET release needs per distro, then regenerates the Markdown from the JSON.

OfficialMITAuto-check passedDevelopment

Install Update .NET OS Packages

skills CLI
$ npx skills add dotnet/core --skill update-os-packages -a claude-code

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

GitHub CLI
$ gh skill install dotnet/core update-os-packages --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/dotnet/core.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/update-os-packages .claude/skills/update-os-packages && 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
update-os-packages
GitHub stars
22k
Token cost
~2.3k tokens
SKILL.md length
945 words
Files
2 (incl. references)
Skills in repo
15
Repo updated
First seen
Licence
MIT

At a glance

Audits and updates os-packages.json files listing the Linux packages each .NET release needs per distro, then regenerates the Markdown from the JSON.

  • Works in 7 steps: Verify — check for issues (early out) → Determine scope of changes → Apply changes to os-packages.json → …
  • Adding package entries for a newly supported distro version
  • SKILL.md covers When to use, Prerequisites, Inputs and Process, plus 1 more section
  • Calls git, dotnet and npx; reaches nuget.pkg.github.com; needs GITHUB_TOKEN

What it does

The skill maintains os-packages.json files that declare which Linux packages each .NET release requires on each distribution. The matching os-packages.md files are generated from the JSON and must never be edited by hand. Its scope is broader than supported-os.json and also covers pre-release distro versions and permanent unstable channels such as Alpine edge and Debian sid.

The agent runs release-notes verify os-packages for each .NET version under audit to check package names against distro archives, then fixes problems and regenerates the Markdown. Typical triggers are a new distro version, a pre-release distro, a package renamed between releases, an end-of-life version to remove, and periodic audits. The release-notes .NET tool must be installed from GitHub Packages, which needs authentication with a token that has read:packages scope.

When your agent uses it

  • Adding package entries for a newly supported distro version
  • Fixing a Linux package name that is wrong for a distro release
  • Auditing os-packages.json for names that no longer exist in distro archives
  • Removing entries for an end-of-life OS version

Example prompts

  • “Add os-packages entries for the new Ubuntu release and verify the package names.”
  • “Audit the .NET 10.0 os-packages.json against the distro archives.”
  • “The libicu package name changed in the latest Debian. Update the entries and regenerate the Markdown.”

Requirements

  • The release-notes .NET tool, installed from GitHub Packages
  • A GitHub token with read:packages scope

Workflow steps

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

  1. Verify — check for issues (early out)
  2. Determine scope of changes
  3. Apply changes to os-packages.json
  4. Regenerate markdown
  5. Run markdownlint
  6. Validate changes
  7. Create PR

What it can do on your machine

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

    • git
    • dotnet
    • npx
    • gh

    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:

    • nuget.pkg.github.com

    Also links to:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • GITHUB_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Update .NET OS Packages loads about 2.3k tokens when it runs, and up to ~2.6k if it reads all its reference files. Until then it costs about 117 tokens; SKILL.md has 945 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~117
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~2.6k

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 dotnet/core at commit 44927bc, republished under its MIT licence (© dotnet). 945 words, ~2,288 tokens.

Download SKILL.mdSave it as .claude/skills/update-os-packages/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
update-os-packages
description
Audit and update os-packages.json/md files that document required Linux packages for each .NET release. Uses the release-notes tool to verify package names against distro archives and regenerate markdown. USE FOR: adding packages for new distro versions, fixing incorrect package names, periodic package audits. DO NOT USE FOR: supported-os.json changes (use update-supported-os skill), editing os-packages.md directly (it is generated from JSON).

Update OS Packages

Audit and update os-packages.json files in this repository. These files declare which Linux packages are required for each .NET release on each distribution. The corresponding os-packages.md files are generated from JSON — never hand-edit them.

The scope of os-packages.json is broader than supported-os.json. It includes any distro version where the package information is helpful — including pre-release versions of supported distros (e.g. Fedora 44 beta) and permanent unstable channels (Alpine edge, Debian sid).

When to use

  • A new distro version is added to supported-os.json and needs package entries
  • A pre-release distro version is available and package info would be helpful (e.g. Fedora beta, Ubuntu interim release)
  • A package name changes between distro releases (e.g. libicu74 → libicu76)
  • An OS version reaches end-of-life and its package entries should be removed
  • Periodic audit to verify package names still exist in distro archives

Prerequisites

The release-notes tool must be installed. The public dotnet-release tool is now for browsing release data and CVEs. Packages are published to GitHub Packages.

bash
# GitHub Packages requires authentication — use a GitHub token (PAT or GITHUB_TOKEN)
dotnet tool install -g release-notes \
  --add-source https://nuget.pkg.github.com/richlander/index.json

# Verify
release-notes --help

Note: GitHub Packages requires authentication even for public repositories. If you get a 401 error, configure credentials for the source:

bash
dotnet nuget add source https://nuget.pkg.github.com/richlander/index.json \
  --name github-richlander \
  --username USERNAME \
  --password "$GITHUB_TOKEN" \
  --store-password-in-clear-text

In GitHub Actions, GITHUB_TOKEN is available automatically. For local use, create a personal access token with read:packages scope.

Inputs

The user provides:

  • Versions to audit — which .NET versions to check (e.g. "8.0+", "10.0 only"), defaults to all active versions
  • Optionally, specific distros or package IDs to focus on

Process

1. Verify — check for issues (early out)

Run the verify command for each .NET version to audit:

bash
release-notes verify os-packages <version> release-notes

Examples:

bash
# Check 10.0 against local files
release-notes verify os-packages 10.0 release-notes

# Check against live data on GitHub (no local clone needed)
release-notes verify os-packages 10.0

Interpret the exit code:

  • Exit code 0 — No issues found. Stop here — nothing to do.
  • Exit code 2 — Issues found. The report is written to stdout as markdown. Proceed to step 2.

The verifier checks whether package names in the JSON actually exist in distro archives. It currently supports Ubuntu (via Launchpad API) and Debian (via packages.debian.org). Other distros are skipped.

The report uses GitHub callout blocks:

CalloutMeaningAction
> [!WARNING]Package name not found in distro archiveFix the package name or remove the entry

See references/verify-output-example.md for example output.

If all versions return exit code 0, the package list is current. Stop here.

2. Determine scope of changes

Review the verify report and decide which issues to act on:

  • WARNING items (package not found) — fix by updating the package name or removing the distro release entry if it's no longer supported
  • Skipped distros — cannot be verified automatically; review manually if the user requests

Present findings to the user with recommendations before making changes.

3. Apply changes to os-packages.json

For each confirmed change, edit release-notes/<version>/os-packages.json.

JSON structure

The file has two main sections:

  • packages — global package definitions (id, name, required-scenarios, references)
  • distributions — per-distro data with install commands and per-release package names
Common edits

Add a new distro release (e.g. when a version is added to supported-os.json or a pre-release is available):

Copy the most recent release entry for that distro and update:

  • name — display name (e.g. "Ubuntu 26.04 LTS (Resolute Raccoon)")
  • release — version string (e.g. "26.04")
  • Package names — update any that differ from the previous release

Pre-release versions of supported distros are welcome (e.g. Fedora 44 before GA). The packages list is informational — it does not imply official support.

Permanent unstable channels — Alpine edge and Debian sid (Unstable) are permanent entries that should always be present. They track the rolling release and should have their package names updated when they change, but should never be removed.

json
{
  "name": "Ubuntu 26.04 LTS (Resolute Raccoon)",
  "release": "26.04",
  "packages": [
    { "id": "libc", "name": "libc6" },
    { "id": "libgcc", "name": "libgcc-s1" },
    { "id": "ca-certificates", "name": "ca-certificates" },
    { "id": "openssl", "name": "libssl3t64" },
    { "id": "libstdc++", "name": "libstdc++6" },
    { "id": "libicu", "name": "libicu76" },
    { "id": "tzdata", "name": "tzdata" },
    { "id": "krb5", "name": "libgssapi-krb5-2" }
  ]
}

Fix a package name (e.g. libicu74 → libicu76):

Update the name field in the relevant release entry. Package names often change between major distro versions due to shared library versioning.

Remove a distro release (e.g. when it's removed from supported-os.json):

Delete the release object from the releases array for that distribution.

Key rules:

  • Releases should be ordered newest-first within each distribution
  • Each release must include entries for all packages defined in the top-level packages array
  • The id field in each package entry must match a top-level package definition
  • Package name is the actual package name in the distro's archive (e.g. libicu74, not icu)
Show full SKILL.md (298 more words)Show less
4. Regenerate markdown

After updating the JSON, regenerate the markdown file:

bash
release-notes generate os-packages <version> release-notes

This overwrites os-packages.md with content derived from the updated JSON.

Important: Do not hand-edit os-packages.md. It is generated from JSON by the tool. If the markdown output needs to change, update the generator or its Markout template in dotnet-release instead.

5. Run markdownlint

Before committing, verify the generated markdown passes linting:

bash
npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/<version>/os-packages.md

CI runs markdownlint via super-linter. If linting fails, fix the generator or Markout library — do not patch the markdown by hand.

6. Validate changes
  1. Run verify again to confirm issues are resolved:

    bash
    release-notes verify os-packages <version> release-notes

    Expect exit code 0 (or only skipped distros remaining).

  2. Spot-check the generated markdown renders correctly — especially the bash install commands.

7. Create PR
  1. Create a branch:

    bash
    git checkout -b update-os-packages-<date>
  2. Commit all changed files (os-packages.json and os-packages.md for each version):

    bash
    git add release-notes/*/os-packages.json release-notes/*/os-packages.md
    git commit -m "Update OS packages — <summary of changes>"
  3. Push and open a PR:

    bash
    gh pr create --title "Update OS packages" --body "<description of changes>"

Key facts

  • The scope of os-packages.json is broader than supported-os.json — it includes pre-release and unstable versions
  • Alpine edge and Debian sid are permanent entries — they should always be present and kept up to date
  • Any pre-release version of a supported distro is OK to add (e.g. Fedora beta, Ubuntu interim)
  • Package names vary across distro versions — e.g. libicu74 on Ubuntu 24.04 vs libicu76 on Ubuntu 26.04
  • The verifier only checks Ubuntu and Debian archives; other distros must be reviewed manually
  • Install commands are defined per-distribution (not per-release) — all releases of a distro share the same install method
  • The {packageName} placeholder in install commands is replaced with the actual package list at generation time
  • Active .NET versions with os-packages.json: 8.0, 9.0, 10.0

© dotnet, 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 (references) in .github/skills/update-os-packages of dotnet/core.

  • SKILL.md
  • references/verify-output-example.md

Open the folder on GitHubat commit 44927bc

Compare with similar skills

Update .NET OS Packages 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.

Update .NET OS Packages compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Update .NET OS Packages this skilldotnet/core22k—~2.3kAutomated safety check: PassMIT
Merge Dependabot PRsonyx-dot-app/onyx32k1 repos~2.2kAutomated safety check: PassMIT
Cut Releasejfernandez/bpftop2.7k—~2kAutomated safety check: PassApache-2.0
Beautify GitHub Readmeoil-oil/beautify-github-readme1.8k—~4.1kAutomated safety check: PassMIT
Library Documentation Seekerwithkynam/vibecode-pro-max-kit1.1k2 repos~1kAutomated safety check: NotesMIT
Debate ReviewamElnagdy/review-skills1322 repos~986Automated safety check: PassMIT

Similar skills

  • Merge Dependabot PRs

    onyx-dot-app/onyx

    Triages and lands a batch of open Dependabot PRs in the Onyx repo, where main is gated exclusively by GitHub's merge queue: approves and enqueues green PRs, closes superseded duplicates, fixes…

    32k GitHub starsUsed in 1 repo~2.2k tokens
    DevelopmentAuto-check passed
  • Cut Release

    jfernandez/bpftop

    Cut a new versioned release of bpftop — pick the version, open a version-bump PR, sign-tag the merge commit on main, and draft GitHub release notes in the project's established format.

    2.7k GitHub stars~2k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Beautify GitHub Readme

    oil-oil/beautify-github-readme

    Redesign GitHub README homepages or create project-native pure SVG, hybrid SVG-composed PNG/WebP, and opt-in animated GIF assets.

    1.8k GitHub stars~4.1k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Library Documentation Seeker

    withkynam/vibecode-pro-max-kit

    Looks up library and framework documentation through Context7 first, with bundled Node scripts as a fallback that fetch and analyze llms.txt files.

    1.1k GitHub starsUsed in 2 repos~1k tokens
    DevelopmentAuto-check: notes
  • Debate Review

    amElnagdy/review-skills

    Two-model debate review of a GitHub PR, GitLab MR, Azure DevOps PR, or local working tree, posted as inline comments or printed.

    132 GitHub starsUsed in 2 repos~986 tokens
    DevelopmentAuto-check passed
  • Post Draft Review

    agent-substrate/substrate

    Posts pull request review findings as GitHub draft (pending) inline comments for a human to edit and submit, instead of publishing them straight to the PR author.

    4.5k GitHub stars~2.8k tokensUpdated today
    DevelopmentAuto-check passed

More from dotnet/core

All 15 skills in this repo
  • Official

    Audits and updates the supported-os.json files for .NET releases, checking them against upstream lifecycle data and regenerating the markdown with the release-notes tool.

    22k GitHub stars~4.1k tokensUpdated today
    Auto-check passed
  • Official

    Validates .NET release data with the release-notes CLI: download URL liveness, SHA512 hashes, CDN latest.version files and aka.ms redirects.

    22k GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Produces the changes.json manifest for a .NET preview, RC or GA milestone by choosing the right VMR base and head refs and running release-notes generate changes.

    22k GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Official

    Ranks the changes in a release manifest and writes a scored features file that release notes, docs and blog posts can each cut at their own threshold.

    22k GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Official

    Audits a scored features.json file and its draft release notes against editorial examples to catch over-scored, under-scored, or missing entries.

    22k GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Official

    Creates and maintains the per-distro JSON files that list the native packages .NET needs on each Linux distribution, scoped to one .NET version.

    22k GitHub stars~4.3k tokensUpdated today
    Auto-check: notes

Works with

Categories

Questions about Update .NET OS Packages

What does Update .NET OS Packages do?

Audits and updates os-packages.json files listing the Linux packages each .NET release needs per distro, then regenerates the Markdown from the JSON. NET release requires on each distribution.md files are generated from the JSON and must never be edited by hand.

When should I use Update .NET OS Packages?

Update .NET OS Packages fits situations like: adding package entries for a newly supported distro version; fixing a Linux package name that is wrong for a distro release; auditing os-packages.json for names that no longer exist in distro archives; removing entries for an end-of-life OS version.

How do I install Update .NET OS Packages in Claude Code?

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

How do I install Update .NET OS Packages in Codex?

Run `npx skills add dotnet/core --skill update-os-packages -a codex`. Or copy the skill folder (.github/skills/update-os-packages in dotnet/core) into .agents/skills/update-os-packages in your project. Codex loads it when a task matches its description.

Can I use Update .NET OS Packages 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 dotnet/core --skill update-os-packages -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-os-packages, .gemini/skills/update-os-packages, .github/skills/update-os-packages and .opencode/skills/update-os-packages in your project.

What does Update .NET OS Packages need to run?

Going by SKILL.md and its folder, Update .NET OS Packages needs the command-line tools its instructions call (git, dotnet, npx and gh) and credentials named GITHUB_TOKEN. Our summary lists: The release-notes .NET tool, installed from GitHub Packages; A GitHub token with read:packages scope.

Does Update .NET OS Packages access the network?

SKILL.md names 2 domains. In commands or code: nuget.pkg.github.com; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.

Is Update .NET OS Packages 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 Update .NET OS Packages use?

Update .NET OS Packages 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 Update .NET OS Packages use?

About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 270 tokens, read only when the agent opens those files.

What are the alternatives to Update .NET OS Packages?

Skills that share tags, products or a category with Update .NET OS Packages: Merge Dependabot PRs (onyx-dot-app/onyx, 32k stars), Cut Release (jfernandez/bpftop, 2.7k stars), Beautify GitHub Readme (oil-oil/beautify-github-readme, 1.8k stars) and Library Documentation Seeker (withkynam/vibecode-pro-max-kit, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Update .NET OS Packages?

dotnet (a GitHub organization, an official publisher) maintains it in dotnet/core, which has 22,038 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 7, 2026.

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