plugins/pm-engineering/skills/dependency-audit/SKILL.md
Conduct a dependency audit for a project — checking for security vulnerabilities, license compliance issues, outdated packages, and transitive dependency risk. Use when asked to audit dependencies, review package security, check license compliance, assess dependency health, or produce a vulnerability report. Produces a vulnerability findings table, license compliance matrix, update priority matrix, dependency health score, and 30-day remediation plan.
npx skillsauth add mohitagw15856/pm-claude-skills dependency-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Produce a complete dependency audit report for a project — covering security vulnerabilities (with CVE references), license compliance against policy, outdated packages prioritised by risk, transitive dependency risk analysis, and a concrete remediation plan with timeline. A good dependency audit gives the team a clear, prioritised action list — not a raw dump of audit output that no one acts on.
Ask for these if not already provided:
package.json, requirements.txt, go.mod, pom.xml, etc., or provide the audit tool outputEcosystem: [npm / pip / Maven / Go / etc.] Audit date: [Date] Auditor: [Name] Total direct dependencies: [N] Total transitive dependencies: [N] Audit tool(s) used: [npm audit / pip-audit / Snyk / OWASP Dependency-Check / etc.]
| Category | Finding | Risk level | |---|---|---| | Critical vulnerabilities | [N] CVEs requiring immediate action | [Critical / High / Low] | | High vulnerabilities | [N] CVEs — fix within 7 days | [High / Medium] | | License violations | [N] packages with non-compliant licenses | [High / Low] | | Severely outdated packages | [N] packages > 2 major versions behind | [Medium] | | Packages with no active maintenance | [N] packages — no commits in 12+ months | [Medium] | | Overall dependency health score | [Score]/100 | [Red / Amber / Green] |
Scoring methodology: Critical CVEs: −20 each. High CVEs: −10 each. License violations: −15 each. Abandoned packages: −5 each. Maximum deduction: 100. Score ≥80 = Green, 60–79 = Amber, <60 = Red.
Immediate actions required:
| Package | Installed version | Fix version | CVE | Severity | CVSS score | Description | Exploitability |
|---|---|---|---|---|---|---|---|
| [package-name] | [X.Y.Z] | [A.B.C] | [CVE-YYYY-NNNNN] | Critical | [9.x] | [e.g. Prototype pollution via merge function — remote code execution possible] | [Known exploit / PoC available / No known exploit] |
| [package-name] | [X.Y.Z] | [A.B.C] | [CVE-YYYY-NNNNN] | High | [7.x] | [e.g. Path traversal in file serving utility] | [PoC available] |
| [package-name] | [X.Y.Z] | [A.B.C] | [CVE-YYYY-NNNNN] | High | [7.x] | [e.g. Regular expression denial of service (ReDoS)] | [No known exploit] |
| Package | Installed version | Fix version | CVE | Severity | CVSS score | Description | |---|---|---|---|---|---|---| | [package-name] | [X.Y.Z] | [A.B.C] | [CVE-YYYY-NNNNN] | Medium | [5.x] | [Description] | | [package-name] | [X.Y.Z] | [A.B.C] | [CVE-YYYY-NNNNN] | Medium | [4.x] | [Description] |
| Package | Installed version | Fix version | CVE | Severity | Description | |---|---|---|---|---|---| | [package-name] | [X.Y.Z] | [A.B.C] | Low | [Description] |
| Package | CVE | Severity | Recommended mitigation | |---|---|---|---| | [package-name] | [CVE-YYYY-NNNNN] | [High] | [e.g. "Remove this package — alternative: [replacement]"] | | [package-name] | [CVE-YYYY-NNNNN] | [Medium] | [e.g. "Vendor has a fix in progress — track issue [URL]. Mitigate by [X]"] |
| License | Category | Policy | Notes | |---|---|---|---| | MIT | Permissive | Allowed | Attribution required in distributed products | | Apache 2.0 | Permissive | Allowed | Attribution + NOTICE file required | | BSD 2-Clause / 3-Clause | Permissive | Allowed | Attribution required | | ISC | Permissive | Allowed | | | MPL 2.0 | Weak copyleft | Allowed with review | Source disclosure required for modified MPL files only | | LGPL v2 / v3 | Weak copyleft | Allowed with review | Dynamic linking permitted; static linking may require disclosure | | GPL v2 / v3 | Strong copyleft | Restricted | May require open-sourcing the entire codebase — legal review required | | AGPL v3 | Strong copyleft | Restricted | Network use triggers copyleft — especially risky for SaaS | | SSPL | Source available | Prohibited | Not OSI-approved — treat as proprietary | | Proprietary / Commercial | Commercial | Requires contract | Verify license covers current use case and scale | | Unknown / Unlicensed | — | Prohibited | No license = all rights reserved — cannot use legally |
| Package | License | Issue | Recommendation | Risk if unaddressed | |---|---|---|---|---| | [package-name] | GPL v3 | Copyleft — may require open-sourcing this project | Replace with [alternative] or get legal sign-off | Legal / IP risk | | [package-name] | AGPL v3 | Network copyleft — SaaS use triggers disclosure | Replace with [alternative] | Legal / IP risk | | [package-name] | Proprietary | License may not cover current usage tier | Verify license scope with vendor | Contract breach | | [package-name] | Unknown | No license declared in package metadata | Contact maintainer or replace | Cannot use legally |
| License | Package count | Compliance status | |---|---|---| | MIT | [N] | Compliant | | Apache 2.0 | [N] | Compliant | | BSD-3-Clause | [N] | Compliant | | ISC | [N] | Compliant | | MPL 2.0 | [N] | Review required | | GPL v3 | [N] | Non-compliant | | Unknown | [N] | Non-compliant |
| Package | Installed | Latest stable | Versions behind | Last updated | Breaking changes summary | |---|---|---|---|---|---| | [package-name] | [1.x.x] | [3.x.x] | 2 major | [Date] | [e.g. "API redesign in v2; async support added in v3"] | | [package-name] | [0.x.x] | [2.x.x] | 2 major | [Date] | [Summary] |
| Package | Installed | Latest stable | Versions behind | Security fix in newer version? | |---|---|---|---|---| | [package-name] | [2.x.x] | [3.x.x] | 1 major | [Yes — CVE-YYYY-NNNNN / No] | | [package-name] | [4.x.x] | [5.x.x] | 1 major | [No] |
| Package | Installed | Latest | Contains security fix? | |---|---|---|---| | [package-name] | [2.3.1] | [2.3.9] | [Yes / No] | | [package-name] | [1.0.0] | [1.2.1] | [No] |
Transitive (indirect) dependencies carry risk because they are not explicitly managed. These are the highest-risk transitive dependencies in this project:
| Vulnerable transitive dep | Pulled in by | Installed version | Fix available | Action | |---|---|---|---|---| | [transitive-package] | [direct-parent] | [X.Y.Z] | [Yes — upgrade [parent] to [version]] | Upgrade direct dependency [parent] | | [transitive-package] | [direct-parent] | [X.Y.Z] | [No] | Remove [parent] or use [alternative] |
These packages are depended on by many other packages in the project — a vulnerability or deprecation would have cascading effects:
| Package | Depended on by (N packages) | Actively maintained? | Risk level | |---|---|---|---| | [package-name] | [N] | [Yes / No — last commit: date] | [High / Medium] | | [package-name] | [N] | [Yes] | [Medium] |
| Package | Last release | Last commit | Weekly downloads | Recommended alternative | |---|---|---|---|---| | [package-name] | [Date] | [Date] | [N] | [alternative-package] | | [package-name] | [Date] | [Date] | [N] | [Maintained fork: URL] |
Week 1 — Critical vulnerabilities (Days 1–7)
| Action | Owner | Package | Effort | Notes | |---|---|---|---|---| | Upgrade [package] [old] → [new] | [Name] | [package-name] | [30 min] | [No API changes / check breaking changes guide: URL] | | Replace [package] with [alternative] | [Name] | [package-name] | [2 hours] | [No fix available — must replace] | | Patch override for [transitive-dep] | [Name] | [transitive-dep] | [15 min] | [Add resolutions/overrides entry in manifest] |
# Commands for Week 1 upgrades:
# npm
npm install [package]@[target-version]
npm audit fix --force # use with caution — may introduce breaking changes
# pip
pip install --upgrade [package]==[target-version]
pip-audit --fix # if using pip-audit
# Go
go get [module]@[version]
go mod tidy
# Maven
# Update pom.xml version property, then:
mvn versions:use-latest-releases -DallowMajorUpdates=false
mvn dependency:resolve
Week 2 — High vulnerabilities and license violations (Days 8–14)
| Action | Owner | Package | Effort | Notes | |---|---|---|---|---| | Upgrade [package] | [Name] | [package-name] | [1 hour] | | | Replace GPL-licensed [package] | [Name] | [package-name] | [4 hours] | [Alternative: [package]] | | Legal review for [package] license | Legal team | [package-name] | [Legal team SLA] | [Submit via [process]] |
Week 3 — Medium vulnerabilities and abandoned packages (Days 15–21)
| Action | Owner | Package | Effort | Notes | |---|---|---|---|---| | Upgrade [package] | [Name] | [package-name] | [30 min] | | | Replace abandoned [package] | [Name] | [package-name] | [2 hours] | [Maintained fork or alternative: [URL]] |
Week 4 — Process improvements (Days 22–30)
| Action | Owner | Effort | Notes |
|---|---|---|---|
| Enable Dependabot / Renovate for automated PRs | [Name] | [2 hours] | [Config in Section 6] |
| Add npm audit / pip-audit to CI — fail on Critical/High | [Name] | [1 hour] | [Config in Section 6] |
| Document license policy in CONTRIBUTING.md | [Name] | [1 hour] | [Based on policy in Section 2] |
| Schedule next quarterly audit | [Name] | [15 min] | [Add to team calendar] |
Add the following to your CI pipeline to catch vulnerabilities before they merge:
# GitHub Actions — adapt for your CI platform
dependency-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# npm
- name: npm audit
run: npm audit --audit-level=high
# Fails build on High or Critical vulnerabilities
# pip
- name: pip-audit
run: |
pip install pip-audit
pip-audit --requirement requirements.txt --severity high
# Go
- name: govulncheck
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
# .github/dependabot.yml — automated dependency update PRs
version: 2
updates:
- package-ecosystem: "[npm / pip / gomod / maven]"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 10
labels:
- "dependencies"
- "automated"
ignore:
# Ignore major version bumps — review these manually
- dependency-name: "*"
update-types: ["version-update:semver-major"]
# npm — license checker
npx license-checker --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC' \
--failOn 'GPL;AGPL;LGPL'
# Python — pip-licenses
pip install pip-licenses
pip-licenses --allow-only="MIT;Apache Software License;BSD License;ISC License" \
--fail-on="GNU General Public License"
# Go — go-licenses
go install github.com/google/go-licenses@latest
go-licenses check ./... --allowed_licenses=MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause
| Category | Max points | Score | Notes | |---|---|---|---| | No critical vulnerabilities | 30 | [N]/30 | −20 per critical CVE | | No high vulnerabilities | 20 | [N]/20 | −10 per high CVE | | License compliance | 20 | [N]/20 | −15 per violation | | No abandoned packages | 15 | [N]/15 | −5 per abandoned package | | Up-to-date major versions | 10 | [N]/10 | −2 per major version behind | | Automated scanning enabled | 5 | [N]/5 | All-or-nothing | | Total | 100 | [Score]/100 | [Red / Amber / Green] |
development
Build a framework for creating shareable, high-reach social media content. Use when asked to plan viral content, develop a shareable content strategy, create a hook writing system, or build a repeatable process for content that gets shared. Produces a platform-specific viral content framework with hook formulas, content structures, shareability triggers, and a content testing system.
development
Generate article or newsletter thumbnail candidates using the Gemini API from inside Claude Code. Claude reads article copy, proposes composition concepts, writes image generation prompts incorporating brand specs, calls Gemini to generate the images, evaluates the results via computer vision, and returns ranked candidates with rationale. Use when asked to create thumbnails, generate cover images, or produce visual candidates for an article or newsletter.
testing
Flips Claude's default from "find reasons you're right" to "find reasons you're wrong." A genuine thinking partner, not a mirror with grammar. Use before high-stakes decisions, plans, assumptions, or pitches you haven't stress-tested.
development
Scrapes a Substack Notes page and exports engagement data (likes, comments, restacks) to a formatted .xlsx file with conditional formatting and summary stats.