πŸ”’ Dependency Audit: Supply Chain Security Scanner

SkillSecurity

Use this skill when the user says 'dependency audit', 'npm audit', 'pip audit', 'cargo audit', 'security vulnerabilities', 'outdated packages', 'supply chain', or needs to scan project dependencies for vulnerabilities, abandoned packages, and upgrade risks. Do NOT use for application-level security or secrets scanning.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the πŸ”’ Dependency Audit: Supply Chain Security Scanner skill

What this skill tells your AI

The instructions your AI receives, as published by cwinvestments/memstack in skills/security/dependency-audit/SKILL.md and read by ahel’s review.

Scan project dependencies for vulnerabilities, outdated packages, abandoned libraries, and supply chain risks with a prioritized upgrade plan.

Activation

When this skill activates, output:

πŸ”’ Dependency Audit: Scanning your dependency tree...

ContextStatus
User says "dependency audit", "npm audit", "scan dependencies"ACTIVE
User wants to check for vulnerable or outdated packagesACTIVE
User mentions CVEs, supply chain security, or abandoned packagesACTIVE
User wants OWASP web app security (not just dependencies)DORMANT: see owasp-top10
User wants secrets scanning (not package vulnerabilities)DORMANT: see secrets-scanner
User wants general code reviewDORMANT: see code-reviewer

Protocol

Step 1: Detect Project Type

Identify the package ecosystem from project files:

File FoundEcosystemAudit CommandOutdated Command
package.jsonnpm/Node.jsnpm audit --jsonnpm outdated --json
package-lock.jsonnpm (locked)npm audit --jsonnpm outdated --json
yarn.lockYarnyarn audit --jsonyarn outdated --json
pnpm-lock.yamlpnpmpnpm audit --jsonpnpm outdated --json
requirements.txtpip/Pythonpip audit --format=jsonpip list --outdated --format=json
Pipfile.lockPipenvpipenv check --output jsonpipenv update --dry-run
pyproject.tomlPoetry/Pythonpip audit --format=jsonpoetry show --outdated
Cargo.tomlRust/Cargocargo audit --jsoncargo outdated --format json
go.modGogovulncheck ./...go list -u -m all
Gemfile.lockRuby/Bundlerbundle audit check --format jsonbundle outdated

If multiple ecosystems detected, audit all of them. Report which ecosystem each finding belongs to.

Step 2: Run Vulnerability Scan

Execute the appropriate audit command and parse results into a unified format:

── VULNERABILITY SCAN ─────────────────────

CVE-2024-XXXXX  πŸ”΄ CRITICAL
  Package: [name]@[version]
  Dependency: Direct / Transitive (via [parent])
  Fixed in: [version]
  Description: [brief description]
  CVSS Score: [score]
  Exploitability: [network/local] [complexity]

CVE-2024-YYYYY  🟑 HIGH
  Package: [name]@[version]
  Dependency: Transitive (via [parent] β†’ [grandparent])
  Fixed in: [version]
  Description: [brief description]
  CVSS Score: [score]
  Exploitability: [network/local] [complexity]

Severity classification:

SeverityCVSS ScoreIconAction
Critical9.0 - 10.0πŸ”΄Fix immediately: potential active exploitation
High7.0 - 8.9🟑Fix within 1 week: significant risk
Medium4.0 - 6.9🟠Fix within 1 month: moderate risk
Low0.1 - 3.9πŸ”΅Fix when convenient: minimal risk

Direct vs transitive priority:

  • Direct dependency: You explicitly installed it, highest priority, easiest to fix
  • Transitive dependency: Pulled in by another package, fix by updating the direct parent
  • If the transitive parent hasn't released a fix, consider overriding with overrides (npm) or resolutions (Yarn)

Step 3: Check for Outdated Packages

Run the outdated command and categorize results:

── OUTDATED PACKAGES ──────────────────────

Package          Current    Latest     Type      Risk
─────────────────────────────────────────────────────
[package-a]      1.2.3      1.2.8      Patch     βœ… Safe, bug fixes only
[package-b]      2.1.0      2.4.0      Minor     βœ… Safe, new features, backward compatible
[package-c]      3.0.0      4.2.1      Major     ⚠️ Breaking, review changelog
[package-d]      1.0.0      1.0.0      Current   βœ… Up to date

Version gap classification:

Gap TypeRiskApproach
Patch (1.2.3 β†’ 1.2.8)Very LowUpdate immediately: bug/security fixes
Minor (2.1.0 β†’ 2.4.0)LowUpdate in batch: new features, backward compatible
Major (3.0.0 β†’ 4.2.1)Medium-HighReview migration guide, test thoroughly
Multiple majors (1.x β†’ 4.x)HighDedicate time, may require code changes

Step 4: Identify Abandoned Packages

Check each dependency for maintenance status:

── ABANDONED PACKAGE CHECK ────────────────

Package          Last Publish    Downloads/wk    Status
──────────────────────────────────────────────────────
[package-x]      3 years ago     12,000          ⚠️ ABANDONED, find alternative
[package-y]      2.5 years ago   800             πŸ”΄ DEAD, replace immediately
[package-z]      6 months ago    250,000         βœ… Active

Abandonment indicators:

  • No npm/PyPI publish in 2+ years
  • No GitHub commits in 1+ year
  • Open issues/PRs with no maintainer response for 6+ months
  • Maintainer has publicly archived the repository
  • Deprecation notice in README or package metadata

For each abandoned package, suggest:

  • Alternative package (actively maintained fork or replacement)
  • Migration effort estimate (drop-in replacement vs API changes)
  • Risk of staying: known unpatched vulnerabilities, compatibility drift

Step 5: Supply Chain Risk Assessment

Check for packages with known supply chain risk factors:

Risk FactorDetection MethodSeverity
TyposquattingPackage name similar to popular packageHigh
Install scriptspreinstall/postinstall scripts in package.jsonMedium
Excessive permissionsPackage requests network/fs access unexpectedlyMedium
Single maintainerOne person controls publishingLow-Medium
Recent ownership transfernpm ownership changed recentlyHigh
Minified source onlyNo readable source code in packageMedium
Unpinned dependenciesUsing * or >= in dependency rangesMedium
── SUPPLY CHAIN RISKS ─────────────────────

[package-a]  ⚠️ Has postinstall script
  Script: "postinstall": "node setup.js"
  Review: [does it fetch remote code? write to fs? safe build step?]

[package-b]  ⚠️ Single maintainer, low download count
  Maintainer: [username]
  Weekly downloads: [count]
  Alternative: [more established package]

Step 6: Generate Upgrade Plan

Create a prioritized upgrade plan in three tiers:

━━━ TIER 1: IMMEDIATE (This Sprint) ━━━━━━
Critical/High vulnerabilities in direct dependencies.
Patch updates with no breaking changes.

1. [package]@[current] β†’ [target]
   Reason: πŸ”΄ CVE-2024-XXXXX (CRITICAL)
   Risk: None, patch update
   Command: npm install [package]@[target]

2. [package]@[current] β†’ [target]
   Reason: 🟑 CVE-2024-YYYYY (HIGH)
   Risk: None, minor update
   Command: npm install [package]@[target]

━━━ TIER 2: PLANNED (Next 2 Weeks) ━━━━━━━
Medium vulnerabilities, minor version updates,
replacing abandoned packages.

3. [package]@[current] β†’ [target]
   Reason: 🟠 CVE-2024-ZZZZZ (MEDIUM) + 8 minor versions behind
   Risk: Low, review changelog for deprecations
   Command: npm install [package]@[target]
   Test: [specific areas to regression test]

4. [package] β†’ [replacement-package]
   Reason: ⚠️ Abandoned (last publish: 2 years ago)
   Risk: Medium, API differences, migration needed
   Migration: [brief migration steps]

━━━ TIER 3: SCHEDULED (Next Quarter) ━━━━━━
Major version upgrades requiring migration effort.

5. [package]@[current] β†’ [target]
   Reason: 3 major versions behind, accumulating tech debt
   Risk: High, breaking changes in v3 and v4
   Migration guide: [URL]
   Estimated effort: [hours/days]
   Test: [comprehensive regression testing required]

Step 7: Override Guidance

When a transitive dependency can't be fixed by updating the direct parent:

npm (overrides in package.json):

{
  "overrides": {
    "vulnerable-package": ">=2.0.1"
  }
}

Yarn (resolutions in package.json):

{
  "resolutions": {
    "vulnerable-package": ">=2.0.1"
  }
}

pnpm (overrides in package.json):

{
  "pnpm": {
    "overrides": {
      "vulnerable-package": ">=2.0.1"
    }
  }
}

Pip (constraint file):

# constraints.txt
vulnerable-package>=2.0.1
pip install -c constraints.txt -r requirements.txt

Caution: Overrides can break compatibility. Always test after applying.

Step 8: CI Integration Recommendation

Recommend automated dependency scanning in CI:

# GitHub Actions example
name: Dependency Audit
on:
  schedule:
    - cron: '0 9 * * 1'  # Weekly Monday 9 AM
  pull_request:
    paths:
      - 'package.json'
      - 'package-lock.json'

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - run: npm audit --audit-level=high
      - run: npm outdated || true  # Don't fail on outdated

Recommended tools for ongoing monitoring:

  • Dependabot (GitHub): Auto-creates PRs for updates
  • Renovate (any platform): More configurable than Dependabot
  • Snyk: Deep vulnerability scanning + fix PRs
  • Socket.dev: Supply chain risk detection

Step 9: Output

Present the complete dependency health report:

━━━ DEPENDENCY HEALTH REPORT ━━━━━━━━━━━━━
Project: [name]
Ecosystem: [npm/pip/cargo/etc.]
Scan date: [date]
Total dependencies: [direct] direct, [transitive] transitive

── VULNERABILITY SUMMARY ──────────────────
πŸ”΄ Critical: [count]
🟑 High:     [count]
🟠 Medium:   [count]
πŸ”΅ Low:      [count]

── VULNERABILITIES ────────────────────────
[detailed CVE list with fix versions]

── OUTDATED PACKAGES ──────────────────────
Patch updates available: [count]
Minor updates available: [count]
Major updates available: [count]

── ABANDONED PACKAGES ─────────────────────
[list with alternatives]

── SUPPLY CHAIN RISKS ─────────────────────
[risk factors found]

── UPGRADE PLAN ───────────────────────────
Tier 1 (Immediate): [count] packages
Tier 2 (Planned):   [count] packages
Tier 3 (Scheduled): [count] packages

── COMMANDS ───────────────────────────────
[copy-paste upgrade commands]

── CI RECOMMENDATION ──────────────────────
[automated scanning setup]

── HEALTH SCORE ───────────────────────────
Score: [X/100]
  Vulnerabilities: [-points per severity]
  Currency: [-points per outdated major]
  Maintenance: [-points per abandoned dep]
  Supply chain: [-points per risk factor]

Health score calculation:

  • Start at 100
  • Critical CVE: -20 each
  • High CVE: -10 each
  • Medium CVE: -5 each
  • Major version behind: -3 each
  • Abandoned dependency: -8 each
  • Supply chain risk: -5 each
  • Minimum score: 0

Inputs

  • Project path (or current directory)
  • Package ecosystem (auto-detected from lockfiles)
  • Severity threshold (default: all)
  • Include dev dependencies? (default: yes)

Outputs

  • Unified vulnerability list with CVE IDs, severity, affected package, and fix version
  • Direct vs transitive dependency classification
  • Outdated packages categorized by version gap type
  • Abandoned package list with alternatives
  • Supply chain risk assessment
  • Three-tier prioritized upgrade plan with commands
  • Override guidance for transitive dependency fixes
  • CI integration config for ongoing monitoring
  • Dependency health score (0-100)

Level History

  • Lv.1: Base: Multi-ecosystem audit (npm, pip, cargo, go, bundler), unified vulnerability format with CVSS severity, direct vs transitive classification, outdated package analysis, abandoned package detection with alternatives, supply chain risk assessment, three-tier upgrade plan, override guidance, CI integration config, health score. (Origin: MemStack v3.2, Mar 2026)

Signals

GitHub stars
419
Forks
44
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
memstack-security-dependency-audit
Source
github.com/cwinvestments/memstack