plugins/github/skills/monitoring-ci/SKILL.md
Monitors CI checks on the current branch, diagnoses failures from logs, fixes them (lint, typecheck, test, build), pushes the fix, and re-watches until green. Uses gh run watch for live monitoring and gh run view --log-failed for diagnosis. Use when CI is failing, after pushing to a PR, when the user says "watch CI", "fix CI", "why is CI failing", or proactively after creating a PR or pushing changes.
npx skillsauth add lucasilverentand/skills monitoring-ciInstall 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.
Watch CI, diagnose failures, fix them, and get the branch to green.
git branch --show-currentgh pr view --json number,title,url --jq '"\(.url) — \(.title)"' 2>/dev/null || echo "no PR"gh run list --branch $(git branch --show-current) --limit 1 --json status,conclusion,name,databaseId --jq '.[0] | "\(.name): \(.status) \(.conclusion // "")" + " (ID: \(.databaseId))"' 2>/dev/null || echo "unknown"Start monitoring CI in the background so the user isn't blocked.
If there's a PR, use PR checks. Otherwise find the latest run for the branch:
gh run list --branch $(git branch --show-current) --limit 1 --json databaseId,status --jq '.[0]'
Run this as a background Bash task:
gh run watch <run-id> --exit-status 2>&1; echo "CI_EXIT=$?"
This streams live status and exits when the run completes. --exit-status makes it return a non-zero exit code on failure.
When the background task completes:
gh run view <run-id> --json jobs --jq '.jobs[] | select(.conclusion == "failure") | {name, conclusion}'
If working from a PR instead of a run ID:
gh pr checks --json name,state,link --jq '.[] | select(.state == "FAILURE")'
Start with just the failed step output:
gh run view <run-id> --log-failed 2>&1 | tail -100
Trim to the last 100 lines — the error is almost always at the end. Read the output and classify the failure.
If the failure isn't clear from --log-failed (e.g., the error references something earlier in the log, or the failed step is a wrapper that calls something else):
gh run view <run-id> --log --json jobs --jq '.jobs[] | select(.conclusion == "failure") | .name'
Then read the full log for that specific job:
gh run view <run-id> --log 2>&1 | grep -A 50 "<failed step name>"
Focus on the section around the error. Don't dump entire logs into context.
Run the project's linter/formatter locally to reproduce and fix:
biome.json, .eslintrc, prettier config, ruff.toml, Cargo.toml, etc.bunx biome check --write . / bun lint --fix / equivalentfix: resolve lint errors and pushbunx tsc --noEmit / equivalentfix: resolve type errors and pushbun test <specific test file>fix: resolve test failure in <area> and pushbun run build / equivalentfix: resolve build error and pushFor flaky checks or infrastructure failures:
gh run rerun <run-id> --failed
This reruns only the failed jobs, not the entire workflow. Then go to "Watch" to monitor the rerun.
If the same check fails again after a rerun, it's probably not flaky — go to "Diagnose" and treat it as a real failure.
After pushing a fix, always loop back to "Watch" to monitor the new run. Keep looping until CI is green or you've exhausted what can be fixed automatically.
Track iterations to avoid infinite loops:
Different checks failing on different iterations is fine — keep fixing. The 3-strike limit is per check, not total.
Use this skill proactively:
creating-prs skill creates a PR — start watching CI immediatelyWhen used proactively, always run the watch in the background so the user can keep working.
tools
Creates, audits, and updates public open-source repository documentation, including README files, CONTRIBUTING guides, SECURITY and SUPPORT docs, project badges, quickstarts, usage guidance, community links, and contributor onboarding. Use when maintaining docs for public GitHub projects, libraries, CLIs, apps, or reusable packages, especially when the user says "update this README", "write CONTRIBUTING.md", "make these docs open-source ready", or "improve the public project docs".
development
Creates, audits, and updates private or closed-source project documentation, including internal README hubs, codebase navigation guides, ownership links, Linear initiative links, onboarding notes, runbooks, and contribution guidance for teams. Use when maintaining docs for private repositories, internal apps, services, infrastructure, or company projects, especially when the user says "make this README an internal hub", "document how to navigate this repo", "add Linear links to the docs", or "write private project documentation".
development
Creates, updates, estimates, and tidies Linear issues using Luca's issue-shaping rules. Use when the user asks to create a Linear issue, write ticket-ready issue text, refine an existing issue, add acceptance criteria, set issue relationships, estimate points, audit issue hygiene, tidy a Linear project, find duplicates, fix stale blockers, or normalize labels, milestones, priorities, and issue state.
testing
Keeps an existing Linear project tidy after planning and during execution. Use when the user asks to "tidy Linear", "clean up the project", "audit issues", "find duplicates", "check stale blockers", "fix project drift", or run periodic Linear housekeeping on a project, initiative, or milestone set. Use when planning is underway or execution has started and relationships, labels, priorities, documents, and issue states need coherence without changing product scope.