Watch Action: GitHub Actions Monitoring with Audio Alerts

A Claude Code skill that polls GitHub Actions runs and fires macOS audio alerts when they complete, so you never miss a build result.

The Problem

You push a commit, kick off a CI build, and then… what? Tab back to GitHub every 30 seconds to check if it's done? Open the Actions tab, refresh, wait, refresh again? Most of us end up context-switching to something else and forgetting about the build entirely, only to discover 45 minutes later that it failed on the second step.

I wanted to push and walk away from the keyboard — go make coffee, help the kids with something — and have the computer tell me when the build is done.

What the Skill Does

The watch-action skill monitors GitHub Actions runs and fires audio alerts when they complete. Say "watch action" or "watch my PR" and Claude:

  1. Resolves what to watch. No arguments? Watches the current repo (auto-detected from git remote). Pass a run URL, PR URL, or --all-repos flag for broader monitoring.
  2. Skips completed runs. If a run is already finished when first seen, it's ignored — the skill only alerts on transitions from in-progress to completed.
  3. Polls on interval. Default 15 seconds. Each tick queries gh run view for status and conclusion, printing a timestamped status line per run.
  4. Fires audio alerts on completion. On macOS, it plays system sounds and loops a spoken announcement until you press Enter to acknowledge.

Alert Design

The alerts are intentionally impossible to miss:

  • All runs succeeded: Plays Funk.aiff three times, then loops speech: "GitHub Action [Workflow: Title] has completed successfully."
  • Any run failed: Plays Glass.aiff once, then loops speech: "GitHub Action [Workflow: Title] has failed."
  • The alert loops until you press Enter. This is intentional. If you're in another room, the repeated announcement keeps going until you come back and acknowledge it.

On non-macOS systems, it falls back to prominent terminal notifications instead of audio.

Watching Modes

The skill supports several targeting modes:

  • Current repo (default): Auto-detects from git remote get-url origin
  • Specific run: Pass a GitHub Actions run URL directly
  • PR runs: Pass a PR URL or number, and it finds all linked check runs
  • All repos: Fetches all repos you have access to and monitors across them (cached to ~/.cache/ to avoid repeated API calls)
  • Actor filter: --actor-only limits to runs you triggered, filtering out teammate pushes and scheduled jobs

Implementation Notes

A few macOS-specific gotchas:

  • Bash version. macOS ships with Bash 3.2, which lacks mapfile. The skill falls back to awk '!seen[$0]++' for deduplication.
  • afplay and say are macOS-only commands. The skill gates audio behind an OS check and degrades gracefully on Linux.
  • Poll interval tradeoff. 15 seconds is fast enough to catch completions quickly without hammering the GitHub API. For --all-repos mode with many repositories, consider increasing to 30–60 seconds.

When I Use It

Every deploy. Push the branch, say "watch action," and go do something else. The spoken alert reaches me in the next room. The acknowledgement loop means I never miss a failure — it keeps announcing until I come back to the keyboard and press Enter. It's a small thing, but it fundamentally changed how I interact with CI: I stopped polling and started trusting that the computer would come find me.