pr
Skill142 starsChanged 22 days agoMITView on GitHub
Use when the user explicitly asks to push the current branch and open a PR, rewrite an open PR's body from its commits, or wait for CI and merge it
- Commits and pushes
In this repository14 other files it gives its agents.
- AGENTS.mdAGENTS.md
- publish-pluginsSkill
- upgrade-playbooksSkill
- audit-agent-settingsSkill
- best-practicesSkill
- blindspotSkill
- commitSkill
- differenceSkill
- fuck-over-engineeringSkill
- refactor-agents-mdSkill
- refactor-memorySkill
- refactor-skillSkill
- simple-englishSkill
- write-like-meSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 4 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
Create mode and update mode run these steps where they say "gather PR material":
- Distinctive: line 35
Add pr skill for pushing branches and opening PRs
- Distinctive: line 77
If exit code 0 (all checks passed):
- Distinctive: line 80
If non-zero (check failed):
- Very specific: line 81
Run gh pr checks once more to list failed checks and their URLs.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Invoking this skill IS the request. Your task is fully specified here. Never ask what to do.
Run every command bare, exactly as written below: git and gh find the repository from any subdirectory, and a cd does not carry over to the next Bash call in this fork. A cd ... && or $() prefix stops a command matching allowed-tools, and the merge then hits the permission gate.
The user invoked this skill with: "$ARGUMENTS"
Mode comes from the arguments first: create means create mode, update means update mode, merge means merge mode. With none of those three words, including an empty argument, run gh pr view --json state --jq .state 2>/dev/null and let its result decide: a non-zero exit (no PR for this branch) means create mode, OPEN means update mode, any other state means report that state and stop. Merge mode only ever comes from the argument.
PR material
Create mode and update mode run these steps where they say "gather PR material":
git log --format='%n%s' --name-only main..HEAD(fall back tomaster..HEAD). Each commit is a block: its subject, then the files it touched. A flat log next to a branch-wide diff stat lets the writer guess which commit touched which file.- The PR describes the net change of the branch. A commit whose subject starts with
Revert "and the commit it names cancel each other when both sit in the log, as does a later commit that restores what an earlier one removed, and a subject starting withbuild: bumpdescribes no change. Remove those blocks from the log before passing it on. git log --format=%b main..HEAD(same fallback). Collect every issue number written as#Nor as a GitHub issue URL. Each one becomes aFix #Nline at the end of the body, one per line, no duplicates.- Invoke the
write-like-meskill. Pass as argument: "Write a GitHub PR title and body from the material below. Shape the draft as the title on the first line, a blank line, then the body, and nothing else: the caller splits on the first line, so a label or heading would land in the title. The draft goes straight into the caller's nextghcommand in the same response, never into a reply: a reply with no tool call ends the caller before the PR exists.
Title: one plain-English line under 72 chars that names the change itself, with no fix: or feat: type prefix. GitHub shows titles as plain text, so write file names bare, without backticks. Body: GitHub renders it as markdown, so wrap every file path, command, flag, and identifier in backticks, at every occurrence. Leave out changes a reviewer would not miss, such as ignore files, asset moves, and personal config tweaks, unless the branch holds nothing else. Body shape depends on how many separate changes are left.
One change: 1-3 sentences of prose, what changed and why, no list.
<example>
Add pr skill for pushing branches and opening PRsAdds a pr skill that pushes the current branch, drafts a PR title and body with write-like-me, and opens the PR with gh. Wires it into the plugin manifest and marketplace so it ships with hal-skills.
</example>
Two or more changes: one - item per change, each item 1-3 short sentences stating the change and one before/after example when the change has a visible input and output. Give every item its example, not only the first.
<example>
Move name-suffix into core rules and protect URLs and slashes- Move
name-suffixfrom AI spacing into the core rules. - URLs are left alone. Anything starting with
http://orhttps://is hidden from the rules, so%E4%B8%ADand/wiki/CJK#CJKsurvive. /next to CJK never gets spaces anymore.CJK/CJKstaysCJK/CJK, same as_. File paths still work:CJK/homeCJKbecomesCJK /home CJK.</example>
<material>" followed by the log from step 2, then a closing "</material>" line.
- From
write-like-me's output, take the first line as title, the rest as body. Append a blank line and theFix #Nlines from step 3 to the body.
Create mode
git rev-parse --abbrev-ref HEAD— abort ifmainormaster.gh pr view --json url 2>/dev/null— if a PR already exists, report its URL and stop.git push -u origin HEAD.- Gather PR material.
gh pr create --title "<title>" --body "<body>".- Report the PR URL.
Update mode
gh pr view --json url,state 2>/dev/null— abort if no PR or not open.git push, alone in its Bash call, every time: it printsEverything up-to-datewhen nothing is ahead. Abort if it fails.- Gather PR material.
gh pr edit --body "<body>"— the title stays as it is.- Report the PR URL.
Merge mode
gh pr view --json url,number,state— abort if no PR or not open.git push, alone in its Bash call, every time: it printsEverything up-to-datewhen nothing is ahead. Abort if it fails.git rev-parse HEAD, thengh pr view --json headRefOid --jq .headRefOid. If they differ, GitHub has not seen the push yet andgh pr checkswould report the old head's runs: wait 15 seconds and compare once more, then abort if they still differ.gh pr checks --watch— blocks until all checks complete. Use a 10-minute Bash timeout. If the push sent commits and it reports no checks yet, the push just queued them: wait 15 seconds and run it again once. If the call times out instead, the checks are still running: run it again with the same timeout, and after a third timeout report the checks still pending and stop.- If exit code 0 (all checks passed):
gh pr merge --merge --delete-branch. It also switches to the base branch, pulls it, and deletes the local branch.- Report: merged, remote and local branches cleaned up.
- If non-zero (check failed):
- Run
gh pr checksonce more to list failed checks and their URLs. - Report which checks failed. Take no other action.
- Run
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.

