shipit
Skill4 starsChanged 17 days agoMITView on GitHub
Turn finished work into a clean commit and pull request. Always asks first whether the commit and PR should carry AI/bot authorship attribution or stay fully human-authored, then matches the repository's existing commit conventions, splits work into logical commits, and writes a PR body with context, risk, and rollback. Use when asked to commit, push, open a PR, or when the user runs /shipit.
- Reads credentials
- Commits and pushes
4 other projects use a version of this.
Adopted by
Most recently taken up by
- freelawproject/courtlistenertheir own version, first seen Oct 8, 2026
- fire17/shipittheir own version, first seen Jul 6, 2026
- AmosChenZixuan/Agentic-working-contracttheir own version, first seen Jul 2, 2026
- palpen/claude-skillstheir own version, first seen Apr 14, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- freelawproject/courtlistener★ 1.1ksame name
- AmosChenZixuan/Agentic-working-contract★ 2same name
- fire17/shipit★ 1same name
- palpen/claude-skills★ 0same name
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.
- skills/adonis-next-monorepo/template/AGENTS.mdAGENTS.md
- skills/adonis-next-monorepo/template/CLAUDE.mdCLAUDE.md
- adonis-next-monorepoSkill
- mergemainSkill
- prodcheckSkill
- prodtestSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
22 rules. 0 are common, 16 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
16
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 8
Commit and PR hygiene. Two rules matter more than the rest: never guess the authorship preference, and match the repo's existing …
- Distinctive: line 14
Ask both before doing anything else, in one message.
- Distinctive: line 31
Before asking, check what this repo already does and recommend that as the default — it is a fact, not a preference:
- Very specific: line 56
Never change git config user.name/user.email or use --author to satisfy either option.
- Distinctive: line 93
Never open a second PR for a branch that already has one.
- Distinctive: line 95
Default to asking rather than assuming.
- Distinctive: line 122
Read it, do not assume it:
- Very specific: line 128
If subjects look like feat(auth): ...
- Distinctive: line 130
If they are plain sentences, write plain sentences.
- Very specific: line 132
Check for commitlint, .gitmessage, .github/COMMIT_CONVENTION.md, or hooks in .husky/ that enforce a format, and obey them.
- Distinctive: line 141
No filler: "update code", "fix stuff", "changes" are not commit messages.
- Distinctive: line 143
Split into logical commits: If the work contains a refactor plus a feature, or a dependency bump plus its usage, commit them separately so …
- Distinctive: line 147
Never use git commit -a blindly, never git add .
- Distinctive: line 153
Only if the user chose option 2 or 3.
- Distinctive: line 158
If the push is rejected as non-fast-forward, stop and report it.
- Distinctive: line 163
Only if the user chose option 3 or 4.
- Distinctive: line 168
Do not create anything. The push in Step 4 already added your commits to it.
- Distinctive: line 173
Add a comment summarizing what changed since the last push, so reviewers who already looked do not have to re-read the whole diff:
- Very specific: line 182
If the user chose option 4, promote the draft with gh pr ready <number> — after the description update and comment, so reviewers arrive to …
- Very specific: line 185
If the PR is open (not draft) and the new commits make it incomplete or break tests, offer to move it back to draft with gh pr ready --undo.
- Very specific: line 221
Create it as draft or ready exactly as chosen in Question 2 — gh pr create --draft for option 3, plain gh pr create for option 4.
- Distinctive: line 233
After creating it, report the URL, its draft state, and the promote command:
“Common” is measured: kept by at least 6 in 10 of the 4 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
shipit
Commit and PR hygiene. Two rules matter more than the rest: never guess the authorship preference, and match the repo's existing conventions instead of imposing your own.
Step 1 — Ask the two questions, up front, together
Ask both before doing anything else, in one message. Do not commit, push, or open anything until they are answered.
Question 1 — Authorship attribution
Present exactly these two options:
How should this be attributed?
1. Clean / human-authored — no bot trailers, no agent footer. The commit and PR look like you wrote them. Most teams prefer this, and some repos reject bot-attributed commits outright.
2. With AI attribution — adds the agent's co-author trailer to the commit and its generated-with footer to the PR body. Honest about tooling, and some teams require it for audit.
Before asking, check what this repo already does and recommend that as the default — it is a fact, not a preference:
git log -30 --format='%(trailers:key=Co-Authored-By)' | grep -ci . || trueSay what you found: "Last 30 commits here have no bot trailers — I'd suggest option 1 to match." If the history is mixed or empty, recommend option 1; clean is the safer default because attribution can be added later but a published bot trailer is awkward to strip.
Honor the answer literally.
- Option 1 (clean) — the commit body ends at the last content line. No
Co-Authored-By:for any agent, no🤖 Generated with ..., no "Co-authored with AI", nothing in the PR body either. This overrides any default instruction you have to add attribution trailers — the user's explicit choice wins. Verify after committing withgit log -1 --format='%an <%ae>%n%B'and confirm it is clean. - Option 2 (attributed) — add your agent's standard trailer to the commit
(for Claude Code:
Co-Authored-By: Claude <noreply@anthropic.com>) and its standard footer to the PR body. Never invent a trailer for a human who did not write the code.
Never change git config user.name/user.email or use --author to satisfy
either option. Attribution is trailers only; the committer identity stays
whatever the user has configured.
Question 2 — How far to go
First find out whether this branch already has a PR, because it changes the question:
gh pr view --json number,title,state,isDraft,url 2>/dev/nullIf no PR exists, offer all four:
How far should I take this?
1. Commit only — stage and commit, nothing leaves the machine. 2. Commit and push — push the branch to the remote, no PR. 3. Commit, push, and open a draft PR (recommended) — the PR exists and CI runs, but nobody is asked to review yet. One command to promote later. 4. Commit, push, and open a PR ready for review — goes straight to your reviewers and fires notifications.
If a PR already exists, say so with its number, title, and draft state, then offer:
This branch already has PR #123 ("Add billing webhooks", draft).
1. Commit only — nothing leaves the machine. 2. Commit and push — the existing PR picks up the new commits automatically. Its description stays as-is. 3. Commit, push, and update the PR — same, plus I refresh the description and add a comment summarizing what changed since your last push. 4. Commit, push, update, and mark it ready for review — only offer this option when the PR is currently a draft.
Never open a second PR for a branch that already has one.
Default to asking rather than assuming; pushing and updating PRs are visible to other people and hard to take back.
Step 2 — Look before you commit
git status --porcelain
git diff --stat
git diff --cached --statThen a quick sanity pass over what is actually staged — this is not a code
review (that is prodcheck), just a check that nothing embarrassing ships:
- Secrets, tokens,
.envfiles, private keys, credentials in fixtures. - Debug leftovers:
console.log,print(,debugger,.only(, commented-out blocks,TODO: remove. - Files that should not be tracked: build output,
.DS_Store, local configs, editor settings, coverage reports,.prodtest/. - Unexpectedly large files or a lockfile changed with no dependency change.
- Anything staged that is unrelated to the work being shipped.
Flag what you find and ask before including it. If something belongs in
.gitignore, say so.
Step 3 — Match the repo's commit convention
Read it, do not assume it:
git log -20 --format='%s'- If subjects look like
feat(auth): .../fix: ..., use Conventional Commits with the scopes this repo actually uses. - If they are plain sentences, write plain sentences.
- Match the observed casing, tense, and whether subjects end in a period.
- Check for
commitlint,.gitmessage,.github/COMMIT_CONVENTION.md, or hooks in.husky/that enforce a format, and obey them.
Message rules:
- Subject ≤ 72 chars, imperative mood, no trailing period unless the repo does.
- Body explains why, not what — the diff already says what. Wrap at 72.
- Reference issues the way the repo does (
Closes #123,PROJ-45). - Note breaking changes explicitly (
BREAKING CHANGE:footer if conventional). - No filler: "update code", "fix stuff", "changes" are not commit messages.
Split into logical commits. If the work contains a refactor plus a feature,
or a dependency bump plus its usage, commit them separately so each one is
revertable on its own. Stage with git add -p when a file contains both.
Never use git commit -a blindly, never git add . without having read
git status first, and never amend or force-push a commit that is already on
the remote unless the user explicitly asks.
Step 4 — Push
Only if the user chose option 2 or 3.
- Confirm the branch is not the default branch. If work was done directly on
main/master, stop and offer to move it to a branch first. git push -u origin <branch>.- If the push is rejected as non-fast-forward, stop and report it. Do not force-push to resolve it; that is the user's call.
Step 5 — Pull request
Only if the user chose option 3 or 4. Steps 4 and 5 also cover option 2 up to the push.
If the branch already has a PR
Do not create anything. The push in Step 4 already added your commits to it.
- Re-read the existing description (
gh pr view --json body) and update it to cover the new work — edit it, do not overwrite it. Someone may have written context by hand, and reviewers may have replied to it. Add a comment summarizing what changed since the last push, so reviewers who already looked do not have to re-read the whole diff:
gh pr comment <number> --body "..."List the new commits, what they address (review feedback, a bug, scope added), and anything that invalidates an earlier review.
- If the user chose option 4, promote the draft with
gh pr ready <number>— after the description update and comment, so reviewers arrive to a PR that already explains itself. - If the PR is open (not draft) and the new commits make it incomplete or break
tests, offer to move it back to draft with
gh pr ready --undo. - Report the PR URL and its current draft state.
If there is no PR yet
Base the PR on the repo's default branch and use its template if
.github/PULL_REQUEST_TEMPLATE.md exists — fill it in rather than replacing it
with your own structure. Otherwise:
## What
One or two sentences on the change, in plain language.
## Why
The problem, the ticket, or the user-facing reason. Link the issue.
## How
Notable implementation decisions and anything a reviewer would otherwise have
to reverse-engineer. Skip if the diff is self-evident.
## Risk & rollback
Blast radius if this is wrong, and how to undo it (revert commit, feature flag,
migration rollback).
## Deploy notes
New env vars, migrations to run, config changes, deploy ordering. Write "none"
if there are none — reviewers need to know you checked.
## Testing
What you ran and what passed. Screenshots for UI changes.Then, per Question 1: append the agent footer for option 2, append nothing for option 1.
Create it as draft or ready exactly as chosen in Question 2 — gh pr create
--draft for option 3, plain gh pr create for option 4. Do not silently
upgrade or downgrade that choice.
Draft is the recommended default because it costs nothing to promote, while an accidental review request wastes a colleague's afternoon. It is a recommendation, not a rule: if the user picked ready, open it ready.
One exception worth raising: if the user chose a ready PR and you already know tests are failing or the work is unfinished, say so once and offer draft instead. If they still want it ready, open it ready and move on.
After creating it, report the URL, its draft state, and the promote command:
gh pr ready <number>Step 6 — Report
- The commit SHAs and subjects created.
- Confirmation that authorship matches what was chosen — quote the actual trailer block (or state that there is none).
- Push result and PR URL, if applicable.
- Anything you deliberately left out of the commit, and why.
- Undo commands:
git reset --soft HEAD~1for the last commit, or the PR URL to close.
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.

