# Send

Make a PR, wait for CI with bounded transport retries, independently review, and merge...

- Repository: https://github.com/yc-software/qm (15597 stars)
- Category: Git and review
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add yc-software/qm --skill send -g -a claude-code -y`
Codex: `npx skills add yc-software/qm --skill send -g -a codex -y`
Cursor: `npx skills add yc-software/qm --skill send -g -a cursor -y`
Gemini CLI: `npx skills add yc-software/qm --skill send -g -a gemini-cli -y`

## Description

Make a PR, wait for CI with bounded transport retries, independently review, and merge only when all gates pass.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Babysit

Make a pull request for the change we just discussed, file it, babysit CI, fix
any issues that come up, and merge once CI is **fully** green.

## Steps

1. **Make the PR.** Commit the discussed change on a feature branch (create one
   off the default branch if currently on it). Push it.

2. **File it.** Open a pull request with a clear title and description covering why and what changed. Use `gh` for GitHub or `glab` for
   GitLab. Detect from the remote.

3. **Wait for CI in one blocking process, with bounded transport retries.**
   Load the `github-gitlab` skill; it reports the directory holding its scripts. For
   GitHub, capture the PR's full head SHA and use its bundled helper, not bare
   `gh pr checks --watch`:

   ```bash
   node <github-gitlab dir>/scripts/watch-ci.mjs --repo OWNER/REPO --pr NUMBER --head REVIEWED_HEAD_SHA
   ```

   Run this with `execute`, an explicit `sandbox_id`, `background:true`, and authorized
   credentials; subscribe with `background` action `watch` and the returned `process_id`.
   Keep that sandbox ID throughout the checkout, checks, and push.
   Keep one watcher per PR; hand off if another agent already owns it. The helper
   polls internally, retries recognized transport/server errors with bounded backoff,
   and has a 30-minute overall deadline. Set the background lifetime longer than that.
   Do not wake the model repeatedly to report pending checks.

   Read the helper's JSON status, not just the exit code. Pending is not failure;
   TLS timeouts and connection resets are not logout or permission expiry. Failed
   checks, auth failures, rate limits, unknown errors, exhausted retries, and deadlines all
   remain nonzero. Keep `set -e`; never mask failure with a success marker or merge.
   A changed head invalidates successful checks and reviews: restart both on the
   new SHA. Empty, skipped, or cancelled checks do not count as success.

The rest: https://github.com/yc-software/qm/blob/HEAD/skills-seed/send/SKILL.md
