ship-pr
Skill4 starsChanged 2 months agoMITView on GitHub
Implement one agentdeck GitHub issue end to end as a PR: design in the PR body before code, code that matches its analog, self-review that catches the path no test exercises, then the merge gate. Five stages (understand, design, implement, self-review, gate). Use when implementing an agentdeck issue as deck-dev.
- Reads credentials
- Commits and pushes
26 other projects use a version of this.
Adopted by
Most recently taken up by
- devcules/devculestheir own version, first seen Nov 8, 2026
- simonwong/skillstheir own version, first seen Nov 6, 2026
- mattbutlerengineering/mattbutlerengineeringtheir own version, first seen Nov 1, 2026
- labsai/EDDItheir own version, first seen Oct 27, 2026
- gymcoach-app/gymcoachtheir own version, first seen Oct 26, 2026
- Julien-Au/gymcoachtheir own version, first seen Oct 26, 2026
Used with
Projects with it also use ideate, triage and 7 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
OpenAISkillideate
Generate image-based alternatives, remixes, or new design directions from a Product Design brief. Use when the user asks for design variants, visual exploration, remixes, or image-generated approaches from provided context.
Also in 4 projects that use this
Google CloudSkilltriage
Gather context on a change or bug and plan the implementation.
Also in 4 projects that use this
GoogleSkilldiagnosing-bugs
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.
Also in 3 projects that use this
GoogleSkilldomain-modeling
Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.
Also in 3 projects that use this
Hugging FaceSkillimplement
Make tests pass. Invoke after /write-tests produces failing tests.
Also in 3 projects that use this
MicrosoftSkillhandoff
Compact the current conversation into a handoff document for another agent to pick up.
Also in 3 projects that use this
- +3 more from google
Other versions26 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 26
- kentcdodds/kentcdodds.com★ 2.5ksame name
- kentcdodds/kody★ 926same name
- pedronauck/skills★ 649same name
- labsai/EDDI★ 389same name
- openbootdotdev/openboot★ 277same name
- gymcoach-app/gymcoach★ 182same name
- Julien-Au/gymcoach★ 182same name
- kentcdodds/kcd-skills★ 64same name
- svyatov/supermatt★ 20same name
- devcules/devcules★ 17same name
16 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- milestone-retroSkill
- open-issueSkill
- releaseSkill
- review-prSkill
- ship-issueSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 26 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 41
Every instruction below, and in references/, carries exactly one of these:
- Very specific: line 77
Run uv run scripts/repomap.py.
- Distinctive: line 97
Delete abandoned design and justifications the code no longer needs.
- Distinctive: line 104
No attribution trailers anywhere.
“Common” is measured: kept by at least 6 in 10 of the 26 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Ship a PR
Design the diff before writing it. The design binds nothing by itself, so Stage 1 stops and waits for the orchestrator to check it against the brief before Stage 2 touches source. Self-review is a checklist, not reflection: an unanswered question fails the stage, same as an unrun command.
Checklist
Copy this into your own response and check off each stage as you complete it:
Ship progress:
- [ ] 0. Understand: spec gate, engineering docs, seed the worktree
- [ ] 1. Design: PR body sections, then stop and wait for the design gate
- [ ] 2. Implement: match the analog, stay in budget (references/implement.md)
- [ ] 3. Self-review: the standard, ten shape questions, the coverage question (references/self-review.md)
- [ ] 4. Gate: make check green, gh pr readyFreedom per stage
Thinking is high freedom. Verification and output are low: a checklist or a template you improvise is not one.
| stage | freedom | why |
| 0 Understand | LOW on the spec gate, HIGH on reading | the gate is binary: Done when and scope bounds present, or stop and comment |
| 1 Design | LOW on format, HIGH on content | CI parses the budget block; what argument goes in it is judgment |
| 2 Implement | HIGH | open field. Over-specifying here does real damage, and the issue this skill ships from puts it out of scope |
| 3 Self-review | LOW | a checklist you can improvise is not a checklist |
| 4 Gate | LOW | exact commands, fragile sequence |
Register
Every instruction below, and in references/, carries exactly one of these:
| register | wording | carries |
| CONSTRAINT | MUST / NEVER | what breaks if violated, named alongside it |
| EXPECTATION | "the reviewer checks X" | which finding class the miss earns |
| JUDGMENT | "default is X, deviate when Y" | nothing; your call |
A CONSTRAINT without a stated consequence is a preference, not a CONSTRAINT: rewrite it or demote it.
Stages
| stage | freedom / register | does | writes |
| 0. Understand | LOW / CONSTRAINT on the gate | Read the issue as spec. Spec gate below. Seed the worktree. | nothing, or a gate comment |
| 1. Design | LOW / CONSTRAINT on format | PR body sections, then stop. references/design.md | draft PR, then wait |
| 2. Implement | HIGH / JUDGMENT | Match the analog, stay in budget, test what the change exposes. references/implement.md | source, tests, CHANGELOG |
| 3. Self-review | LOW / CONSTRAINT | The standard (major features), ten shape questions, the coverage question, answered in writing. references/self-review.md | the answers, visible in your response |
| 4. Gate | LOW / CONSTRAINT | make check green, compact the body, gh pr ready. Below. | ready PR |
Stage 0: Understand
CONSTRAINT: read the issue (gh issue view <n>), docs/engineering/ in full, the
docs/patterns/ file for your concern, and docs-site/content/resources/roadmap.mdx for the arc
this issue sits in, before any edit. Consequence: skip it and Stage 1's
design has nothing real to bind against, and the design gate has nothing to compare it to.
CONSTRAINT, spec gate: if the issue lacks Done when outcomes or scope bounds (what must NOT be
added), comment on the issue naming exactly what is missing and stop. Consequence of skipping
this: an unbounded spec produces unbounded code, and the reviewer's Scope phase will file it.
Seed the worktree: copy .env if present, then uv venv --python 3.12 && make install.
Stage 1: Design, then wait
Run uv run scripts/repomap.py. Open a draft PR (branch feat/<n>-<slug> or fix/<n>-<slug>,
gh pr create --draft targeting dev, Closes #<n>) and write the complete design into its body
before touching source. Section shape, caps, and the design gate: references/design.md.
CONSTRAINT: after posting the design, stop. Do not edit source until the orchestrator (or the
user, outside ship-issue) tells you to proceed. Consequence of skipping this: bloat argued
against code that already works never gets fixed; catching it at design costs nothing.
Stage 2: Implement
JUDGMENT, high freedom. Depth and test rules: references/implement.md.
Stage 3: Self-review
CONSTRAINT: answer every question in references/self-review.md in writing before Stage 4,
including the coverage question. An unanswered question fails the stage.
Stage 4: Gate
- Compact the PR body: it describes the change as it now stands, not the rounds that produced it. Delete abandoned design and justifications the code no longer needs.
- CONSTRAINT: run
export PR_BODY="$(gh pr view <n> --json body -q .body)" && make check, 100% green, beforegh pr ready. Two consequences: a redmake checkshipped bygh pr readyputs a red required check on the PR and it cannot merge; and without the export,scripts/check_docs_impact.pyreads an empty body, reports affected pages as unreviewed (or the author never sees the list), so CI's required "Check affected documentation" goes red on a gate believed clean (#602, #607, #617). - No attribution trailers anywhere.
Answering a review
Reply in the review thread and resolve it. Never grow the PR body to answer a finding: a thread collapses once addressed, a body is what the next reader wades through to learn what the change does. The body only changes when the change does.
CONSTRAINT: resolve every thread, or the PR cannot merge. dev enforces this twice, as
required_conversation_resolution in branch protection and required_review_thread_resolution in
its ruleset, so one open thread holds the PR at BLOCKED with every check green, zero required
approvals, and nothing in gh pr checks to explain it. Fixing the code is not answering the
finding; the thread is.
gh api graphql -f query='mutation($t:ID!){resolveReviewThread(input:{threadId:$t}){thread{isResolved}}}' -f t="<thread-id>"Thread ids come from reviewThreads on the pull request. Reply first, then resolve: a resolved
thread with no reply tells the next reader nothing about what changed.
Measured by
Neither agent scores itself. What the dev side of this skill is measured on, from #431:
| metric | source |
| BLOCK count on first review | reviewer's verdict marker |
rework ratio: commits after ready_for_review / total | git log vs. the ready event |
| declared vs. actual concept budget | concept_budget.py |
| declared vs. actual LOC | quality_delta.py |
| files touched vs. files the issue named | diff vs. issue body |
| PR body words vs. cap | body, fences stripped |
make check green before ready? | check runs vs. ready timestamp |
| tokens, tool calls, wall time | agent completion record |
Progress: name each stage (Understand / Design / Implement / Self-review / Gate) as you enter it. A silent multi-stage run reads as a stall.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

