Manage GitHub Actions workflows - trigger, monitor, view logs, and download artifacts using gh CLI
Monitor and manage GitHub Actions workflows using gh CLI - trigger runs, view logs, cancel jobs, and download artifacts when you need to debug CI/CD pipelines or manage workflow execution
/plugin marketplace add Nice-Wolf-Studio/agent-github-skills/plugin install nice-wolf-studio-github-skills@Nice-Wolf-Studio/agent-github-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
This skill provides operations for managing GitHub Actions workflows, including viewing runs, triggering workflows, managing artifacts, and monitoring CI/CD pipelines.
View workflow run history with filtering options.
Get detailed information about a specific workflow run.
Manually trigger a workflow_dispatch workflow.
Stop a running workflow.
Rerun a failed or completed workflow.
Download and view logs from workflow runs.
Download build artifacts from workflow runs.
View all workflows in a repository.
Get information about individual workflow jobs.
List all workflow runs:
gh run list --repo owner/repo-name
List runs with limit:
gh run list --repo owner/repo-name --limit 50
Filter by workflow:
gh run list --repo owner/repo-name --workflow "CI"
Filter by branch:
gh run list --repo owner/repo-name --branch main
Filter by status:
gh run list --repo owner/repo-name --status completed
gh run list --repo owner/repo-name --status failure
gh run list --repo owner/repo-name --status in_progress
Filter by event:
gh run list --repo owner/repo-name --event push
gh run list --repo owner/repo-name --event pull_request
gh run list --repo owner/repo-name --event workflow_dispatch
Filter by actor:
gh run list --repo owner/repo-name --user username
JSON output:
gh run list --repo owner/repo-name --json databaseId,headBranch,status,conclusion,workflowName,event
View run summary:
gh run view 123456 --repo owner/repo-name
View with job details:
gh run view 123456 --repo owner/repo-name --job
View in browser:
gh run view 123456 --repo owner/repo-name --web
View logs:
gh run view 123456 --repo owner/repo-name --log
View failed logs only:
gh run view 123456 --repo owner/repo-name --log-failed
JSON output:
gh run view 123456 --repo owner/repo-name --json status,conclusion,workflowName,headBranch,createdAt,updatedAt
Get run by workflow and branch:
# Get latest run for specific workflow on branch
gh run list --repo owner/repo-name --workflow "CI" --branch main --limit 1
Trigger workflow on default branch:
gh workflow run ci.yml --repo owner/repo-name
Trigger on specific branch:
gh workflow run ci.yml --repo owner/repo-name --ref feature-branch
Trigger with inputs:
gh workflow run deploy.yml --repo owner/repo-name \
-f environment=production \
-f version=1.2.3
Trigger and watch:
gh workflow run test.yml --repo owner/repo-name && \
gh run watch $(gh run list --workflow test.yml --limit 1 --json databaseId --jq '.[0].databaseId')
Using API for complex inputs:
gh api repos/owner/repo-name/actions/workflows/deploy.yml/dispatches \
-f ref=main \
-f 'inputs[environment]=staging' \
-f 'inputs[deploy_type]=full'
Cancel specific run:
gh run cancel 123456 --repo owner/repo-name
Cancel all in-progress runs:
gh run list --repo owner/repo-name --status in_progress --json databaseId --jq '.[].databaseId' | \
xargs -I {} gh run cancel {} --repo owner/repo-name
Cancel runs for specific branch:
gh run list --repo owner/repo-name --branch feature-branch --status in_progress --json databaseId --jq '.[].databaseId' | \
xargs -I {} gh run cancel {} --repo owner/repo-name
Rerun entire workflow:
gh run rerun 123456 --repo owner/repo-name
Rerun only failed jobs:
gh run rerun 123456 --repo owner/repo-name --failed
Watch rerun:
gh run rerun 123456 --repo owner/repo-name && \
gh run watch 123456 --repo owner/repo-name
View logs in terminal:
gh run view 123456 --repo owner/repo-name --log
View specific job logs:
gh run view 123456 --repo owner/repo-name --job 987654 --log
Download logs:
gh run download 123456 --repo owner/repo-name --name logs
Stream live logs:
gh run watch 123456 --repo owner/repo-name
Download all logs as zip:
gh api repos/owner/repo-name/actions/runs/123456/logs > logs.zip
List artifacts for a run:
gh run view 123456 --repo owner/repo-name --json artifacts
Download all artifacts:
gh run download 123456 --repo owner/repo-name
Download specific artifact:
gh run download 123456 --repo owner/repo-name --name artifact-name
Download to specific directory:
gh run download 123456 --repo owner/repo-name --dir ./downloads
Using API to download:
# List artifacts
gh api repos/owner/repo-name/actions/runs/123456/artifacts --jq '.artifacts[] | {name, id, size_in_bytes}'
# Download specific artifact
ARTIFACT_ID=$(gh api repos/owner/repo-name/actions/runs/123456/artifacts --jq '.artifacts[0].id')
gh api repos/owner/repo-name/actions/artifacts/$ARTIFACT_ID/zip > artifact.zip
List all workflows:
gh workflow list --repo owner/repo-name
View workflow details:
gh workflow view ci.yml --repo owner/repo-name
View in browser:
gh workflow view ci.yml --repo owner/repo-name --web
Enable/disable workflow:
gh workflow enable ci.yml --repo owner/repo-name
gh workflow disable ci.yml --repo owner/repo-name
Get workflow state:
gh api repos/owner/repo-name/actions/workflows/ci.yml --jq '{state, path, name}'
List jobs in a run:
gh api repos/owner/repo-name/actions/runs/123456/jobs --jq '.jobs[] | {name, status, conclusion}'
View specific job:
gh api repos/owner/repo-name/actions/jobs/987654 --jq '{name, status, conclusion, started_at, completed_at, steps}'
View job logs:
gh api repos/owner/repo-name/actions/jobs/987654/logs
Rerun specific job:
gh api repos/owner/repo-name/actions/jobs/987654/rerun -X POST
# 1. Trigger workflow
gh workflow run ci.yml --repo owner/repo-name --ref main
# 2. Wait a moment for run to start
sleep 5
# 3. Get the run ID
RUN_ID=$(gh run list --workflow ci.yml --limit 1 --json databaseId --jq '.[0].databaseId')
# 4. Watch the run
gh run watch $RUN_ID --repo owner/repo-name
# 5. Check result
gh run view $RUN_ID --repo owner/repo-name --json conclusion --jq '.conclusion'
# 6. Download artifacts if successful
if [ "$(gh run view $RUN_ID --json conclusion --jq -r '.conclusion')" = "success" ]; then
gh run download $RUN_ID --repo owner/repo-name
fi
# 1. List recent failures
gh run list --repo owner/repo-name --status failure --limit 5
# 2. View failed run
gh run view 123456 --repo owner/repo-name --log-failed
# 3. Check job details
gh api repos/owner/repo-name/actions/runs/123456/jobs --jq '.jobs[] | select(.conclusion=="failure") | {name, steps: [.steps[] | select(.conclusion=="failure") | {name, conclusion}]}'
# 4. Download logs for analysis
gh api repos/owner/repo-name/actions/runs/123456/logs > debug-logs.zip
# 5. Rerun failed jobs after fix
gh run rerun 123456 --repo owner/repo-name --failed
# 1. Trigger deployment
gh workflow run deploy.yml --repo owner/repo-name \
--ref main \
-f environment=production \
-f version=$(cat VERSION)
# 2. Monitor deployment
RUN_ID=$(gh run list --workflow deploy.yml --limit 1 --json databaseId --jq '.[0].databaseId')
gh run watch $RUN_ID --repo owner/repo-name
# 3. Verify success
if [ "$(gh run view $RUN_ID --json conclusion --jq -r '.conclusion')" = "success" ]; then
echo "Deployment successful!"
gh run view $RUN_ID --repo owner/repo-name
else
echo "Deployment failed!"
gh run view $RUN_ID --repo owner/repo-name --log-failed
exit 1
fi
# List old completed runs
gh run list --repo owner/repo-name --status completed --limit 100 --json databaseId,createdAt
# Delete runs older than 30 days (using API)
CUTOFF_DATE=$(date -d '30 days ago' -Iseconds)
gh api repos/owner/repo-name/actions/runs --paginate --jq ".workflow_runs[] | select(.created_at < \"$CUTOFF_DATE\") | .id" | \
xargs -I {} gh api repos/owner/repo-name/actions/runs/{} -X DELETE
# Get all failed runs from last week
gh run list --repo owner/repo-name --status failure --created ">=$(date -d '7 days ago' +%Y-%m-%d)" --json databaseId --jq '.[].databaseId' | \
while read run_id; do
echo "Rerunning $run_id"
gh run rerun $run_id --repo owner/repo-name
sleep 2 # Rate limiting
done
# List all workflows and their recent status
gh workflow list --repo owner/repo-name --json name,path,state | \
jq -r '.[] | "\(.name) (\(.path)): \(.state)"'
# Check each workflow's latest run
gh workflow list --repo owner/repo-name --json name,path | \
jq -r '.[].path' | \
while read workflow; do
echo "Workflow: $workflow"
gh run list --workflow "$workflow" --limit 1 --repo owner/repo-name
echo ""
done
View all matrix jobs:
gh api repos/owner/repo-name/actions/runs/123456/jobs --jq '.jobs[] | {name, status, conclusion, matrix: .steps[0].name}'
Find failed matrix combinations:
gh api repos/owner/repo-name/actions/runs/123456/jobs --jq '.jobs[] | select(.conclusion=="failure") | {name, conclusion}'
Get workflow duration:
gh run view 123456 --repo owner/repo-name --json createdAt,updatedAt --jq '{created: .createdAt, updated: .updatedAt}'
Analyze job timing:
gh api repos/owner/repo-name/actions/runs/123456/jobs --jq '.jobs[] | {name, duration: (.completed_at - .started_at)}'
List concurrent runs:
gh run list --repo owner/repo-name --status in_progress
Cancel concurrent runs for same branch:
BRANCH="feature-branch"
gh run list --repo owner/repo-name --branch $BRANCH --status in_progress --json databaseId --jq '.[1:] | .[].databaseId' | \
xargs -I {} gh run cancel {} --repo owner/repo-name
View runner groups:
gh api repos/owner/repo-name/actions/runners --jq '.runners[] | {name, status, busy}'
Check runner usage:
gh api repos/owner/repo-name/actions/runs/123456/jobs --jq '.jobs[] | {name, runner_name: .runner_name, runner_group_name: .runner_group_name}'
# List available workflows
gh workflow list --repo owner/repo-name
# Verify workflow file exists
gh api repos/owner/repo-name/contents/.github/workflows --jq '.[].name'
# Verify run exists
gh run view 123456 --repo owner/repo-name 2>&1 | grep -q "could not find" && echo "Run not found"
# Check if workflow has workflow_dispatch trigger
gh api repos/owner/repo-name/actions/workflows/ci.yml --jq '.workflow_dispatch'
# Check rate limit
gh api rate_limit --jq '.resources.actions'
# Use pagination for large results
gh api repos/owner/repo-name/actions/runs --paginate
gh run watch for important workflowsStatus:
queued - Waiting to startin_progress - Currently runningcompleted - Finished (check conclusion for result)Conclusion:
success - Completed successfullyfailure - Failedcancelled - Manually cancelledskipped - Skippedtimed_out - Exceeded time limitaction_required - Needs manual approvalneutral - Completed but not success/failurepull-request-management to view PR check statuscommit-operations to find commits that triggered workflowsissue-management to link workflow failures to issuesrepository-management to manage workflow filesApplies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.