$ca-watch — PR CI babysitter
SkillDev toolsWatch a PR's CI to completion — diagnose on red, notify and offer the merge on green. Never auto-merges.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the $ca-watch — PR CI babysitter skill
What this skill tells your AI
The instructions your AI receives, as published by arbiterforge/codearbiter in plugins/ca-pi/skills/ca-watch/SKILL.md and read by ahel’s review.
Compatibility route. Prefer
$ca-pr --watchfor new usage. This installed route remains functional under the command-route compatibility policy at includes/command-compatibility.md; continue with the unchanged watcher workflow below.
Watch a pull request's checks to completion without babysitting them by hand. The wait happens server-side, so it costs nothing while CI runs; arbiter wakes once, on the verdict — diagnoses a red, or offers you the merge on a green. Arbiter never pulls the merge trigger.
Precondition
Requires the GitHub CLI authenticated (gh auth status). If gh is absent or
unauthenticated, report the precondition failure naming gh and STOP — do not start
a phantom watcher.
Flow
- Resolve the PR from
$ARGUMENTS(number, URL, or branch; default to the current branch's PR). - Watch to completion — run the watch as a detached background task built on
the server-side block:
This blocks until every check finishes and then exits non-zero on failure. It is NOT a polling loop — there is no interval-based wake-up. Arbiter is re-invoked once when the watch process exits.gh pr checks <PR> --watch - On red — retrieve the failing job's logs (
gh run view --log-failed/gh pr checks) and act at the configured depth. Resolve that depth with the canonical resolver rather than reading the env var by hand (so the accepted values can't drift). Resolve the interpreter once by presence —PY=python3; { command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; } || PY=python— neverpython3 X || python X, which reruns X on any nonzero exit (#577):
It prints one JSON line; act at its"$PY" "${PLUGIN_ROOT}/hooks/babysit.py" --root "<project-root>"on_redvalue (CODEARBITER_BABYSIT_ONRED, defaultpropose):propose— name the likely cause and propose a concrete fix. Do NOT edit any tracked file; applying the fix routes through$ca-fixor$ca-feature.branch— additionally open aspike/fix-*branch carrying the proposed change for review. That branch is a spike: it can never PR or merge. The default branch is left untouched.
- On green — notify the user and present a merge offer (the
gh pr mergecommand, ready to run). The watcher itself NEVER merges. If the PR targets the default branch, the merge routes through the merge-to-default hard gate — the offer cannot bypass it.
On/off
A global flag, CODEARBITER_BABYSIT (default off, mirrors CODEARBITER_PRUNE),
governs auto-attachment: when on, $ca-pr auto-attaches a watcher to the PR it
opens. $ca-watch <PR> works ad-hoc regardless of the flag. The flag is never set on
the user's behalf — enabling it is the user's explicit choice. Both the command and
the flag are dormant in a repo without arbiter: enabled.
When NOT to use
- Open the PR first →
$ca-pr. - Apply a fix for a diagnosed red →
$ca-fix(or$ca-feature). - Review a diff without watching CI →
$ca-review.
Hard gate
- MUST NOT auto-merge. Green → notify + offer only; the watcher never invokes
gh pr merge. - A merge into the default branch MUST route through the merge-to-default hard gate — the green offer cannot and does not bypass it.
- MUST NOT implement a polling loop that re-invokes the model on a timer — the watch
is the server-side
gh pr checks --watchblock. - MUST surface a missing/unauthenticated
ghas a precondition failure, not a silent no-op. - At depth
proposeMUST NOT edit any tracked file; at depthbranchthe proposed change lands only on an unmergeablespike/fix-*branch.
Signals
- GitHub stars
- 144
- Forks
- 7
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
ca-watch- Source
- github.com/arbiterforge/codearbiter