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'.
中文简介正在准备中。当前显示原文说明。
Use when upgrading dependencies — 'update framework X', 'bump runtime version', or 'upgrade packages'. Covers changelog review, breaking-change detection, and verification. Stack-agnostic.
中文简介正在准备中。当前显示原文说明。
查看安装方法安装前可以查看交给 AI 代理的指令内容。
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.还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
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'.
中文简介正在准备中。当前显示原文说明。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
中文简介正在准备中。当前显示原文说明。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。