Open a Review Request
Use the forge that owns the remote: gh for GitHub, glab for GitLab.
Process
- Read
.agents/ship.mdat the repository root. If missing, stop and ask the user to run/setup. Derive the protected branches and target branch from this file. - Confirm the current branch is not protected.
- From the target repository, run
${CLAUDE_SKILL_DIR}/scripts/detect-forge-cli.sh. Continue only when it printsSTATUS=ok; otherwise report its status and stop. - Look up any open request for the current branch. If one exists and the user asked only to revise its title or body, go straight to step 8 — a metadata-only edit must not fetch, rebase, or push, and it keeps the request's existing source and target branches.
- Confirm the worktree has no uncommitted changes that should be part of the review, then fetch
the target branch. Under GitHub Flow or Trunk-Based Development:
- If
origin/<current-branch>does not exist, rebase ontoorigin/mainwhen needed. - If the published branch needs a history rewrite, stop and ask before rebasing and pushing with
--force-with-lease. Under Gitflow, never rebase. Feature branches targetdevelop;release/*andhotfix/*targetmain.
- If
- If this work follows a recent PR or MR, read references/follow-up.md. If it spans repositories or independently deployed applications, also read references/correlated-prs.md.
- Confirm the outgoing commit range contains only intended commits. Push with
git push -u origin HEADunless step 5 received explicit rewrite approval. - Create or update the review request non-interactively with an explicit target branch.
- Read the request back from the forge and report its URL, source, target, and test status.
Body
Use a review-focused title and this compact structure:
## Summary
- ...
## Test plan
- [ ] ...
## Notes
- ...
Omit empty optional sections. Report unrun tests honestly. End with
Co-Authored-By: Skrrt Bot <bot@skrrt.sh> unless the user opts out. Use a temporary body file for
multi-line content.
Guardrails
- Push and open a request only when the user asked for one; loading this skill is not that request.
- Trust the detector, not an assumed
originhost. - Never use plain
--force; only--force-with-leaseafter explicit approval. - Never open a duplicate request when the current branch already has one.
- Never move a branch to change only a request's text; update the request in place.
- Never merge the request unless the user separately asks.