From claude-resources
Monitors GitHub PR CI checks in the background and sends macOS notification on completion. Also handles merged PRs by watching target branch CI.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-resources:watch-ciThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Monitor GitHub PR CI checks in the background, notify on completion via macOS system notification.
Monitor GitHub PR CI checks in the background, notify on completion via macOS system notification. Also supports watching CI on the merge target branch when a PR is already merged.
The polling itself is a pure shell loop (gh CLI + jq) launched via Bash with run_in_background: true. No subagent is spawned — token cost is paid only at launch and at completion, not on every poll cycle.
On Claude Code on the web (
$CLAUDE_CODE_REMOTE=true): followweb/web-mode.md.ghis unavailable, so thegh-based poll scripts won't run — poll CI through the GitHub MCP instead (pull_request_readwithget_check_runs, oractions_*/get_job_logs), or theMonitortool. There is no macOS notifier on web; just report status when checks finish.
scripts/notify.sh — macOS notification helperscripts/poll-pr-checks.sh <pr-number> [max-min] — poll an open PR's checks until terminal, then notifyscripts/poll-runs.sh <branch> <commit-sha> [max-min] — poll workflow runs on a branch+commit until terminal, then notifyAll scripts default to a 60-minute cap and a 30-second poll interval.
Determine which PR to watch:
# If user provides a PR number or URL, use it directly
# Otherwise, detect from current branch
gh pr view --json number,title,url,headRefName,baseRefName,state,mergeCommit --jq '{number,title,url,headRefName,baseRefName,state,mergeCommit}'
If no PR is found for the current branch, inform the user and stop.
Check the PR state:
state is "OPEN" → proceed to Step 2 (normal PR watch)state is "MERGED" → proceed to Step 2b (merged PR: watch target branch CI)state is "CLOSED" (not merged) → inform the user the PR was closed without merging and stopShow the current state:
gh pr checks <PR_NUMBER> --json name,state,bucket,workflow
Report to the user: PR number/title, total checks, current status breakdown (passed/pending/failed).
If all checks already passed or failed, skip to Step 4 or Step 5 respectively. Otherwise proceed to Step 3.
When the PR is already merged:
Get the base branch and merge commit SHA from Step 1 output
Inform the user: "PR #123 is already merged into main. Watching CI on main for merge commit abc1234..."
Show initial status:
gh run list --branch <base-branch> --commit <merge-commit-sha> --json databaseId,name,status,conclusion --limit 20
If no runs found with commit SHA, retry without it:
gh run list --branch <base-branch> --json databaseId,name,status,conclusion --limit 10
Proceed to Step 3.
Do NOT launch a subagent. Use the Bash tool with run_in_background: true to run the polling shell script. The script polls gh directly, exits when checks reach a terminal state, fires a macOS notification, and prints a final RESULT: line.
For an open PR:
bash $HOME/.claude/skills/watch-ci/scripts/poll-pr-checks.sh <PR_NUMBER>
For a merged PR:
bash $HOME/.claude/skills/watch-ci/scripts/poll-runs.sh <BASE_BRANCH> <MERGE_SHA>
Behaviour:
gh pr checks; merged PR: gh run list --branch ... --commit ...)notify.sh success (Glass sound) + RESULT: PASSED to stdout, exit 0notify.sh error (Basso sound) with failed check names + RESULT: FAILED (<names>), exit 1notify.sh warning (Purr sound) + RESULT: TIMEOUT, exit 2After launching, tell the user: "Watching CI in background. You'll be notified when it completes."
When the background task completes you'll be notified automatically. Read its output file to see the RESULT: line, report to the user, and — if FAILED — proceed to Step 5's investigation steps.
If checks already passed at Step 2/2b (no polling needed):
Send notification:
bash $HOME/.claude/skills/watch-ci/scripts/notify.sh success "All CI checks passed! PR #<number>"
Report the final status summary.
If checks already failed at Step 2/2b:
Send notification:
bash $HOME/.claude/skills/watch-ci/scripts/notify.sh error "CI check failed: <check-name>. PR #<number>"
Investigate the failure:
gh pr checks <PR_NUMBER> --json name,state,bucket,link --jq '[.[] | select(.bucket == "fail" or .bucket == "cancel")]'
gh run list --branch <branch> --status failure --limit 5 --json databaseId,name,conclusion
gh run view <run-id> --log-failed
Analyze and report. For open PRs: offer to fix. For merged PRs: report only, do NOT auto-fix on the target branch.
Bash run_in_background: true — no subagent, no per-cycle token cost. The main conversation only pays at launch and at completion.osascript via notify.shgh CLI must be authenticated and have access to the repository[max-min] arg to either scriptRESULT: line) is captured by the background task — read the output file when you get the completion notificationnpx claudepluginhub takazudo/claude-resources --plugin claude-resourcesPolls GitHub PR CI checks at intervals until completion or timeout. Useful for checking CI status, waiting for passes, monitoring builds, or verifying PR green status.
Monitors GitHub Actions CI runs until completion, reporting pass/fail/timeout verdicts per run. Useful after pushing code or checking PR build status.
Polls CI check status for the current branch's pull request and reports pass/fail/pending/comments, surfacing PR review comments even when CI is green.