Run a reusable JavaScript supply-chain security baseline with pnpm-first hardening, release-age gating, lifecycle-script controls, exotic dependency checks, CI install checks, and optional incident IOC profiles.
npx skills add https://github.com/instructa/agent-skills --skill package-security-check
python3 scripts/check_js_supply_chain.py --root <repo-or-workspace-root>
Use --strict when the check should fail on hardening gaps. Use --json when another tool needs machine-readable output. Use --include-installed only when node_modules exists and installed package lifecycle metadata matters.
python3 scripts/check_js_supply_chain.py \
--root <repo-or-workspace-root> \
--ioc data/iocs/npm-supply-chain-2026-05.json \
--since 2026-05-11T19:20:00Z
Refresh incident facts from current advisory sources before relying on a profile. IOC profiles are detection data, not the base policy.
package_manager_policyrepo_config_findings and effective_config_findingsrisky_direct_specspackage_lifecycle_scripts, then installed_lifecycle_scripts when requestedci_install_findings, including GitHub Actions privilege/cache warningsioc_hitsrecent_package_manager_filesUse pnpm 11 or newer as the single package manager because it has the best current pnpm security model: release-age gating, lifecycle-script approval, exotic-subdependency blocking, and trust policy controls.
Verify the current pnpm release before writing packageManager:
npm view pnpm dist-tags --json
Require pnpm 11 or newer. As of 2026-05-12, npm reports latest as pnpm 11.1.1. Do not hardcode that value without rechecking. If the repo's Node runtime cannot run pnpm 11, report it as a compatibility blocker instead of silently falling back to pnpm 10.
Use devEngines.packageManager to declare the required major:
{
"devEngines": {
"packageManager": {
"name": "pnpm",
"version": ">=11.0.0",
"onFail": "download"
}
}
}
Also pin the verified current stable version in packageManager for reproducibility:
{
"packageManager": "[email protected]"
}
Treat pnpm 10 or older as legacy-pnpm-major unless the user explicitly approves a temporary exception.
pnpm >=11: canonical baseline. Prefer this for new hardening work.bun: accepted only when the repo intentionally uses Bun and has equivalent local hardening.npm: fallback only. Recommend migration to pnpm 11 unless the repo has a clear documented reason to stay npm.yarn: not accepted baseline for this skill. Recommend pnpm 11 or hardened Bun.Do not present npm as equivalent to pnpm 11. Bun can be accepted as a project-level choice, but still gets checked against Bun-specific hardening.
For npm fallback repos, require exact saves and reproducible CI while recommending pnpm migration:
save-exact=true
Do not claim npm has a supported release-age gate unless verified in current npm docs and local npm config ls -l.
For Bun fallback repos, require repo-local bunfig.toml:
[install]
minimumReleaseAge = 604800
exact = true
frozenLockfile = true
saveTextLockfile = true
Do not set minimumReleaseAgeExcludes without a reviewed, package-specific reason.
Add or update root pnpm-workspace.yaml:
minimumReleaseAge: 10080
minimumReleaseAgeStrict: true
minimumReleaseAgeIgnoreMissingTime: false
blockExoticSubdeps: true
trustPolicy: no-downgrade
trustPolicyIgnoreAfter: 43200
dangerouslyAllowAllBuilds: false
savePrefix: ""
allowBuilds: {}
Use 7 days (10080) for normal repos. Use 3 days only when the repo has a real dependency freshness requirement. Do not set minimumReleaseAgeExclude or trustPolicyExclude without a reviewed, package-specific reason.
Allow dependency build scripts only after review:
allowBuilds:
esbuild: true
core-js: false
Require frozen pnpm installs:
pnpm install --frozen-lockfile
Treat these as findings unless the repo has a written reason:
npm install, yarn install, unfrozen bun install, or unfrozen pnpm installnpm ci with a committed lockfile while migration is pendingbunfig.toml release-age, exact, frozen-lockfile, or text-lockfile policypull_request_target workflows; these are allowed only with a reviewed reason and must not checkout or run untrusted PR codelatest, *, broad ranges, Git/GitHub shorthands, HTTP tarballs, or external file: specsdangerouslyAllowAllBuilds: truetoJSON(secrets) or publish credentials in broad build jobsscripts/check_js_supply_chain.py performs deterministic local checks:
pull_request_target and shared cache patterns that can become supply-chain escalation paths--sinceKeep incident profiles under data/iocs/. Do not add incident-specific constants to the scanner unless they are generic across npm supply-chain attacks.
You are a dependency security expert specializing in vulnerability scanning, license compliance, and supply chain security. Analyze project dependencies for known vulnerabilities, licensing issues, outdated packages, and provide actionable remediation strategies.
Perform language and framework specific security best-practice reviews and suggest improvements. Trigger only when the user explicitly requests security best practices guidance, a security review/report, or secure-by-default coding help. Trigger only for supported languages (python, javascript/typescript, go). Do not trigger for general code review, debugging, or non-security tasks.
Implement authentication and authorization with Better Auth - a framework-agnostic TypeScript authentication framework. Features include email/password authentication with verification, OAuth providers (Google, GitHub, Discord, etc.), two-factor authentication (TOTP, SMS), passkeys/WebAuthn support, session management, role-based access control (RBAC), rate limiting, and database adapters. Use when adding authentication to applications, implementing OAuth flows, setting up 2FA/MFA, managing user sessions, configuring authorization rules, or building secure authentication systems for web applications.
Package entire code repositories into single AI-friendly files using Repomix. Capabilities include pack codebases with customizable include/exclude patterns, generate multiple output formats (XML, Markdown, plain text), preserve file structure and context, optimize for AI consumption with token counting, filter by file types and directories, add custom headers and summaries. Use when packaging codebases for AI analysis, creating repository snapshots for LLM context, analyzing third-party libraries, preparing for security audits, generating documentation context, or evaluating unfamiliar codebases.
You are a dependency security expert specializing in vulnerability scanning, license compliance, and supply chain security. Analyze project dependencies for known vulnerabilities, licensing issues, outdated packages, and provide actionable remediation strategies.
Expert patterns for HubSpot CRM integration including OAuth authentication, CRM objects, associations, batch operations, webhooks, and custom objects. Covers Node.js and Python SDKs.
Perform language and framework specific security best-practice reviews and suggest improvements. Use when the user explicitly requests security best practices guidance, a security review or report, or secure-by-default coding help. Supports Python, JavaScript/TypeScript, and Go. Do NOT use for general code review, debugging, threat modeling (use security-threat-model), or non-security tasks.
Configures API gateways for routing, authentication, rate limiting, and request transformation in microservice architectures. Use when setting up Kong, Nginx, AWS API Gateway, or Traefik for centralized API management.
Take instructa/package-security-check from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm.
Without those the skill loads but fails at the first command.