Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
Open a pull request for the current branch. An agent skill from tbhb/vale-ai-tells.
$ npx skills add tbhb/vale-ai-tells --skill pr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tbhb/vale-ai-tells pr --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/tbhb/vale-ai-tells.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pr .claude/skills/pr && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pr" agent skill from https://github.com/tbhb/vale-ai-tells/tree/main/.claude/skills/pr into .claude/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/tbhb/vale-ai-tells/tree/main/.claude/skills/prType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add tbhb/vale-ai-tells --skill pr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tbhb/vale-ai-tells pr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tbhb/vale-ai-tells.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/pr .agents/skills/pr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pr" agent skill from https://github.com/tbhb/vale-ai-tells/tree/main/.claude/skills/pr into .agents/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tbhb/vale-ai-tells --skill pr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tbhb/vale-ai-tells pr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tbhb/vale-ai-tells.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/pr .cursor/skills/pr && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pr" agent skill from https://github.com/tbhb/vale-ai-tells/tree/main/.claude/skills/pr into .cursor/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/tbhb/vale-ai-tells.git --path .claude/skills/pr--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add tbhb/vale-ai-tells --skill pr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tbhb/vale-ai-tells pr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tbhb/vale-ai-tells.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/pr .gemini/skills/pr && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pr" agent skill from https://github.com/tbhb/vale-ai-tells/tree/main/.claude/skills/pr into .gemini/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install tbhb/vale-ai-tells prInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add tbhb/vale-ai-tells --skill pr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tbhb/vale-ai-tells.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/pr .github/skills/pr && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pr" agent skill from https://github.com/tbhb/vale-ai-tells/tree/main/.claude/skills/pr into .github/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tbhb/vale-ai-tells --skill pr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tbhb/vale-ai-tells pr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tbhb/vale-ai-tells.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/pr .opencode/skills/pr && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pr" agent skill from https://github.com/tbhb/vale-ai-tells/tree/main/.claude/skills/pr into .opencode/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
prOpen a pull request for the current branch. An agent skill from tbhb/vale-ai-tells.
PR is an agent skill from tbhb/vale-ai-tells. Open a pull request for the current branch. A forked writer drafts the title and the pull request properties and the template's sections into PRAGENTDESC.md. An independent reviewer then reads that draft against the branch, and a mechanical validator checks it against the template. The operator confirms before anything publishes. Whatever follows routes to the watch-pr and fix-pr and merge-pr skills. Use this whenever the user asks to open or draft a pull request in a tbhb repo, and whenever a task ends in one.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts (for example `scripts/create-pr.sh`, `scripts/guard-gh.sh` and `scripts/preflight.sh`).
It sits in Development, covering Pull requests. The repository describes itself as: In today's rapidly evolving landscape, vale-ai-tells is a comprehensive, cutting-edge Vale style package that empowers writers to seamlessly delve into the rich tapestry of AI…. The licence is Apache-2.0.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4c7abc9. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 6 files in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
ghmisebashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
PR loads about 2.9k tokens when it runs. Until then it costs about 130 tokens; SKILL.md has 1,639 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from tbhb/vale-ai-tells at commit 4c7abc9, republished under its Apache-2.0 licence (© tbhb). 1,639 words, ~2,865 tokens.
.claude/skills/pr/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Work the steps in order. A pair of hooks runs alongside them and refuses the shortcuts. A direct gh pr create is out, so is a gh pr edit rewriting the title or body, and so is any publish whose description the reviewer hasn't seen in its current form.
This skill ends when the pull request is open. From there watch-pr, fix-pr, and merge-pr take over, and step 8 routes to whichever the operator asked for.
!bash ${CLAUDE_SKILL_DIR}/scripts/preflight.sh
Track these steps with the session's task-list tools where it carries them. Newer harnesses leave those tools out by default, and a session without them works the list in order as written.
Stop before any of it where preflight reports a rebase, merge, or cherry-pick in progress, or a missing precondition. Say what's wrong and hand back.
Preflight answered each of these, so read rather than re-run:
rebase skill before opening, so the reviewer reads the branch against the base it actually merges into.Preflight also settled the draft on disk. It removed a stale PR_AGENTDESC.md where no open pull request matched it, then scaffolded a fresh one from the template. That scaffold has the frontmatter keys, a placeholder title, and every section the template declares, so nothing downstream reproduces the template's shape from memory. It fails the validator until something fills it, which is the point.
Invoke the write-pr-description skill, passing the repository root from preflight as its argument.
It runs forked, which keeps the branch diff in its context rather than this one, and it runs the mechanical validator until it reports nothing before returning. It comes back with DRAFT: WRITTEN plus what it changed, or with DRAFT: BLOCKED plus what stopped it. Where it reports a block, say what it found and hand back, because this workflow has nothing left to publish.
Don't write PR_AGENTDESC.md yourself. A guard hook refuses it, because editing the draft here means reading the diff here, which spends the whole point of forking the writer.
Invoke the fix-prose skill, passing the draft and the task that judges it:
Skill(fix-prose, args: "PR_AGENTDESC.md mise run lint-pr-description")It runs the lint rounds in a subagent, so the findings stay out of this session.
Run it before the review rather than after. The review in the next step signs the exact bytes it cleared, and a lint fix landing later voids that signature and buys another round.
Invoke the review-pr-description skill, passing the repository root. It runs as an independent agent that watched neither the work nor the drafting, so it reads the description against the branch with no memory of what anyone meant to write.
Its verdict drives a loop:
VERDICT: PASS ends the loop. Go on to step 5.VERDICT: CHANGES REQUIRED sends the findings back to write-pr-description, verbatim, in its arguments. Then review again.Bound it at three rounds, counting only the rounds a finding caused. A round the branch caused doesn't count against the bound. A remediation commit or a rebase changes what the description has to describe, and the reviewer then reads a branch it has never seen. Say which kind each round was as you go, so the count is accurate.
Past three, stop rather than opening a fourth. Report the count out loud along with the findings that keep coming back, and let the operator decide whether to go on.
A bound nobody reports is one nobody notices breaking.
This step is mandatory, and create-pr.sh enforces it. A clean verdict signs the exact bytes of the draft, a finding erases any earlier signature, and a later edit voids it the same way.
mise run lint-pr-descriptionThat task runs the mechanical checks, then vale and cspell over the draft. The validator settles the frontmatter shape, the title's form and bounds, section presence and order, empty sections, surviving comments, unclosed fences, dead links, and whether every backticked path exists. Each finding names a line and the fix.
Resolve every one through fix-prose rather than editing it yourself, because a direct edit here spends the context that skill exists to save. Edited the draft either way? Then step 4 runs again, because the gate compares bytes rather than intentions.
Print the draft first so the operator reads it in your message text rather than in the truncated widget:
Branch: <branch> into <base>
Commits: <count>
<the entire PR_AGENTDESC.md contents, verbatim>Preflight answered both of this step's questions under == pre-approval ==. Where it reported pr: GRANTED, the operator answered them for the whole session in advance, through mise run preapprove. Print the preceding block so the draft still reaches them, name the grant this publish goes under, and take both answers from the grant rather than from a question:
| Preflight line | How far to take it | How fixes land |
|---|---|---|
pr: GRANTED, merge: GRANTED | Open, fix, and merge | Separate commits |
pr: GRANTED, merge: not granted | Open, watch, and fix | Separate commits |
Separate commits are the pre-approved shape because amending rewrites a commit the operator already cleared, and a grant covering that would reach past the question it answers. Amend only where the operator asks for it in the session.
Ask anyway where any of these holds:
Where preflight reported pr: not granted, call AskUserQuestion with question set to How far should I take this?, header set to Pull request, multiSelect set to false, and these four options in order, from the most automated to the least:
| Label | Description |
|---|---|
Open, fix, and merge | Open it, watch the checks, fix what fails, and squash merge once it is green. |
Open, watch, and fix | Open it, watch the checks, and fix what fails. Stop before merging. |
Open and watch | Open it, watch the checks, and report the result without changing anything. |
Open only | Open it and hand back. |
Ask a second question in the same call, so the operator answers both at once. Set question to How should fix commits land?, header to Fixes, multiSelect to false, and give these two options:
| Label | Description |
|---|---|
Separate commits | Each fix lands as its own commit. History keeps the record of what broke. |
Amend and force-push | Fixes fold into the commit that caused them, pushed with --force-with-lease. |
Neither answer is the safe default in general. A separate commit suits a branch under review, where a reviewer needs to see what changed since they last looked. Amending suits a branch nobody has read yet, where a lint fix of its own is noise the squash message would have to account for.
Record both answers. Step 8 routes on the first and passes the second to fix-pr in its arguments, so neither gets asked again.
A fifth path stays available without an option of its own. Where the operator wants the description changed, redraft it, put it back through the review, and return here.
bash .claude/skills/pr/scripts/create-pr.shThat script is the only thing here that publishes, and it gates itself first:
Only then does the branch go up and the pull request open. A second run updates the open pull request rather than opening another.
Never call gh pr create yourself. A guard hook refuses it, because every gate named here lives in that script.
Report the URL.
Follow the answer from step 6.
Open only ends here. Say the pull request is open and hand back.
Open and watch invokes watch-pr with the number, then reports what it found. Stop there even when something failed.
Open, watch, and fix invokes watch-pr, then fix-pr on failure, then watch-pr again to confirm. Repeat until the checks pass, then stop before merging. Bound the loop. After three rounds on the same check, stop, then report what each attempt changed.
Open, fix, and merge does the same, then invokes merge-pr with the number once the checks pass. That skill drafts the squash message and puts it through its own review. It also asks the operator to confirm before merging, so the merge gets a confirmation of its own.
Where the description drifts as remediation commits arrive, redraft it, review it again, and re-run create-pr.sh to update the published copy.
This skill assumes the shared tbhb toolchain:
gh installed and authenticatedmise run lint-pr-description taskPR_AGENTDESC.md.github/pull_request_template.mdreview-pr-description and fix-prose skills deployed alongside this onewatch-pr, fix-pr, and merge-pr skills deployed for step 8Preflight checks each. Where one is missing, tell the operator rather than improvising a substitute.
© tbhb, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (scripts) in .claude/skills/pr of tbhb/vale-ai-tells.
Open the folder on GitHubat commit 4c7abc9
PR next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| PR this skilltbhb/vale-ai-tells | 115 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Check PRonyx-dot-app/onyx | 32k | 2 repos | ~2.3k | Automated safety check: Pass | MIT | |
| Understand Diff AnalysisEgonex-AI/Understand-Anything | 86k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| PR Design DocOpenHands/OpenHands | 90k | — | ~2.4k | Automated safety check: Pass | MIT |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
onyx-dot-app/onyx
Checks a GitHub, GitLab, or Perforce (p4) pull request (or merge request, or shelved changelist) for unresolved review comments, failing status checks, and incomplete PR descriptions.
Egonex-AI/Understand-Anything
Reads your git changes or a pull request against a prebuilt knowledge graph of the project to explain what changed, which components are affected and what is risky.
OpenHands/OpenHands
For a non-trivial pull request, write a self-contained HTML design doc under the temporary .pr/ directory and link a visibility-appropriate preview in the PR description, so maintainers grasp the…
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
tbhb/vale-ai-tells
Query a Claude Code transcript without reading it into context, then write the retrospective to disk so it remains available after the session ends.
tbhb/vale-ai-tells
Query a Codex transcript without reading it into context, then write the retrospective to disk so it remains available after the session ends.
tbhb/vale-ai-tells
Diagnose failing pull request checks, reproduce them locally, make focused fixes, commit them through codex-commit, and refresh the published description when needed.
tbhb/vale-ai-tells
Squash merge a pull request. An agent skill from tbhb/vale-ai-tells.
tbhb/vale-ai-tells
Open or update a pull request for the current branch with an independently drafted and reviewed PRAGENTDESC.md.
tbhb/vale-ai-tells
Replay the current branch onto its base and establish that the result is sound.
Categories
Open a pull request for the current branch. An agent skill from tbhb/vale-ai-tells. PR is an agent skill from tbhb/vale-ai-tells. Open a pull request for the current branch.
PR fits situations like: draft a pull request in a tbhb repo; whenever a task ends in one.
Run `npx skills add tbhb/vale-ai-tells --skill pr -a claude-code`. Or copy the skill folder (.claude/skills/pr in tbhb/vale-ai-tells) into .claude/skills/pr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tbhb/vale-ai-tells --skill pr -a codex`. Or copy the skill folder (.claude/skills/pr in tbhb/vale-ai-tells) into .agents/skills/pr in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tbhb/vale-ai-tells --skill pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pr, .gemini/skills/pr, .github/skills/pr and .opencode/skills/pr in your project.
Going by SKILL.md and its folder, PR needs a shell for the scripts in its folder and the command-line tools its instructions call (gh, mise and bash). Our summary lists: A Bash shell.
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
PR is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with PR: Finishing a Development Branch (obra/superpowers, 296k stars), PR Babysitter (openinterpreter/openinterpreter, 69k stars), Check PR (onyx-dot-app/onyx, 32k stars) and Understand Diff Analysis (Egonex-AI/Understand-Anything, 86k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tbhb (a GitHub user) maintains it in tbhb/vale-ai-tells, which has 115 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 7, 2026.
Source: tbhb/vale-ai-tells on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.