background-watch-hook
The background-watch-hook skill enables agents to set up managed background tasks that monitor for specific events and automatically resume conversation in the same session when those events complete. Use this when a workflow requires waiting for external outcomes like CI deployments, PR reviews, file processing, or log events to finish before continuing, allowing the agent to return with relevant context rather than requiring manual polling or continuous presence.
git clone --depth 1 https://github.com/avibe-bot/avibe /tmp/background-watch-hook && cp -r /tmp/background-watch-hook/skills/background-watch-hook ~/.claude/skills/background-watch-hookSKILL.md
# Background Watch Hook Use this skill when the job is "wait now, continue later in the same conversation". What it gives the agent: - a managed background task instead of manual polling - a clean way to come back to the same channel or thread later - a reusable pattern that works for reviews, CI, files, logs, and process completion Good trigger scenarios: - PR reviews or comments may arrive later - CI, deployments, or exports need time to finish - a file, log line, or process exit should wake the agent up later Prefer `vibe watch` when the wait should be inspectable, pausable, resumable, or removable later. ## Main Tools - `vibe watch add` Main entrypoint. Starts a managed background watch and creates a follow-up Agent Run after the waiter succeeds or reaches a terminal failure. - `vibe watch list`, `vibe watch show`, `vibe watch update`, `vibe watch pause`, `vibe watch resume`, `vibe watch remove` Use these to inspect and manage the watch after creation. - `scripts/wait_pr.py` Bundled waiter example for one common case: GitHub PR review activity. ## Use `vibe watch` First Use `vibe watch add` first. Most tasks only need: 1. the target Agent Session ID 2. a short action-oriented message 3. a blocking waiter command Generic shape: ```bash vibe watch add \ --session-id "<session-id>" \ --message "<what the next Agent Run should do>" \ --name "<optional label>" \ -- \ <waiter command ...> ``` Default behavior: - returns immediately - keeps the waiter managed by Avibe - lets the agent inspect or stop the watch later - creates a follow-up Agent Run after the waiter succeeds or reaches a terminal failure Use `--forever` when the same waiter should re-arm after each detected event instead of exiting after one follow-up. ## `vibe watch` Parameters To Remember - `--session-id`: which Agent Session the follow-up should continue - `--message`: the instruction template for the follow-up Agent Run created from waiter output - `--prefix`: legacy alias for older watch instructions; prefer `--message` in new watches - `--name`: optional label for later management - `--forever`: re-arm after each detected event - `--timeout`: per-cycle timeout - `--lifetime-timeout`: whole-watch lifetime cap, mainly for forever watches Management commands: - `vibe watch list` - `vibe watch show <watch-id>` - `vibe watch update <watch-id> --name '...'` - `vibe watch pause <watch-id>` - `vibe watch resume <watch-id>` - `vibe watch remove <watch-id>` hides the watch while keeping prior run history ## Waiter Contract Write waiters to follow this contract: - `exit 0`: event detected; final summary printed to `stdout` - `exit 124`: timeout; still send a timeout follow-up - other non-zero: failure; no follow-up Keep the output split clean: - `stdout`: final summary for the next turn - `stderr`: polling logs and diagnostics ## Generic Examples Delay: ```bash vibe watch add \ --session-id "sesk8m4q2p7x" \ --name "Delay callback" \ --message "The delayed check completed. Continue from the result below." \ -- \ bash -lc 'sleep 120; echo "Timer finished after 120 seconds."' ``` File appears: ```bash vibe watch add \ --session-id "sesk8m4q2p7x" \ --name "Wait for export file" \ --message "The export file is ready. Inspect it and continue." \ -- \ bash -lc 'while [ ! -f /tmp/export.json ]; do sleep 10; done; echo "Detected /tmp/export.json"' ``` Log match: ```bash vibe watch add \ --session-id "sesk8m4q2p7x" \ --name "Watch app log" \ --message "The expected log pattern appeared. Inspect the event and continue." \ --forever \ -- \ bash -lc 'tail -Fn0 /tmp/app.log | while read -r line; do case "$line" in *READY*) echo "$line"; break;; esac; done' ``` ## Session Targeting Use the current Avibe context: - `--session-id` controls which Agent Session Avibe will continue using - use the current Agent Session ID when the follow-up should continue the same session - if no usable Agent Session ID is available, confirm the target session first instead of guessing - `--post-to channel` only when the follow-up should keep the same Agent Session but publish in the parent channel ## Timeout And Lifecycle For `vibe watch add`: - `--timeout` is the waiter timeout for one cycle - default is `21600` seconds - `0` means no per-cycle timeout - `--forever` means re-arm after each detected event - forever retries only when the waiter exits with an allowed `--retry-exit-code`; other failures stop the watch and send a failure follow-up - `--lifetime-timeout` limits the whole long-running watch; default is `0` meaning run until killed This separation matters: a forever watch can still use a bounded timeout for each cycle. ## Bundled Waiter Example This skill ships bundled GitHub waiters: - `scripts/wait_pr.py` Waits for GitHub PR review activity, including reviews, inline review comments, PR conversation comments, PR status transitions such as `draft -> open`, `open -> merged`, or `open -> closed`, and the special Codex `+1` reaction on the PR body. It can also wait for newly opened PRs in a repository. - `scripts/wait_issue.py` Waits for GitHub issue activity, either newly opened issues in a repository or new comments on a single issue. - `scripts/wait_action.py` Waits for selected GitHub Actions workflow runs on a specific commit SHA to finish. Workflow failures are reported as an event so the follow-up turn can inspect and handle them. Use bundled waiters as examples or as ready-to-run building blocks. The main skill is still `vibe watch`; the waiter is only the thing that blocks until the condition is met. When running a bundled script through `uv`, prefer `uv run --no-project ...` so the script does not accidentally attach itself to an unrelated parent project. Bundled GitHub waiters use exit code `75` for retryable startup errors such as temporary network failures or GitHub `408/429/5xx` responses. ## GitHub Example Waiter Use the bundled GitHub waiter o
Use the official Sentry CLI to investigate issues, events, traces, and logs for Vibe Remote without committing Sentry credentials into the repository.
Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.
Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.