update-npm-deps
Update NPM Dependencies
Upgrade npm dependencies intelligently, researching breaking changes for major version updates.
Optional filter: $ARGUMENTS (e.g., react, react axios lodash)
Phase 1: Monorepo Detection
Search for package.json files in the project (excluding node_modules):
find . -name "package.json" -not -path "*/node_modules/*" -not -path "*/.git/*"
- If one found: proceed with that location
- If multiple found: use AskUserQuestion to let user choose which to update (multiSelect allowed)
- If none found: inform user and exit
Phase 2: Discovery
For each selected package.json location:
- Change to the directory containing package.json
- Run npm-check-updates to discover available updates:
ncu --format group
If a filter was provided via $ARGUMENTS:
ncu --format group --filter "$ARGUMENTS"
-
Parse the output to categorize updates:
- Major (breaking changes) - requires migration research
- Minor (new features, backward compatible)
- Patch (bug fixes)
-
Create TodoWrite tasks for each major update package
If no updates are available, inform the user and exit.
Phase 3: User Strategy Selection
Present a summary showing:
- Count and list of major updates (with current → target versions)
- Count of minor updates
- Count of patch updates
Use AskUserQuestion to ask upgrade strategy:
Header: "Strategy" Options:
- Cautious - Upgrade minor/patch first, then major one-by-one with research
- All at once - Research all major changes, then upgrade everything together
- Skip major - Only upgrade minor and patch versions
- Interactive - Ask for each major update individually
Phase 4: Research Breaking Changes
For each package with a major version update:
Step 1: Calculate Version Gap
Identify all major versions between current and target. For example:
react: 17.0.2 → 19.0.0→ research v18 AND v19 breaking changesjest: 27.5.1 → 29.7.0→ research v28 AND v29 breaking changes
Step 2: Research Each Major Version
For each major version in the gap, search for migration documentation:
WebSearch: "[package-name] v[X] migration guide"
WebSearch: "[package-name] v[X] breaking changes"
Common sources:
- GitHub releases:
https://github.com/[org]/[repo]/releases - Official docs migration guides
- Changelog files
Step 3: Extract Key Breaking Changes
From the migration docs, identify:
- API changes (renamed/removed functions)
- Configuration changes
- Peer dependency requirements
- Behavioral changes
- Deprecated features now removed
Step 4: Search Codebase for Affected Code
Use Grep to find usage of deprecated or changed APIs:
Grep: "[deprecated-function-name]"
Grep: "[changed-import-pattern]"
Document which files are affected and what changes are needed.
Phase 5: User Confirmation
For each major update, present:
- Package name and version transition
- Breaking changes found (summarized)
- Files potentially affected (count and list)
Use AskUserQuestion to confirm:
Header: "Confirm" Options:
- Proceed - Continue with upgrades and migrations
- Show details - Display detailed breaking changes for review
- Skip package - Exclude a specific package from upgrade
- Abort - Cancel the upgrade process
If "Show details" selected, display full migration research, then ask again.
Phase 6: Execute Upgrades
For Cautious Strategy
First, upgrade minor and patch only:
ncu -u --target minor
npm install
Run tests to verify:
npm test
If tests fail, stop and inform user before proceeding with major upgrades.
Upgrade Major Versions
For each major version upgrade (or all at once based on strategy):
Single package:
ncu -u --filter [package-name]
npm install
All packages:
ncu -u
npm install
Phase 7: Apply Migrations
For each major update with identified code changes:
Step 1: Run Codemods (if Available)
Some packages provide automated migration tools:
- React:
npx react-codemod [transform-name] - Jest:
npx jest-codemods - Next.js:
npx @next/codemod [transform-name]
Step 2: Manual Code Changes
For changes requiring manual intervention:
- Read the affected file
- Apply the necessary transformation using Edit
- Show the user what changed
Step 3: Update Configuration Files
If configuration format changed:
- Read current config
- Transform to new format
- Write updated config
Phase 8: Verification
Run available verification commands:
npm test
If build script exists:
npm run build
If lint script exists:
npm run lint
Report Results
Summarize:
- Packages upgraded (count)
- Breaking changes addressed (count)
- Files modified (count)
- Test results: pass/fail
- Remaining manual tasks (if any)
Recommend Next Steps
If any migrations could not be automated:
- List specific changes the user needs to review
- Highlight deprecated patterns that need attention
- Note any runtime behavior changes to watch for
Error Handling
ncu Not Available
If ncu is not found, suggest:
npm install -g npm-check-updates
Network Errors During Research
If WebSearch/WebFetch fails:
- Retry with alternative search terms
- Provide manual research links
- Proceed with caution, warning user that migration research may be incomplete
Test Failures After Upgrade
- Stop the upgrade process
- Suggest rollback:
git checkout package.json package-lock.json && npm install - Identify which package likely caused the failure
Migration Research Incomplete
If official migration docs are not found:
- Check npm package page for links
- Search GitHub issues for migration discussions
- Note as "migration research incomplete - proceed with caution"
More from tobihagemann/turbo
find-dead-code
Find dead code using parallel subagent analysis and optional CLI tools, treating code only referenced from tests as dead. Use when the user asks to \"find dead code\", \"find unused code\", \"find unused exports\", \"find unreferenced functions\", \"clean up dead code\", or \"what code is unused\". Analysis-only — does not modify or delete code.
30simplify-code
Run a multi-agent review of changed files for reuse, quality, efficiency, and clarity issues followed by automated fixes. Use when the user asks to \"simplify code\", \"review changed code\", \"check for code reuse\", \"review code quality\", \"review efficiency\", \"simplify changes\", \"clean up code\", \"refactor changes\", or \"run simplify\".
23smoke-test
Launch the app and hands-on verify that it works by interacting with it. Use when the user asks to \"smoke test\", \"test it manually\", \"verify it works\", \"try it out\", \"run a smoke test\", \"check it in the browser\", or \"does it actually work\". Not for unit/integration tests.
22finalize
Run the post-implementation quality assurance workflow including tests, code polishing, review, and commit. Use when the user asks to \"finalize implementation\", \"finalize changes\", \"wrap up implementation\", \"finish up\", \"ready to commit\", or \"run QA workflow\".
22self-improve
Extract lessons from the current session and route them to the appropriate knowledge layer (project AGENTS.md, auto memory, existing skills, or new skills). Use when the user asks to \"self-improve\", \"distill this session\", \"save learnings\", \"update CLAUDE.md with what we learned\", \"capture session insights\", \"remember this for next time\", \"extract lessons\", \"update skills from session\", or \"what did we learn\".
22evaluate-findings
Critically assess external feedback (code reviews, AI reviewers, PR comments) and decide which suggestions to apply using adversarial verification. Use when the user asks to \"evaluate findings\", \"assess review comments\", \"triage review feedback\", \"evaluate review output\", or \"filter false positives\".
22