
Pin Everything
- 2 repo stars
- Updated July 24, 2026
- cboone/agent-harness-plugins
Harden a repo's supply chain in one shot by pinning action SHAs, dependency exact versions, integrity digests, and runtime version files.
About
Pin-everything pins every version surface in a repository for supply-chain hardening: GitHub Action commit SHAs, packageManager integrity digests, dependency exact versions, runtime version files, and install commands. It applies these locks in one pass so the build can no longer pull mutable references that an attacker could swap. Aimed at CI/release hygiene and security teams.
- Pins GitHub Action SHAs
- Exact-pins dependencies
- Locks runtime version files
- One-shot supply-chain hardening
Pin Everything by the numbers
- Data as of Jul 25, 2026 (Skillselion catalog sync)
/plugin marketplace add cboone/agent-harness-plugins/plugin install pin-everything@agent-harness-pluginsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| repo stars | ★ 2 |
|---|---|
| Last updated | July 24, 2026 |
| Repository | cboone/agent-harness-plugins ↗ |
What it does
Harden a repo's supply chain in one shot by pinning action SHAs, dependency exact versions, integrity digests, and runtime version files.
README.md
Pin Everything
Pin every version surface in a repository to commit hashes, integrity digests, or specific versions as a one-shot supply-chain hardening pass.
Type: Skill
Trigger: /pin-everything (also activates automatically)
Installation
See the marketplace install instructions.
What It Does
Walks an existing repository through a one-shot hardening pass that closes the surfaces an attacker can reach via mutable version refs. The skill audits the repo, presents the findings, confirms scope with the user, then pins each category in turn:
- GitHub Actions
uses:refs — replaced with 40-char commit SHAs and# vX.Y.Zcomments (covers reusable workflows and channel refs too). - Yarn via Corepack —
packageManager: yarn@X.Y.Zrewritten toyarn@X.Y.Z+sha512.<hash>;.yarnrc.ymlstrict defaults made explicit. - Package-manager dependencies — exact-pinned in application context (Node.js, Ruby, Python, Rust); left as ranges in library context to avoid breaking downstream version unification.
- Language runtimes in CI — inline
node-version: "X"etc. swapped fornode-version-file: ".tool-versions"and friends; missing version files created with current LTS / stable values. - Install commands —
go install,cargo install,pip install,uv add,npx <tool>rewritten with explicit pinned forms (skipping placeholder paths in scaffolded templates). - Dependabot —
.github/dependabot.ymlcreated or merged with weekly schedule, split groups by update-type, 10-PR cap per ecosystem. - Drift audit (optional) — bundled
version-auditscript and weekly workflow cover the four surfaces Dependabot does not (.tool-versions,packageManager, action SHAs in.mdtemplates, install-command pins inside scripts).
The skill confirms scope before each batch and supports per-category opt-out, so adopters who only want SHA-pinned actions can stop after the first batch. A --dry-run mode reports findings without editing.
Requirements
gh(authenticated). Install via Homebrew:brew install gh.jq. Install via Homebrew:brew install jq.corepack(only when pinning Yarn or pnpm viapackage.json'spackageManagerfield; step 5 invokescorepack use yarn@…orcorepack use pnpm@…and verifies with the corresponding--version). Bundled with modern Node.js; activate viacorepack enable.reuse(only when the consuming repo has REUSE/SPDX licensing set up). Install via Homebrew:brew install reuse.curland Bash 4+ (only when the bundledversion-auditscript is generated; the script's drift checks againstnodejs.org,repo.yarnpkg.com,registry.npmjs.org,crates.io, andpypi.orgusecurl, and itsdeclare -Aassociative arrays require Bash 4+).curlships with macOS and most Linux distros; macOS ships only Bash 3.2 by default, so install Bash 4+ via Homebrew:brew install bash.
Usage
/pin-everything [--scope <comma-list>] [--no-audit] [--no-dependabot] [--dry-run]
| Option | Effect |
|---|---|
--scope <list> |
Restrict to a subset of categories: actions,runtimes,corepack,manifest,installs,yarnrc,dependabot,audit (the corepack scope covers Yarn and pnpm; yarnrc is Yarn-only) |
--no-audit |
Skip generating bin/version-audit and its workflow |
--no-dependabot |
Skip writing .github/dependabot.yml |
--dry-run |
Audit and report; do not edit any files |
Recommended Permissions
This skill runs gh api queries to resolve action tags to SHAs, curl lookups against language and registry endpoints, corepack (with a shasum fallback) to compute Yarn integrity hashes, chmod +x to mark the emitted bin/version-audit script executable, and git add / git commit to land the resulting changes. To allow them automatically, add these rules to your .claude/settings.json (project-wide) or ~/.claude/settings.json (global):
{
"permissions": {
"allow": [
"Bash(gh api:*)",
"Bash(gh release view:*)",
"Bash(curl:*)",
"Bash(corepack use:*)",
"Bash(corepack enable)",
"Bash(yarn --version)",
"Bash(pnpm --version)",
"Bash(shasum:*)",
"Bash(chmod +x:*)",
"Bash(git add:*)",
"Bash(git commit:*)"
]
}
}
If you already have a permissions.allow array, merge these entries into it. Review and adjust the rules to match your security preferences.
Examples
- "pin everything in this repo" — full hardening pass
- "harden against supply-chain attacks" — same behavior
- "SHA-pin all the actions" — actions-only scope
- "audit version pins" —
--dry-runstyle audit only /pin-everything --scope actions,dependabot— actions + Dependabot only
See Also
- Set-Up Secret Scanning: credential-leak hardening (sibling supply-chain concern)
- Refresh Project Scaffolding: ongoing template-drift detection (different cadence)
- Manage Repo Licensing: SPDX coverage for newly emitted files
- Lint and Fix: invoked after pinning to format affected files
- All plugins