Agent skill

Multi Version Compliance

by nrwl in nrwl/nx

Apply or review multi-version support compliance for first-party Nx plugins.

MITAuto-check: notesTesting & QA

Install Multi Version Compliance

skills CLI
$ npx skills add nrwl/nx --skill multi-version-compliance -a claude-code

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

GitHub CLI
$ gh skill install nrwl/nx multi-version-compliance --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/nrwl/nx.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/multi-version-compliance .claude/skills/multi-version-compliance && 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
multi-version-compliance
GitHub stars
29k
Token cost
~6.1k tokens
SKILL.md length
2,232 words
Files
5 (incl. references)
Skills in repo
21
Repo updated
First seen
Licence
MIT

At a glance

Apply or review multi-version support compliance for first-party Nx plugins.

  • Works in 8 steps: Check Linear MCP availability. If… → Fetch the task.… → Verify shape. Confirm → …
  • Asked to fix multi-version compliance for @nx/X
  • SKILL.md covers What this is, Entry points, Linear-fetching protocol and Mode workflows, plus 4 more sections
  • Calls gh, npx and nx

What it does

Multi Version Compliance is an agent skill from nrwl/nx. Apply or review multi-version support compliance for first-party Nx plugins. Primary entry point: a Linear task ID (NXC-XXXX) from the "Multi-version supported across plugins" milestone — the task carries the resolved support window, findings, and "Needs human decision" items. Falls back to self-discovery when no task exists. Use when asked to "fix multi-version compliance for @nx/X", "do NXC-XXXX", "review this compliance PR", or when working on a branch / PR titled "multi-version support compliance for @nx/X"…

Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/anti-patterns.md`, `references/canonical-shape.md` and `references/examples.md`).

It sits in Testing & QA, covering Project management. The repository describes itself as: The Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time. The licence is MIT.

When your agent uses it

  • Asked to fix multi-version compliance for @nx/X
  • Review this compliance PR
  • Working on a branch / PR titled multi-version support compliance for @nx/X

Example prompts

  • “Multi-version supported across plugins”
  • “Needs human decision”
  • “fix multi-version compliance for @nx/X”
  • “/multi-version-compliance”

Requirements

  • Pre-approved tools (allowed-tools): Bash, Read, Edit, Write, Glob, Grep, Agent, mcp__linear-server__get_issue, mcp__linear-server__list_comments, mcp__linear-server__get_milestone, mcp__linear-server__list_issues

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Check Linear MCP availability. If mcplinear-serverget_issue
  2. Fetch the task. mcplinear-serverget_issue id="NXC-XXXX".
  3. Verify shape. Confirm
  4. Read description sections. Every per-plugin task has
  5. Fetch comments. mcplinear-serverlist_comments issueId="...".
  6. Surface "Needs human decision" as a batch. Restate every decision
  7. Translate findings → code changes. Map each finding to a canonical
  8. Run the A–F checklist against the final code state. The task's

What it can do on your machine

Read from SKILL.md and the folder at commit f214056. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Edit
    • Write
    • Glob
    • Grep
    • Agent
    • mcp__linear-server__get_issue
    • mcp__linear-server__list_comments
    • mcp__linear-server__get_milestone

    …and 1 more on the same allowed-tools line.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • npx
    • nx
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh, npx and git, which can reach the network depending on how they are called.

    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

Multi Version Compliance loads about 6.1k tokens when it runs, and up to ~30k if it reads all its reference files. Until then it costs about 188 tokens; SKILL.md has 2,232 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Edit, Write, Glob, Grep, Agent, mcp__linear-server__get_issue, mcp__linear-server__list_

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 nrwl/nx at commit f214056, republished under its MIT licence (© nrwl). 2,232 words, ~6,053 tokens.

Download SKILL.mdSave it as .claude/skills/multi-version-compliance/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
multi-version-compliance
description
Apply or review multi-version support compliance for first-party Nx plugins. Primary entry point: a Linear task ID (NXC-XXXX) from the "Multi-version supported across plugins" milestone — the task carries the resolved support window, findings, and "Needs human decision" items. Falls back to self-discovery when no task exists. Use when asked to "fix multi-version compliance for @nx/X", "do NXC-XXXX", "review this compliance PR", or when working on a branch / PR titled "multi-version support compliance for @nx/X". Covers the canonical shape (assertSupportedPackageVersion, all-generators-enforce-floor.spec.ts, peer dep alignment, requires-gate auditing, user-pin preservation, executor / inferred-plugin feature gating).
allowed-tools
Bash, Read, Edit, Write, Glob, Grep, Agent, mcp__linear-server__get_issue, mcp__linear-server__list_comments, mcp__linear-server__get_milestone, mcp__linear-server__list_issues
argument-hint
[<NXC-XXXX> | @nx/<plugin> | review #<PR>]

Multi-version compliance for Nx plugins

What this is

The nx migrate --first-party-only flag lets users upgrade Nx without dragging the managed third-party ecosystems (Angular, Cypress, Playwright, Jest, Vitest, ESLint, etc.) along. For that to be safe, every first-party plugin must keep working across its declared support window — not silently fall through to the latest install constants on older workspaces, not silently break on newer ones.

Source-of-truth split:

SourceOwns
Linear milestone "Multi-version supported across plugins" (project NXC-4072)What's wrong per plugin, the resolved support window, open human decisions. Per-plugin tasks NXC-4381..NXC-4410 (P1–P29).
This skillHow to implement the canonical shape, code-level anti-patterns, gotchas, findings doc shape (no-task case).

The skill is the gap-closer: it accepts a Linear task, parses it, drives the fix. When no task exists for the plugin, fix mode runs discovery in Phase 1–2 and produces a findings doc that mirrors a Linear task body — so the user can file it as a new task before proceeding.

Reference PRs (the canonical shape):

  • #35587 — @nx/angular — merged. Set the precedent. Introduced throwForUnsupportedVersion.
  • #35642 — @nx/playwright — merged. Generalized the shared helpers into @nx/devkit/internal. Established executor / runtime feature- gating.
  • #35670 — @nx/cypress — merged. Added excludeGenerators to the parameterized test helper.
  • #35671 — @nx/vitest — open at time of writing. Demonstrates "drop phantom peer-range claim" and "declared floor < effective floor" patterns.

Before citing any PR by number, verify state — these go stale: gh pr view <N> --repo nrwl/nx --json state. Verify any unmerged PR's contents via gh pr diff <N> --repo nrwl/nx.

Entry points

InvocationModeBehavior
multi-version-compliance <NXC-XXXX>Fix (primary)Fetch task, surface findings + decisions in Phase 2, wait for user OK before Phase 3 edits.
multi-version-compliance (no arg)Ask for task IDPrompt for NXC-XXXX.
multi-version-compliance @nx/<plugin> (bare plugin)Fix (task lookup)Look up the per-plugin task in milestone NXC-4072. If found, confirm with user and enter fix mode. If not found, run discovery in Phase 1–2 (rubric against code), present findings, suggest filing as a new task before any edits.
multi-version-compliance review #<N>ReviewFetch PR, derive Linear task from branch name if possible, compare diff vs. task findings (or run pure code-level review if no task).

Stop-after-Phase-2 (audit-equivalent): if you want findings without edits, decline to approve at the end of Phase 2. The skill stops, no branch, no commits.

On a branch matching nxc-NNNN with no explicit arg: before asking the user, suggest "Use NXC-NNNN?" inferred from the branch name.

Linear-fetching protocol

Before any code-level work in Linear-driven mode, the skill MUST:

  1. Check Linear MCP availability. If mcp__linear-server__get_issue isn't available (MCP server not installed / not connected), tell the user and fall through to the no-task discovery path (fix mode Phase 1 step 2). Don't pretend to fetch.
  2. Fetch the task. mcp__linear-server__get_issue id="NXC-XXXX". If the call errors (invalid ID, network), halt and ask the user to verify the ID.
  3. Verify shape. Confirm:
    • Title matches [multi-version][P##] \@nx/<plugin>` — multi-version support compliance(per-plugin) or[multi-version][W#] ...` (cross-cutting). If the pattern doesn't match, halt and ask the user to confirm this is the right task.
    • Status. Done → ask whether re-audit or follow-up. Canceled → halt and ask.
  4. Read description sections. Every per-plugin task has:
    • Plugin: — path, upstream support, peerDep declarations, per-major install map, paired secondaries.
    • Needs human decision — open items blocking implementation.
    • Findings — (high|medium|low) items with [file:line] and a suggested fix per item.
    • Verification checklist — Sections A (Support window declarations) / B (Generator inputs) / C (Generator outputs) / D (Migrations) / E (Runtime) / F (Out-of-window UX).
  5. Fetch comments. mcp__linear-server__list_comments issueId="...". Audits attached as files / linked uploads may carry additional context.
  6. Surface "Needs human decision" as a batch. Restate every decision item in chat. The user can resolve all, defer some, or override. Block until the user has acknowledged the set — don't proceed silently.
  7. Translate findings → code changes. Map each finding to a canonical pattern in references/canonical-shape.md. The Linear task's suggested fix is the authoritative scope; the skill verifies it conforms to the canonical shape and flags any deviation.
  8. Run the A–F checklist against the final code state. The task's checklist is the agreed scope. The skill verifies code-level conformance.

Default to the task's resolved support window. Don't re-derive it from code unless the user explicitly overrides. If the user overrides: restate the new window and confirm before applying.

Don't expand scope beyond the task's Findings without asking. If you spot a new issue mid-fix: stop, present it, ask whether to (a) add it to this PR, (b) defer as a follow-up, or (c) update the Linear task as a comment.

Mode workflows

Fix mode (primary)

Phase 1 — Read.

  1. If a Linear task ID was provided, fetch it per the Linear-fetching protocol. If only a plugin name was provided, look up the per-plugin task in milestone NXC-4072.
  2. No task case. If no task exists for this plugin: run discovery instead — apply the policy ladder for the support window (Rule 1: upstream LTS for Angular/React/ESLint/Next/Expo; Rule 2: N & N-1; widen to existing supported set if larger), inventory the plugin's code against the A–F rubric, find the effective floor by walking imports, classify all results as new findings. The skill is producing audit-quality output for a plugin that wasn't ticketed.
  3. If on a branch matching nxc-NNNN, read recent commits to understand prior scope decisions.
  4. Read references/canonical-shape.md and references/anti-patterns.md.

Phase 2 — Align.

  1. (task case) Surface every "Needs human decision" item from the task as a batch. Wait for resolutions.
  2. (task case) Restate the Findings list with severity tags. Confirm scope.
  3. (no-task case) Surface findings discovered from the rubric inventory + decisions the rubric surfaces (floor raise/drop, peer declarations, optional-vs-required peer, one-sided gates, etc.). Suggest filing them as a new Linear task in milestone NXC-4072 before proceeding to Phase 3.
  4. User OK gate. Wait for explicit "proceed" before Phase 3. Declining stops the skill — no branch, no edits. (This is the audit-equivalent.)

Phase 3 — Implement (per canonical-shape.md).

  1. Branch from master if needed using the repo's nxc-NNNN convention.
  2. Order: any shared-helper extension lands first; plugin changes land after. Commit/PR titling defers to the user's conventions.
  3. For each Finding category, apply the canonical pattern:
    • Section A → peer ranges + version map + install constants. Every third-party package the plugin invokes at runtime (TS import, executor spawning the CLI binary, or inferred-plugin emitting a target with command: '<bin>') gets a peer entry. Default to optional: true via peerDependenciesMeta for gated surfaces (executor opt-in, inferred plugin gated on config file presence). Non-optional peers are reserved for packages every workspace using the plugin needs.
    • Section B → generator entry asserts, keepExistingVersions, fresh-install branch.
    • Section C → templates, schema stubs with runtime throws, version-map coverage.
    • Section D → requires gates per package per AND-semantics; split mixed entries; retain intentional pre-floor entries. Default to bilateral bounds (>=N <M) for cross-major packageJsonUpdates windows. One-sided windows (<N with no lower, >=N with no upper) need a justified reason (legacy cleanup, undefined source, v0→v1 bridge) — record the reason in the findings doc or as a code comment. Migration entries gate on the destination instead, usually >=N alone (checklist below).
    • Section E → executor and inferred-plugin feature gates.
    • Section F → below-floor throw via shared util.
    • Cross-cutting: if the fix changes runtime behavior, update any in-codebase docs (astro-docs/, docs/, inline .md) that describe the changed behavior. Docs that contradict the code are a correctness bug, not a PR-body concern.
  4. If during implementation you spot something not in the task's Findings: stop, surface it, ask whether to (a) add to this PR, (b) defer as a follow-up, or (c) update the Linear task as a comment.

Phase 4 — Tests (same commit as Phase 3 usually).

  1. Add all-generators-enforce-floor.spec.ts — parameterized via assertGeneratorsEnforceVersionFloor. This exercises every generator's floor assert and is the high-value spec.
  2. Footgun: assert calls must be in place in every generator BEFORE running the parameterized spec, or every untouched generator fails and you'll restart.
  3. Optional: a per-plugin assert-supported-<pkg>-version.spec.ts with the 5 canonical cases. The shared assertSupportedPackageVersion already has full coverage in devkit, so this is mostly symmetry across the PR series — skip unless the user asks.

Phase 5 — Verify locally.

  1. npx nx test <plugin> --testPathPattern="all-generators-enforce-floor" (add assert-supported- if you added the optional wrapper spec).
  2. npx nx test <plugin> --testPathPattern="<modified-generator>" per touched generator.
  3. npx nx format.

Phase 6 — Hand off. Code changes complete. The user drives commit/push/PR per their own conventions (loaded globally from ~/.claude/memory/workflow/git/). This skill does not enforce PR title, body, commit shape, or related-issues format.

Show full SKILL.md (837 more words)Show less
Review mode
  1. Fetch PR. gh pr view <N> --repo nrwl/nx and gh pr diff <N> --repo nrwl/nx. For a local branch: git diff master...HEAD.
  2. Derive the Linear task. Branch name nxc-NNNN → NXC-NNNN. If no match: ask the user.
  3. Fetch the task (if derivable). Compare diff vs. task Findings: every Finding addressed; nothing extra without justification. Flag scope drift. If no task and the user has none: skip task-comparison; run pure code-level review against canonical-shape.md and anti-patterns.md.
  4. Code-level checks. Run the "Code-level verification (review-mode lens)" section of canonical-shape.md. Cross-reference anti-patterns.md. For each finding, anchor at file:line and cite which reference PR / file demonstrates the correct pattern. Scope: code, configs, migrations, and in-codebase docs that claim runtime behavior. NOT PR title / body / commit shape — those defer to the user's PR conventions.
  5. Classify each finding.
    • Only two inline categories: [blocker] and [non-blocker]. No "open question," "ask," or other inline tags. Questions for the author surface in the closing "Open questions for author" block, drawn from non-blocker findings — list each question once.
    • Severity is independent of scope-drift. A finding can be both a blocker AND not in the Linear task. Flag it as a blocker in the code-level section AND list it under "in PR but not in Linear task" in scope drift. Don't hedge with "in this PR or follow-up?" — if it's a blocker, the answer is "this PR."
    • Group related non-blockers. When multiple non-blockers describe symptoms of one blocker (e.g., five symptoms of a single version-utils.ts duplication), list them as sub-bullets under the blocker with "(resolved when §X is fixed)" rather than as N separate top-level non-blockers.
    • Be terse on passes. A section with no findings gets a single summary line ("Pass — all 7 generator entries assert at first statement"), not a per-file enumeration. Detail is reserved for blockers and non-blockers. The reviewer's audience skims for actionable items; passing checks should not eat reading budget.
  6. Output. Markdown checklist of blockers / non-blockers anchored at file:line, followed by the structured verdict block from canonical-shape.md §"Verdict template". The verdict block is the skimmable index — produce it, don't substitute a free-form prose summary. Do not post via gh pr review unless the user explicitly asks.

Which references to load (context hygiene)

ModeRequiredOptional
Fixcanonical-shape.md, anti-patterns.mdgotchas.md (effective floor, ecosystem lockstep, cypress inline tree), examples.md (when copying a pattern)
Reviewanti-patterns.md, canonical-shape.md (especially the "Code-level verification" section)gotchas.md (cross-plugin coordination, lockstep), examples.md (when citing)
"What is compliance?" answernoneanswer from SKILL.md alone

References are ~100–500 lines each. Don't pull all of them just because you're invoked. Match the load to the mode.

Critical rules (apply in every mode)

  1. Linear task is the source of truth for scope (ratified decisions and Findings).
    • (a) Don't produce a parallel scope document. The task IS the scope. Fix mode runs against the task as input — drift checks, new findings, and decisions feed back to the task (via comments or as deferred items), not into a competing source of truth.
    • (b) Don't expand a fix beyond the task's Findings without surfacing the new issue.
    • (c) Don't second-guess the task's resolved support window without an explicit user override.
  2. Do not create or duplicate shared helpers. They live in @nx/devkit/internal (assertSupportedPackageVersion, getInstalledPackageVersion, getDeclaredPackageVersion, throwForUnsupportedVersion, normalizeSemver, isNonSemverDistTag) and @nx/devkit/internal-testing-utils (assertGeneratorsEnforceVersionFloor). Reject any local re-implementation (cleanVersion, getInstalled<Pkg>VersionRuntime, private throwBelowFloor, etc.). See canonical-shape.md.
  3. Above-ceiling is silent fallthrough. Do not warn, do not throw, do not branch. Reject throwAboveWindow, warnAboveCeiling, versions() with switch + throw default:. The only throw is below the declared floor.
  4. keepExistingVersions: true is for generators only. Migration generators (src/migrations/) are exempt — their job is to bump. Do not flag missing flags in migration code.
  5. Floor assert is the first statement in the function doing the actual work. Wrapper/internal split (cypress, playwright): in *Internal. Single-function generators (angular): in the function itself. Not conditional, not inside an install branch, not after a tree read.
  6. Phase 1–2 never writes, never branches. Discovery, finding classification, and decision-surfacing happen on the current branch with no edits. Any working artifact (e.g., a findings doc for a no-task case, multi-plugin scratch notes) goes in tmp/ (gitignored) and stays uncommitted. No TRIAGE-REPORT.md / AUDIT.md at repo root. Branch creation and edits start at Phase 3, after the user OK.
  7. PR / commit conventions are out of scope. Title format, body shape, commit-message structure, related-issues handling, push flags, etc. are governed by the user's global memory (pr-creation-shorthand.md, push-conventions.md, explain-before-committing.md, chore-not-fix-non-prod.md). Don't enforce or flag these from this skill — defer to whatever the user's conventions resolve to at PR time.

Findings doc template (Phase 2 output, used when no Linear task exists)

When fix mode hits the no-task case (Phase 1 step 2), produce tmp/<plugin>-findings.md shaped to mirror a Linear task body so the user can file it as a new task in milestone NXC-4072 before proceeding to Phase 3.

For plugins managing multiple primary packages, repeat the install-map / decisions / findings bullets per primary.

md
# @nx/<plugin> — multi-version support compliance findings

> No Linear task in milestone NXC-4072. This doc is filing-ready —
> create the task with this body before proceeding to fix.

## Plugin

- Path: packages/<plugin>
- Upstream support: <official policy if any, else "no formal LTS">
- peerDep declarations: <list>
- Per-major install (`<file>` branches on installed `<package>` major):
  - v<N-1>: <constants>
  - v<N>: <constants> (default)
- Paired secondaries: <list of ecosystem-locked siblings>

## Needs human decision

1. <decision 1 — e.g., raise floor to vN.0.0 vs keep current>
2. <decision 2 — e.g., drop ^1.0.0 from peer (no v1 install lane)>

## Findings

- **(high) <one-line summary>** [file:line]
  _Suggested fix_: <one-line>
- **(medium) ...**
- **(low) ...**

## Verification checklist (A–F)

### A. Support window declarations

- [ ] peerDep ranges match the support window
- [ ] Version map / runtime branching covers every supported major
- [ ] Every third-party package the plugin **invokes at runtime** has a peerDep entry. "Invokes" = TS import/`require` OR executor spawns its CLI binary OR inferred plugin emits a target whose `command` invokes its CLI (look for `externalDependencies: ['<pkg>']` in emitted target inputs). Packages the generator installs for the user to consume independently (ESLint plugins loaded by the user's eslintrc, `@types/*`) don't need peer-declaration.
- [ ] Peers needed only when a user opts into a specific surface (executor opt-in, inferred plugin gated on config file presence, opt-in preset) are declared **optional** via `peerDependenciesMeta: { "<pkg>": { "optional": true } }`. Required-non-optional peers are reserved for packages every workspace using the plugin needs.

### B. Generator inputs

- [ ] Generators don't overwrite installed third-party versions
  - [ ] `addDependenciesToPackageJson` passes `keepExistingVersions=true` or branches on detected version
- [ ] Fresh-install path installs the latest supported version

### C. Generator outputs

- [ ] Templates compile and run on every supported version
- [ ] Generated `project.json` target shape valid on every major
- [ ] Default option values valid on every major
- [ ] Version map covers every managed third-party dep — no gaps
- [ ] Schema accepts union of options; runtime throws when inapplicable

### D. Migrations (migrations.json + packageJsonUpdates)

- [ ] Cross-major `packageJsonUpdates` declare `requires` per bumped package
- [ ] `packageJsonUpdates` `requires` windows are bilateral (`>=N <M`) by default. One-sided ranges (`<N` with no lower, `>=N` with no upper) are intentional (legacy cleanup, undefined source major, v0→v1 bridge) — flagged in "Needs human decision" or noted in the Findings.
- [ ] Migration entries gate on the destination: `requires` evaluates once at collection time against the version the package lands on in this run (installed only when the run does not bump it), so a bound meant as the source window (`>=9 <10` for "migrating from 9") skips whenever the run bumps past the cap (the storybook bug, #33613). Default is `>=N` alone; add an upper bound only when the migration is inapplicable at or above it (`next >=15.0.0 <16.0.0` on the next-15 instructions entry). Semantics: `.claude/skills/author-migration/SKILL.md`, `requires` section.
- [ ] A migration declares a gate only when its behavior depends on the touched package's version; conditions `requires` cannot express (an OR of alternative package names) get an in-body check instead
- [ ] Nx-only migrations have no third-party `requires`
- [ ] No silent gap in `packageJsonUpdates` across the support window

### E. Runtime

- [ ] Executors branch on installed version where behavior diverges
- [ ] Inferred plugin (createNodes/V2) parses configs across every major

### F. Out-of-window UX

- [ ] Below-floor: throws via shared util naming package + installed + floor; no silent fall-through

## Out-of-scope (deferred follow-ups)

- <e.g., consolidate ... across plugins — separate PR>

References

See "Which references to load" near the top. Don't pull all of them.

© nrwl, 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 4 other files (references) in .claude/skills/multi-version-compliance of nrwl/nx.

  • SKILL.md
  • references/anti-patterns.md
  • references/canonical-shape.md
  • references/examples.md
  • references/gotchas.md

Open the folder on GitHubat commit f214056

Compare with similar skills

Multi Version Compliance 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.

Multi Version Compliance compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Multi Version Compliance this skillnrwl/nx29k—~6.1kAutomated safety check: NotesMIT
Add Acceptance Testtalkincode/toughradius691—~827Automated safety check: PassMIT
Software Engineering Standardskitchen-engineer42/pdf2skills134—~921Automated safety check: PassNone
Raytsystem Run Reviewromarayt/raytsystem-public-os150—~523Automated safety check: PassApache-2.0
Uitestmicrosoft/vscode-java-dependency199—~1.3kAutomated safety check: PassMIT
Endgamemicrosoft/copilot-for-eclipse126—~1.4kAutomated safety check: PassMIT

Similar skills

  • Add Acceptance Test

    talkincode/toughradius

    Write CI-executable acceptance/integration tests for protocol or end-to-end changes (TR-F022).

    691 GitHub stars~827 tokensUpdated 5 days ago
    Testing & QAAuto-check passed
  • Software Engineering Standards

    kitchen-engineer42/pdf2skills

    Reference and apply IEEE, ISO/IEC, and other software engineering standards for development, quality assurance, and project management.

    134 GitHub stars~921 tokensUpdated 7 mo ago
    Testing & QAAuto-check passed
  • Raytsystem Run Review

    romarayt/raytsystem-public-os

    Independently review an raytsystem run, diff, contract, test result, or milestone checkpoint and return structured findings.

    150 GitHub stars~523 tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Uitest

    microsoft/vscode-java-dependency

    Official

    Write, update, run, or debug vscode-java-dependency (Project Manager for Java) UI/E2E tests using AutoTest YAML plans.

    199 GitHub stars~1.3k tokensUpdated 5 days ago
    Testing & QAAuto-check passed
  • Endgame

    microsoft/copilot-for-eclipse

    Official

    Orchestrate endgame verification for a GitHub milestone issue.

    126 GitHub stars~1.4k tokensUpdated 8 days ago
    Testing & QAAuto-check passed
  • Software Engineering Standards Reference

    kitchen-engineer42/pdf2skills

    A skill your agent uses when you need to reference, cite, or apply software engineering standards.

    134 GitHub stars~681 tokensUpdated 7 mo ago
    Testing & QAAuto-check passed
  • Monitor CI

    nrwl/nx

    Monitor Nx Cloud CI pipeline and handle self-healing fixes. An agent skill from nrwl/nx.

    29k GitHub starsUsed in 6 repos~4.7k tokens
    Auto-check passed
  • Nx Import

    nrwl/nx

    Import, merge, or combine repositories into an Nx workspace using nx import.

    29k GitHub starsUsed in 6 repos~3.5k tokens
    Auto-check passed
  • Run Nx generators with prioritization for workspace-plugin generators.

    29k GitHub starsUsed in 2 repos~592 tokens
    Auto-check: notes
  • Author or scope a first-party Nx migration. An agent skill from nrwl/nx.

    29k GitHub stars~12k tokensUpdated today
    Auto-check: notes
  • Generate code using nx generators. An agent skill from nrwl/nx.

    29k GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check passed
  • Check modified Nx documentation pages against the astro-docs style guide.

    29k GitHub stars~1.3k tokensUpdated today
    Auto-check passed

Categories

Questions about Multi Version Compliance

What does Multi Version Compliance do?

Apply or review multi-version support compliance for first-party Nx plugins. Multi Version Compliance is an agent skill from nrwl/nx. Apply or review multi-version support compliance for first-party Nx plugins.

When should I use Multi Version Compliance?

Multi Version Compliance fits situations like: asked to fix multi-version compliance for @nx/X; review this compliance PR; working on a branch / PR titled multi-version support compliance for @nx/X.

How do I install Multi Version Compliance in Claude Code?

Run `npx skills add nrwl/nx --skill multi-version-compliance -a claude-code`. Or copy the skill folder (.claude/skills/multi-version-compliance in nrwl/nx) into .claude/skills/multi-version-compliance in your project. Claude Code loads it when a task matches its description.

How do I install Multi Version Compliance in Codex?

Run `npx skills add nrwl/nx --skill multi-version-compliance -a codex`. Or copy the skill folder (.claude/skills/multi-version-compliance in nrwl/nx) into .agents/skills/multi-version-compliance in your project. Codex loads it when a task matches its description.

Can I use Multi Version Compliance 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 nrwl/nx --skill multi-version-compliance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/multi-version-compliance, .gemini/skills/multi-version-compliance, .github/skills/multi-version-compliance and .opencode/skills/multi-version-compliance in your project.

What does Multi Version Compliance need to run?

Going by SKILL.md and its folder, Multi Version Compliance needs the command-line tools its instructions call (gh, npx, nx and git). Its frontmatter pre-approves these tools: Bash, Read, Edit, Write, Glob, Grep, Agent, mcp__linear-server__get_issue, mcp__linear-server__list_comments, mcp__linear-server__get_milestone, mcp__linear-server__list_issues.

Does Multi Version Compliance access the network?

SKILL.md contains no URLs. Its commands use gh, npx and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Multi Version Compliance safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Multi Version Compliance use?

Multi Version Compliance 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 Multi Version Compliance use?

About 6.1k tokens (SKILL.md is roughly 24k 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 24k tokens, read only when the agent opens those files.

What are the alternatives to Multi Version Compliance?

Skills that share tags, products or a category with Multi Version Compliance: Add Acceptance Test (talkincode/toughradius, 691 stars), Software Engineering Standards (kitchen-engineer42/pdf2skills, 134 stars), Raytsystem Run Review (romarayt/raytsystem-public-os, 150 stars) and Uitest (microsoft/vscode-java-dependency, 199 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Multi Version Compliance?

nrwl (a GitHub organization) maintains it in nrwl/nx, which has 29,394 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 8, 2026.

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