setup-ci-903a0e — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited setup-ci-903a0e (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Project-agnostic, global skill. It scans any GitHub repository, reads and audits any existing .github/workflows/ files, and proposes a clean GitHub Actions CI setup where each concern is a separate job — so every check gets its own pass/fail indicator in the GitHub PR and Actions UI, making it easy to pinpoint exactly what broke.
It pairs with propose-automation: that skill handles the broader Codex automation layer; this one focuses exclusively on the GitHub Actions CI pipeline.
retryable, cancellable, and visible in GitHub's status checks. Never bundle unrelated checks into one job just because it is convenient.
.github/workflows/ already exists, read it first.Propose targeted improvements (missing jobs, missing caching, missing concurrency control, overly broad permissions) rather than replacing it wholesale.
on: push + on: pull_request + workflow_dispatch (manual runs from GitHub UI)concurrency: group: ${{ github.workflow }}-${{ github.ref }}, cancel-in-progress: truepermissions: contents: read at workflow level (least-privilege GITHUB_TOKEN)timeout-minutes on every job (prevent stuck runners burning quota)cache: option, or actions/cachefrom writing files.
user about required status checks in branch protection, the README badge, and Dependabot.
.github/workflows/ for existing workflow files; read them fully if present.package.json, pyproject.toml, go.mod,Cargo.toml, Makefile/justfile, Dockerfile, etc.
scripts in package.json, [tool.pytest],.eslintrc*, tsconfig.json, ruff.toml, .shellcheck*, requirements*.txt, etc.
git log --oneline -20 to understand what kinds of changesland frequently.
its summary to keep the main context clean.
shellcheck; Python → ruff/mypy; Docker → build check; etc.
Ask 2–3 targeted questions — treat scan-based hypotheses as things to confirm, not conclusions. Example angles:
Adapt questions to what the scan reveals (e.g., skip the test question if a test command is clearly wired up already with an existing CI job covering it).
Present a ranked list of separate jobs. For each job:
name: value that appears in GitHub UI) + one-line purposeGroup the proposal into categories:
workflow_dispatch) — list briefly at the endInclude a "Not proposed / deferred" section naming what you intentionally left out and why (e.g., "E2E tests — no Playwright/Cypress config found; add when the suite exists").
Building nothing in this step is correct.
For each approved item:
.github/workflows/ci.yml (default) — or a separate file if the userapproves a concern that belongs in its own workflow (e.g., release.yml, deploy.yml).
name: values from the proposal — those are what appear in GitHub'srequired-status-checks dropdown; renaming them later breaks branch protection rules.
latest aliases so newruntime releases don't silently break CI.
actions/checkout@v4, not @main).Present this checklist every time a workflow file is written:
Required status checks (important):
GitHub → repo Settings → Branches → your branch → Edit → "Require status checks to pass" → add each job by its exact name: value. Without this step, the jobs run but do not block merges.README badge (offer): Provide the badge markdown for the user to paste: 
Dependabot for Actions (offer): Offer to create .github/dependabot.yml to keep action versions updated automatically:
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weeklyto every workflow file written.
@v4, not @main or @latest).name: values stable after writing — they become required status check keys.decline gracefully and name the right tool.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.