Agent skill

Update PR

by tobihagemann in tobihagemann/turbo

Update an existing GitHub pull request's title and description to reflect the current state of the branch.

MITAuto-check passedDevelopment

Install Update PR

skills CLI
$ npx skills add tobihagemann/turbo --skill update-pr -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tobihagemann/turbo update-pr --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tobihagemann/turbo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/codex/skills/update-pr .claude/skills/update-pr && rm -rf skills-src

Use ~/.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/

Facts

Skill name
update-pr
GitHub stars
408
Token cost
~2.5k tokens
SKILL.md length
1,355 words
Files
1
Skills in repo
81
Repo updated
First seen
Licence
MIT

At a glance

Update an existing GitHub pull request's title and description to reflect the current state of the branch.

  • Works in 8 steps: Fetch Current PR → Analyze the Existing Style → Evaluate Whether an Update Is Needed → …
  • The user asks to update the PR
  • SKILL.md covers Step 1: Fetch Current PR, Step 2: Analyze the Existing…, Step 3: Evaluate Whether an… and Step 4: Analyze the Full Diff, plus 7 more sections
  • Calls gh and git

What it does

Update PR is an agent skill from tobihagemann/turbo. Update an existing GitHub pull request's title and description to reflect the current state of the branch. Use when the user asks to "update the PR", "update PR description", "update PR title", "refresh PR description", or "sync PR with changes".

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Pull requests and Diagrams. It works with GitHub. The repository describes itself as: Reusable workflows for planning, building, reviewing, and shipping with Claude Code and Codex. The licence is MIT.

When your agent uses it

  • The user asks to update the PR
  • Update PR description
  • Update PR title
  • Refresh PR description

Example prompts

  • “update the PR”
  • “update PR description”
  • “update PR title”
  • “/update-pr”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Fetch Current PR
  2. Analyze the Existing Style
  3. Evaluate Whether an Update Is Needed
  4. Analyze the Full Diff
  5. Run $github-voice Skill
  6. Draft Updated Title and Description
  7. Confirm with User
  8. Apply the Update

What it can do on your machine

Read from SKILL.md and the folder at commit 931eda5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Update PR loads about 2.5k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 1,355 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~64
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

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.

Safety

Auto-check passed

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from tobihagemann/turbo at commit 931eda5, republished under its MIT licence (© tobihagemann). 1,355 words, ~2,497 tokens.

Download SKILL.mdSave it as .claude/skills/update-pr/SKILL.md (or your agent's skills folder).
name
update-pr
description
Update an existing GitHub pull request's title and description to reflect the current state of the branch. Use when the user asks to "update the PR", "update PR description", "update PR title", "refresh PR description", or "sync PR with changes".

Update PR Title and Description

Read the current PR title and body, analyze what changed in the session, and draft an updated title and description that preserves the original writing style.

Step 1: Fetch Current PR

Fetch the current PR details:

bash
gh pr view [PR_NUMBER] --json number,title,body,baseRefName,commits

Omit PR_NUMBER to auto-detect from current branch.

Step 2: Analyze the Existing Style

Before drafting, study the current title and body to identify:

  • Title format — length, prefix conventions (e.g., feat:, fix:), capitalization
  • Body structure — headings, bullet points, sections, line length
  • Tone — formal vs. casual, terse vs. detailed
  • Content patterns — does it explain the "why", list changes, include test plans?
  • Diagrams — does the body contain Mermaid code blocks (sequence, state, or other)?
  • Screenshots — does the body embed uploaded images?

Step 3: Evaluate Whether an Update Is Needed

Run git fetch origin <base> so the remote ref is current before any diff below. A local branch of the same name can sit behind the remote, which puts the merge base before an already-merged pull request and pulls merged work into the description.

Read the fetched body against the current diff and list what the body leaves undescribed:

bash
git diff origin/<base>...HEAD

Check every Mermaid diagram in the body the same way, node by node and transition by transition. A diagram that omits a state still renders, so only the code reveals its staleness.

If the body and its diagrams already describe the diff, no embedded screenshot shows a look the PR has since reverted, and the session holds no final-state capture of an added or visually changed user-facing surface that the body lacks or shows in an older state, the description is up to date. Say so, then call update_plan to mark this step completed and continue with the next step of the active workflow.

If what the body leaves undescribed is only trivial (formatting, typos, config-only), the body embeds no such screenshot, and the session holds no such capture, say so, then call update_plan to mark this step completed and continue with the next step of the active workflow. Proceed when the body omits, misstates, or still describes behavior the diff no longer contains.

Step 4: Analyze the Full Diff

Derive the PR description from the full diff, not from individual commits. The description should reflect the net change — what the code looks like now vs. the base — not the development journey. Intermediate bug fixes, reverted approaches, and implementation pivots that happened during development are not relevant to the reader.

  1. Work from the full diff Step 3 read (git diff origin/<base>...HEAD) — this is the primary source of truth
  2. Use what Step 3 found undescribed to understand what's new, but frame everything in the context of the whole PR
  3. Check if the changes introduce runtime flows or state transitions that warrant diagrams (see Diagrams section below)

Step 5: Run $github-voice Skill

Run the $github-voice skill to load writing style rules.

Step 6: Draft Updated Title and Description

Write an updated title and body that:

  • Matches the original style — same structure, tone, formatting, and level of detail
  • Reflects the net change — describe what the full diff shows, not the development history
  • Preserves what still applies — keep existing text that remains accurate
  • Adds what's new — integrate new changes naturally into the existing structure
  • Removes what's stale — drop descriptions of work that was reverted or replaced
  • Scopes to the target repository — write for someone who knows only the repository the PR targets; when the change is paired with work in another repository, name the interface the code calls and leave that repository's internal names, data shapes, and mechanisms out of the body; describe the change on its own terms, without reference to how a different repository or product does it
  • Updates diagrams — if existing Mermaid diagrams are present, update them to reflect the current state; if they describe reverted code, remove them; if new changes warrant diagrams, add them
  • Updates screenshots — leave the URL of each embedded image unaltered, removing an image only when the surface it shows is no longer part of the PR or the PR has since reverted the look it shows; add session captures as the Screenshots section directs, replacing an embedded screenshot only with a newer capture of the same surface

Step 7: Confirm with User

Output the drafted title and description as text, alongside the original for comparison, followed by the path of each capture that will upload, if any. After that, name each added surface or changed look that neither those captures nor an embedded screenshot shows in its final state, if any, with the reason it goes unshown. Then use request_user_input for confirmation.

Show full SKILL.md (589 more words)Show less

Step 8: Apply the Update

After confirmation, write the drafted title to .turbo/pr/<PR_NUMBER>-title.txt and the drafted body to .turbo/pr/<PR_NUMBER>-body.md with apply_patch, then update the PR. The title goes through a file because it carries text fetched from the PR, where backticks and $ would run inside a quoted argument.

When the body references no capture by local path, update both in one command:

bash
gh api --method PATCH "/repos/<owner>/<repo>/pulls/<PR_NUMBER>" \
  -F title=@.turbo/pr/<PR_NUMBER>-title.txt \
  -F body=@.turbo/pr/<PR_NUMBER>-body.md

When it references captures by local path, send the title alone, then apply the body with one --attach <path> per capture, using the absolute path the body references:

bash
gh api --method PATCH "/repos/<owner>/<repo>/pulls/<PR_NUMBER>" \
  -F title=@.turbo/pr/<PR_NUMBER>-title.txt
gh pr edit <PR_NUMBER> --body-file .turbo/pr/<PR_NUMBER>-body.md --attach <path>

When gh pr edit reports a failed upload, act on what it printed, then report which captures the PR went without:

  • No PR URL — nothing uploaded and the body was not applied. Remove each capture the body file references by local path, taking its table column with it and the table and its heading when no column remains. Then run gh pr edit <PR_NUMBER> --body-file .turbo/pr/<PR_NUMBER>-body.md without --attach.
  • A PR URL — the body was applied, referencing the captures that did not upload by local path. Fetch the posted body with gh pr view <PR_NUMBER> --json body --jq .body, remove each table column whose image is still a local path, write the result to the body file, and apply it with the same command.

Then call update_plan to mark this step completed and continue with the next step of the active workflow.

Diagrams

GitHub renders Mermaid natively in PR descriptions via ```mermaid code blocks. Include diagrams only when they add clarity a text description can't.

Sequence Diagram

Include when the changes introduce or modify a clear runtime flow: API endpoints, event handlers, pipelines, multi-service interactions, webhook flows.

markdown
```mermaid
sequenceDiagram
  Client->>API: POST /payments
  API->>PaymentService: processPayment()
  PaymentService->>StripeClient: charge()
  StripeClient-->>PaymentService: confirmation
  PaymentService->>DB: save()
```
State Diagram

Include when the changes add or modify entity states, status enums, workflow transitions, or lifecycle hooks.

markdown
```mermaid
stateDiagram-v2
  [*] --> Draft
  Draft --> Pending: submit()
  Pending --> Approved: approve()
  Pending --> Rejected: reject()
  Approved --> [*]
```
Rules
  • Keep diagrams focused — max ~10 nodes/transitions
  • Use descriptive labels on arrows (method names, HTTP verbs)
  • Place diagrams after the summary paragraph under a ## Flow or ## State Machine heading
  • One diagram per type max — don't include both unless the PR truly has both patterns

Screenshots

Include screenshots when the PR adds a user-facing surface or changes how one looks, and this session already holds captures of that surface in its final state. Reuse those captures after viewing each one, keeping the fewest that show the change. A change in when an existing surface appears leaves its look unchanged, so add no capture of it. Take no new captures: with none on hand, leave the body's screenshots as they are.

Reference every kept capture in one row of a markdown table, with its caption in the header cell above it:

markdown
| <caption> | <caption> |
| --- | --- |
| ![<caption>](<absolute path>) | ![<caption>](<absolute path>) |

When the body already embeds screenshots, keep their layout: a replacement capture takes the old image's place, and an added capture goes beside the existing ones.

Rules
  • Use markdown image syntax with the capture's absolute path. gh points only markdown references at the uploaded asset, so a raw <img> tag keeps its local path.
  • Reference every attached capture in the body. gh appends an attached file the body never references as its own paragraph.
  • Place a new table after the summary paragraph under a ## Screenshots heading, ahead of any diagram.

Rules

  • If the existing body is empty or minimal, infer a style from the title and commit messages
  • Keep titles under 72 characters
  • Preserve any existing sections the user clearly cares about (test plans, checklists, links)
  • Don't reference .turbo/ content (filenames, acceptance criteria, step numbers, headings) in the title or body. .turbo/ is gitignored, so these references would be opaque to anyone reading without local copies.

© tobihagemann, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in codex/skills/update-pr of tobihagemann/turbo.

Open the folder on GitHubat commit 931eda5

Compare with similar skills

Update 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.

Update PR compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Update PR this skilltobihagemann/turbo408—~2.5kAutomated safety check: PassMIT
Visual Reviewai-dynamo/dynamo8.3k—~4.5kAutomated safety check: PassApache-2.0
CodeScope Codebase Graph AnalysisQwenLM/qwen-code28k1 repos~9.3kAutomated safety check: PassApache-2.0
Submit BranchZenUml/web-sequence150—~765Automated safety check: PassMIT
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Check PRonyx-dot-app/onyx32k2 repos~2.3kAutomated safety check: PassMIT

Similar skills

  • Visual Review

    ai-dynamo/dynamo

    Create self-contained interactive HTML code-review dashboards from GitHub or GitLab pull requests, checked-out branch diffs, or supplied unified diffs, with correctness and safe-to-merge scores…

    8.3k GitHub stars~4.5k tokensUpdated today
    DevelopmentAuto-check passed
  • Answers questions about code structure, history, bugs and PR risk using a CodeScope knowledge graph and semantic index built from the repository.

    28k GitHub starsUsed in 1 repo~9.3k tokens
    DevelopmentAuto-check passed
  • Submit Branch

    ZenUml/web-sequence

    Push the current ZenUML web-sequence branch, create or reuse a GitHub PR against master, then always run babysit-pr until CI is green or blocked.

    150 GitHub stars~765 tokensUpdated 5 days ago
    DevelopmentAuto-check passed
  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Check PR

    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.

    32k GitHub starsUsed in 2 repos~2.3k tokens
    DevelopmentAuto-check passed
  • Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.

    16k GitHub starsUsed in 1 repo~847 tokens
    DevelopmentAuto-check passed

More from tobihagemann/turbo

All 81 skills in this repo
  • Consult Oracle

    tobihagemann/turbo

    Consult ChatGPT Pro via ChatGPT browser automation for problems that resist standard approaches.

    408 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Fetch PR Comments

    tobihagemann/turbo

    Fetch and summarize review feedback and conversation from a GitHub PR (unresolved review threads, review bodies, and PR conversation comments) without making changes.

    408 GitHub stars~967 tokensUpdated today
    Auto-check passed
  • Recall Rationale

    tobihagemann/turbo

    Recall why a past change was made by locating the Claude Code transcript that produced it.

    408 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Resolve PR Comments

    tobihagemann/turbo

    Evaluate, fix, answer, and reply to GitHub pull request review comments and conversation comments.

    408 GitHub stars~3.8k tokensUpdated today
    Auto-check passed
  • Resolve PR Comments

    tobihagemann/turbo

    Evaluate, fix, answer, and reply to GitHub pull request review comments and conversation comments.

    408 GitHub stars~3.8k tokensUpdated today
    Auto-check passed
  • Assess Technical Debt

    tobihagemann/turbo

    Assess project-wide structural technical debt: complexity hotspots, deprecated API usage, duplication clusters, architecture rot, and low-value tests.

    408 GitHub stars~2.8k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Update PR

What does Update PR do?

Update an existing GitHub pull request's title and description to reflect the current state of the branch. Update PR is an agent skill from tobihagemann/turbo. Update an existing GitHub pull request's title and description to reflect the current state of the branch.

When should I use Update PR?

Update PR fits situations like: the user asks to update the PR; update PR description; update PR title; refresh PR description.

How do I install Update PR in Claude Code?

Run `npx skills add tobihagemann/turbo --skill update-pr -a claude-code`. Or copy the skill folder (codex/skills/update-pr in tobihagemann/turbo) into .claude/skills/update-pr in your project. Claude Code loads it when a task matches its description.

How do I install Update PR in Codex?

Run `npx skills add tobihagemann/turbo --skill update-pr -a codex`. Or copy the skill folder (codex/skills/update-pr in tobihagemann/turbo) into .agents/skills/update-pr in your project. Codex loads it when a task matches its description.

Can I use Update PR in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tobihagemann/turbo --skill update-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/update-pr, .gemini/skills/update-pr, .github/skills/update-pr and .opencode/skills/update-pr in your project.

What does Update PR need to run?

Going by SKILL.md and its folder, Update PR needs the command-line tools its instructions call (gh and git).

Does Update PR access the network?

SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Update PR safe to install?

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. Review the folder before installing.

What licence does Update PR use?

Update PR is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Update PR use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Update PR?

Skills that share tags, products or a category with Update PR: Visual Review (ai-dynamo/dynamo, 8.3k stars), CodeScope Codebase Graph Analysis (QwenLM/qwen-code, 28k stars), Submit Branch (ZenUml/web-sequence, 150 stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Update PR?

tobihagemann (a GitHub user) maintains it in tobihagemann/turbo, which has 408 GitHub stars. The repository holds 81 skills in this directory. The repository was last updated on October 9, 2026.

Source: tobihagemann/turbo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.