CI Watchdog
SkillMonitoring & opsLets your agent watch CI checks on GitHub pull requests and automatically fix failures until all pass.
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 CI Watchdog skill
About this capability
Continuously monitor GitHub PR CI checks and automatically fix failures until all checks pass.
What this skill tells your AI
The instructions your AI receives, as published by latitude-dev/latitude-llm in .agents/skills/ci-watchdog/SKILL.md and read by ahel’s review.
Monitor a GitHub PR's CI checks continuously, automatically fix failures, and loop until everything passes.
Quick Start
# Watch current PR until all checks pass (auto-fix enabled)
gh pr checks --watch --fail-fast
# Watch with auto-fix loop
ci-watchdog --fix --loop
Core Workflow
The CI watchdog follows this loop:
- Monitor - Watch PR checks until they complete or fail
- Detect - Identify which checks failed
- Diagnose - Fetch logs and understand the failure
- Fix - Apply appropriate fixes to the codebase
- Commit - Stage, commit, and push fixes
- Repeat - Go back to monitoring until all pass
Usage Patterns
Basic Watch Mode
Just monitor without fixing:
gh pr checks --watch
Auto-Fix Loop (Recommended)
Monitor and automatically fix issues:
LOOP:
1. Run: gh pr checks --watch --fail-fast
2. IF checks pass → DONE
3. IF checks fail:
a. Identify failed check names
b. Fetch logs: gh run view <run-id> --log-failed
c. Analyze error patterns
d. Apply fixes to codebase
e. Commit and push
f. GOTO LOOP
Failure Patterns & Fixes
Type Errors / Lint Errors
Detection: typecheck, lint, check, pyright, tsgo failures
Common fixes:
- Read the specific file and line from error output
- Fix the type mismatch or syntax error
- Remove references to deleted/renamed properties
- Add missing imports or type annotations
Example flow:
# Check failed with pyright errors in file X
python -m pyright src/path/to/file.py 2>&1 | head -30
# → Shows specific line/column errors
# → Fix the issues
# → Commit and push
Test Failures
Detection: test check failures
Common fixes:
- Read the failing test file
- Update test assertions to match new behavior
- Remove obsolete test cases
- Fix test data/setup issues
Example flow:
# Tests failed
# Read the test file mentioned in error
# Update assertions or remove obsolete tests
# Commit and push
Build Failures
Detection: build, bundle, compile failures
Common fixes:
- Check for missing dependencies
- Fix import errors
- Resolve circular dependencies
- Update build configuration
Missing References
Detection: Errors about missing attributes, properties, or imports
Example:
error: Cannot access attribute "name" for class "X"
Attribute "name" is unknown
Fix:
- Find all references to the removed/renamed attribute
- Remove or update those references
- Check related files (processors, handlers, tests)
Reference: GitHub CLI Commands
Check Status
# List current checks
gh pr checks
# Watch until complete (blocks)
gh pr checks --watch
# Watch and exit immediately on failure
gh pr checks --watch --fail-fast
View Logs
# View failed check logs
gh run view <run-id> --log-failed
# View specific job
gh run view --job=<job-id>
PR Operations
# View current PR
gh pr view
# Push changes
gh push
# Create PR (if needed)
gh pr create --draft --title "..." --body "..."
Iteration Guidelines
When fixing CI failures:
- Fix minimal changes - Don't over-fix; address just the reported error
- Commit after each fix - Keep commits atomic and focused
- Use Conventional Commits -
fix(scope): descriptionortest(scope): description - Watch for cascading failures - One fix may reveal new failures
- Know when to stop - If stuck after 3-5 iterations, ask the user
Common CI Check Names
Typical checks to watch for:
check/lint- General lintingtypecheck/type-check- TypeScript/Python type checkingtest/tests- Test suitebuild- Build verificationknip- Dead code detectionformat- Code formatting
Example Session
User: "Watch this PR and fix any issues until CI passes"
→ Start: gh pr checks --watch --fail-fast
→ Wait for completion...
→ FAILED: pyright errors in latitude_span_processor.py
→ Read the failing file
→ Identify: references to removed 'name' attribute
→ Fix: Remove the name handling code
→ Commit: "fix(telemetry): remove name handling from processor"
→ Push
→ Restart: gh pr checks --watch --fail-fast
→ Wait...
→ FAILED: test failures in capture_test.py
→ Read test file
→ Identify: tests checking ctx.name which no longer exists
→ Fix: Remove ctx.name assertions
→ Commit: "test(telemetry): update tests for removed name field"
→ Push
→ Restart: gh pr checks --watch --fail-fast
→ Wait...
→ ALL PASSED ✓
→ Done!
Edge Cases
CI Taking Too Long
- Some checks run for 10+ minutes
- Use
--watchto avoid polling manually - The
--fail-fastflag exits immediately on first failure
Intermittent Failures
- Flaky tests may pass on retry
- If same failure repeats 3+ times, it's likely real
Required vs Optional Checks
- Some checks may be "required" for merge
- Others may be informational only
- Focus on fixing required checks first
No Write Access
- If you can't push fixes, report issues to user instead
- Provide specific fix suggestions with code snippets
Safety Guidelines
- Never force push (
--force) unless explicitly requested - Never rewrite history on shared branches
- Always create new commits for fixes (don't amend)
- If stuck on a failure you can't fix, ask the user for help
- Don't merge the PR yourself unless explicitly asked
Signals
- GitHub stars
- 5k
- Forks
- 387
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
ci-watchdog- Source
- github.com/latitude-dev/latitude-llm