github-actions-plugin/skills/github-actions-inspection/SKILL.md
Inspect GitHub Actions runs, analyze logs, debug failures. Use when investigating CI/CD failures, checking workflow status, or debugging GitHub Actions issues.
npx skillsauth add laurigates/claude-plugins github-actions-inspectionInstall 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.
| Use this skill when... | Use the linked sibling instead when... |
|---|---|
| Pulling status, logs, and conclusions from gh run for a failing workflow | Authoring or modifying a workflow YAML file — see claude-code-github-workflows |
| Diagnosing flaky tests, timeouts, or auth-permission errors in a CI run | Searching upstream OSS issues for a library bug — see github-issue-search |
| Rerunning failed jobs, watching in-progress runs, or extracting error lines | Building a workflow that auto-fixes CI failures — see github-workflow-auto-fix |
Expert knowledge for inspecting, debugging, and troubleshooting GitHub Actions workflow runs using gh CLI and GitHub API.
For detailed examples, advanced patterns, and best practices, see REFERENCE.md.
Workflow Run Inspection
Log Analysis
Debugging Workflows
# List all workflow runs
gh run list
# List runs for specific workflow
gh run list --workflow=ci.yml
# Filter by status
gh run list --status=failure
gh run list --status=in_progress
# Filter by branch
gh run list --branch=main
# Combine filters
gh run list --workflow=ci.yml --status=failure --limit 5
# JSON output for parsing
gh run list --json databaseId,status,conclusion,name,createdAt,headBranch
# View specific run
gh run view <run-id>
# View failed logs only
gh run view <run-id> --log-failed
# View specific job
gh run view <run-id> --job=<job-id>
# JSON output
gh run view <run-id> --json status,conclusion,jobs,startedAt,updatedAt
# Download logs for run
gh run download <run-id>
# View failed step logs only
gh run view <run-id> --log-failed
# Extract specific job logs
gh api repos/:owner/:repo/actions/runs/<run-id>/logs | less
# Watch workflow progress
gh run watch <run-id>
# Watch with exit status
gh run watch <run-id> --exit-status
# Rerun entire workflow
gh run rerun <run-id>
# Rerun only failed jobs
gh run rerun <run-id> --failed
# Rerun with debug logging
gh run rerun <run-id> --debug
# Cancel specific run
gh run cancel <run-id>
# Get last 10 failed runs
gh run list --status=failure --limit 10
# Get failures with details
gh run list --workflow=ci.yml --status=failure --limit 5 \
--json databaseId,conclusion,name,createdAt,headBranch,headSha
# Get runs for specific commit
gh run list --commit=<sha>
# Find tests that sometimes pass
gh run list --workflow=test.yml --limit 20 --json conclusion \
| jq 'group_by(.conclusion) | map({conclusion: .[0].conclusion, count: length})'
# View failed logs
gh run view <run-id> --log-failed
# Extract error lines
gh run view <run-id> --log-failed | grep -i "error\|failed\|exception"
# Parse JSON for errors
gh api repos/:owner/:repo/actions/runs/<run-id>/jobs \
| jq '.jobs[] | select(.conclusion == "failure") | {name, steps: [.steps[] | select(.conclusion == "failure")]}'
# Get run duration
gh run view <run-id> --json startedAt,completedAt,durationMs
# Compare run times
gh run list --workflow=ci.yml --limit 10 \
--json databaseId,createdAt,updatedAt,durationMs \
| jq '.[] | {id: .databaseId, duration_min: (.durationMs / 60000)}'
# Check current status
gh run list --status=in_progress
# Summary of run statuses
gh run list --limit 50 --json conclusion \
| jq 'group_by(.conclusion) | map({conclusion: .[0].conclusion, count: length})'
| Pattern | Symptoms | Quick Fix | |---------|----------|-----------| | Authentication | "403 Forbidden", "Resource not accessible" | Check GITHUB_TOKEN scope, workflow permissions | | Timeout | "exceeded maximum execution time" | Increase timeout-minutes, split parallel jobs | | Flaky tests | Same test passes/fails inconsistently | Fix race conditions, mock external deps | | Dependency install | "Could not find package", "Version conflict" | Lock versions, use cache | | Environment | "Command not found", "Module not found" | Verify setup steps, check runner version | | Resource constraints | "out of disk space", "Process killed" | Clean artifacts, increase runner size |
| Context | Command |
|---------|---------|
| Quick failure check | gh run list --status=failure --limit 5 --json databaseId,conclusion,name |
| Failed logs only | gh run view <id> --log-failed |
| JSON run details | gh run view <id> --json status,conclusion,jobs |
| Failure rate | gh run list --limit 50 --json conclusion \| jq 'group_by(.conclusion)' |
| Rerun failed only | gh run rerun <id> --failed |
gh run list - List workflow runsgh run view <id> - View run detailsgh run watch <id> - Watch run progressgh run download <id> - Download logs/artifactsgh run rerun <id> - Rerun workflowgh run cancel <id> - Cancel running workflow--workflow=<name> - Specific workflow--status=<status> - Filter by status (in_progress, completed, queued, waiting)--conclusion=<conclusion> - Filter by conclusion (success, failure, cancelled, skipped)--branch=<branch> - Specific branch--event=<event> - Specific trigger event--limit=<n> - Limit results--json <fields> - JSON outputqueued - Waiting to startin_progress - Currently runningcompleted - Finished (check conclusion)waiting - Waiting for approvalsuccess - All jobs succeededfailure - At least one job failedcancelled - Manually cancelledskipped - Skipped (conditional)timed_out - Exceeded time limitThis skill complements:
tools
Scaffold a new ComfyUI custom-node repo (pyproject, CI, release-please, vitest+pytest, JS extension skeleton) in the picker/gesture vein. Use when bootstrapping or init-ing a comfyui node pack.
tools
Orchestrate a ComfyUI node pack from idea to registry: scaffold, create + seed the repo, open the gitops adoption PR. Use when releasing or spinning up a new comfyui node pack.
testing
macOS EndpointSecurity/EDR high CPU & battery drain. Use when Kandji ESF / XProtect pegs a core; trace the exec storm via powermetrics + eslogger.
development
odiff pixel-by-pixel image diffing. Use when comparing screenshots, detecting visual regressions, diffing before/after PNGs, asserting golden images.