Skip to content

v0.6.0 — dep-steward is a Claude Code plugin

Choose a tag to compare

@raphaelcm raphaelcm released this 05 Aug 18:41
· 10 commits to main since this release
8a082ee

Install it once, have it everywhere

This repo is now a Claude Code plugin. The two commands below install it from this repo alone — no other repository or registry involved:

/plugin marketplace add raphaelcm/dep-steward
/plugin install dep-steward@dep-steward

That replaces the manual curl into ~/.claude/commands/ the README used to ask for, and adds two commands that did not exist:

Command What it does
/dep-steward:install Preflights the prerequisites in whatever repo you're in, shows the --dry-run plan, then installs.
/dep-steward:summary The former /dep-steward-summary, unchanged — what was auto-merged, what was escalated and why, and an honest time-saved estimate.
/dep-steward:uninstall Removes the pipeline — files, label, and the token from both secret stores (forgetting the second one is the usual half-uninstall).

The install skill is written against how the installer actually behaves

Every interactive prompt in install.sh is guarded by [ -t 0 ], so a non-interactive run never hangs: it uses the flag it was given or stops with a clear message. The skill leans on that rather than on how the script reads.

Two steps genuinely need a browser and cannot be completed by an agent: minting CLAUDE_CODE_OAUTH_TOKEN with claude setup-token, and granting the Claude Code GitHub App. For those the skill hands off with the exact command and names which step needs a person, instead of pretending it can finish.

One copy of the summary command, not two

templates/dep-steward-summary.md moved to skills/summary/SKILL.md — moved, not copied. Two canonical copies of that text would drift, with the plugin serving one and the README's curl fallback serving the other, and nothing would catch it. The README fallback now points at the new path, which works as a standalone command file too.

The body is verbatim. It encodes real pipeline contracts — the AUTOMERGE-DECISION-V1 block, the needs-human-review label, the -minor-patch- branch naming — and rewording it risks drift from what the pipeline actually writes, for no gain.

Version policy

.claude-plugin/plugin.json carries an explicit version0.6.0, this release — rather than relying on git-SHA versioning. The tradeoff stated plainly: users receive a plugin update only when that field moves, so it moves with every release tag from here on.

Testing

New test/plugin.test.mjs pins the invariants that break an install for every user, silently, with nothing else watching: both manifests parse and agree, the marketplace entry's name matches plugin.json and its source is the repo root, every skill carries a description (without one a skill loads but never surfaces), and the README's raw-file links resolve on disk — exactly what rots after moving the summary command. It rides the existing test/*.test.mjs glob, so CI needed no change.

node --test test/*.test.mjs      149 pass, 0 fail
shellcheck -s sh install.sh      clean
claude plugin validate .         Validation passed