Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .agents/skills/ship-pr/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
name: ship-pr
description: >
Babysit a PR. Iterate with AI reviewers and CI. Get it ready and maybe merge.
Send summary message.
---

# Ship PR

## Loop

1. Mark ready — `kody:@kentcdodds/github-pr-tools/set-pr-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)
4. Green and no valid feedback left → break

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exit before reviews finish

Medium Severity

The loop waits only for CI in step 2, but step 4 exits when CI is green and there is no valid AI feedback. After a push, checks often finish before review comments or review checks land, so an agent can leave the loop and send Discord (or merge) while reviewer feedback is still pending.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit b234db6. Configure here.

5. Push → repeat

## Mode

By default, continue to Discord message with summary and include PR link

If explicitly requested, merge PR as Kody with
`kody:@kentcdodds/github-pr-tools/merge-pr` using
`{ prUrl, mergeMethod: 'squash' }` (or `{ owner, repo, prNumber, ... }`;
optional `commitTitle`), watch CI deploy, when finished, continue to the discord
message and include a summary with link to PR, deployed URL link, or failing job
link.

Other useful exports on the same package: `get-pr-checks` for check-run status
without `gh`, and `github-client` (`ghRestFetch` / `ghGraphQL`) for one-off
authenticated GitHub calls.

## Done → Discord

```javascript
import sendMeAMessage from 'kody:@kentcdodds/discord-gateway/send-me-a-message'

export default async function main() {
const content = ` ... `
return sendMeAMessage({ content })
}
```
Loading