Vibed by Jake Gilfix using Claude Sonnet 4.5
๐ You push code to a PR
โณ Buildkite runs tests... they fail
๐ You check GitHub, click build link, read logs
๐ You identify the issue, write a fix
๐ Push, wait, repeat...
What if your PRs could debug themselves?
An autonomous system that:
Claude Code skill that analyzes Buildkite failures
Daemon that watches your PRs for failures
Orchestrates Claude invocation & approval flow
Queue system for fixes awaiting review
Input: Buildkite build URL
Process:
Output: Git commit with fix (not pushed yet)
Runs every 2 minutes via launchd
What it does:
buildkite/* checksWaits for all CI checks, processes multiple failures in one session
Max 2 concurrent sessions with queueing
Prompts once per draft PR for opt-in
[skip-auto-debug] disables automation
Orchestrates a single debugging session:
/debug-buildShows you:
Three options:
CLI tool for managing the queue:
pr-pending-fixes list # Show all pending fixes
pr-pending-fixes review # Interactive approval workflow
pr-pending-fixes cleanup-passed # Remove fixes for passing checks
pr-pending-fixes list-ignored # Show ignored PRs
pr-pending-fixes unignore 123 # Re-enable auto-debug for PR
Features:
github-pr-testspr-pending-fixes review to process queueMonitor runs every 2 min
Reminders every 10 min
Shows pending fix count
Click to review
Nice-to-have UI feature
Session start/complete
Periodic reminders
PR comments with fix details
Auto-posts when pushed
Scenario: Kotlin compilation error after upgrading to 2.3
What happened:
~/bin/
watch-pr-builds.sh # Monitor daemon
claude-debug-wrapper.sh # Session wrapper
pr-pending-fixes # Queue manager
pr-monitor # Control script
~/.claude/
pr-watch.log # Main log
pr-watch-state.json # Processed failures
pending-fixes/ # Queue metadata
debug-results/ # Session logs
ignored-prs.json # Excluded PRs
~/Library/LaunchAgents/
com.user.claude-pr-monitor.plist
com.user.claude-pr-reminder.plist
~/.config/sketchybar/
plugins/claude_fixes.sh # Badge plugin
Monitor control:
pr-monitor start # Start the monitor
pr-monitor stop # Stop the monitor
pr-monitor status # Check status + recent activity
pr-monitor logs # Tail the log file
pr-monitor test # Run once for testing
Pending fixes:
pr-pending-fixes list # List pending
pr-pending-fixes review # Interactive review
pr-pending-fixes cleanup-passed # Auto-cleanup
โฑ๏ธ Saves ~10-20 minutes per build failure
๐ Eliminates context switching
๐ง Reduces cognitive load
๐ Accelerates feedback loops
gh CLI fallback)Let's walk through an example!
What we did:
Error introduced:
open class NotFoundException(
message: String? = null
: Exception(message) // Missing ) before :
Monitor detected the failure and started debugging:
What happened:
buildkite/all-the-things-github-pr-tests failingClaude analyzed the build logs:
NotFoundException.kt) before : Exception(message)Commit created:
fix: restore missing closing parenthesis in NotFoundException class
Root cause: Previous commit deliberately introduced syntax error...
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Analysis time: ~4 minutes
Fix saved to pending queue:
Integration activated:
SketchyBar Badge
Approval dialog with full context:
Dialog shows:
๐ What was accomplished:
Time saved: ~15 minutes โข Context switching: Zero