update-dependencies — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited update-dependencies (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
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.
This skill checks all dependencies in a Java project (Maven or Gradle) for newer stable versions and known security vulnerabilities (CVEs), then updates the build files automatically — applying safe minor/patch updates directly, auto-updating high/critical CVEs to safe versions, and flagging major version bumps and medium/low CVEs for developer review.
pom.xml (Maven) or build.gradle/build.gradle.kts (Gradle) in the project root/update-dependenciesNo arguments needed. Run from your project root.
The skill produces a summary report after processing:
## Dependency Update Summary
### Updated Dependencies (3)
| Dependency | Old Version | New Version | Reason |
|-----------|------------|------------|--------|
| com.fasterxml.jackson.core:jackson-databind | 2.14.0 | 2.14.3 | Newer patch version |
| org.slf4j:slf4j-api | 2.0.5 | 2.0.9 | Newer minor version |
| org.apache.logging.log4j:log4j-core | 2.17.0 | 2.17.2 | CVE-2021-44832 (CVSS 6.6) + newer patch |
### Flagged for Review (1)
| Dependency | Current | Available | Reason |
|-----------|---------|-----------|--------|
| org.springframework:spring-core | 5.3.28 | 6.1.2 | Major version bump |
### CVE Findings (1)
| Dependency | CVE | Severity | CVSS | Status |
|-----------|-----|----------|------|--------|
| log4j-core 2.17.0 | CVE-2021-44832 | Medium | 6.6 | Resolved → 2.17.2 |
### Up to Date: 12 dependencies
### Skipped: 1 (private repository)You are updating dependencies for a Java project. Follow each step below in order.
Scan the project root for build files:
pom.xml (Maven)build.gradle or build.gradle.kts (Gradle)If both Maven and Gradle files exist: Ask the user which build tool to use. Wait for their response before continuing.
If neither exists: Inform the user that no supported build file was found and stop.
Multi-module detection:
<modules> element in the root pom.xml. If present, list all child module directories.settings.gradle or settings.gradle.kts in the project root. If present, extract all include entries to identify subproject directories.Record the build tool type and a list of all build files to process (root + child modules).
Read all detected build files and extract every dependency, plugin, and BOM import. For each, record the groupId, artifactId, current version, and where the version is defined (the version source).
For detailed Maven and Gradle extraction patterns (property references, BOM imports, version catalogs, multi-module traversal, and general extraction rules), see reference/build-patterns.md. Read that file now to understand all supported version source formats before proceeding.
Before looking up individual dependency versions, detect whether the project belongs to a managed ecosystem where dependencies have cross-version compatibility constraints. In these ecosystems, you cannot update dependencies independently — you must respect the compatibility matrix.
#### Detection
Check the extracted dependencies and BOMs for known ecosystem markers:
| Ecosystem | Detection Signal |
|---|---|
| Spring Boot | Parent POM spring-boot-starter-parent or BOM spring-boot-dependencies |
| Spring Cloud | BOM spring-cloud-dependencies or any spring-cloud-* dependency |
| Quarkus | BOM quarkus-bom or quarkus-universe-bom |
| Jakarta EE | BOM jakarta.platform:jakarta.jakartaee-bom |
#### Spring Boot + Spring Cloud Compatibility
If both Spring Boot and Spring Cloud are detected:
https://start.spring.io/actuator/infobom → spring-cloud → mappingscompatibilityRange (Spring Boot version range) and a version (compatible Spring Cloud version)compatibilityRange includes the target Spring Boot versionversion as the target Spring Cloud versionExample: If Spring Boot is being updated to 3.5.x, and the Initializr metadata says Spring Cloud 2024.0.x is compatible with Boot 3.5.x, then update the spring-cloud-dependencies BOM to 2024.0.x.
#### Other Managed Ecosystems
For Quarkus and Jakarta EE BOMs: update the BOM version via maven-metadata.xml, but skip individual version lookups for all dependencies managed by that BOM. The BOM controls their versions.
#### General Rule
When a dependency is managed by an ecosystem BOM, do NOT look up its version individually in Step 4. Only the BOM version should be updated. Mark all BOM-managed dependencies as ecosystem-managed and skip them during version lookup.
For each extracted dependency that is not ecosystem-managed (see Step 3), look up the latest stable version.
Maven Repository Metadata (primary — always up to date):
https://repo1.maven.org/maven2/{groupId with dots replaced by slashes}/{artifactId}/maven-metadata.xmlorg.springframework.boot:spring-boot-starter-parent → https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-parent/maven-metadata.xml<release> tag contains the latest release version<versions><version> list contains all published versions (use this for pre-release filtering if <release> points to a pre-release)Gradle Plugin Portal (for Gradle plugins not found on Maven Central):
https://plugins.gradle.org/plugin/{pluginId}Pre-release version filtering: Check the <release> version against pre-release patterns (case-insensitive, with optional numeric suffix):
-SNAPSHOT-alpha / -Alpha / -ALPHA-beta / -Beta / -BETA-RC / -rc-M (milestone, e.g., -M1, -M2)-CR (candidate release)If the <release> version is a pre-release, walk the <versions> list in reverse order and pick the first version that does NOT match any pre-release pattern.
Version comparison: Parse versions as major.minor.patch (tolerating additional segments like qualifiers):
latestMajor > currentMajor → classify as major updatelatestMinor > currentMinor (same major) → classify as minor updatelatestPatch > currentPatch (same major.minor) → classify as patch update20230301) → classify as unknown and flag for reviewRecord for each dependency: latestStableVersion, updateType (major/minor/patch/none/unknown).
For each dependency, check the current version for known security vulnerabilities.
OSV.dev API:
https://api.osv.dev/v1/query with body: {
"version": "<currentVersion>",
"package": {
"name": "<groupId>:<artifactId>",
"ecosystem": "Maven"
}
}CVE-2021-44228, GHSA-xxxx)severity[].score (look for CVSS_V3 type first, fall back to CVSS_V2)affected[].ranges[].events[] where type is FIXEDsummary or details fieldIf the API returns no vulnerabilities, the dependency is clean for this version.
If the API call fails (network error, timeout), report the dependency as "CVE check failed" and continue processing other dependencies.
For each dependency that will be updated (has a newer minor/patch version, or a CVE-driven update), check the target (latest stable) version for CVEs using the same OSV.dev API query but with the target version.
Decision logic based on target version CVE results:
For each dependency, apply this decision matrix:
| Condition | Action |
|---|---|
| Newer minor/patch version, no CVE on current or target | Auto-update to latest stable |
| Newer major version, no CVE | Flag for review — do NOT auto-update |
| Current version has CVE with CVSS >= 7.0, target is clean | Auto-update to latest safe version |
| Current version has CVE with CVSS >= 7.0, target also has high/critical CVE | Flag for review — warn "no safe version available" |
| Current version has CVE with CVSS >= 7.0, target has only medium/low CVE | Auto-update but note remaining CVE in report |
| Current version has CVE with CVSS < 7.0, no version update needed | Flag for review — medium/low CVE, inform developer |
| Major version bump AND current has high/critical CVE, target is clean | Auto-update — security overrides major-bump caution |
| Private/unresolvable dependency (not found on Maven Central) | Skip and report separately |
| Already at latest stable version, no CVE | Report as up to date |
| Already at latest stable version, has CVE | Flag for review — warn "current version is latest but has known CVE" |
| Malformed version string | Skip and report separately |
| Version lookup failed (network error) | Skip and report separately |
For each dependency marked for auto-update, edit the build file to change the version.
Critical rules:
ext variable, version catalog entry, or BOM version. Do NOT edit ${...} reference sites or individual dependency declarations that use a shared property.spring.version), update the property once. Do not make duplicate edits.After applying all updates, verify the project still compiles and tests pass. This step is mandatory — never skip it.
1. Run compilation:
mvn compile -q (quiet mode to reduce noise)./gradlew compileJava --quiet (or gradlew.bat on Windows)2. If compilation succeeds, run tests:
mvn test -q./gradlew test --quiet3. If compilation OR tests fail:
4. If compilation and tests pass: All updates are confirmed safe. Proceed to the summary report.
Note: If the project did not compile or pass tests before the skill ran (pre-existing failures), inform the user and still proceed with the report — but note that pre-existing build issues were detected.
After all updates are verified (or rolled back), output a formatted summary report with these sections:
#### Section 1: Updated Dependencies List all dependencies that were auto-updated.
### Updated Dependencies ({count})
| Dependency | Old Version | New Version | Reason |
|-----------|------------|------------|--------|
| groupId:artifactId | x.y.z | x.y.w | Newer patch/minor version |If no dependencies were updated, show: ### Updated Dependencies: None
#### Section 2: Flagged for Review List all dependencies flagged for developer review.
### Flagged for Review ({count})
| Dependency | Current | Available | Reason |
|-----------|---------|-----------|--------|
| groupId:artifactId | x.y.z | a.b.c | Major version bump / Medium CVE / No safe version / Build failure (reverted) |If none flagged, show: ### Flagged for Review: None
#### Section 3: CVE Findings List all CVEs found across all dependencies.
### CVE Findings ({count})
| Dependency | CVE | Severity | CVSS | Status |
|-----------|-----|----------|------|--------|
| artifactId x.y.z | CVE-XXXX-XXXXX | High | 8.1 | Resolved → a.b.c / Flagged / No safe version |If no CVEs found, show: ### CVE Findings: None
#### Section 4: Skipped List dependencies that could not be processed.
### Skipped ({count})
- `groupId:artifactId` — reason (private repository / lookup failure / malformed version)If none skipped, show: ### Skipped: None
#### Section 5: Up to Date Count of dependencies already at the latest stable version with no CVEs.
### Up to Date: {count} dependenciesNow detect the build tool and begin processing dependencies for this project.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.