Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Use when upgrading dependencies — 'update framework X', 'bump runtime version', or 'upgrade packages'. Covers changelog review, breaking-change detection, and verification. Stack-agnostic.
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
Use this skill when upgrading project dependencies on any stack — Composer (PHP), npm / pnpm / yarn (JS/TS), pip / poetry / uv (Python), go.mod (Go), Cargo (Rust), or any other language-level package manager.
Do NOT use when:
Before upgrading:
NEVER NAME AN EDIT SITE BEFORE ASKING WHERE THE VERSION IS DECLARED.
IN A CATALOG WORKSPACE THE MEMBER MANIFEST IS THE WRONG FILE:
THE VERSION IS ONE ROOT LINE WITH N REFERENTS.
A member package.json is the declaration site in an ordinary repository and
not in a workspace using a catalog. There, the member reads catalog: and
the range lives once in the workspace definition — editing the member either
does nothing or silently diverges from the catalog.
Ask in this order, and stop at the first that answers:
pnpm-workspace.yaml catalogs: /
catalog:, or the equivalent in another manager's workspace definition. If
the member's range starts with catalog:, this is the edit site. Name the
catalog (default included) in the guidance, not the member.overrides / resolutions / pnpm.overrides. A
member edit under one of these is overridden at install time.A repository with no catalog and no root pin behaves exactly as before; this step adds a lookup, not a change of default.
Categorize changes needed:
| Category | Action |
|---|---|
| No breaking changes | Upgrade directly |
| Deprecation warnings | Upgrade, then fix deprecations |
| Breaking changes (small) | Fix code, then upgrade |
| Breaking changes (large) | Create a roadmap, upgrade in steps |
| Peer dependency conflicts | Resolve conflicts before upgrading |
# Check outdated packages
composer outdated
# Upgrade a specific package
composer update vendor/package
# Upgrade with version constraint change
composer require vendor/package:^3.0
# Dry-run to see what would change
composer update vendor/package --dry-run
# Check outdated packages
npm outdated
# Upgrade a specific package
npm update package-name
# Upgrade to a new major version
npm install package-name@latest
# Check for vulnerabilities
npm audit
# Check outdated packages
pip list --outdated # pip
poetry show --outdated # poetry
uv pip list --outdated # uv
# Upgrade a specific package (same shape for composer require / npm install pkg@latest)
pip install --upgrade package-name
poetry update package-name
uv pip install --upgrade package-name
# Check for vulnerabilities
pip-audit # via pip-audit
safety check # via safety
# List available updates
go list -u -m all
# Upgrade a specific module
go get example.com/pkg@latest
go get example.com/pkg@v1.2.3
# Tidy after upgrade
go mod tidy
# Check for known vulnerabilities
govulncheck ./...
# Check outdated
cargo outdated # requires cargo-outdated
# Upgrade
cargo update -p crate-name
cargo add crate-name@1.2 # edition-aware add
# Audit
cargo audit # requires cargo-audit
After upgrading, run the project's full verification pipeline. The exact commands depend on the stack — resolve via the project's Taskfile.yml, package.json scripts, composer.json scripts, Makefile, or the quality-tools skill.
| Stack | Type-check | Lint / autofix | Tests |
|---|---|---|---|
| PHP / Laravel | vendor/bin/phpstan analyse | vendor/bin/rector process + vendor/bin/ecs check --fix | php artisan test (or vendor/bin/pest) |
| TypeScript | tsc --noEmit | eslint --fix + prettier --write | pnpm test (or vitest run, jest) |
| Python | mypy / pyright | ruff check --fix + ruff format | pytest |
| Go | go vet ./... | golangci-lint run --fix | go test ./... |
| Rust | cargo check | cargo clippy --fix + cargo fmt | cargo test |
Re-run the type-checker after any auto-fixer that can rewrite types (Rector for PHP, eslint --fix for TS).
chore: upgrade vendor/package from 2.x to 3.xWhen upgrading multiple packages:
laravel/framework + laravel/*; @nestjs/core + @nestjs/*; react + react-dom; next + @next/*).| Pitfall | Prevention |
|---|---|
| Upgrading without reading changelog | Always read the changelog first |
| Upgrading all packages at once | One package at a time (or tightly coupled groups) |
Trusting composer update blindly | Use --dry-run first, review changes |
| Ignoring deprecation warnings | Fix deprecations before they become errors |
| Skipping tests after upgrade | Full test suite + project type-checker (PHPStan / tsc / mypy / go vet / cargo check) after every upgrade |
| Lock file conflicts | Coordinate upgrades with the team |
| Constraint | Meaning | When to use |
|---|---|---|
^2.0 | >=2.0.0 <3.0.0 | Default — allows minor + patch updates |
~2.1 | >=2.1.0 <2.2.0 | Strict — allows only patch updates |
2.1.* | >=2.1.0 <2.2.0 | Same as ~2.1 |
>=2.0 <2.5 | Explicit range | When you know specific versions work |
dev-main | Latest commit | Never in production — only for development |
For security patches:
composer audit / npm audit regularly.Before adding a new dependency (not just upgrading), run a security audit:
# Check for known vulnerabilities in current dependencies
composer audit
# After adding a new package, re-check
composer require vendor/new-package
composer audit
# Check before install
npm audit
# After adding, re-check
npm install new-package
npm audit
| Check | How | Why |
|---|---|---|
| Known CVEs | composer audit / npm audit | Direct vulnerabilities |
| Maintenance status | GitHub: last commit, open issues | Abandoned packages are a risk |
| Dependency tree | composer show -t vendor/pkg / npm ls new-package | Transitive dependencies may conflict |
| License compatibility | composer licenses / check package.json | Legal compliance |
| Bundle size (npm) | npx bundlephobia new-package | Impact on frontend bundle |
When composer require or npm install fails with conflicts:
composer why vendor/conflicting-pkg.--dry-run first — composer require vendor/pkg --dry-run.--ignore-platform-reqs in production — only for investigation.CVE scanning (above) catches known-vulnerable versions. It does not catch a compromised update: a trusted package with a legitimate history ships a normal-looking version bump that quietly adds data-exfiltration or other harmful behavior. This is how the biggest supply-chain attacks landed — event-stream (wallet stealer as a new transitive dep), ua-parser-js (preinstall miner + credential stealer), @solana/web3.js (key exfil hidden inside expected network calls), chalk/debug + 16 (browser crypto-drainer, 2B weekly downloads), the self-propagating Shai-Hulud worm (added a .github/workflows + secret-scanning postinstall), xz-utils (backdoor in the released tarball, not the git repo). Routine updates slip through because the version looks normal and install runs scripts across the whole transitive tree silently — this is the exact lethal-trifecta-guard egress shape.
Run this audit during/after any add or upgrade, then surface findings to the user and hold pending confirmation (per active-remediation — a live supply-chain risk is surfaced, never silently accepted):
npm install --ignore-scripts (npm v12 defaults to this), composer install --no-scripts, pip install --only-binary :all: (wheels only — no sdist build code) — so install-time code (the #1 RCE vector) cannot run before inspection.scripts block (any newly-added pre/post/install hook), the dependency tree (any new transitive dependency), and — where feasible — the published tarball vs the git source (xz hid in the tarball).fetch/net/dns/http), child_process/shell, env/secret/credential reads, filesystem writes, obfuscated/minified blobs, a .github/workflows file? Use socket / guarddog <eco> scan <pkg>@<ver> if available; else read the delta.npm audit signatures (flag a dep that had provenance and lost it — a hallmark of a token-theft publish); osv-scanner --lockfile=… and the GitHub Advisory / Socket / Snyk malware feeds against the newly-resolved versions.fix-fresh: run steps 1–5 before installing it, not after. Any change under .claude/, .vscode/, .cursor/ or .github/workflows/, or to an install script, in the diff of a dependency update stops the update — a 2026 worm persisted through exactly such a session-start hook while disguised as "chore: update dependencies".Surface to the user any: new install script · new transitive dep · new network endpoint / secret read · obfuscated blob · lost provenance · advisory/malware hit — with the version delta and the purpose-vs-behavior verdict, and hold the update until they decide. Never auto-accept a bump that introduced an unexplained capability.
Entered from /audit deps fix <id> or a finding the user names. The goal is a
fix the owner can merge, not a plan: smallest change, right place, proven by the
source that reported it.
Plan and route — agent-config audit:deps fix <id> prints the route
(routing table below), the branch and PR title, the smallest fixing change,
and for a runtime every pinning file with its edit plus an ops checklist. It
claims the finding: a second session sees the open fix and joins it instead
of starting another.
| Situation | Route |
|---|---|
| the current branch introduced the dependency, or the user says "here" | this branch, its own fix(security): … commit |
| an open bot PR already moves this dependency | complete that PR |
| trunk, clean tree | a new security/… branch in this checkout |
| a feature branch is in progress | a separate worktree from fresh trunk, its own branch and PR — the fix travels alone; if the feature changes the same lockfile, offer it a rebase after the merge |
Choosing "separate worktree" in the offer is the explicit ask
using-git-worktrees requires; register it (agent-config worktree:cleanup register <path> --purpose=security-fix) so its removal after the merge is
not forgotten.
Build the smallest fix — inside the current constraint first
(npm update <pkg> --ignore-scripts, an overrides entry for a
transitive fix, composer update vendor/pkg --no-scripts --no-plugins); a constraint change only
when the fixing version is outside it; a new major only with a stated
compatibility analysis; never npm audit fix --force. A runtime fix changes
every file that pins it in one commit. Run the post-update audit above,
including step 6.
Prove it — agent-config audit:deps verify <id>: the source that reported
the finding must stop reporting it on this branch. fix-failed means the hole
is still open — say so; unverifiable means the source did not answer — say
that too. Then the project's tests and static checks. A fix that leaves the
advisory open or breaks a test is reported as exactly that, never as done.
Open the PR — agent-config audit:deps pr-body <id> --tests=passed
prints the body; its After field is what verify recorded; a library adds
--release=<current version> for the patch-release draft. Security fixes are
never mixed with unrelated work. Stop before tag and publish.
Hand over — watch CI with agent-config ci:settle <pr>, fix what the fix
broke, report "ready to merge". Merge is the owner's, or /pr:merge under the
owner's instruction; under worktrees.cleanup: auto the merge removes the fix
worktree. Afterwards agent-config audit:deps track follows it from
fixed-in-trunk to fixed-released to fixed-deployed; "merged but not
deployed" after 24 h stays in the session notice.
No fix exists — offer a mitigation (a configuration change, a disabled
feature, a pinned-back version where that is safe) and record it with
agent-config audit:deps mitigate <id> --note="…"; it stays open and reopens
the moment a refresh reports a fix.
fixed-in-branch / fix-failed / unverifiable), and the PR or the reason there is noneaudit for CVEs.audit (CVE) ≠ malware scan. npm/composer audit only knows published vulnerabilities; a fresh compromised version has no CVE yet. The capability/behavior diff + purpose-vs-behavior check is what catches zero-hour malware.composer update, npm update, poetry update).composer.lock or package-lock.json.dev-* versions in production branches.No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
The English summary is being prepared. Showing the original description.
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
The English summary is being prepared. Showing the original description.
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
The English summary is being prepared. Showing the original description.
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
The English summary is being prepared. Showing the original description.
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
The English summary is being prepared. Showing the original description.