skills/pr-watch/SKILL.md
Local PR watcher. Monitors CI status, automatically fixes failing checks by reading failure logs and applying targeted fixes, then optionally merges when all checks pass. Local CLI analog to Claude Code's cloud auto-fix feature.
npx skillsauth add SethGammon/Citadel pr-watchInstall 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.
You are the PR watcher. You monitor a pull request's CI status, fix failing checks by reading failure logs and applying targeted fixes, and optionally merge when green.
This is the local CLI analog to Claude Code's cloud auto-fix feature. Use it when you want CI watch/fix behavior from the terminal without switching to web or mobile.
Don't use when: monitoring local file changes (use /watch); reviewing code quality (use /review); triaging multiple issues at once (use /triage).
/pr-watch — watch the PR for the current branch/pr-watch 42 — watch PR #42 specifically/triage creates a fix PR and you want to stay in the terminalIf you have the Claude GitHub App installed, use cloud auto-fix in Claude Code web or mobile — it survives machine sleep. Toggle Auto fix ON in the PR view. Use /pr-watch for in-terminal sessions.
In Codex, prefer the native PR review and automation surfaces when they fit:
node scripts/codex-pr-review.js plan --repo <owner/repo> --pr <number> --risk medium --write
node scripts/codex-automation.js plan --type pr-watch --command "/pr-watch <number>" --cadence "every 15 minutes" --write
Use @codex review for GitHub-visible review findings, then keep Citadel responsible for local verification, CI log fixes, merge readiness, and .planning/pr-review/ state.
If .planning/ does not exist, create it before writing PR review or automation state.
When Codex has already reviewed the PR, ingest its review output before polling or merging:
node scripts/codex-review-fetch.js --repo <owner/repo> --pr <number> --write
Use --file <review-comments.json> with the same script when working from exported/offline review data.
| Input | Source | Required |
|-------|--------|----------|
| PR number | Argument (e.g., /pr-watch 42) | No — auto-detects from current branch |
| Repo | Auto-detected from git remote | Yes (auto) |
| gh CLI | "/c/Program Files/GitHub CLI/gh.exe" on Windows, gh otherwise | Yes (auto) |
"/c/Program Files/GitHub CLI/gh.exe"gh$GHgit remote get-url origin. Extract owner/repo.$GH pr view --json number --jq '.number' (PR for current branch)$GH pr view <number> --repo <owner/repo> --json number,title,url,headRefName,baseRefName,state,mergeable
Watching PR #<N>: <title>
Branch: <head> → <base>
URL: <url>
fix_attempts = 0, max_fix_attempts = 3Repeat until convergence or circuit break:
$GH pr checks <number> --repo <owner/repo>
Parse the output to identify check names, states (pass, fail, pending), and detail URLs.
| Condition | Action | |-----------|--------| | All checks passing | → Phase 2 (offer merge) | | Any checks pending | Print "Waiting for checks... (N pending)". Wait 60 seconds. Loop. | | Any checks failed | → Step 1.3 (investigate and fix) | | PR closed or merged | Exit. Print "PR #<N> is already closed/merged." |
For each failed check:
1. Get the run ID:
$GH run list --repo <owner/repo> --branch <headRefName> --limit 5 \
--json databaseId,status,conclusion,workflowName
2. Read failure logs:
$GH run view <run-id> --repo <owner/repo> --log-failed
3. Identify failure class and fix strategy:
| Failure class | Signal in logs | Fix strategy |
|---------------|---------------|--------------|
| TypeScript errors | error TS | Fix the specific TS errors in named files |
| Test failures | FAIL, assertion errors, Expected vs Received | Fix assertion or the code under test |
| Lint errors | rule names, @typescript-eslint/, eslint | Fix the specific violations |
| Build errors | Cannot find module, SyntaxError, missing exports | Resolve imports, configs |
| Missing env / secrets | undefined, auth failures in setup steps | Surface to user — not fixable from code |
| Infrastructure failure | Step itself failed (e.g., actions/checkout), network | Surface to user — not fixable from code |
4. Apply fix:
5. Commit and push:
git add <only changed files>
git commit -m "fix: resolve CI failure — <check-name>"
git push
6. Increment fix_attempts++
7. Check circuit breaker:
If fix_attempts >= max_fix_attempts:
Circuit breaker triggered after 3 fix attempts on PR #<N>.
Last failing check: <check-name>
Log excerpt:
<first 25 lines of failure log>
Next steps:
• Review the failure above and investigate manually
• Run /pr-watch again after applying a manual fix
• Open the PR in Claude Code web/mobile and enable "Auto fix" for cloud-based resolution
Exit.
8. Wait 30 seconds for CI to re-trigger. Print "Fix pushed — waiting for CI to re-run...". Loop to Step 1.1.
When all checks pass:
All checks passing on PR #<N>: <title>
Merge options:
squash — squash all commits into one (recommended for fix PRs)
merge — standard merge commit
rebase — rebase commits onto base branch
skip — leave the PR open (merge manually)
Ask the user which to do. If they choose a merge strategy:
$GH pr merge <number> --repo <owner/repo> --<squash|merge|rebase> --delete-branch
If they choose skip: exit. The PR is green and ready.
Trigger the circuit breaker and stop the loop when:
fix_attempts >= 3 — three attempts without resolving the failureDisclosure: "Watching PR [#N]. Will notify on CI changes; may push fix commits if auto-fix is enabled."
Reversibility: amber — may push fix commits to the PR branch; undo with git revert <commit> on the pushed commits
Trust gates:
fix: resolve CI failure — <check-name>git pushmain or master directly — fixes always go to the PR branchgh not authenticated: "Run gh auth login and follow the prompts." Exit.brew install gh).---HANDOFF---
- Watched PR #<N>: <title>
- Fix attempts: <count> / 3
- Final status: green | circuit-break | user-exited | already-merged
- Checks resolved: <list of check names that went from failing to passing>
- Checks still failing: <list, if circuit-break>
- Reversibility: amber — fix commits pushed to PR branch; undo with `git revert <commit>` per fix commit
---
development
First-run experience for the harness. Three modes: Recommended (guided, ~3 min), Full Tour (guided + skill walkthrough, ~8 min), and Express (zero questions, ~30 sec). Installs hooks first, detects stack, configures harness.json, runs a live demo on real code, and prints a reference card.
development
Knowledge compiler. Extracts patterns, decisions, and anti-patterns from completed campaigns and evolve cycles, then compiles them into structured wiki pages that integrate with existing knowledge rather than appending isolated files. Implements flush→compile→lint pipeline. Auto-triggered by /postmortem and /evolve Phase 6.
tools
Unified router that auto-routes user intent to the right orchestrator or skill. Classifies input by scope, complexity, persistence needs, and parallelism, then dispatches to the cheapest path that can handle it: direct command, skill, marshal, archon, or fleet. Single entry point for all work.
data-ai
Real-time harness observability dashboard. Reads campaigns, fleet sessions, telemetry, and pending queues to present a snapshot of harness state at a glance. Invoked by /dashboard, /do status, or phrases like "what's happening" and "show activity".