Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/thevibeworks/claude-code-docs/modernize-upliftgit clone --depth 1 https://github.com/thevibeworks/claude-code-docsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/thevibeworks/claude-code-docs/modernize-uplift)<a href="https://agentmods.dev/commands/thevibeworks/claude-code-docs/modernize-uplift"><img src="https://agentmods.dev/badge/commands/thevibeworks/claude-code-docs/modernize-uplift.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00044 | $0.05995 |
| Opus 5 | $0.00022 | $0.02998 |
| Sonnet 5 | $0.00009 | $0.01199 |
| Haiku 4.5 | $0.00004 | $0.00600 |
Grade A, and why
modernize-uplift scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
This is a copy
100% identical to modernize-uplift — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 421 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Uplift legacy/$1 from $2 to $3 — same stack, newer version.
This is not /modernize-transform. There you extract intent and rewrite
idiomatically. Here the code is good; it just needs to run on a newer
runtime. You preserve structure and make the smallest diffs that compile
and behave identically on the target, driven by the known breaking
changes between $2 and $3 — not by re-deriving the business logic.
The potential advantage of a same-stack uplift: if both runtimes execute in this environment, the same test suite can run on both and your equivalence proof becomes a real differential test (run on both, diff the results). That is the strong case — but it is not always available, and the command is explicit about when it is:
- It depends on the stack. .NET can multi-target one test project to both
framework monikers (
<TargetFrameworks>net48;net8.0</TargetFrameworks>), butnet48only executes on Windows/Mono — on a Linux/macOS box or most CI sandboxes the old leg cannot run. Java 8→17 is not one suite over two targets at all — it is the whole build run twice under two JDK toolchains. Python 2→3 cannot import the same un-rewritten module under both interpreters. So "true dual-run" is the best case, common only for .NET-on-Windows. - When both runtimes are not runnable here, equivalence degrades — exactly
like
/modernize-transform— to characterization tests pinned to recorded/expected outputs on the target only. That is fine; it just must be labelled honestly (Step 0.3, Step 7).
Optional 4th arg $4 scopes to projects/modules matching a pattern.
Step 0 — Toolchain & version pinning (fail fast)
- Pin the version pair precisely. "$2 → $3". If either is vague (e.g. ".NET" with no number), stop and ask — the entire delta catalog depends on the exact pair.
- Target runtime — required for dual-run. Verify the target toolchain
builds and tests (
dotnet --version+dotnet testsmoke;mvn/gradle;python3 -V+pytest). - Source runtime — required for the baseline oracle. A same-stack uplift's
strength is that the old version also runs locally. Verify it. If the
source runtime is NOT available here (common in CI/sandboxes — e.g. no
.NET Framework on Linux), say so explicitly: dual-run degrades to
target-only, and equivalence falls back to characterization tests pinned to
recorded/expected outputs (as in
/modernize-transform). Note this in the plan and UPLIFT_NOTES — reviewers must know whether the proof was a true dual-run or target-only. - Test framework on the target — the one question that reshapes the plan.
Answer, before any planning: can the existing test suite execute on $3
as-is? The test framework is a dependency like any other, and one whose
runner/adapter does not support the target runtime is the single most
common reason an uplift's phase order comes out wrong: the test migration
is then a prerequisite, not a leaf, because nothing you migrate can be
validated until the tests that validate it run on $3. Read the framework
and version out of the test manifests and check it against $3 — NUnit 2 or
MSTest v1 cannot execute on modern .NET, JUnit 4 needs the vintage engine
on newer platforms,
nose/unittest2do not run on Python 3, and so on for whatever this stack's test manifests declare. If the answer is no, say so now: it becomes an explicit early phase in the plan (Step 2) and in/modernize-brief, never a trailing one. - Detect the ecosystem migration tool — and distinguish present /
runnable-here / actually-ran. Most of these tools need a working
restore + build (and often network), which a read-only sandbox does not
have, so "installed" ≠ "produced findings". Report all three states and
never fold a tool's findings into the catalog unless it actually ran —
say "coverage lost: needs restore+network, unavailable here" instead.
- .NET:
dotnet upgrade-assistant(loads + restores the project; also applies changes in place — see Step 5). The legacy Portability Analyzer (apiport) analyzes compiled assemblies, not source, and is Windows-centric/archived — treat as optional, not primary. - Java/Spring: OpenRewrite (
mvn rewrite:dryRunis genuinely headless and emits a patch — the most reliable of these; lean on it). - Python:
pyupgrade(source-level, runnable). Note2to3is deprecated and removed in Python 3.13;python-modernizeis abandoned — don't rely on them. - JS/Angular:
ng update(edits in place, needs a clean git tree +node_modules; no real report-only mode).
- .NET:
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 421 lines · 44 tokens per session scan A 7630f9109cd7
modernize-uplift is a command published in the GitHub repository thevibeworks/claude-code-docs (39 stars, last pushed yesterday), licensed MIT. It adds 44 tokens to every session and 5,995 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. It is 100% identical to modernize-uplift, differing in 0 lines, and is treated as a copy.
Other commands, from other repositories
reconcile
Check developer guides for documentation drift against recent code changes.
review
Review proposed ADRs for lifecycle progression — accept implemented decisions, deprecate stale ones, archive trivial ones.
audit
Re-audit accepted ADRs against the codebase — verify each still holds, then amend, supersede, or deprecate the ones that don't.
from-spec
Extract Architecture Decision Records from a completed spec.
curate
Curate research files — inventory by type, identify stale/superseded candidates, update frontmatter status.
create
Create a new Architecture Decision Record.