Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configures GitHub Actions CI/CD workflows for testing, linting, and deployment. Use when setting up automation for a Python, Rust, or TypeScript project.
.claude/skills/athola-workflow-setup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -1% | 0% |
Set up GitHub Actions workflows for continuous integration and deployment.
/attune:upgrade-project instead for updating existing workflowsbashls -la .github/workflows/
Verification: Run the command with --help flag to verify availability.
pythonfrom project_detector import ProjectDetector detector = ProjectDetector(Path.cwd()) language = detector.detect_language() required_workflows = { "python": ["test.yml", "lint.yml", "typecheck.yml"], "rust": ["ci.yml"], "typescript": ["test.yml", "lint.yml", "build.yml"], } missing = detector.get_missing_configurations(language)
Verification: Run pytest -v to verify tests pass.
pythonworkflows_dir = Path(".github/workflows") workflows_dir.mkdir(parents=True, exist_ok=True) for workflow in required_workflows[language]: template = templates_dir / language / "workflows" / f"{workflow}.template" output = workflows_dir / workflow engine.render_file(template, output) print(f"✓ Created: {output}")
Verification: Run the command with --help flag to verify availability.
bash# Syntax check (requires act or gh CLI) gh workflow list # Or manually check YAML syntax python3 -c "import yaml; yaml.safe_load(open('.github/workflows/test.yml'))"
Verification: Run pytest -v to verify tests pass.
yaml# Good - pinned to major version - uses: actions/checkout@v4 - uses: actions/setup-python@v5 # Avoid - unpinned or outdated - uses: actions/checkout@v2 - uses: actions/setup-python@latest
Verification: Run pytest -v to verify tests pass.
yamlstrategy: matrix: python-version: ["3.10", "3.11", "3.12"] os: [ubuntu-latest, macos-latest, windows-latest]
Verification: Run pytest -v to verify tests pass.
yaml- uses: actions/setup-python@v5 with: python-version: '3.10' cache: 'pip' # Cache pip dependencies
Verification: Run python --version to verify Python environment.
When writing inline shell scripts in workflows, ensure proper exit code handling:
yaml# BAD - pipeline masks exit code - run: | make typecheck 2>&1 | grep -v "^make\[" echo "Typecheck passed" # Runs even if make failed! # GOOD - use pipefail - run: | set -eo pipefail make typecheck 2>&1 | grep -v "^make\[" # GOOD - capture exit code explicitly - run: | output=$(make typecheck 2>&1) || exit_code=$? echo "$output" | grep -v "^make\[" || true exit ${exit_code:-0}
For complex wrapper scripts, run /pensive:shell-review before integrating.
To update workflows to latest versions:
bash/attune:upgrade-project --component workflows
Verification: Run the command with --help flag to verify availability.
Skill(attune:project-init) - Full project initializationSkill(sanctum:pr-prep) - PR preparation with CI checks.github/workflows/(Python: test.yml + lint.yml + typecheck.yml; Rust: ci.yml; TypeScript: test.yml + lint.yml + build.yml) and contain valid YAML syntax verified by python3 -c "import yaml; yaml.safe_load(open('...'))".
gh workflow list returns each created workflow file as an entry, confirming GitHubrecognizes the workflow definitions.
set -eo pipefail or explicit exit-codecapture; pipeline-masked failures (cmd | grep) without pipefail are flagged as errors.
skill reports this incompatibility and stops rather than generating GitHub-specific files.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | 14,303 | 8,287 | -42% | 1 | 1 | 0% | 2,599 | 2,457 | -5% | 0 | 0 | — |
case-01 | fail→fail | 4,176 | 6,258 | +50% | 1 | 1 | 0% | 137 | 1,965 | +1334% | 0 | 0 | — |
case-02 | fail→fail | 5,065 | 6,307 | +25% | 1 | 1 | 0% | 234 | 1,940 | +729% | 0 | 0 | — |
case-03 | fail→fail | 3,894 | 5,483 | +41% | 1 | 1 | 0% | 111 | 1,778 | +1502% | 0 | 0 | — |
case-04 | fail→pass | 11,477 | 3,330 | -71% | 1 | 1 | 0% | 2,035 | 2,074 | +2% | 0 | 0 | — |
case-06 | fail→pass | 12,064 | 2,530 | -79% | 1 | 1 | 0% | 2,102 | 1,912 | -9% | 0 | 0 | — |
case-07 | pass→pass | 10,804 | 4,568 | -58% | 1 | 1 | 0% | 1,765 | 2,244 | +27% | 0 | 0 | — |
case-08 | pass→pass | 13,315 | 9,752 | -27% | 1 | 1 | 0% | 2,164 | 3,226 | +49% | 0 | 0 | — |
case-09 | fail→pass | 12,281 | 3,940 | -68% | 1 | 1 | 0% | 1,925 | 2,204 | +14% | 0 | 0 | — |
case-10 | pass→pass | 3,191 | 4,269 | +34% | 1 | 1 | 0% | 586 | 2,291 | +291% | 0 | 0 | — |
case-11 | pass→pass | 7,094 | 3,563 | -50% | 1 | 1 | 0% | 1,174 | 2,093 | +78% | 0 | 0 | — |
case-12 | fail→pass | 12,283 | 2,895 | -76% | 1 | 1 | 0% | 2,097 | 2,073 | -1% | 0 | 0 | — |
case-13 | fail→pass | 13,430 | 2,727 | -80% | 1 | 1 | 0% | 2,319 | 1,973 | -15% | 0 | 0 | — |
case-14 | pass→fail | 2,152 | 1,108 | -49% | 1 | 1 | 0% | 277 | 1,706 | +516% | 0 | 0 | — |
case-15 | pass→pass | 5,258 | 2,386 | -55% | 1 | 1 | 0% | 830 | 1,887 | +127% | 0 | 0 | — |
case-16 | fail→pass | 10,204 | 1,726 | -83% | 1 | 1 | 0% | 1,656 | 1,757 | +6% | 0 | 0 | — |
case-17 | pass→pass | 8,055 | 1,740 | -78% | 1 | 1 | 0% | 1,414 | 1,829 | +29% | 0 | 0 | — |
case-18 | pass→pass | 6,420 | 1,742 | -73% | 1 | 1 | 0% | 1,080 | 1,724 | +60% | 0 | 0 | — |
case-19 | pass→pass | 10,596 | 1,217 | -89% | 1 | 1 | 0% | 1,770 | 1,740 | -2% | 0 | 0 | — |
case-20 | pass→pass | 7,006 | 1,780 | -75% | 1 | 1 | 0% | 1,147 | 1,864 | +63% | 0 | 0 | — |
case-21 | pass→pass | 3,215 | 1,840 | -43% | 1 | 1 | 0% | 443 | 1,804 | +307% | 0 | 0 | — |
case-22 | pass→pass | 10,590 | 3,344 | -68% | 1 | 1 | 0% | 1,669 | 2,060 | +23% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.