---
id: pin-github-actions
track: coding
version: 0.0.7
label: blocks
keyword: block
where: write turn-end
sha256: ef86d2b0c6a1b7f143ed6a4f85eb48821c901b08013cb5853a776b8858388424
source: https://github.com/open-coder-ai/chock-catalog/tree/1e60d211c1bb767152c6ab0167932da06ab3a10f/base/pin-github-actions
catalog_ref: 1e60d211c1bb767152c6ab0167932da06ab3a10f
---

# Pin GitHub Actions

pin-github-actions · version 0.0.7

Blocks — Blocks on an agent's file writes and at turn end. Chock adds friction. It is not a security boundary. 

In a git repo: at commit (Chock refuses the commit, locally and in CI.)



## What it does

Blocks uses: of an action/reusable workflow at a movable ref (not a lowercase 40-hex SHA) and a docker:// image without @sha256, quoted, JSON or flow; an alias, escape or value off the uses line is refused. Local ./ passes. Scope: .github/workflows/, .github/actions/, action.y*ml. Line regex, no YAML parse: container image tags, impostor SHAs, a tag named as 40 hex pass. Waiver: 'pragma: allowlist unpinned-action' same line. Person's commit: honoured. Agent: only if in HEAD; MCP gateway: never.

## Its label on each agent

- Claude Code (tested): Blocks — Blocks on an agent's file writes and at turn end. Builder: /coding/builder/#client=claude-code&p=pin-github-actions
- Cursor (tested): Blocks — Blocks on an agent's file writes and at turn end. Builder: /coding/builder/#client=cursor&p=pin-github-actions
- Codex (tested): Blocks — Blocks on an agent's file writes and at turn end. If the hook errors, the action goes through (not witnessed; the vendor's row is only partly live-run). Builder: /coding/builder/#client=codex&p=pin-github-actions
- GitHub Copilot (tested): Blocks — Blocks at turn end only. It does not check a file write when it happens. If the hook errors, the action goes through (not witnessed; the vendor's row is only partly live-run). Builder: /coding/builder/#client=copilot&p=pin-github-actions
- Devin (tested): Blocks — Blocks at turn end only. It does not check a file write when it happens. If the hook errors, the action goes through (vendor docs only, not witnessed). Builder: /coding/builder/#client=devin&p=pin-github-actions
- Grok (tested): Not graded yet for Grok. Builder: /coding/builder/#client=grok&p=pin-github-actions
- goose (tested): Not graded yet for goose. Builder: /coding/builder/#client=goose&p=pin-github-actions
- Antigravity (tested): Not graded yet for Antigravity. Builder: /coding/builder/#client=antigravity&p=pin-github-actions
- OpenHands (untested): Not graded yet for OpenHands. Builder: /coding/builder/#client=openhands&p=pin-github-actions
- Kimi Code (untested): Not graded yet for Kimi Code. Builder: /coding/builder/#client=kimi-code&p=pin-github-actions
- Factory Droid (untested): Not graded yet for Factory Droid. Builder: /coding/builder/#client=factory-droid&p=pin-github-actions

## What it misses

This policy does not state what it misses.

## Examples

- Refused: A staged workflow references an action by a major version tag.
- Allowed: A staged workflow pins the action to a full commit SHA.

## Latest change

0.0.7 · 2026-10-07 — Promoted from draft to production: every test case ran and passed, and no bug report was open. Behaviour unchanged.

## Provenance

- Tested by 63 of 63 cases run automatically
- SHA-256: `ef86d2b0c6a1b7f143ed6a4f85eb48821c901b08013cb5853a776b8858388424`
- Catalog commit: https://github.com/open-coder-ai/chock-catalog/commit/1e60d211c1bb767152c6ab0167932da06ab3a10f
- Source: https://github.com/open-coder-ai/chock-catalog/tree/1e60d211c1bb767152c6ab0167932da06ab3a10f/base/pin-github-actions (catalog path `base/pin-github-actions`)
- Presets: CI pipeline
- JSON: `/api/coding/policies/pin-github-actions.json`
- Report a problem: https://chock.sh/report/?policy=pin-github-actions&version=0.0.7&page=%2Fcoding%2Fpolicies%2Fpin-github-actions%2F
