Claude Skill

supply-chain-audit

Software supply chain audit — dependencies (CVEs, maintenance, licenses, transitive risk), build/CI integrity (SHA-pinned actions, lockfile, CI-only release), artifact integrity (checksums, signing, SBOM). Triggers on: "/supply-chain-audit", "supply-chain-audit", "dependency audi

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download hetcreep-coalmine-skills_supply-chain-audit-85306d7.zip · 2 KB
Part of hetcreep/coalmine — 18 skills

Install

skills CLI npx skills add https://github.com/TheColliery/CoalMine/tree/main/skills/supply-chain-audit
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install hetcreep-coalmine@llmmart
Git git clone https://github.com/TheColliery/CoalMine.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole hetcreep/coalmine collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Supply-Chain Audit

Audit what the project trusts: deps, build pipeline, shipped artifact. Report; do NOT change deps unless asked.

1. Dependencies

  • Scope — honor .coalmine.json packageManifests if set: scan exactly those manifest/lockfile paths; else infer by inspecting the repo.
  • CVEs — run ecosystem auditor; cross-check every hit in GHSA/OSV/NVD. Cite advisory ID + affected range + fixed version. (Invoke source-grounding — never from memory.)
  • Maintenance — last release, commit recency, bus-factor, archived/deprecated flag.
  • License — flag copyleft inside permissive project, missing/unknown license.
  • Transitive — full tree; name the parent to bump for a transitive fix.
  • Behavior — phone home? install scripts? unexpected egress?

2. Build / CI

  • CI-only release builds?
  • Actions pinned to commit SHA (not floating tag)?
  • Lockfile committed + enforced in CI?
  • Minimal token scope? No pull_request_target?

3. Artifact

  • SHA-256 checksums published for every binary?
  • Signed (Authenticode/GPG)? Gap documented honestly?
  • SBOM generated?
  • User can verify before running?

Tooling

Per-ecosystem vuln/license/outdated commands + offline fallback: read references/tooling.md when selecting scanners.

Discipline

  • Ground every CVE/fixed-version in an advisory. Never from memory.
  • Don't auto-change deps — report + recommend; user decides (bumps break builds).
  • State what was NOT scanned. Blocked network scans → lockfile inspection fallback (see references/tooling.md), mark live checks N-A.

Fix mode (choice-gated)

After the report, present via ask_question:

  • Pin safe now — commit already-present unchanged lockfile, pin CI action to current SHA, add missing checksum step. Each: checkpoint → apply → verify.
  • Let me pick — user-selected fixes only.
  • Report only — change nothing.

NEVER auto-fix: dep version bump, lockfile regen (re-resolves entire transitive tree).

Grants & denials (CLASSIFY-BLOCK)

class step it powers grant on denial
read scan manifests/lockfiles; run the ecosystem auditor Read·Grep·Glob·Bash (read-only) refuse that manifest, name it in "Not scanned" — never a clean bill
write Fix mode's pin/commit, incl. checkpoint → apply → verify Edit·Write·Bash (checkpoint/verify need exec) report the pin as NOT applied AND the checkpoint/verify as NOT available, never claim done
network GHSA/OSV/NVD cross-check WebSearch·WebFetch (or delegated to source-grounding) ⚠️ unverified: check [advisory ID]

Output

| package | direct/transitive | issue | severity | advisory | fixed-in | action | Build+artifact checklist · Summary (counts + top fixes) · Not scanned

For ReportFindings: file = the manifest/lockfile path that named the package (packageManifests, or the inferred one); line is best-effort (the pin/version line if easily found) or omitted and named imprecise per the shared reporting rail — never fabricate a line.

Files (coalmine)
  • references
    • tooling.md 823 B
      <!-- coalmine: verified 2026-06-12 · revalidate 90d · definition file for supply-chain-audit -->
      # Supply-chain audit — per-ecosystem tooling
      
      | Ecosystem | vuln | license | outdated |
      |---|---|---|---|
      | .NET | Dependabot / OSV (packages.config → no `--vulnerable`) | clearlydefined | `dotnet list package --outdated` |
      | npm | `npm audit` | `license-checker` | `npm outdated` |
      | Python | `pip-audit` | `pip-licenses` | `pip list --outdated` |
      | Rust | `cargo audit` (RustSec) | `cargo-deny` | `cargo outdated` |
      | Go | `govulncheck` | `go-licenses` | `go list -u -m all` |
      
      Offline fallback: when registry/advisory queries are blocked, inspect committed lockfiles (`package-lock.json`, `pnpm-lock.yaml`, `Cargo.lock`, …) and any locally stored Dependabot logs / GitHub Security Alerts; mark the live checks N-A.
      
  • skill-meta.json 168 B
    { "lightIntent": "Single-section check, spot audit", "standardIntent": "Multi-section balanced audit", "heavyIntent": "Full 3-section audit + adversarial CVE verify" }
    
  • SKILL.md 3.6 KB
    ---
    name: supply-chain-audit
    description: >-
      Software supply chain audit — dependencies (CVEs, maintenance, licenses, transitive risk), build/CI integrity (SHA-pinned actions, lockfile, CI-only release), artifact integrity (checksums, signing, SBOM). Triggers on: "/supply-chain-audit", "supply-chain-audit", "dependency audit". Run before adding a dep, before a release, or for periodic review. Reports; does not change deps unless asked.
    ---
    
    # Supply-Chain Audit
    
    <!-- SHARED:LANGUAGE_HEADER -->
    
    Audit what the project trusts: deps, build pipeline, shipped artifact. Report; do NOT change deps unless asked.
    
    ## 1. Dependencies
    - **Scope** — honor `.coalmine.json` `packageManifests` if set: scan exactly those manifest/lockfile paths; else infer by inspecting the repo.
    - **CVEs** — run ecosystem auditor; cross-check every hit in GHSA/OSV/NVD. Cite advisory ID + affected range + fixed version. (Invoke source-grounding — never from memory.)
    - **Maintenance** — last release, commit recency, bus-factor, archived/deprecated flag.
    - **License** — flag copyleft inside permissive project, missing/unknown license.
    - **Transitive** — full tree; name the parent to bump for a transitive fix.
    - **Behavior** — phone home? install scripts? unexpected egress?
    
    ## 2. Build / CI
    - CI-only release builds?
    - Actions pinned to commit SHA (not floating tag)?
    - Lockfile committed + enforced in CI?
    - Minimal token scope? No `pull_request_target`?
    
    ## 3. Artifact
    - SHA-256 checksums published for every binary?
    - Signed (Authenticode/GPG)? Gap documented honestly?
    - SBOM generated?
    - User can verify before running?
    
    ## Tooling
    Per-ecosystem vuln/license/outdated commands + offline fallback: read `references/tooling.md` when selecting scanners.
    
    ## Discipline
    - Ground every CVE/fixed-version in an advisory. Never from memory.
    - Don't auto-change deps — report + recommend; user decides (bumps break builds).
    - State what was NOT scanned. Blocked network scans → lockfile inspection fallback (see `references/tooling.md`), mark live checks N-A.
    
    ## Fix mode (choice-gated)
    After the report, present via `ask_question`:
    - **Pin safe now** — commit already-present unchanged lockfile, pin CI action to current SHA, add missing checksum step. Each: checkpoint → apply → verify.
    - **Let me pick** — user-selected fixes only.
    - **Report only** — change nothing.
    
    NEVER auto-fix: dep version bump, lockfile regen (re-resolves entire transitive tree).
    
    ## Grants & denials (CLASSIFY-BLOCK)
    | class | step it powers | grant | on denial |
    |---|---|---|---|
    | read | scan manifests/lockfiles; run the ecosystem auditor | `Read`·`Grep`·`Glob`·`Bash` (read-only) | refuse that manifest, name it in "Not scanned" — never a clean bill |
    | write | Fix mode's pin/commit, incl. checkpoint → apply → verify | `Edit`·`Write`·`Bash` (checkpoint/verify need exec) | report the pin as NOT applied AND the checkpoint/verify as NOT available, never claim done |
    | network | GHSA/OSV/NVD cross-check | `WebSearch`·`WebFetch` (or delegated to source-grounding) | `⚠️ unverified: check [advisory ID]` |
    
    <!-- SHARED:CLASSIFY_BLOCK -->
    
    ## Output
    `| package | direct/transitive | issue | severity | advisory | fixed-in | action |`
    Build+artifact checklist · Summary (counts + top fixes) · Not scanned
    
    For `ReportFindings`: `file` = the manifest/lockfile path that named the package (`packageManifests`, or the inferred one); `line` is best-effort (the pin/version line if easily found) or omitted and named imprecise per the shared reporting rail — never fabricate a line.
    
    <!-- SHARED:REPORTING_FOOTER -->
    
    <!-- SHARED:ORCHESTRATION -->
    
    <!-- SHARED:ESCALATION_FOOTER -->
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related