Configures and runs Snyk, a commercial multi-mode scanner: snyk test for SCA (dependency scanning), snyk code test for SAST (code security scanning), snyk container test for container images, snyk iac test for IaC (infrastructure-as-code), snyk monitor for continuous new-vuln alerts; policy file .snyk for ignore + patch. Use when the team has a Snyk license and needs SCA (dependency scanning) or continuous vuln monitoring; for open-source scanning without a Snyk license, prefer osv-scanner.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Per github.com/snyk/snyk, companion subcommands cover adjacent surfaces:
| Subcommand | Surface |
|---|---|
snyk test | SCA (open-source dependencies) |
snyk code test | SAST (proprietary code) |
snyk container test <image> | Container image scanning |
snyk iac test | IaC scanning (Terraform, Kubernetes) |
snyk monitor | Continuous monitoring with new-vuln alerts |
This skill focuses on snyk test for SCA. For SAST coverage,
prefer the OSS-first patterns in semgrep-rules (in the qa-sast plugin);
for container scanning, see trivy-image (in the qa-sbom plugin).
osv-scanner for
cross-DB consensus signal.Per sn-gh:
npm install -g snyk
snyk authThe snyk auth flow opens a browser window; the credential is
stored at ~/.config/configstore/snyk.json. For CI, use
SNYK_TOKEN env var (no snyk auth needed):
export SNYK_TOKEN=$(cat /path/to/snyk-token)
snyk testPer sn-gh: "Run snyk test in a directory containing a
supported package manifest (like package.json or pom.xml)."
snyk test # current dir; auto-detects manifest
snyk test --all-projects # recursive multi-manifest scan
snyk test --org=my-org # explicit org context
snyk test --severity-threshold=high # filter LOW + MEDIUM (less noise)
snyk test --fail-on=upgradable # only fail if upgrade availableCommon output format flags:
snyk test --json # JSON for parsing
snyk test --json-file-output=snyk.json # JSON to file
snyk test --sarif-file-output=snyk.sarif # SARIF for GHAThe JSON / SARIF output feeds downstream aggregation for cross-tool deduplication + prioritization.
snyk monitor for continuous trackingsnyk monitor --org=my-org --project-name=my-appPer sn-gh: "create dependency snapshots and receive alerts about newly disclosed vulnerabilities."
The snapshot lives on snyk.io/app/your-org; new CVEs disclosed against your pinned versions trigger email + Slack alerts (configured in Snyk dashboard).
.snyk policy + false-positive triage (MANDATORY)Suppress false positives through a .snyk policy file at the repo root. Every
per-vuln ignore must include an expires: field - Snyk validates this at
scan time. Layer .snyk ignores (auditable in git) with dashboard ignores
(org-wide) and the --severity-threshold= / --fail-on=upgradable CI filters,
and re-review each ignore quarterly.
Full policy schema, the mandatory justification template, the suppression-layer table, and the re-review cadence: references/snyk-policy-and-triage.md.
jobs:
snyk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: snyk/actions/setup@master
- run: snyk test --severity-threshold=high --json-file-output=snyk.json
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
- run: snyk monitor # snapshot for continuous monitoring
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
if: github.ref == 'refs/heads/main'
- uses: actions/upload-artifact@v4
if: always()
with: { name: snyk-report, path: snyk.json }Per sn-gh: Snyk scans "Open Source (via package managers)", "Application code vulnerabilities", "Container images and Kubernetes applications", and "Infrastructure as Code (Terraform, Kubernetes)."
Auto-detection covers package managers including npm / yarn / pnpm / pip / pipenv / poetry / Maven / Gradle / sbt / Composer / RubyGems / Go modules / Cargo / Hex / NuGet / CocoaPods / Swift Package Manager.
For unsupported / custom package managers, generate an SBOM and
feed via snyk test --file=sbom.cyclonedx.json (post-2024 feature;
verify against current docs).
A team with a Snyk license adds SCA to a mixed npm + Maven monorepo. In CI they
run snyk test --all-projects --severity-threshold=high --json-file-output=snyk.json, which auto-detects both package.json and
pom.xml and reports 3 high-severity findings. One is SNYK-JS-LODASH-567746
in a lodash path that never receives user input. A reviewer verifies the
attack path is unreachable, then adds a .snyk ignore with reason:,
approved-by:, expires: '2026-12-15...', and a re-review-date, so the next
scan passes the --severity-threshold=high gate. snyk monitor runs on main
to snapshot the dependency tree, and the team pairs the run with osv-scanner
for cross-database consensus. The .snyk ignore resurfaces in the quarterly
re-review grouped by re-review-date.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
Run snyk test without --severity-threshold | Noise on first scan; team disables | Start --severity-threshold=high (Step 2) |
.snyk ignore without expires | Snyk policy rejects; OR debt persists forever | Mandatory expires: (Step 4) |
Skip snyk monitor on main branch | Newly-disclosed CVEs against pinned deps go undetected | Add to main-branch CI (Step 5) |
| Run only Snyk; skip OSV | Single-DB blind spots | Pair with osv-scanner (cross-ref) |
| Hardcode SNYK_TOKEN in scripts | Token leak | CI secret + redact (Step 5) |
osv-scanner for OSV.dev consensus.osv-scanner
npm-pip-maven-audit cover
similar ground..snyk policy schema, suppression layers, justification template, re-review cadencesnyk test referenceosv-scanner - open-source SCA alternative