.agents/skills/github-actions/SKILL.md
Guides the creation, modification, and review of GitHub Actions workflows in the Skill System Foundry repository. Covers workflow YAML syntax, trigger configuration, permission models, SHA-pinned actions, matrix strategies, artifact passing, and concurrency control. Triggers when asked to create or modify a workflow, add a CI job, configure triggers or permissions, pin an action to a SHA, troubleshoot a failing workflow, or review a workflow change. Also triggers on phrases like "add a workflow," "fix the CI," "pin this action," "workflow permissions," or "why is this action failing." Use this skill for any work involving .github/workflows/ YAML files.
npx skillsauth add milanhorvatovic/skill-system-foundry github-actionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guides the creation, modification, and review of GitHub Actions workflows in the Skill System Foundry repository. Codifies the conventions established across the four existing workflows.
| Workflow | File | Trigger | Jobs |
|---|---|---|---|
| Tests + coverage | python-tests.yaml | Push to main, PRs | test (matrix), update-badge |
| Shell lint | shellcheck.yaml | Push/PR (path-filtered to .sh) | shellcheck |
| Codex code review | codex-code-review.yaml | PR events (non-draft) | review (read-only), publish (write) |
| Release bundle | release.yml | Release published | bundle |
Every action must be pinned to a full 40-character commit SHA, not a tag. Include a comment with the tag and semver for readability:
# Correct
- uses: actions/checkout@de0fac2e5ef641dbfe0fef2a1de4a5c3a0d70dce # @v6 as 6.0.2
# Wrong — tag-only reference
- uses: actions/checkout@v4
When updating an action version:
Scope permissions as narrowly as possible. Default to contents: read. Only add write permissions where required, and prefer job-level over workflow-level permissions:
# Preferred: job-level permissions
jobs:
test:
permissions:
contents: read
deploy:
permissions:
contents: write
# Acceptable: workflow-level when all jobs need the same
permissions:
contents: read
The Codex code review workflow demonstrates the ideal pattern: a read-only review job followed by a write-capable publish job, isolating the permission boundary.
Secrets are accessed via ${{ secrets.VARIABLE_NAME }}, variables via ${{ vars.VARIABLE_NAME }}. Never echo secrets to logs. Shell scripts called by workflows validate required environment variables at the top with ${VAR:?}.
main — for CI that should run on every merge (tests, badge updates)pull_request — for validation that gates merges (tests, lint, code review)paths: to avoid triggering on unrelated changes. shellcheck.yaml only runs when .sh files changetypes: [opened, reopened, synchronize, ready_for_review]ubuntu-latest is the default for all jobswindows-latest via matrix only when cross-platform testing is needed (currently only python-tests.yaml)Use matrix for cross-platform or multi-version testing. Set fail-fast: false so all combinations run even if one fails:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
python-version: ["3.12"]
Use concurrency groups with cancel-in-progress: true to avoid redundant runs on rapid pushes:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
The Codex review workflow uses PR-number-based concurrency: codex-review-${{ github.event.pull_request.number }}.
When jobs with different permission scopes need to share data, use upload/download artifact pairs:
This pattern is used by both python-tests.yaml (coverage total) and codex-code-review.yaml (review output). Never pass data through workflow outputs for sensitive content.
Set explicit timeout-minutes on jobs that call external services or could hang:
jobs:
review:
timeout-minutes: 30
publish:
timeout-minutes: 5
Jobs that only run shell commands or Python scripts can rely on the GitHub default (6 hours) but consider setting a reasonable limit.
.github/workflows/<name>.yamlmainCheck these in order:
uses: line without a 40-character SHA${VAR:?} at the top@v4) instead of a SHA — breaks reproducibility and is a security riskcontents: write at workflow level when only one job needs ittimeout-minutes on jobs that call external APIstools
Greets a recipient through one of two registered tones — formal or casual — by dispatching to a dedicated capability. Activates when the conversation asks for a tone-specific welcome or a switch between formal and casual greetings; use when comparing the two styles. Demonstrates the router pattern in the Skill System Foundry — a thin SKILL.md entry point routing to capability files, with allowed-tools declared in frontmatter so capability shell fences pass validation.
testing
Greets a single recipient with a friendly welcome message rendered in a formal or casual tone. Activates when the conversation asks to say hello or welcome someone; use when a minimal standalone skill is needed. Demonstrates the smallest valid standalone skill in the Skill System Foundry — required name and description frontmatter plus an optional metadata block — and how its layout passes validation.
testing
Designs and evolves AI-agnostic skill systems. Triggers on skill/capability creation, role definition, or router migration; use when auditing consistency or improving token efficiency.
development
Governs the configuration.yaml file that serves as the single source of truth for all validation rules in the Skill System Foundry. Triggers when adding, modifying, or reviewing validation rules, limits, patterns, or reserved words. Also triggers when working with constants.py, yaml_parser.py, or any code that reads from configuration.yaml. Use this skill when asked to add a new validation check, change a limit or threshold, update reserved word lists, add SPDX license identifiers, modify regex patterns, or troubleshoot why a validation rule is not working as expected. Activates on mentions of configuration, validation rules, constants, thresholds, or pattern definitions.