SBOM Generator Skill
Produce a Software Bill of Materials for a project without adding any dependency
to it. Wraps the workspace's zero-dependency generator (vendored at
scripts/generate-sbom.mjs) and the per-stack ephemeral-runner approach, and adds the
optional quality / scan / VEX / sign layers.
Grounded reference: references/sbom-knowledge.md.
Detailed agent procedure: agents/sbom-generator.md.
Usage
/sbom # SBOM for the current directory (auto-detect stack)
/sbom ./path/to/repo # SBOM for a specific project
/sbom --score # also run sbomqs quality scoring (gate ≥ 7.0)
/sbom --scan # also run a vulnerability scan over the SBOM (Grype/OSV)
/sbom --sign # also create a cosign attestation (asks first; networked)
Hard rules (non-negotiable)
- Ask before touching a repo. One repo at a time; show the plan first.
- Never
npm install(or any manifest-modifying install) to make an SBOM. Use the vendored lockfile reader for npm; ephemeral runners (npx -y,pipx run,go run …@latest, Docker) for everything else. - Never guess a project's stack/lockfile/scripts — read its manifest first.
- SBOMs are written to the project's
sbom/directory and kept out of its bundle. --scanand--signare networked and opt-in — confirm before running.
What it emits
sbom/bom.cdx.json— CycloneDX 1.6sbom/bom.spdx.json— SPDX 2.3 (3.0 only on explicit request — breaking JSON-LD)
Both satisfy the NTIA 7 minimum fields. See the knowledge pack for formats, per-stack tools, regulatory facts (US M-26-05 / EU CRA), VEX (OpenVEX), and signing (cosign v3) — all verified 2026-06-18.
Quick decision: which generator?
| Detected | Generator |
|---|---|
npm package-lock.json (v2/v3) |
vendored scripts/generate-sbom.mjs (zero-dep) |
| pnpm / yarn / no npm lockfile | Syft (syft dir:.) |
| Python / Go / Rust / Maven / .NET | per-stack ephemeral runner (knowledge pack §4) |
| container image / mixed repo | Syft / cdxgen |
Status: v0.2.0 — standalone skill (Option B), made loadable (2026-06-18).
- Install: the loadable copy lives at
.claude/skills/sbom/(recognized location → invocable as/sbom). This directory (sbom-generator/) is the tracked canonical source;.claude/is gitignored, so re-copy after edits:cp -r sbom-generator/{SKILL.md,agents,references,scripts} .claude/skills/sbom/. - Format fixed:
SKILL.md(all caps), valid frontmatter (off-schemainvocation/version/author/licenseremoved;name: sbomdrives/sbom). - npm path verified against a real 787-component project (valid CycloneDX 1.6 + SPDX
2.3, reproducible bytes); license expressions emit as
{expression}; npm workspaces monorepos trigger an explicit under-report warning → route to Syft. - Non-npm stacks rely on ephemeral tools that must be available/fetchable. Not in
marketplace.json(standalone skill); promote to a plugin later if desired.