home / skills / troykelly / claude-skills / ci-monitoring
npx playbooks add skill troykelly/claude-skills --skill ci-monitoringReview the files below or copy the command above to add this skill to your agents.
---
name: ci-monitoring
description: Use after creating PR - monitor CI pipeline, resolve failures, address review feedback, and merge when all gates pass
allowed-tools:
- Bash
- Read
- Edit
- Grep
- Glob
- mcp__github__*
model: opus
---
# CI Monitoring
Monitor CI pipeline, resolve failures, address review feedback, and merge when ready.
**Core principle:** CI failures AND unresolved review feedback are blockers.
**Announce:** "I'm monitoring CI and review feedback, and will resolve any issues before merging."
## The Loop
```
PR Created
│
▼
┌─────────────┐
│ Wait for CI │
└──────┬──────┘
│
┌───┴───┐
│ │
Green Red ──► Fix → Push → Loop back
│
▼
┌──────────────────────┐
│ Unresolved Reviews? │
└──────────┬───────────┘
┌───┴───┐
│ │
None Yes ──► For each: Evaluate → Fix/Pushback → Reply → Resolve → Push → Loop back
│
▼
┌─────────────┐
│ MERGE PR │
└─────────────┘
```
## Gate: Green CI + No Unresolved Reviews = Merge
When both conditions met, merge immediately:
```bash
gh pr merge [PR_NUMBER] --squash --delete-branch
gh issue edit [ISSUE_NUMBER] --remove-label "status:in-review" --add-label "status:done"
```
Do NOT stop to report or ask. Continue to next issue.
**Exception:** PRs with `do-not-merge` label.
## Checking CI
```bash
gh pr checks [PR_NUMBER]
gh pr checks [PR_NUMBER] --watch
```
## Handling CI Failures
1. Identify: `gh run view [RUN_ID] --log-failed`
2. Reproduce locally
3. Fix and push
4. Wait for CI, repeat if needed
**Detailed patterns:** See [reference/ci-failures.md](reference/ci-failures.md)
## Handling Review Feedback
After CI green, check for unresolved threads:
```bash
gh api graphql -f query='
query($owner: String!, $repo: String!, $pr: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
reviewThreads(first: 100) {
nodes { id isResolved isOutdated comments(first: 1) { nodes { body author { login } path } } }
}
}
}
}' -f owner="[OWNER]" -f repo="[REPO]" -F pr=[PR_NUMBER]
```
For each unresolved thread (`isResolved: false`):
| Step | Action |
|------|--------|
| 1 | Read and understand feedback |
| 2 | Verify: technically valid for this codebase? |
| 3 | Fix, defer (with issue), or push back with reasoning |
| 4 | Reply in thread: `gh api repos/.../pulls/.../comments/[ID]/replies -f body="..."` |
| 5 | Resolve: `gh api graphql -f query='mutation { resolveReviewThread(...) }'` |
| 6 | Push fixes, loop back to CI |
**Detailed commands:** See [reference/review-feedback.md](reference/review-feedback.md)
### Security Feedback
Security flags from automated reviewers (Codex, CodeRabbit, etc.) should be treated seriously and verified against the codebase.
## Best Practices
**Run locally first.** CI validates, doesn't discover.
```bash
pnpm lint && pnpm typecheck && pnpm test && pnpm build
```
If CI finds bugs you didn't find locally, your local testing was insufficient.
## Checklist
CI:
- [ ] All checks green
- [ ] Failures fixed (if any)
Review feedback:
- [ ] All threads resolved
- [ ] Each: evaluated → fixed/pushback → replied → resolved
Merge:
- [ ] `gh pr merge --squash --delete-branch`
- [ ] Issue marked Done
- [ ] Continue to next issue
## Integration
Called by: `issue-driven-development`, `autonomous-orchestration`
Follows: `pr-creation`
Uses: `receiving-code-review` (principles for evaluating feedback)
Completes: PR lifecycle