gen-dependency-updater — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited gen-dependency-updater (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Wraps bin/gen-dependency-updater.sh. Emits a Dependabot or Renovate config; preview-by-default; idempotent on apply.
config wired up.
template defaults shift with each snapshot_version).
npm install, pip install -U, cargo update, etc.
PR diff with them; this skill is for config generation only.
Renovate runs anywhere but its app installation is out of scope for this skill.
Default to dependabot when:
gh-integration assumption).no app to install).
Default to renovate when:
package rules are richer than Dependabot's groups).
When in doubt, ask:
"Dependabot is GitHub-native and zero-install — recommended for most. Renovate is more configurable but requires installing the Renovate GitHub App. Which do you want?"
Read the StackDescriptor (from bin/detect-stack.sh) and map:
| Stack hint | Ecosystem(s) |
|---|---|
primary_language=typescript / javascript | npm |
primary_language=python | pip |
primary_language=go | gomod |
primary_language=rust | cargo |
primary_language=ruby | bundler |
primary_language=php | composer |
primary_language=java (Maven) | maven |
primary_language=java (Gradle) / kotlin | gradle |
primary_language=dart | pub |
primary_language=csharp / dotnet | nuget |
primary_language=elixir | mix (v1.10+) |
primary_language=swift | swift |
Dockerfile present | docker (in addition to language ecosystem) |
.github/workflows/ present | github-actions (always recommended) |
Always include github-actions even when the user didn't ask — it keeps the SAST workflow pins current.
For monorepos (workspaces resolved by bin/resolve-workspace-configs.sh), emit one --ecosystem per workspace with the workspace path as --directory. Dependabot doesn't auto-walk; one entry per manifest is mandatory.
Always preview first. Even if the user said "just do it", show the rendered config and wait for confirmation:
bin/gen-dependency-updater.sh --updater dependabot --ecosystem npm --ecosystem github-actionsThen on confirmation:
bin/gen-dependency-updater.sh --updater dependabot \
--ecosystem npm --ecosystem github-actions \
--target . --applyIf the destination file already exists and matches: log "unchanged" and exit. If it differs: print diff, exit 3, prompt the user before re-running with --force-overwrite.
.github/dependabot.yml (Dependabot)renovate.json (Renovate, at repo root)Both files include a comment header tagging the nyann version that generated them, so a future operator can tell when to regenerate.
CVEs sit. Weekly balances responsiveness vs. PR-fatigue.
ecosystem (review-friendly). Majors stay separate because they often need breaking-change review regardless of patch size.
high-velocity repos.
automated lets you optthese out of expensive CI matrices via label filters.
Override any of these via the corresponding flags.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.