GitHub CI Watch
Watch GitHub PR checks with gh, poll until green/failure/timeout, fetch failed GitHub Actions logs, save logs locally, summarize actionable CI failures, and apply trivial local fixes when safe. Use when the user asks to watch PR checks, wait for CI, inspect failed actions, fix obvious CI failures, or summarize gh pr checks results.
npx skills add https://github.com/Unique-Divine/jiyuu/tree/main/ai-skills/gh-ci-watch Watch GitHub pull request CI until checks pass, fail with actionable logs, or reach a timeout. Keep noisy command output out of the final answer. Save detailed logs locally, then report the important failures clearly. If the logs show a trivial, high-confidence local fix, make it and stage only the files touched by that fix.
Workflow
Identify the PR:
- If the user gives a PR number or URL, use it.
- Otherwise use the repository at the current working directory.
- Infer the PR associated with the current branch using
gh pr view. - If there is no PR for the current branch, stop and report that blocker.
- Do not switch branches or repositories unless the user explicitly asks.
Create a local temporary log directory:
- Use a deterministic base under
${TMPDIR:-/tmp}/<owner>__<repo>/. - Prefer this shape:
${TMPDIR:-/tmp}/<owner>__<repo>/pr-<number>-checks/<utc-timestamp>/ - Sanitize
<owner>__<repo>and branch fallback names to lowercase letters, numbers, dots, underscores, and hyphens. - Use
gh repo view --json nameWithOwnerandgh pr view --json numberwhen available. - If no PR number is available yet, use
branch-<branch-slug>instead ofpr-<number>-checks. - Create subfiles such as
checks.txt,summary.md, andrun-<id>-<job>.logas useful. - Tell the user the final log directory path.
- Use a deterministic base under
Check status with short, visible poll turns:
- Run
gh pr checksand save output under the log directory. - Default poll interval: 20 seconds.
- Default timeout: 30 minutes unless the user specifies otherwise.
- Do not put the entire watch in one long shell loop with a huge
block_until_ms/ sleep budget. Cursor only surfaces that command’s output when the shell finishes or is interrupted, so the chat looks idle while CI is still running. - Preferred pattern (multi-turn foreground):
- One Shell call:
gh pr checks(and optional JSON rollup). - If still pending: briefly tell the user which checks are pending vs done, then Shell
sleep 20(orAwaitShellwith ~20s), then poll again in the next turn. - Repeat until green, failed, or timeout. Track elapsed time across turns.
- One Shell call:
- Optional background pattern (only if the user asks for background monitoring): start a poller with
block_until_ms: 0that appends tochecks.txtand prints clear terminal lines such asCI_STATUS green,CI_STATUS failed, orCI_STATUS timeout. Usenotify_on_outputfor those markers so the agent is woken when the watch ends. Still give an immediate first status in chat after starting it. - Between polls, keep chat updates short: pending count / names, any newly finished checks, elapsed time. Do not dump full check tables every turn unless something changed meaningfully.
- Run
On failure:
- Identify failed workflow runs and jobs.
- Use
gh run viewandgh run view --logor job-specific logs when useful. - Save logs into the temp directory.
- Extract the most relevant error snippets.
- Report failed check name, workflow, job, conclusion, and likely cause.
Apply trivial local fixes when safe:
- First run
git status --shortand keep track of pre-existing dirty files. - Only edit when the failure is narrow, local, and high-confidence, such as: formatting/lint errors with exact file locations, missing imports, typecheck errors with obvious symbol names, or a deterministic test failure caused by a small mistake in the PR’s changed code.
- Do not perform broad refactors, dependency changes, workflow edits, flaky test workarounds, or product behavior changes without asking first.
- Do not overwrite or revert unrelated user changes.
- After editing, run the smallest relevant local verification command if it is clear from the logs or repo conventions.
- Stage only files changed by the fix with
git add <paths>. - If a file was already dirty before the fix, do not stage it unless the entire file change is clearly part of this fix. Report the situation instead of risking staging unrelated work.
- Never commit or push unless the user explicitly asks.
- After staging, continue watching CI only if the user has already pushed the fix or explicitly asks you to push. Otherwise report the staged local fix and stop.
- First run
On success:
- Report that all PR checks are green.
- Include PR number, elapsed time, and final check summary.
Constraints
- Stay read-only for remote services unless the user explicitly asks for a remote mutating action.
- Local code edits are allowed only for trivial, high-confidence CI fixes from the logs.
- Stage trivial local fixes with
git add <paths>when safe. - Do not push commits.
- Do not rerun, cancel, approve, merge, or mutate GitHub state unless the user explicitly asks.
- Prefer multi-turn foreground monitoring so each poll can surface in chat. Do not start a background shell unless the user explicitly asks for background monitoring.
- Never rely on a single foreground shell that sleeps/polls for many minutes without returning; that hides progress from the user.
- If GitHub CLI auth is missing or
ghfails, stop and report the blocker. - If checks remain pending at timeout, report current status and log directory.
Output Format
Return a concise final report:
Status: green, failed, pending timeout, or blockedPR: number and URL if availableElapsed: approximate time watchedSummary: one paragraphFailed Checks: only if failures existLocal Fixes: files edited and staged, only if local fixes were madeLogs: local temp directory pathNext Step: concrete recommendation
Unique Divine