Installs into .claude/skills of the current project.
Are you the author of Dependency Audit?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/dev-toolbelt-dependency-audit)
---
name: dependency-audit
description: Running the right security scanners for the detected stack — secrets, SAST, deps, images.
---
# Dependency & Secret Audit — Scanner Selection
Purpose: given a repository, decide **which scanners to actually run** and how to report what they find. Detection first — a single-language project should run two or three commands, not nine.
Depth beyond execution lives elsewhere:
| Need | Skill |
|------|-------|
| CVE triage, severity SLAs, update strategy | `skills/security/dependency-vulnerabilities/SKILL.md` |
| Wiring SAST into CI with thresholds | `skills/security/sast-pipeline/SKILL.md` |
| Typosquatting, action pinning, dependency confusion | `skills/security/supply-chain/SKILL.md` |
| Storing and rotating secrets | `skills/security/secret-management/SKILL.md` |
---
## Step 1 — Always Run (Any Repository)
| Goal | Command | Notes |
|------|---------|-------|
| Secrets in git history | `gitleaks detect --source . --log-opts="HEAD~50..HEAD"` | Widen the range for a first full audit (`--log-opts=""`) |
| Secrets, alternative engine | `trufflehog git file://. --since-commit HEAD~50` | Verifies live credentials; slower — use when gitleaks reports candidates |
| Broad SAST | `semgrep --config=auto .` | Language-agnostic; the `auto` ruleset resolves per detected language |
**A secret removed from current code but still present in git history is a live exposure — rotate it.** Deleting the line does not revoke the credential.
---
## Step 2 — Ecosystem Detection → Dependency Scanner
Run only the rows whose signal is present.
| Signal in repo | Ecosystem | Command |
|----------------|-----------|---------|
| `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml` | Node.js | `npm audit --audit-level=high` (or `pnpm audit` / `yarn npm audit`) |
| `composer.lock` | PHP | `composer audit` |
| `requirements.txt`, `poetry.lock`, `Pipfile.lock`, `pyproject.toml` | Python | `pip-audit` |
| `Gemfile.lock` | Ruby | `bundle audit check --update` |
| `go.sum` | Go | `govulncheck ./...` |
| `Cargo.lock` | Rust | `cargo audit` |
| `pom.xml`, `build.gradle` | Java | OWASP Dependency-Check plugin |
| `*.csproj`, `packages.lock.json` | .NET | `dotnet list package --vulnerable` |
| Any of the above, org uses a SaaS scanner | Multi | `snyk test` — only if the project already has Snyk configured |
If a manifest exists without a lockfile, say so in the report: results are approximate and the build is not reproducible.
---
## Step 3 — Language-Specific SAST (Add Only If Present)
| Signal | Scanner | Command |
|--------|---------|---------|
| `*.py` files | Bandit | `bandit -r . -ll` |
| `Dockerfile`, `*.tf`, `*.yaml` manifests | Trivy config scan | `trivy config .` |
| Built container image | Trivy image scan | `trivy image <image>:<tag>` |
| `sonar-project.properties` / `SONAR_TOKEN` | SonarQube SAST | See `skills/devops/sonarqube/SKILL.md` — complements, does not replace, the scanners above |
---
## Step 4 — Handle Missing Tools
- A scanner that is not installed is **not** a passing result. Report it as `NOT RUN` with the install hint; never conclude "no vulnerabilities found" from a missing binary.
- Prefer a runner that needs no install where one exists (`npx`, `uvx`, `docker run`) before asking the user to install anything.
- Never bypass a failing audit with a force/ignore flag to make a build pass.
---
## Reporting Thresholds
| Finding | Report as |
|---------|-----------|
| HIGH or CRITICAL CVE in a **direct** dependency | Flag — blocking |
| CRITICAL CVE in a **transitive** dependency | Flag — blocking |
| HIGH in a transitive dependency | Note it; escalate only if the vulnerable path is reachable |
| MEDIUM / LOW anywhere | Batch into routine updates |
| Any secret found in history | Flag — blocking; rotation required, not just removal |
| Scanner unavailable | `NOT RUN` — explicitly listed, never silently omitted |
Before downgrading any severity, apply the reachability triage in `skills/security/dependency-vulnerabilities/SKILL.md` and record the reasoning.
---
## Output Discipline
- Summarize counts and the blocking findings — do not paste full scanner output into the response.
- Cite package name, installed version, fixed version, and CVE id for each blocking finding.
- Recommend the smallest upgrade that clears the finding; flag major-version bumps as needing manual review.