# Ship Pr

> Babysit a PR. Iterate with AI reviewers and CI. Get it ready and maybe merge. Send summary message.

- Skill: `epicweb-dev/ship-pr` (Agent Skill)
- Install (CLI): `npx skillmds@latest add epicweb-dev/ship-pr`
- Raw SKILL.md: https://api.skillmd.com/api/skills/epicweb-dev/ship-pr/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: epicweb-dev (https://skillmd.com/u/epicweb-dev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/epicweb-dev/ship-pr

---


# Ship PR

## Loop

1. Mark ready — `kody:@kentcdodds/github/pr/set-review-status` with
   `{ prUrl, status: 'ready' }`, or `{ owner, repo, prNumber, status: 'ready' }`
2. Wait for CI — `gh pr checks` (compose `loop-on-ci`, `fix-ci`)
3. Fix failures; address valid AI-reviewer feedback (ignore insignificant nits /
   already-fixed / wrong); check mergability with base branch and rebase if
   needed
4. Green and no valid feedback left → break
5. Push → repeat

## Merge and Deploy if requested or the change is low risk

Squash and merge PR as Kody with
`kody:@kentcdodds/github/pr/merge` using
`{ prUrl, mergeMethod: 'squash' }` (or `{ owner, repo, prNumber, ... }`;
optional `commitTitle`), watch CI deploy. Relevant links for the discord message
include: agent, PR, CI job, and relevant deployment page(s).

Other useful exports on the same package: `pr/get-checks` for check-run status
without `gh`, and `request` / `graphql` (`kody:@kentcdodds/github/request`,
`kody:@kentcdodds/github/graphql`) for one-off authenticated GitHub calls.

## Done → Discord

When finished (whether merged or not), send a discord summary with relevant links.

```javascript
import postMessage from 'kody:@kentcdodds/discord/post-message'

export default async function main() {
	const content = ` ... `
	const shipPrChannelId = '1491568683737157683'
	return postMessage({ channelId: shipPrChannelId, content })
}
```

