finops-waste
SKILL.md
/finops:waste
Identify GitHub Actions waste patterns and provide actionable fix suggestions. Analyzes skipped runs, bot triggers, missing concurrency groups, and missing path filters.
Context
- Current repo URL: !
git remote get-url origin - Workflow files: !
find .github/workflows -maxdepth 1 \( -name '*.yml' -o -name '*.yaml' \)
Parameters
| Parameter | Description | Default |
|---|---|---|
repo |
Repository in owner/name format | Current repository |
Execution
1. Run API-based waste analysis:
bash "${SKILL_DIR}/scripts/waste-analysis.sh" "$REPO"
2. Workflow file analysis (requires local filesystem):
echo ""
echo "=== Workflow File Analysis ==="
for f in .github/workflows/*.yml .github/workflows/*.yaml 2>/dev/null; do
[ -f "$f" ] || continue
name=$(basename "$f")
issues=""
# Check for concurrency
if ! grep -q "concurrency:" "$f"; then
issues="${issues}missing-concurrency "
fi
# Check for path filters (on push/pull_request without paths)
if grep -qE "^\s*(push|pull_request):" "$f" && ! grep -q "paths:" "$f"; then
issues="${issues}no-path-filter "
fi
# Check for bot filter
if ! grep -q "github.event.sender.type" "$f" && ! grep -q "github.actor" "$f"; then
issues="${issues}no-bot-filter "
fi
# Check for cancel-in-progress
if grep -q "pull_request:" "$f" && ! grep -q "cancel-in-progress:" "$f"; then
issues="${issues}no-cancel-in-progress "
fi
if [ -n "$issues" ]; then
echo " $name: $issues"
else
echo " $name: OK"
fi
done
Fix Suggestions
After analysis, provide specific fixes based on findings:
Fix: Missing Concurrency Group
# Add to workflow file at top level or per-job
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true # For PR workflows
Fix: Bot Trigger Filter
jobs:
build:
# Skip if triggered by a bot
if: github.event.sender.type != 'Bot'
runs-on: ubuntu-latest
steps: ...
Or for specific bots:
if: github.actor != 'dependabot[bot]' && github.actor != 'renovate[bot]'
Fix: Add Path Filters
on:
push:
branches: [main]
paths:
- 'src/**'
- 'package.json'
- 'package-lock.json'
paths-ignore:
- '**.md'
- 'docs/**'
- '.github/**'
pull_request:
paths:
- 'src/**'
- 'package.json'
Fix: Cancel Duplicate PR Runs
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
Output Format
=== Waste Analysis: org/repo ===
=== Skipped Runs ===
Total runs: 100
Skipped: 15 (15%)
By workflow:
CI: 10 skipped
CodeQL: 5 skipped
=== Bot-Triggered Runs ===
Bot-triggered: 25/100 runs
By bot:
dependabot[bot]: 15 runs
renovate[bot]: 10 runs
=== Workflow File Analysis ===
ci.yml: missing-concurrency no-path-filter
deploy.yml: OK
codeql.yml: no-bot-filter
=== Potential Duplicate Runs ===
Commit abc1234: 3 runs (CI, CodeQL, Security)
=== High-Frequency Workflows ===
CI: 67 runs in sample - review trigger conditions
Post-actions
- Offer to apply fixes: For each issue found, offer to edit the workflow file directly
- Prioritize by impact: Focus on high-frequency workflows first
- Test recommendations: Suggest testing changes on a feature branch first
- Create tracking issue: Optionally create a GitHub issue to track optimization work
Weekly Installs
43
Repository
laurigates/clau…-pluginsGitHub Stars
13
First Seen
Feb 9, 2026
Security Audits
Installed on
cline43
github-copilot43
codex43
kimi-cli43
gemini-cli43
cursor43