Przemysław Zalewski

Agent skill · Supply chain

Update every repository, without trusting releases blindly

Dependency updates pile up because each one is a small risk: a breaking change, or a poisoned release from a hijacked account. Update dependencies is a free skill for Claude Code and Codex that does the boring part across all your repositories: it waits a week before taking a release, reads what was actually published, migrates what breaks, runs your checks, and writes down why it did or did not upgrade.

Add to Claude Use in Codex Source on GitHub

/update-dependencies · Version 0.2.0, updated · free, MIT · Works in Claude Code, Codex

Why automatic updates are not enough

New releases are the riskiest ones. Attacks on npm publish poisoned versions of popular packages and count on everyone pulling them within hours. A short wait is the cheapest defense: npm can enforce it with min-release-age, and Dependabot with a cooldown.

A version number says nothing about the code. The skill downloads both versions from the registry, checks them against the published integrity hash, and compares them: new install scripts, native binaries, obfuscated code, new reads of tokens, a different publisher, a lost provenance attestation, a license change.

Tags move. GitHub recommends pinning actions to a full commit SHA, and Docker image tags change under you too. The skill pins both and keeps the version next to the pin so you can still read it.

Bots open a pull request per package and stop at a red build. Majors need someone to read the migration guide and change the code. That is the part the agent does here.

How it works

  1. 1

    You run one command

    /update-dependencies with no arguments goes over every repository it knows. The first run finds your git repositories and what they use: npm projects, Node.js versions, Dockerfiles, GitHub Actions, Python pins, Xcode packages and pods.

  2. 2

    It picks safe targets

    For each dependency: the newest stable release at least 7 days old, never lower than what is installed. Repositories with uncommitted work are skipped, and your holds and notes in ~/dependencies/settings.json are respected.

  3. 3

    It reviews before installing

    npm upgrades are diffed tarball against tarball and checked against the registry hash. Changelogs and migration notes are read for majors. Anything suspicious is held and reported instead of installed.

  4. 4

    It migrates and verifies

    Majors go through codemods and the migration guide. Then your own checks run: typecheck, tests, lint, build. A change that cannot pass is rolled back with the reason.

  5. 5

    It writes everything down

    A write-ahead log makes interrupted runs recoverable. Each repository gets a readable log of what was planned, reviewed, applied, held and verified. Changes stay in your working tree.

What it looks like

Shortened. Example input and output.

Claude Code
/update-dependencies
32 repositories, 89 npm projects, 9 workflows, 3 Dockerfiles
web: vite 6.4.1 → 7.2.2 (major, migrated: config moved to defineConfig), 14 minor and patch updates, checks passed
api: some-lib 2.9.0 → 3.0.0 held: license changed from MIT to BUSL-1.1
site: actions/checkout v4 → 3d3c42e… # v7.0.1, FROM node:22 → node:26.13.0-bookworm-slim@sha256:…
docs: skipped, uncommitted changes
Log: ~/dependencies/repos/<repo>/log.md

What you get

  • Diffs the published tarballs of both versions: install scripts, binaries, obfuscated code, reads of tokens, a new publisher, lost provenance, a license change.
  • Migrates majors with codemods and the migration guide, then runs your checks and rolls back what fails.
  • Pins GitHub Actions to commit SHAs and Docker images to digests.
  • Settings, holds and notes, a write-ahead log and a readable log per repository in ~/dependencies.

Built from a real upgrade of 26 repositories

The skill is what one long day of upgrading my own repositories turned into, on November 3, 2026: React 17 to 19, ESLint 7 to 10, Babel 8, three.js r170 to r186, the Anthropic SDK 1.x, and npm audit down to zero in 24 of 26 repositories.

The same day showed why the checks exist. A plain ^ range pulled wrangler 4.157, released hours earlier, into 22 lockfiles. A vendored SDK turned out to be built from a transitive package one day old. Both rules, a week of waiting for every package and a lockfile check after every install, are now part of every run.

Who it is for

  • Developers with many small repositories: side projects, client sites, tools.
  • Teams that want updates without merging a bot pull request per package.
  • Anyone who wants to see why a release was or was not installed.

Who it is not for

  • Choosing new libraries or redesigning an architecture.
  • Publishing your own packages.
  • Repositories you do not have checks for: without tests, verification is limited to installs and builds.

Install

Pick the place you already work in. Every option installs the same open-source skill. Needs Claude Code or Codex with a shell, Node 20 or later, git, npm 11.10 or later for min‑release‑age, and network access to the package registries. Set GITHUB_TOKEN for a higher GitHub API limit.

Claude Code

Inside a session: add the marketplace, install the pack, reload. The pack also brings the other skills.

in a Claude Code session
/plugin marketplace add Ciunkos/skills
/plugin install ciunkos@ciunkos
/reload-plugins
then
/update-dependencies

Codex

Clone the repository and symlink the skill into ~/.agents/skills. Start a new session and call it with $update-dependencies.

terminal
git clone https://github.com/Ciunkos/skills ~/ciunkos-skills
mkdir -p ~/.agents/skills
ln -s ~/ciunkos-skills/skills/update-dependencies ~/.agents/skills/update-dependencies

Does not run in claude.ai, ChatGPT.

Browse the code · Releases and changes · Update

Done for you

Want this done for you?

I keep client projects up to date the same way: upgrades reviewed before they land, majors migrated, checks green. Or I help you set up tests first, so updates can be verified at all.

Get the next skill by email

One short email when a new skill ships or one changes a lot. No newsletter, no sales sequence.

By clicking Notify me you agree to get these emails. I keep your address until you unsubscribe, with one click in every email, and never share it. Questions or removal: ciunkos@gmail.com. Data controller: Przemysław Zalewski, details in the footer.

Done. The next skill lands in your inbox. Every email has a one‑click unsubscribe.

Prefer GitHub? Watch the repository for releases.

FAQ

Questions

Does it commit or open pull requests?
No. Changes stay in each repository’s working tree, with the log in ~/dependencies. What happens next is up to you.
Can it run on a schedule?
It does not install a scheduler. The README has a prompt for your agent’s own scheduler. A run never waits for input: anything that needs a decision is held and reported.
What does “held” mean?
The upgrade was not installed, and the log says why: a suspicious signal in the release, a license change, a hold in your settings, or a release still inside the 7‑day window.
How do I keep a package on an old version?
Add a hold to ~/dependencies/settings.json, for example "some-lib": { "hold": "<3.0.0", "reason": "3.0 changed the license" }. Notes in plain words work too; the agent reads them before planning.
Does it run install scripts?
No. Every npm command uses --ignore-scripts, and new or changed install scripts in a release are one of the signals that hold an upgrade.
Which ecosystems are supported?
npm, Node.js versions, Dockerfiles, GitHub Actions, Python pins and lock files, and Xcode SwiftPM and CocoaPods. Each one is a detector module, so more can be added.
Does it work in ChatGPT or claude.ai?
No. It needs a shell and your repositories. Use Claude Code or Codex.

In 30 minutes you will know if we are a fit

You bring the problem, I bring the questions. Want a number first? The configurator shows hours, a price range and the start date.

or write to ciunkos@gmail.com

After you book you get a calendar invite. Nothing else to fill in.

My pledge

  • Reply within 24 hours. I reply within 24 hours on working days, personally, not a bot. Weekend messages: by Monday noon.
  • Late means free. If I am late, the first hour of work is free. You do not have to ask.
  • Scope in writing within 24 hours. A free 30‑minute call with no company deck, then the scope and the price in writing within 24 hours. You decide.
  • The person who does the work. You talk to the person who does the work. No sales layer, no handoff.
  • Follow‑up only with news. I follow up only when I have something new for you. Never a “did you see my offer”.
  • Honest “not a fit”. If I am not the right person, I say so on the call and point you to someone who is.

Calls this week · work starts 3 November 2026 · B2B contract · Wrocław, Poland (CET), remote

You own the code, domain and accounts from day one. Nothing is held hostage.