Agent skill

Stash Supply Chain Security

by cipherstash in cipherstash/stack

Supply-chain security controls for the @cipherstash/stack monorepo.

MITAuto-check: warningsDevelopment

Install Stash Supply Chain Security

The automated check flagged lines worth reading first. See the safety section below.

skills CLI
$ npx skills add cipherstash/stack --skill stash-supply-chain-security -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cipherstash/stack stash-supply-chain-security --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/cipherstash/stack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/stash-supply-chain-security .claude/skills/stash-supply-chain-security && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
stash-supply-chain-security
GitHub stars
157
Token cost
~5.2k tokens
SKILL.md length
2,602 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Supply-chain security controls for the @cipherstash/stack monorepo.

  • Works in 7 steps: Post-install scripts disabled by default… → Install cooldown — practice #2 → Lockfile injection prevented — practices… → …
  • Modifying CI workflows
  • SKILL.md covers When to Use This Skill, What's Enforced (Config + Test…, What's Documented but Not… and Publishing — OIDC trusted…, plus 2 more sections
  • Calls npm, pnpm and changeset; reaches github.com and registry.npmjs.org; needs NPM_TOKEN and GITHUB_TOKEN

What it does

Stash Supply Chain Security is an agent skill from cipherstash/stack. Supply-chain security controls for the @cipherstash/stack monorepo. Covers post-install script policy (onlyBuiltDependencies), install cooldown (minimumReleaseAge), lockfile integrity (blockExoticSubdeps + lockfile registry check), frozen-lockfile CI, registry pinning (.npmrc), Dependabot cooldown, CODEOWNERS, and npm OIDC trusted publishing / provenance (including claiming a new package name). Use when modifying CI workflows, pnpm config, dependency updates, .github/dependabot.yml, release.yml, publishing a…

Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Dependency management and Supply chain security. It works with npm, pnpm, GitHub and PostgreSQL. The repository describes itself as: Searchable, application-level encryption for building privacy-first apps. The licence is MIT.

When your agent uses it

  • Modifying CI workflows
  • Dependency updates
  • .github/dependabot.yml
  • Publishing a package to npm for the first time

Example prompts

  • “/stash-supply-chain-security”

Requirements

  • Docker
  • A credential in NPM_TOKEN
  • A credential in GITHUB_TOKEN

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Post-install scripts disabled by default — practice #1
  2. Install cooldown — practice #2
  3. Lockfile injection prevented — practices #4, #16
  4. Frozen lockfile in CI — practice #5
  5. Cooldown'd auto-updates — practice #6
  6. Registry pinning — practice #16
  7. Governance (CODEOWNERS)

What it can do on your machine

Read from SKILL.md and the folder at commit 4c2fe08. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • pnpm
    • changeset
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com
    • registry.npmjs.org

    Also links to:

    • socket.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • NPM_TOKEN
    • GITHUB_TOKEN
    • NODE_AUTH_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Stash Supply Chain Security loads about 5.2k tokens when it runs. Until then it costs about 158 tokens; SKILL.md has 2,602 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~158
When it runs · the whole SKILL.md, loaded when a task matches
~5.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: warnings

The automated check found patterns that need a careful read before installing.

  • WarningMentions a credentials file (SSH keys, cloud or package-manager tokens)SKILL.md:3
    , frozen-lockfile CI, registry pinning (.npmrc), Dependabot cooldown, CODEOWNERS, and npm OIDC trusted publishing / prov
  • WarningMentions a credentials file (SSH keys, cloud or package-manager tokens)SKILL.md:13
    yaml`, `package.json` `pnpm` block, or `.npmrc`
  • WarningMentions a credentials file (SSH keys, cloud or package-manager tokens)SKILL.md:77
    `.npmrc` pins both the default registry and the `@cipherstash` scope to `https://registry.npmjs.org/`. Auth tokens stay
  • WarningMentions a credentials file (SSH keys, cloud or package-manager tokens)SKILL.md:79
    - **Test asserts**: `.npmrc` contains both pin lines and no `_authToken` / `NPM_TOKEN`
  • NoteMentions a .env fileSKILL.md:123
    `tests.yml` writes `.env` files at CI time from GitHub Secrets. This is acceptable: secrets are never committed, scoped
  • NoteMentions a .env fileSKILL.md:125
    Do **not** commit any `.env` file to the repo.
  • WarningMentions a credentials file (SSH keys, cloud or package-manager tokens)SKILL.md:156
    .** `changesets/action` writes a token `.npmrc` when it sees one, which shadows OIDC and fails every publish with E404 (
  • WarningMentions a credentials file (SSH keys, cloud or package-manager tokens)SKILL.md:212
    what writes an `_authToken` line into `.npmrc`), and

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from cipherstash/stack at commit 4c2fe08, republished under its MIT licence (© cipherstash). 2,602 words, ~5,151 tokens.

Download SKILL.mdSave it as .claude/skills/stash-supply-chain-security/SKILL.md (or your agent's skills folder).
name
stash-supply-chain-security
description
Supply-chain security controls for the @cipherstash/stack monorepo. Covers post-install script policy (onlyBuiltDependencies), install cooldown (minimumReleaseAge), lockfile integrity (blockExoticSubdeps + lockfile registry check), frozen-lockfile CI, registry pinning (.npmrc), Dependabot cooldown, CODEOWNERS, and npm OIDC trusted publishing / provenance (including claiming a new package name). Use when modifying CI workflows, pnpm config, dependency updates, .github/dependabot.yml, release.yml, publishing a package to npm for the first time, or anything that touches how packages enter the build.

Supply Chain Security

Controls applied in this repo to limit blast radius from compromised npm packages, lockfile injection, dependency confusion, and rushed dependency upgrades. Sourced from lirantal/npm-security-best-practices and adapted for our pnpm workspace.

When to Use This Skill

  • Modifying any file under .github/workflows/
  • Editing pnpm-workspace.yaml, package.json pnpm block, or .npmrc
  • Updating .github/dependabot.yml or .github/CODEOWNERS
  • Adding a dependency that needs a build script (i.e. node-gyp, node-pty, prebuilt binaries)
  • Bypassing the install cooldown for a security fix
  • Publishing a package to npm under a name that has never been published before
  • Reviewing a PR that touches any of the above

What's Enforced (Config + Test Gate)

Each control below is validated by e2e/tests/supply-chain.e2e.test.ts — the test suite fails CI if a control regresses, so silent removal isn't possible.

1. Post-install scripts disabled by default — practice #1

pnpm 10+ disables lifecycle scripts globally and only runs them for packages on the onlyBuiltDependencies allowlist.

  • Where: package.json pnpm.onlyBuiltDependencies
  • Current allowlist: ["node-pty"] (PTY tests need the native module built)
  • Test asserts: allowlist length ≤ 3 — adding a fourth entry forces explicit review
2. Install cooldown — practice #2

New package versions wait 7 days before they're eligible for install. Mirrors the Dependabot cooldown so manual + automated updates have the same community-discovery window.

  • Where: pnpm-workspace.yaml minimumReleaseAge: 10080 (minutes)
  • Test asserts: ≥ 4320 minutes (3 days)
3. Lockfile injection prevented — practices #4, #16

Two layers:

  • pnpm-workspace.yaml blockExoticSubdeps: true — pnpm refuses to install transitive deps that come from git or direct tarballs (pnpm ≥ 10.26)
  • A test parses pnpm-lock.yaml and asserts every resolved tarball URL starts with https://registry.npmjs.org/

(Why not lockfile-lint? It only supports npm/yarn lockfiles. The pnpm-native test gives us the same protection.)

4. Frozen lockfile in CI — practice #5

CI uses pnpm install --frozen-lockfile. If pnpm-lock.yaml and any package.json drift, the install aborts — no silent registry fetches that bypass the locked versions.

  • Where: every workflow under .github/workflows/, and every local composite action under .github/actions/
  • Test asserts: no pnpm install step anywhere in that graph is missing --frozen-lockfile

The check used to read tests.yml alone, and release.yml — the one workflow that publishes to npm — ran a bare pnpm install the whole time. The single install allowed to resolve outside the lockfile was the one whose output goes to the registry.

5. Cooldown'd auto-updates — practice #6

Dependabot opens grouped, cooldown'd PRs (7 days minor/patch) for npm, cargo, gomod, github-actions and docker (the digest of the Alpine image the musl binaries are built in). Major bumps are not proposed at all — every entry ignores version-update:semver-major, so majors are reviewed and applied by hand.

There is deliberately no semver-major-days cooldown on any entry. It would delay major version update PRs, which the ignore above means Dependabot never opens, and cooldown does not reach the security path either ("the cooldown option is only available for version updates, not security updates"). Don't add one back as a safety net for the day the ignore is dropped — dead config reads as policy, and the test below fails on the pair.

cargo covers the in-tree Rust workspace at languages/typescript/packages/protect-ffi (not the repo root — that is where Cargo.toml/Cargo.lock live). It runs monthly rather than weekly because each bump costs a native rebuild to validate, and it ignores the exact-pinned CipherStash crates (cipherstash-client, cts-common, stack-auth, stack-profile, eql-bindings, vitaminc) — they share a release train with the @cipherstash/auth catalog and must be bumped together, manually.

  • Where: .github/dependabot.yml
  • Test asserts: cooldown ≥ 3 days on every entry; the sentence above names every monitored ecosystem; every entry ignores version-update:semver-major for * and sets no semver-major-days (both ends, so neither half can drift alone); every lockfile present in the repo maps to a monitored package-ecosystem; every entry's directory actually contains the manifest its ecosystem reads

The ecosystem-coverage assertion is derived from the filesystem, so adding a lockfile for a new language fails the suite until dependabot.yml covers it. Two lockfiles are exempt because Dependabot has no ecosystem for them (e2e/wasm/deno.lock, .flox/env/manifest.lock); both are named with their reason in the test.

Note that ignore conditions suppress Dependabot security PRs too, not just version updates. The compensating control is OSV: .github/workflows/osv-scanner.yml scans --recursive ./, which reaches every lockfile in the tree (including Cargo.lock) and reports to code scanning.

6. Registry pinning — practice #16

.npmrc pins both the default registry and the @cipherstash scope to https://registry.npmjs.org/. Auth tokens stay in user-level ~/.npmrc or env vars — never committed.

  • Test asserts: .npmrc contains both pin lines and no _authToken / NPM_TOKEN
7. Governance (CODEOWNERS)

.github/CODEOWNERS requires @cipherstash/developers review for every supply-chain critical file. Combined with branch protection (configured in repo settings, not in this repo), this prevents single-actor changes to the chain.

  • Test asserts: CODEOWNERS lists each critical path

What's Documented but Not Enforced

These controls depend on developer environment or org-level configuration — we describe them here but don't gate CI on them.

Harden installs locally — practice #3

For local installs of new packages, consider running them through one of:

  • npq — security checks, package age, typosquatting, provenance: npq install <pkg>
  • Socket Firewall (sfw) — real-time blocker for known-malicious packages: sfw pnpm add <pkg>

Neither is required, but they're cheap insurance when adding a new direct dependency.

2FA on npm accounts — practice #10

Every maintainer with publish access to @cipherstash/* should have:

bash
npm profile enable-2fa auth-and-writes

Releases no longer depend on this — release.yml publishes via OIDC and holds no long-lived token (see "Publishing" below). 2FA still matters for the manual publishes that OIDC can't cover: claiming a new package name, npm deprecate, and npm dist-tag changes.

Reduce dependency tree — practice #13

Before adding a new direct dep, ask:

  • Does Node ≥ 22 (our minimum) already provide this?
  • Is the package actively maintained? Check Snyk's database (security.snyk.io) — practice #14
  • What does npm pack <pkg> show in the actual tarball? (npmjs.org's web view can lie — practice #15)
Secrets in CI

tests.yml writes .env files at CI time from GitHub Secrets. This is acceptable: secrets are never committed, scoped to the runner, and rotate via the GitHub UI. The .env files exist only for the lifetime of the job.

Do not commit any .env file to the repo.

Treat OIDC as a transport, not as a synonym for publishing. A non-publishing workload-identity exchange still needs job-level id-token: write, but it must be classified separately from registry publishers in scripts/__tests__/workflow-publish-permissions.test.mjs, with the audience and reason recorded there. Keep its static credential inputs absent and grant only the repository permissions the job actually needs.

A job's permissions: block limits only that job's GITHUB_TOKEN. Some actions use the OIDC token to obtain a different GitHub token instead — anthropics/claude-code-action, given no github_token input, exchanges it for a Claude GitHub App installation token with write access to contents, pull requests and issues. Check which token an action actually uses, and pass github_token: ${{ secrets.GITHUB_TOKEN }} where the action accepts one, so the grants you reviewed are the grants that apply.

Publishing — OIDC trusted publishing + provenance (practices #11, #12)

.github/workflows/release.yml publishes to npm with no NPM_TOKEN. It authenticates via npm OIDC trusted publishing, and provenance attestations are generated automatically as a side effect. Verify any published version with:

bash
npm view <pkg>@<version> --json | grep -A3 attestations

Constraints baked into that workflow — don't undo them:

  • permissions: id-token: write is what mints the OIDC token. Without it every publish fails — but it belongs on the publishing jobs, never at the workflow level. A trusted publisher is registered against a repository and a workflow filename, so once release.yml is the registered publisher, npm accepts a token minted by any job in that file: the registry cannot tell the cheap every-push gate apart from the publish job. Declared at the top, it reaches every job that does not override it, including the one added next month by someone who never read this page. release.yml therefore grants contents: read at the workflow level and escalates per job, so a new job has to ask for the credential in its own diff. Enforced by scripts/__tests__/workflow-publish-permissions.test.mjs, which also holds the list of jobs allowed to hold it.

  • runs-on: ubuntu-latest, not a self-hosted/Blacksmith runner. npm rejects provenance from non-GitHub-hosted runners with E422.

  • Never set NPM_TOKEN. changesets/action writes a token .npmrc when it sees one, which shadows OIDC and fails every publish with E404 (npm/cli#8976).

  • npm ≥ 11.5.1 and Node ≥ 22.14. Node 22 ships npm 10.x, so the workflow installs npm@^11.5.1 explicitly before publishing.

  • No Actions cache in this workflow (no cache:, package-manager-cache: false, pnpm/action-setup with cache: false). A poisoned cache entry would execute in a credential-bearing job. Enforced by scripts/lint-no-workflow-caching.mjs, which also follows any local composite action or reusable workflow the job reaches — the rule is about the whole call tree, not the one file.

  • Every published uses: must be in that script's AUDITED_ACTIONS allowlist. The gate cannot open a published action to check whether it caches, and the ones that do are not all named "cache" — a setup-<tool> action that caches by default has no cache: input and no telling name. So the list is what is permitted, and an action it has never met fails by default. Adding a step to release.yml, _build-ffi-artifacts.yml or tests-supply-chain.yml means auditing the action and adding it there with the reason, in the same PR.

  • Three actions must disable caching explicitly, and the input differs for each. Allowlisting an action is not the same as it being safe by default:

    ActionInputIts defaultRequired
    pnpm/action-setupcachefalsecache: false
    actions/setup-nodepackage-manager-cachetruepackage-manager-cache: false
    jdx/mise-actioncachetruecache: false
    yaml
    - uses: jdx/mise-action@<sha> # v3.6.3
      with:
        install: true
        working_directory: languages/typescript/packages/protect-ffi
        cache: false # defaults to TRUE — omitting this restores the Actions cache

    Omitting the key is not "no caching" for the bottom two, it is caching spelled invisibly. The gate's generic rule only fires on a truthy cache: value, so a missing key is invisible to it — which is exactly how a mise-action step with no cache: passed until each action got its own explicit-false assertion.

Show full SKILL.md (1,049 more words)Show less
The native-binding publish path

@cipherstash/protect-ffi and its six @cipherstash/protect-ffi-<platform> packages ship compiled binaries, which changeset publish cannot produce: it packs from the workspace, where index.node is a build output. So release.yml publishes them itself, before changesets runs, and the same constraints apply to that job — GitHub-hosted runner, id-token: write, no NPM_TOKEN, npm ≥ 11.5.1, no Actions cache.

  • scripts/release-gate.mjs asks the registry which committed versions are missing. It is not a cost optimisation: if it wrongly reports nothing to publish, changesets publishes six platform packages with no binary in them. Every failure mode in it throws rather than answering "nothing to publish".
  • _build-ffi-artifacts.yml is a reusable workflow, and only builds. npm validates a trusted publish against the entry-point workflow's filename, and its docs call out workflow_call as a known issue: "validation checks the calling workflow's name instead of the workflow that actually contains the publish command, which can cause configuration mismatches", with id-token: write required in both parent and child. A publish inside a reusable workflow is therefore validated against whichever workflow called it. Keeping it in release.yml — the registered filename, as an entry-point job rather than a call — is correct whichever way that resolves. The reusable workflow is on the no-caching gate's target list for the same reason release.yml is: everything it produces gets published.
  • Platform packages publish before the wrapper. The wrapper's six optionalDependencies are exact versions, so publishing it first exposes a version whose binaries do not exist yet.
  • ffi-preflight.yml is the dry run — changeset publish has no --dry-run. Dispatch it against a Version Packages branch and it builds the real tarballs, checks each binary's architecture and libc, installs the host pair and loads it. It cannot publish, and "no id-token" is only half of why: that closes the OIDC path, while a plain NPM_TOKEN would still authenticate one. Both are absent — the workflow grants contents: read, passes no secrets (no secrets: inherit on its call into the build workflow), sets no registry-url (which is what writes an _authToken line into .npmrc), and names no NPM_TOKEN or NODE_AUTH_TOKEN. Keep it that way; adding any one of them turns a dry run into a publisher.

Trusted publishing is configured per package on npmjs.com (package settings → Trusted publisher → GitHub Actions): owner/repo cipherstash/stack, workflow filename release.yml (filename only, with extension — not a path), environment blank. npm does not validate this on save, so a typo only surfaces as a failed publish. For configurations created after 2026-05-20 npm also requires an explicit Allowed actions selection — pick npm publish.

repository.url must exactly match the publishing repository (https://github.com/cipherstash/stack). npm checks it on a trusted publish and rejects a mismatch; nothing warns beforehand. A package moved between repositories needs its manifest updated in the same change as its publisher — and for a package published from a subdirectory, repository.directory is resolved from that repository's root, so it moves too.

Publishing a package name for the first time

A trusted publisher can only be attached to a package that already exists on the registry, so a brand-new name can't be released by release.yml on its own — the first publish has to be manual. This is why @cipherstash/stack-drizzle and @cipherstash/stack-supabase each carry a 0.0.0 placeholder version.

Do this before the release that would first publish the name:

  1. npm login as a maintainer with publish rights on the @cipherstash scope.

  2. Publish a placeholder to claim the name. Use pnpm publish, not npm publish — workspace packages depend on each other via workspace:* and only pnpm rewrites that protocol on pack:

    bash
    pnpm --filter <pkg> build
    cd packages/<dir>
    npm version 0.0.0 --no-git-tag-version
    pnpm publish --tag bootstrap --access public --no-git-checks
    git checkout package.json   # restore the real version

    This publish has no provenance — it predates the trusted-publisher config by definition. That's expected and is the only unattested version.

  3. Register the trusted publisher on npmjs.com as described above.

  4. npm deprecate <pkg>@0.0.0 "Placeholder package" so nothing installs it silently.

  5. After the real release lands, clean up the placeholder tags — changeset publish never removes a tag it didn't create:

    bash
    npm dist-tag rm <pkg> bootstrap

The first publish also sets latest to 0.0.0 regardless of --tag, so keep the gap between the placeholder and the real release short, and confirm npm view <pkg> dist-tags afterwards.

Also confirm the package's package.json has "publishConfig": {"access": "public"} — .changeset/config.json sets access: "restricted" repo-wide, and the per-package field is what overrides it.

Common Operations

Add a dependency that needs a build script
  1. Vet the package: latest version, active maintenance, reasonable download counts, source visible on GitHub.
  2. Run npm pack <pkg> and inspect the tarball — confirm the install script is what you expect.
  3. Add to package.json pnpm.onlyBuiltDependencies:
    json
    "pnpm": {
      "onlyBuiltDependencies": ["node-pty", "your-new-package"]
    }
  4. Update the supply-chain test's allowlist threshold if you'd be adding the 4th entry — and explain in the PR why the count needs to grow.
  5. Run pnpm install to confirm the build script executes.
Bypass the install cooldown for a security fix

When CVE response needs a patch faster than 7 days:

  1. Pin the exact patched version (a pnpm override scoped to the vulnerable range for transitive deps, or the manifest for direct deps) so the bypass run can only admit that one release.
  2. Run a one-off install with the cooldown disabled for that single run (pnpm ≥ 10 has no dedicated flag; the CLI config override is the one-off equivalent and does not persist — kebab-case is the canonical form, though pnpm 10.x accepts the camelCase spelling too):
bash
pnpm install --config.minimum-release-age=0

Once the patched version is in pnpm-lock.yaml, normal and --frozen-lockfile installs succeed without any bypass — locked versions are not re-age-checked. Do NOT add third-party packages to minimumReleaseAgeExclude: that list is for first-party packages only and a name-scoped entry exempts every future release of the package until removed.

Document the bypass in the PR description (CVE ID, why the cooldown was the bottleneck) so the next reviewer can follow the reasoning.

Add a new dev dependency

No special steps — Dependabot will pick it up on the next weekly run (after the cooldown window). For immediate use, just pnpm add -D <pkg>.

Change a CI workflow

CODEOWNERS will request review from @cipherstash/developers. The supply-chain test will fail if the change drops --frozen-lockfile or downgrades Node.

Reference

© cipherstash, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/stash-supply-chain-security of cipherstash/stack.

Open the folder on GitHubat commit 4c2fe08

Compare with similar skills

Stash Supply Chain Security next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Stash Supply Chain Security compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Stash Supply Chain Security this skillcipherstash/stack157—~5.2kAutomated safety check: WarnMIT
Linea Dependency MaintenanceConsensys-Incorporated/linea-attestation-registry1771 repos~3.7kAutomated safety check: WarnMIT
npm Supply Chain Securitybodadotsh/npm-security-best-practices858—~1kAutomated safety check: WarnMIT
Fix Security PRunional/typescript-blackbook133—~1.4kAutomated safety check: WarnMIT
Interlinked Supply ChainQuentinCody/interlinked-cli178—~2.8kAutomated safety check: PassMIT
Memstack Security Dependency Auditcwinvestments/memstack423—~3.1kAutomated safety check: PassProprietary

Similar skills

  • Linea Dependency Maintenance

    Consensys-Incorporated/linea-attestation-registry

    Safely plan and execute dependency maintenance for JavaScript/TypeScript (npm, pnpm) and GitHub Actions, including npm lockfiles, pnpm workspaces, catalogs, overrides, SHA-pinned action versions…

    177 GitHub starsUsed in 1 repo~3.7k tokens
    DevelopmentAuto-check: warnings
  • npm Supply Chain Security

    bodadotsh/npm-security-best-practices

    Applies safer package manager defaults and dependency vetting to JavaScript and TypeScript projects to reduce supply-chain attack risk.

    858 GitHub stars~1k tokensUpdated 8 days ago
    SecurityAuto-check: warnings
  • Fix Security PR

    unional/typescript-blackbook

    Fix a PR that is failing due to security or vulnerability issues — npm/pnpm/yarn/bun audit failures, CVE alerts, Dependabot merge conflicts, Snyk failures, or GitHub security advisory blocks.

    133 GitHub stars~1.4k tokensUpdated yesterday
    DevelopmentAuto-check: warnings
  • Interlinked Supply Chain

    QuentinCody/interlinked-cli

    Respond to blocked package installs and manage the Interlinked supply-chain allowlist.

    178 GitHub stars~2.8k tokensUpdated 6 days ago
    SecurityAuto-check passed
  • A skill your agent uses when the user says 'dependency audit', 'npm audit', 'pip audit', 'cargo audit', 'security vulnerabilities', 'outdated packages', 'supply chain', or needs to scan project…

    423 GitHub stars~3.1k tokensUpdated 12 days ago
    SecurityAuto-check passed
  • Dependency Upgrade Protocol

    dralgorhythm/claude-agentic-framework

    Sequences safe dependency upgrades: read the changelog, verify the version exists upstream, pin it, and keep major bumps in separate commits behind a full gate run.

    125 GitHub stars~1.5k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed

More from cipherstash/stack

All 14 skills in this repo
  • Meta Issue Creation

    cipherstash/stack

    How an agent files a GitHub issue on cipherstash repos — required structure (Background / Problem / Proposal), dumbed-down wording rules, and pre-filing checks.

    157 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Meta PR Creation

    cipherstash/stack

    How an agent authors branches, commits, and pull requests on cipherstash/stack — naming, signed commits, the changeset/skills/meta-file checklist, and PR body structure with dumbed-down wording.

    157 GitHub stars~937 tokensUpdated today
    Auto-check passed
  • Stash Zerokms

    cipherstash/stack

    The ZeroKMS key model — keysets, clients, client keys, and the grant/revoke lifecycle.

    157 GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Stash Deployment

    cipherstash/stack

    Deploy a CipherStash encryption rollout to a live environment without losing data — the multi-deploy ladder (schema-add + dual-write → backfill → read cutover → stop dual-writes → drop plaintext)…

    157 GitHub stars~6.5k tokensUpdated today
    Auto-check passed
  • Stash Drizzle

    cipherstash/stack

    Integrate CipherStash encryption with Drizzle ORM using @cipherstash/stack-drizzle (EQL v3).

    157 GitHub stars~10k tokensUpdated today
    Auto-check: notes
  • Stash Edge

    cipherstash/stack

    Run CipherStash encryption on edge and non-Node runtimes with the @cipherstash/stack/wasm-inline entry — Deno, Supabase Edge Functions, Cloudflare Workers, and Bun.

    157 GitHub stars~6.4k tokensUpdated today
    Auto-check: notes

Questions about Stash Supply Chain Security

What does Stash Supply Chain Security do?

Supply-chain security controls for the @cipherstash/stack monorepo. Stash Supply Chain Security is an agent skill from cipherstash/stack. Supply-chain security controls for the @cipherstash/stack monorepo.

When should I use Stash Supply Chain Security?

Stash Supply Chain Security fits situations like: modifying CI workflows; dependency updates; .github/dependabot.yml; publishing a package to npm for the first time.

How do I install Stash Supply Chain Security in Claude Code?

Run `npx skills add cipherstash/stack --skill stash-supply-chain-security -a claude-code`. Or copy the skill folder (skills/stash-supply-chain-security in cipherstash/stack) into .claude/skills/stash-supply-chain-security in your project. Claude Code loads it when a task matches its description.

How do I install Stash Supply Chain Security in Codex?

Run `npx skills add cipherstash/stack --skill stash-supply-chain-security -a codex`. Or copy the skill folder (skills/stash-supply-chain-security in cipherstash/stack) into .agents/skills/stash-supply-chain-security in your project. Codex loads it when a task matches its description.

Can I use Stash Supply Chain Security in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cipherstash/stack --skill stash-supply-chain-security -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/stash-supply-chain-security, .gemini/skills/stash-supply-chain-security, .github/skills/stash-supply-chain-security and .opencode/skills/stash-supply-chain-security in your project.

What does Stash Supply Chain Security need to run?

Going by SKILL.md and its folder, Stash Supply Chain Security needs the command-line tools its instructions call (npm, pnpm, changeset and git) and credentials named NPM_TOKEN, GITHUB_TOKEN and NODE_AUTH_TOKEN. Our summary lists: Docker; A credential in NPM_TOKEN; A credential in GITHUB_TOKEN.

Does Stash Supply Chain Security access the network?

SKILL.md names 3 domains. In commands or code: github.com and registry.npmjs.org; the agent is likely to contact these when it follows the instructions. As links in the text: socket.dev. This is read from the text; nothing was executed.

Is Stash Supply Chain Security safe to install?

Our automated static check of SKILL.md flagged 6 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way.

What licence does Stash Supply Chain Security use?

Stash Supply Chain Security is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Stash Supply Chain Security use?

About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Stash Supply Chain Security?

Skills that share tags, products or a category with Stash Supply Chain Security: Linea Dependency Maintenance (Consensys-Incorporated/linea-attestation-registry, 177 stars), npm Supply Chain Security (bodadotsh/npm-security-best-practices, 858 stars), Fix Security PR (unional/typescript-blackbook, 133 stars) and Interlinked Supply Chain (QuentinCody/interlinked-cli, 178 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Stash Supply Chain Security?

cipherstash (a GitHub organization) maintains it in cipherstash/stack, which has 157 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 9, 2026.

Source: cipherstash/stack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.