Skip to main content

Agentic .NET Framework -> modern .NET upgrade skill, packaged with deterministic CLI helpers (baseline build capture, graphify knowledge-graph wiring, task scaffolding/tracking) and one-command installers for Claude Code, Cursor, Codex, and other agent tools.

Project description

dotnet-modernize

An agentic .NET Framework → modern .NET upgrade workflow (assessment → plan → build-validated execution, in the style of Visual Studio Copilot's "Modernize" agent), packaged for pip with:

  • One-command install of the skill (SKILL.md + references/) into Claude Code's skill directory (or any other agent tool via --dest).
  • Deterministic CLI helpers for the parts of the workflow that don't need an LLM: scenario scaffolding, baseline build capture, wiring up the graphify knowledge graph, and tracking tasks.md completion.

The reasoning-heavy stages — reading the codebase, deciding the upgrade strategy, diagnosing build errors — are not reimplemented in Python. That's what the bundled skill is for: point an agent (Claude Code, or any tool that can read a SKILL.md) at your solution and let it run the workflow, using this CLI underneath for the mechanical bits.

Install

pip install dotnet-modernize
# or: pipx install dotnet-modernize / uv tool install dotnet-modernize

Quickstart

cd path/to/your/solution

# 1. Put the skill where your agent will find it
dotnet-modernize install                 # -> .claude/skills/dotnet-modernize/

# 2. Scaffold an upgrade scenario
dotnet-modernize init dotnet-version-upgrade --target-tfm net10.0

# 3. Capture the pre-upgrade baseline (never edits code)
dotnet-modernize baseline dotnet-version-upgrade

# 4. Build the knowledge graph the agent will query during assessment/execution
dotnet-modernize graph --auto-install

# 5. Hand off to your agent:
#    "Upgrade this solution to net10.0 using scenario dotnet-version-upgrade,
#     following the dotnet-modernize skill."

# 6. Check progress any time (reads tasks.md, no agent needed)
dotnet-modernize status dotnet-version-upgrade

Commands

Command What it does
install [--target claude-project|claude-user|generic] [--dest PATH] [--force] Copies the bundled skill folder into an agent's skill directory.
uninstall Removes a previously installed copy.
init SCENARIO_ID [--target-tfm] [--scope] [--solution-name] Creates .github/upgrades/<id>/ with scenario-instructions.md and tasks.md skeletons.
list Lists existing scenarios.
archive SCENARIO_ID Renames a scenario folder with a timestamp so a new run can start clean without losing history.
baseline SCENARIO_ID [--solution PATH] [--no-tests] Runs dotnet restore/build/test as-is and writes baseline-log.txt. Read-only w.r.t. source.
graph [--path] [--auto-install] Runs graphify extract at the solution root; prints the report path.
query "<question>" [--path] Queries an existing graph without an agent in the loop.
update-graph [--path] Incrementally refreshes the graph after a committed task.
status SCENARIO_ID Parses tasks.md checkboxes and shows completion %.
doctor Checks for dotnet, git, graphify, and whether the skill/scenarios exist.

Why a hybrid (skill + CLI) instead of pure Python?

Upgrading a real solution requires judgment a script can't safely automate: classifying a WCF server as a rewrite, deciding bottom-up vs top-down order, root-causing a build error to the correct breaking-change entry instead of pattern-spraying fixes. That's delegated to an LLM agent reading the skill. Everything around that judgment — is git clean, does it build today, is the graph fresh, how many tasks are left — is exactly the kind of thing that should be a boring, deterministic, testable CLI command instead of something re-derived by the agent every session. This package draws that line explicitly instead of blurring it.

What's bundled

src/dotnet_modernize/skill_data/
├── SKILL.md
└── references/
    ├── artifact-templates.md
    ├── breaking-changes-catalog.md
    ├── project-type-playbooks.md
    ├── knowledge-graph.md
    ├── frontend-and-static-assets.md
    └── graphify/            # graphify's own canonical agent workflow, embedded
        ├── PIPELINE.md
        ├── query.md
        ├── update.md
        ├── extraction-spec.md
        ├── hooks.md
        ├── github-and-merge.md
        └── transcribe.md

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dotnet_modernize-0.1.0.tar.gz (64.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dotnet_modernize-0.1.0-py3-none-any.whl (74.3 kB view details)

Uploaded Python 3

File details

Details for the file dotnet_modernize-0.1.0.tar.gz.

File metadata

  • Download URL: dotnet_modernize-0.1.0.tar.gz
  • Upload date:
  • Size: 64.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for dotnet_modernize-0.1.0.tar.gz
Algorithm Hash digest
SHA256 75dd9ad267670c0ced073b9ccc0826124e5b803a107566f7d8264a7755caf26e
MD5 0d735fc2cdcd09c6fd38035fae030e92
BLAKE2b-256 ce96d768943a0e74cb778ab1437135e0bbe2040eb2e8854676d3a3197149a767

See more details on using hashes here.

File details

Details for the file dotnet_modernize-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dotnet_modernize-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ab661f88181b4d2dfcb6120cf961a70971f8d1fcbfa1854dbc43df50f9617d50
MD5 5a163a5f5990439ad7a7f72cece753d3
BLAKE2b-256 a5e4d4afa50eaa4a31f3f3e41a2e36f4cc36ef8895f3a31d7e794091fcf102b7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page