Agent skill

GitHub Actions Supply Chain Pinning

by asyncapi in asyncapi/generator

A skill your agent uses when editing, adding, or reviewing any file under .github/workflows/, or when a CI step installs a CLI tool (npm i -g, npx, pipx, uses: /setup-).

Apache-2.0Auto-check passedDevOps & Cloud

Install GitHub Actions Supply Chain Pinning

skills CLI
$ npx skills add asyncapi/generator --skill github-actions-supply-chain-pinning -a claude-code

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

GitHub CLI
$ gh skill install asyncapi/generator github-actions-supply-chain-pinning --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/asyncapi/generator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/github-actions-supply-chain-pinning .claude/skills/github-actions-supply-chain-pinning && 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
github-actions-supply-chain-pinning
GitHub stars
1.1k
Token cost
~1.9k tokens
SKILL.md length
954 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when editing, adding, or reviewing any file under .github/workflows/, or when a CI step installs a CLI tool (npm i -g, npx, pipx, uses: /setup-).

  • Works in 4 steps: gh is ready → Ownership → Pick the version → …
  • Reviewing any file under .github/workflows/
  • SKILL.md covers Invocation, Preconditions (fast gate), Research and Execution, plus 2 more sections
  • Calls gh, npm and npx

What it does

GitHub Actions Supply Chain Pinning is an agent skill from asyncapi/generator. Use when editing, adding, or reviewing any file under .github/workflows/, or when a CI step installs a CLI tool (npm i -g, npx, pipx, uses: /setup-). Enforces full commit-SHA pinning for every action and exact-version pinning for installed tools, and checks whether a workflow is generator-owned or synced from asyncapi/.github before editing it.

Its SKILL.md is about 1.9k 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 DevOps & Cloud, covering Supply chain security and CI/CD. It works with GitHub Actions, GitHub, npm and Node.js. The repository describes itself as: Use your AsyncAPI definition to generate literally anything. Markdown documentation, Node.js code, HTML documentation, anything! The licence is Apache-2.0.

When your agent uses it

  • Reviewing any file under .github/workflows/
  • A CI step installs a CLI tool (npm i -g

Example prompts

  • “/github-actions-supply-chain-pinning”

Requirements

  • Node.js
  • Docker

Workflow steps

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

  1. gh is ready
  2. Ownership
  3. Pick the version
  4. Resolve the SHA

What it can do on your machine

Read from SKILL.md and the folder at commit ab1f79a. 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:

    • gh
    • npm
    • npx
    • rg
    • git
    • pipx

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

  • Network

    No URLs in SKILL.md. Its commands use gh, npm, npx, git and pipx, which can reach the network depending on how they are called.

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

  • Credentials

    Names no API keys, tokens, secrets or passwords.

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

Context cost

GitHub Actions Supply Chain Pinning loads about 1.9k tokens when it runs. Until then it costs about 96 tokens; SKILL.md has 954 words of instructions outside code blocks.

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

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 passed

The automated check found no risky patterns in SKILL.md.

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 asyncapi/generator at commit ab1f79a, republished under its Apache-2.0 licence (© asyncapi). 954 words, ~1,899 tokens.

Download SKILL.mdSave it as .claude/skills/github-actions-supply-chain-pinning/SKILL.md (or your agent's skills folder).
name
github-actions-supply-chain-pinning
description
Use when editing, adding, or reviewing any file under .github/workflows/, or when a CI step installs a CLI tool (npm i -g, npx, pipx, uses: */setup-*). Enforces full commit-SHA pinning for every action and exact-version pinning for installed tools, and checks whether a workflow is generator-owned or synced from asyncapi/.github before editing it.

GitHub Actions Supply-Chain Pinning

You are adding, editing, bumping, or reviewing a GitHub Actions workflow in asyncapi/generator. Two rules keep CI's supply chain closed: every action is pinned to a full commit SHA, and every CLI a step installs is pinned to an exact version.

Invocation

Fires for any edit to .github/workflows/*, a new workflow, a review of one, or a CI step that installs a tool. For a review, run the preconditions and the Verify step, report what you find, and don't edit.

Preconditions (fast gate)

Check in order and stop on the first failure.

1. gh is ready

Run gh auth status. If it fails, stop and ask the user to run ! gh auth login. Never fall back to guessing a SHA or copying one from memory or from another repo.

2. Ownership

Some workflows are maintained globally and copied from asyncapi/.github. Before editing or reviewing a workflow, check for its central-management marker:

bash
rg -li 'centrally managed.*asyncapi/\.github' .github/workflows

Then verify ownership against the current replication rules and repository topics:

bash
gh api repos/asyncapi/.github/contents/.github/workflows/global-replicator.yml \
  -H "Accept: application/vnd.github.raw"
gh api repos/asyncapi/generator/topics

A workflow is globally maintained only when an applicable job's patterns_to_include contains it, generator is not in repos_to_ignore, and any topics_to_include matches a generator topic.

If the target is globally maintained, skip that workflow. Continue with any other files, then mention at the end: <file> was skipped because it is maintained globally and local changes would be overwritten. Do not ask the contributor to edit the global repository.

Research

1. Pick the version
  • Default: the latest release (gh api repos/<owner>/<repo>/releases/latest --jq .tag_name). If that returns 404 (the action publishes tags without GitHub Releases), list the tags with gh api repos/<owner>/<repo>/tags --paginate --jq '.[].name' and pick the highest stable semver yourself. That list isn't sorted by version.
  • Crossing a major version: read the release notes against how the step actually uses the action's inputs, outputs and env. If our usage breaks, pin the latest release of the current major and write down the deferred upgrade (PR description or an issue). Don't migrate behavior inside a pinning change.
  • If a spec or plan already fixed the version, use that version. Don't re-pick "latest".
2. Resolve the SHA
bash
gh api repos/<owner>/<repo>/git/ref/tags/<tag> --jq '.object.type+" "+.object.sha'
# If the type is "tag" (an annotated tag), dereference it to the commit:
gh api repos/<owner>/<repo>/git/tags/<sha> --jq '.object.type+" "+.object.sha'
# Verify the commit exists and matches:
gh api repos/<owner>/<repo>/commits/<commit-sha> --jq .sha

Pin the commit SHA, never the tag-object SHA. For an action in a subfolder (for example github/codeql-action/init), resolve against <owner>/<repo> and keep the subpath in the uses: line. If any command fails, stop and report it.

A floating ref like @v1 in an existing workflow may be a branch, not a tag, so git/ref/tags/v1 returns 404. To see what it runs today, use gh api repos/<owner>/<repo>/git/ref/heads/v1 --jq .object.sha. To see whether moving to your pin changes behavior at all, use gh api repos/<owner>/<repo>/compare/<floating-ref>...<pinned-sha> --jq '.status+" ahead="+(.ahead_by|tostring)+" behind="+(.behind_by|tostring)'. identical means no behavior change.

Execution

  1. Rule 1: actions. Every uses: is <action>@<40-char commit SHA> # vX.Y.Z. The comment is exactly # vX.Y.Z, with no URL and no extra words. GitHub's own actions/* get no exception.
    • The only exception: asyncapi/.github/.github/actions/<name>@master # //NOSONAR, the org's composite actions. Keep or add the //NOSONAR marker. Other asyncapi/* actions, such as asyncapi/cli, are SHA-pinned like any other action.
    • Local actions (./path) have no ref. Docker actions must use docker://<image>@sha256:<digest>.
  2. Rule 2: installed CLIs. Pin exact versions, as this repo already does: npm i -g netlify-cli@23.9.5, npx -p @changesets/cli@2.27.7 changeset …, npm i -g npm@8.19.4. No @latest, no bare npx <tool>, no unversioned npm i -g <tool>, no version: latest on a setup-* action.
  3. Bumping a pin. Change the SHA and the comment in the same edit, resolving the new SHA with Research step 2. Never hand-edit only the comment. Make one workflow per commit, so a single breakage can be reverted on its own.
  4. Verify every edited workflow:
    • This must print nothing. Any line it prints is a floating ref, a short SHA, a missing comment or a malformed comment:
      bash
      grep -nE "uses: " <file> \
        | grep -vE "@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+[[:space:]]*$" \
        | grep -vE "uses: asyncapi/\.github/\.github/actions/[^@ ]+@master # //NOSONAR[[:space:]]*$" \
        | grep -vE "uses: (\./|docker://[^@ ]+@sha256:[0-9a-f]{64})"
    • For each SHA you wrote or changed, the comment's tag resolves to that SHA (Research step 2).
    • git diff --name-only: no global-owned file.
Show full SKILL.md (287 more words)Show less

Reference

Red flags: stop and fix
You see or are about to writeDo this instead
uses: foo/bar@v4, @main, @master, @latestResolve the commit SHA and pin it with # vX.Y.Z
@master/@main on anything other than asyncapi/.github/.github/actions/*Pin by SHA; only the org composite actions float
A SHA with no comment, or a comment with a URL or extra wordsRewrite the comment as exactly # vX.Y.Z, after checking that tag resolves to that SHA
A comment tag that doesn't resolve to the SHA next to itRe-resolve and replace SHA and comment together
A tag-object SHA pinned instead of the commit SHADereference the annotated tag to its commit
npm i -g <tool>@latest, bare npx <tool>, pipx install <tool>, version: latestPin an exact version
Editing a global-owned fileStop; change it in asyncapi/.github
Rationalizations to reject
  • "It's just actions/checkout, it's from GitHub." → Same risk class as any third-party action (compromised maintainer, re-pointed tag).
  • "This repo has no Dependabot, so a SHA will go stale." → That's true: a pin stays exactly as old as the day you wrote it. That's the trade-off we accept, not a reason to float.
  • "The comment is enough, I'll fix the SHA later." → A comment that doesn't match its SHA is worse than no comment.
  • "Pinning makes the workflow harder to read." → The # vX.Y.Z comment restores readability.
  • "I'll pin later." → Pin in the same change.

Non-goals

  • CI enforcement (zizmor, or a Dependabot github-actions ecosystem config) is a possible follow-up, not part of this skill.
  • Fixing a pull_request_target or workflow_run design problem where pull-request code is checked out and executed with secrets in scope (pwn-request risk). Flag it and hand it to the user; it needs its own issue and PR.
  • Editing global-owned workflows.

© asyncapi, Apache-2.0. 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 .claude/skills/github-actions-supply-chain-pinning of asyncapi/generator.

Open the folder on GitHubat commit ab1f79a

Compare with similar skills

GitHub Actions Supply Chain Pinning 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.

GitHub Actions Supply Chain Pinning compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
GitHub Actions Supply Chain Pinning this skillasyncapi/generator1.1k—~1.9kAutomated safety check: PassApache-2.0
Supply Chain Guarddavila7/claude-code-templates32k—~1.7kAutomated safety check: NotesMIT
Review Dependenciestobihagemann/turbo407—~1.5kAutomated safety check: PassMIT
CI Pipeline Synthesizerkajisho5/ffmpeg-skill1.9k1 repos~1.1kAutomated safety check: PassMIT
npm Release Via GitHub Actionsjmfederico/pi-web866—~2.9kAutomated safety check: PassMIT
Release Flowromankurnovskii/BrewMate301—~976Automated safety check: PassMIT

Similar skills

  • Supply Chain Guard

    davila7/claude-code-templates

    Detect and remediate software supply chain attacks in npm, PyPI, crates.io, GitHub Actions, and CI/CD pipelines by scanning for known compromised packages, malicious versions, filesystem IOCs, C2…

    32k GitHub stars~1.7k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Review Dependencies

    tobihagemann/turbo

    Detect package managers and CI action pins, then discover outdated or vulnerable dependencies.

    407 GitHub stars~1.5k tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • CI Pipeline Synthesizer

    kajisho5/ffmpeg-skill

    Generate GitHub Actions CI/CD pipeline configurations for automated building and testing of library and package projects.

    1.9k GitHub starsUsed in 1 repo~1.1k tokens
    DevOps & CloudAuto-check passed
  • A skill your agent uses whenever the user asks for a new npm version, npm release, package release, new release, version bump, publishing to npm, cutting a GitHub release, tagging a release, or…

    866 GitHub stars~2.9k tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • Release Flow

    romankurnovskii/BrewMate

    Automate the full application release flow for BrewMate, including committing local changes, bumping version, waiting for GitHub Actions release build, and pushing the in-repo cask update…

    301 GitHub stars~976 tokensUpdated 10 days ago
    DevOps & CloudAuto-check passed
  • Publishing

    adeze/raindrop-mcp

    Publishing and release workflow with semantic-release and GitHub Actions

    188 GitHub stars~398 tokensUpdated 2 mo ago
    DevOps & CloudAuto-check passed

More from asyncapi/generator

  • Migrate Component

    asyncapi/generator

    Promote a duplicated React/JSX template-local component into the shared @asyncapi/generator-components package.

    1.1k GitHub stars~3k tokensUpdated 3 days ago
    Auto-check passed
  • Port Client Component

    asyncapi/generator

    Port a component or feature that already exists in one protocol client template to sibling clients under packages/templates/clients/<protocol/ that are missing it.

    1.1k GitHub stars~4.6k tokensUpdated 3 days ago
    Auto-check passed

Questions about GitHub Actions Supply Chain Pinning

What does GitHub Actions Supply Chain Pinning do?

A skill your agent uses when editing, adding, or reviewing any file under .github/workflows/, or when a CI step installs a CLI tool (npm i -g, npx, pipx, uses: /setup-). GitHub Actions Supply Chain Pinning is an agent skill from asyncapi/generator.github/workflows/, or when a CI step installs a CLI tool (npm i -g, npx, pipx, uses: /setup-).

When should I use GitHub Actions Supply Chain Pinning?

GitHub Actions Supply Chain Pinning fits situations like: reviewing any file under .github/workflows/; A CI step installs a CLI tool (npm i -g.

How do I install GitHub Actions Supply Chain Pinning in Claude Code?

Run `npx skills add asyncapi/generator --skill github-actions-supply-chain-pinning -a claude-code`. Or copy the skill folder (.claude/skills/github-actions-supply-chain-pinning in asyncapi/generator) into .claude/skills/github-actions-supply-chain-pinning in your project. Claude Code loads it when a task matches its description.

How do I install GitHub Actions Supply Chain Pinning in Codex?

Run `npx skills add asyncapi/generator --skill github-actions-supply-chain-pinning -a codex`. Or copy the skill folder (.claude/skills/github-actions-supply-chain-pinning in asyncapi/generator) into .agents/skills/github-actions-supply-chain-pinning in your project. Codex loads it when a task matches its description.

Can I use GitHub Actions Supply Chain Pinning 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 asyncapi/generator --skill github-actions-supply-chain-pinning -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/github-actions-supply-chain-pinning, .gemini/skills/github-actions-supply-chain-pinning, .github/skills/github-actions-supply-chain-pinning and .opencode/skills/github-actions-supply-chain-pinning in your project.

What does GitHub Actions Supply Chain Pinning need to run?

Going by SKILL.md and its folder, GitHub Actions Supply Chain Pinning needs the command-line tools its instructions call (gh, npm, npx, rg, git and pipx). Our summary lists: Node.js; Docker.

Does GitHub Actions Supply Chain Pinning access the network?

SKILL.md contains no URLs. Its commands use gh, npm, npx and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is GitHub Actions Supply Chain Pinning safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does GitHub Actions Supply Chain Pinning use?

GitHub Actions Supply Chain Pinning is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does GitHub Actions Supply Chain Pinning use?

About 1.9k tokens (SKILL.md is roughly 7.6k 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 GitHub Actions Supply Chain Pinning?

Skills that share tags, products or a category with GitHub Actions Supply Chain Pinning: Supply Chain Guard (davila7/claude-code-templates, 32k stars), Review Dependencies (tobihagemann/turbo, 407 stars), CI Pipeline Synthesizer (kajisho5/ffmpeg-skill, 1.9k stars) and npm Release Via GitHub Actions (jmfederico/pi-web, 866 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains GitHub Actions Supply Chain Pinning?

asyncapi (a GitHub organization) maintains it in asyncapi/generator, which has 1,081 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 5, 2026.

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