upgrade-dependencies
upgrade frontend dependencies, backend dependencies, or mise tools through parallel worker tasks
Files6
View on GitHubSKILL.mdupgrade-dependencies/SKILL.md
GitHubyou are the orchestrator. worker tasks own the dependency changes and PRs
- task: the worker that owns 1 group. codex: a new thread visible in its desktop app. claude code: a desktop session, or a sub-agent as the fallback, per step 3
the prompt names the ecosystem, npm, gem, or mise. its branch file, npm.md, gem.md, or mise.md, holds everything ecosystem-specific for you and the workers; read it and worker.md before step 1
modes:
- default: non-major moves only. a dependency whose only newer stable releases are new majors is major-only: reported, never dispatched
majorin the prompt: major-only dependencies only, each in a task of its own; non-major moves are out of scope
inventory direct dependencies
- inspect the manifests and lockfile per the branch file without changing files
- the desired version is the newest stable release the mode and the version ceilings below allow, whether or not the current constraint allows it
- if a package manager or repository release-age policy blocks the desired version, target the newest earlier stable release in scope that has aged past the cap
- follow the branch file's manifest policy and read the comment above a line before moving it; a comment that pins for a bug means the worker must confirm the bug fixed before moving
complete when every direct dependency is current, a candidate, out of the mode's scope, or non-registry-managed
group candidates
- non-major candidates: the branch file's groups; keep coupled families in 1 group; resolve ambiguity into
everything-else - major candidates: 1 group per dependency. a coupled family (a package and its runtime, plugins, adapters,
*-railswrapper, siblings released in lockstep) is 1 dependency; 2 candidates that constrain each other's target share 1 group
complete when every candidate appears in exactly 1 group
- non-major candidates: the branch file's groups; keep coupled families in 1 group; resolve ambiguity into
dispatch each non-empty group
- create 1 task per group in its own worktree; this skill is the authorisation to spawn them
- codex:
create_threadwith a worktree environment,gpt-6.1-solwith high reasoning.clientThreadIdmeans setup is queued and completes dispatch; retain it and resolve the task when setup finishes, with no retry or fallback for that group - claude code: read and follow /claude-parallel-writers with 1 writer per group. its fallback order replaces the retry and blocking rule below: a group blocks only after every fallback fails
- retain the task for follow-up requests
- after a creation error, reconcile the task list,
git worktree list, branches, and PRs. retry once only after a definitive failure that left no task, PR, commits, or worktree or branch besides the one you created for the dispatch, which the retry reuses; any other failure, a failed retry, or an unknown outcome blocks the group - prompt it with the group, the mode, the exact list as current -> desired version,
worker.md, the branch file, instructions to read and follow /loop,bash bin/ensure-environment, base branchdevelop, "never merge", "own only your branch and PR", and "return the full result plus token-efficient verification commands" - never include a major-only dependency outside
majormode - run tasks in parallel
complete when every non-empty group has a task and every empty group is skipped
wait without micromanaging
- wait until every task finishes or needs attention; read each task's full final answer, not the truncated wait output
- a task that surfaces a product choice is blocked: relay the choice with its context to the user and resume the task with the answer
- enforce the scope ceiling in
worker.md: a task growing beyond it is redirected to report the rest as follow-up work - if the user merges a PR mid-run,
developnow contains it; nothing else changes
complete when every task has finished its loop or reported its whole group as blocked
verify and report
- cross-check each PR is green, mergeable, targets
developdirectly (no stacks), and stays inside its group and the scope ceiling - combine the open PR heads in group order in
playground/worktrees/combinedcreated fromorigin/develop; runbash bin/ensure-environmentthere first, then the branch file's checks - a lockfile conflict between 2 ready PRs is expected and cheap: after the earlier PR merges, the later one is rebased onto
developby its owning task inside its running loop (or by you when the task is finished) with the branch file's lockfile recipe, then diff-only review. no stacks, no rewriting another task's branch, no chasingdevelopadvances that do not conflict. 1 loop per task - list ready PRs, accepted upgrades, and merge order; per PR every non-lockfile change with its reason and every compat setting added; per major PR also the version path, transitive dependencies that moved, call sites changed, and every behaviour change the new major introduces
- list blocked upgrades with cause, evidence, workaround, required work, and retry condition, including the dependency that pins a target when that is the cause
- outside
majormode, list major-only dependencies as current -> latest major for$upgrade-dependencies <ecosystem> major - list non-registry-managed packages and transitive-dependency security advisories the workers saw once, as baseline, since no group owns them
- combine the workers'
cream of the cropfindings as dependency -> item -> where it applies in this codebase; keep the concrete items, do not flatten them into 1 sentence
complete when every dependency is accounted for and every PR is ready to merge in order
- cross-check each PR is green, mergeable, targets
version ceilings
a ceiling caps the desired version in every mode; a dependency at the newest release under its ceiling is current
npm:
node,@types/node24.xlucide-react-v00.x
gem:
ruby3.x- bundler at the lockfile's current
BUNDLED WITH