ci-watchdog
GitHub持续监控GitHub PR的CI检查,自动检测失败原因并修复代码,循环执行直至所有检查通过。
Trigger Scenarios
Install
npx skills add latitude-dev/latitude-llm --skill ci-watchdog -g -y
SKILL.md
Frontmatter
{
"name": "ci-watchdog",
"description": "Continuously monitor GitHub PR CI checks and automatically fix failures until all checks pass.\n\nUSE THIS SKILL when:\n- The user wants to \"keep an eye on CI\" or \"wait for checks to pass\"\n- The user mentions monitoring PR status, CI status, or GitHub checks\n- The user asks to watch a PR until it's ready or fix failing checks\n- After pushing commits, the user wants to ensure CI stays green\n- The user mentions automated fix loops for CI failures\n\nThis skill handles watching GitHub Actions (or other CI) checks, detecting failures,\ndiagnosing issues from logs, and applying fixes in a loop until all checks pass.\n\nWorks with GitHub CLI (gh) and common CI systems like GitHub Actions."
}
CI Watchdog
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
Version History
- 2479822 Current 2026-08-20 10:36


