PR Review State Fetch
prisma/orm
Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.
Generate a PR description from the current branch's changes against a GitHub PR, using the gh CLI.
$ npx skills add testdouble/han --skill update-pr-description -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han update-pr-description --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/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-github/skills/update-pr-description .claude/skills/update-pr-description && 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 "update-pr-description" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/update-pr-description into .claude/skills/update-pr-description/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-pr-description", 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/testdouble/han/tree/main/han-github/skills/update-pr-descriptionType 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 testdouble/han --skill update-pr-description -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han update-pr-description --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .agents/skills && cp -r skills-src/han-github/skills/update-pr-description .agents/skills/update-pr-description && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "update-pr-description" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/update-pr-description into .agents/skills/update-pr-description/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-pr-description", 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 testdouble/han --skill update-pr-description -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han update-pr-description --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/han-github/skills/update-pr-description .cursor/skills/update-pr-description && 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 "update-pr-description" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/update-pr-description into .cursor/skills/update-pr-description/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-pr-description", 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/testdouble/han.git --path han-github/skills/update-pr-description--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 testdouble/han --skill update-pr-description -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han update-pr-description --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/han-github/skills/update-pr-description .gemini/skills/update-pr-description && 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 "update-pr-description" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/update-pr-description into .gemini/skills/update-pr-description/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-pr-description", 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 testdouble/han update-pr-descriptionInstalls 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 testdouble/han --skill update-pr-description -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .github/skills && cp -r skills-src/han-github/skills/update-pr-description .github/skills/update-pr-description && 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 "update-pr-description" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/update-pr-description into .github/skills/update-pr-description/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-pr-description", 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 testdouble/han --skill update-pr-description -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install testdouble/han update-pr-description --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/han-github/skills/update-pr-description .opencode/skills/update-pr-description && 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 "update-pr-description" agent skill from https://github.com/testdouble/han/tree/main/han-github/skills/update-pr-description into .opencode/skills/update-pr-description/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-pr-description", 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.
update-pr-descriptionGenerate a PR description from the current branch's changes against a GitHub PR, using the gh CLI.
Update PR Description is an agent skill from testdouble/han. Generate a PR description from the current branch's changes against a GitHub PR, using the gh CLI. Use when writing, drafting, or updating pull request descriptions, PR summaries, or PR bodies. Does not review code or post review comments — use code-review for local review or post-code-review-to-pr for posting a review to GitHub.
Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts and reference files (for example `references/template-conformance.md`, `references/template.md` and `scripts/create-review-tempfile.sh`).
It sits in Development, covering Pull requests and Code review. It works with GitHub and Git. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit abba73a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobGrepAgentBash(git *)Bash(gh *)Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
gitghbashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and 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.
Update PR Description loads about 4.7k tokens when it runs, and up to ~6.4k if it reads all its reference files. Until then it costs about 88 tokens; SKILL.md has 2,623 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 testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 2,623 words, ~4,669 tokens.
.claude/skills/update-pr-description/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.which gh 2>/dev/null || echo "not installed"If the gh CLI is not found:
git branch --show-current 2>/dev/null || echo unknowngit symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null || echo unknowngit log origin/HEAD..HEAD --oneline 2>/dev/null || echo unknowngit diff origin/HEAD...HEAD --stat 2>/dev/null || echo unknowngit diff origin/HEAD...HEAD 2>/dev/null || echo unknownbash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"cat .han/config.md 2>/dev/null || echo ""As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read
that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md
probe supplies content, apply it per config-rule.md, which governs precedence
between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.
Before generating a PR description, verify the branch has content to describe:
If default branch is empty or unknown — origin/HEAD is not set. Use AskUserQuestion to ask the user for
the default branch name (e.g., main, master, develop). Use that branch as the base for all git commands in
subsequent steps, and recompute branch summary, branch stats, and branch changes against it — their Project
Context values may read unknown because they were derived from the unset origin/HEAD.
If branch summary is empty — there are no commits on this branch relative to the default branch. Inform the
user and stop.
If branch stats is empty — there are no file changes despite having commits (e.g., empty commits or fully
reverted changes). Inform the user and stop.
Determine whether the repository defines its own GitHub pull-request template. If it does, the generated description must conform to that template's structure (Step 4). Do not assume any particular template shape — discover it, read it, and let its structure drive the output.
Use the Glob tool to look in GitHub's supported template locations. GitHub matches the filename case-insensitively;
check both common casings since the working filesystem may be case-sensitive. Search these paths (most templates are
.md; .txt is also valid):
pull_request_template.md, PULL_REQUEST_TEMPLATE.md (and the .txt variants)..github/ directory: .github/pull_request_template.md, .github/PULL_REQUEST_TEMPLATE.md (and .txt).docs/ directory: docs/pull_request_template.md, docs/PULL_REQUEST_TEMPLATE.md (and .txt)..github/PULL_REQUEST_TEMPLATE/*.md, docs/PULL_REQUEST_TEMPLATE/*.md,
PULL_REQUEST_TEMPLATE/*.md.Then resolve to a single template (or none):
Read it in full, including HTML comments. Record its path and full
contents.PULL_REQUEST_TEMPLATE/ directory with multiple templates — GitHub selects one per PR and the skill cannot
know which applies. Use AskUserQuestion to ask which template to conform to, listing the filenames plus a "None —
use the default structure" option. Read the chosen file in full and record its path and contents. If the user picks
"None," record "no repository template."Carry the recorded result (the template path and full contents, or "no repository template") into Step 4. Preserve the template's HTML comments verbatim in what you carry forward — they often state how the template is meant to be used.
Review the branch diff, commits, and relevant source code to understand the PR. Identify the central mechanism — the primary purpose of the PR. If the PR is about feature flags, migrations, or behavioral changes, those ARE the point, not a side detail. Classify the change type (new feature, bug fix, refactoring, docs update, config change, etc.) and read related source files as needed to understand the full scope.
Find the headline behavioral effect — what changes for a user or caller and why — and the central mechanism's key facts (a flag and its default, a migration's direction, the new vs. old behavior). Do not catalog every config value, phase, or mode; the diff carries the specifics. The goal is a short description, not an exhaustive one.
While analyzing, count the significant changed files from branch stats, since that count gates the "What to look
at first" section in Step 4. "Significant" means code files. Documentation and configuration files do not count as
significant by default; one counts only when there is explicit justification for how it changes the behavior of the code
changes in the PR.
Launch a single han-core:junior-developer agent to write the PR description directly. Junior-developer's
fresh-reviewer perspective is the asset here: by authoring the description with the eyes of a teammate who lacks full
project context, the result already anticipates what a reviewer needs to see, removing the need for a separate
reviewer-context edit pass.
This skill sources the standard by invoking han-communication:readability-guidance and applies it as it writes the PR
description, holding a named audience above the default: the reviewer evaluating the pull request, who will read the
code. Scope that frame per section so the technical specifics a reviewer needs — a flag and its default, a migration's
direction, the new vs. old behavior — are preserved rather than simplified away.
First, compose the structure directive based on the Step 2 result. The structure directive is the only part of the prompt that differs between the two cases; everything else is shared.
Option A — no repository template (Step 2 recorded "no repository template"). The structure directive is:
Structure (required): Produce the description using this fixed structure and section order: Summary (the bolded TL;DR sentence only) → Behavior changes (its own
##section, present only when runtime behavior changes; omit for pure refactors and docs-only PRs) → What to look at first (only when the PR has more than ~8-10 files with significant changes; see the threshold rule below). The first line under## SummaryMUST be the bolded TL;DR sentence, and the Summary section contains nothing else — no bullet list, no file mentions. Include the## Behavior changessection only when runtime behavior changes (flag flips, migrations, state-machine edits, config changes, API contract changes); omit it for pure refactors and docs-only PRs.Length (required): The whole description is at most 2-5 short paragraphs (the Summary sentence is one of them), and Behavior changes is 1-3 short paragraphs. A small table is fine only when several flags or modes genuinely interact; prefer prose otherwise.
"What to look at first" inclusion rule: Include "What to look at first" only when the PR has more than ~8-10 files with significant changes. "Significant" means code files. Documentation and configuration files do not count as significant by default. A docs or config file counts as significant only when there is explicit justification for how that change affects the behavior of the code changes in the PR — and even when a docs/config file is deemed significant, it most likely should not be listed in "What to look at first" itself. When the count of significant (code) files is at or below ~8-10, omit "What to look at first" entirely, heading included. Only include it when a large code change genuinely needs a reading-order guide.
Default template to follow: {paste the contents of template.md}
Option B — a repository template was found (Step 2 recorded a template path and contents). The structure directive is:
Structure (required): Conform to the repository's pull-request template, reproduced below, following the conformance rules exactly. The template's headings and their order are authoritative.
Conformance rules: {paste the contents of template-conformance.md}
Repository PR template ({template path from Step 2}): {paste the full contents of the discovered template, including its HTML comments}
Then construct the agent prompt to include all of the following inline (the skill already has this context loaded — pass the actual values, not references):
current branch, default branch, branch summary, branch stats, and
branch changes from the Project Context section.Use this prompt body (with the context above interpolated):
"Author the pull-request description for this branch. This task repurposes your fresh-reviewer perspective for writing instead of reviewing: the audience is another human teammate reviewing on GitHub without full project context. Your job is to give them a behavioral mental model in roughly thirty seconds of scanning, then point them at where the interesting decisions live. Lead with plain human language about behavior and feature changes — not file-list mechanics. Do not produce a review report, question log, or findings — produce only the final PR description in markdown.
Follow the structure directive below for how the description is organized and laid out. Follow the content rules below for what goes in it. When the structure directive provides a repository template, the template's structure wins over the default section names referenced in the content rules; map the content into the template's sections per the conformance rules.
Content rules across all sections:
- Keep it short: the entire description is at most 2-5 short paragraphs (the Summary sentence counts as one), and Behavior changes is 1-3 short paragraphs. If you are writing more, you are adding detail a reviewer should read from the diff, not the description.
- Lead the primary summary or description section with a single bolded TL;DR sentence in the form
**This PR <verb> <behavior>, so that <why>.**— fill it before drafting anything else. Keep the Summary to that one sentence: no bullet list, no file mentions.- Lead Behavior changes with the central mechanism (a feature flag, migration, or behavioral change) in plain language: name it and its headline effect — a flag and its default, a migration's direction, the new vs. old behavior. Do not enumerate every config value, phase, or mode; a reviewer reads the diff for specifics.
- Stay at the altitude of behavior and intent, not implementation. Say what changes for a user or caller and why, not how each file or function does it.
- Only describe changes unique to the PR branch — never include changes merged from the default branch.
- Define any internal flag, service, or acronym briefly on first use.
- "What to look at first" is a 2-4 bullet reading-order guide for a large change, pointing at decisions, tradeoffs, or risks in the order to read them — it is NOT a file list. Include it ONLY when the PR has more than ~8-10 files with significant (code) changes per the inclusion rule in the structure directive; otherwise omit the section, heading included.
- Readability: Apply the shared readability standard sourced via
han-communication:readability-guidance. Lead each section with its main point, give sections descriptive headings, keep each paragraph to one idea carried by its first sentence, number anything sequential and bullet anything that is not, and reveal detail in layers (progressive disclosure). Do not simplify away a technical fact a reviewer needs, and do not disturb any required PR-template section structure.Formatting: Never nest fenced code blocks inside the PR description — use inline backticks for short references, indented 4-space blocks for short snippets, prose descriptions, or small tables instead. Use
##/###headers for sections. Do not leave authoring-instruction HTML comments or template placeholder braces in the rendered output. Never include any form of 'Generated with Claude Code.'Structure directive: {Option A or Option B from above}
Branch context:
- Current branch: {current branch}
- Default branch: {default branch}
- Commits: {branch summary}
- File stats: {branch stats}
- Diff: {branch changes}
Read additional source files via your Read/Grep tools when the diff alone does not explain the change. Return only the final PR description text — no preamble, no review notes."
If the agent returns anything other than a PR description (a review report, question log, etc.), discard it and re-issue the prompt with an explicit reminder to return only the description text.
Once the draft description exists, dispatch a single han-communication:readability-editor agent to audit and rewrite
it against the shared readability standard, operating on prose regions only — never inside code fences, table
markup, or any commit, PR, or issue reference identifier. Pass it the draft description text and the named audience: the
reviewer evaluating the pull request, who will read the code; the editor reads han-communication's own canonical rule,
so pass no rule path. Instruct it to preserve every fact — every claim, quantity, named flag or service, and stated
condition or qualifier — with its precision intact, and to leave any required PR-template section structure and its
headings unchanged. Apply its rewrite as the working description.
Then run the standardized readability self-check (the shared standard is in your context from
han-communication:readability-guidance) over the description's prose regions only — never inside code fences, diagram
bodies, or commit/PR/issue reference identifiers. Confirm each criterion and fix any failure before finalizing:
Run the readability rule's standardized self-check, which is already in your context from the readability-guidance
invocation above. Correct every failure before presenting. Its fidelity criterion is not optional: the standard governs
how the content is said, and drops a required technical fact only when the reader asked for less and losing it would not
change what they do next.
Before displaying the PR description, read it back and confirm. Use the checklist that matches the Step 2 result.
Always confirm (both cases):
{...}), no "Generated with Claude Code."When Step 2 recorded "no repository template" (Option A), also confirm: the sections appear in the fixed order — Summary → Behavior changes (when applicable) → What to look at first (only when the significant-file threshold is met).
When Step 2 found a repository template (Option B), also confirm: unless the template was a replace-scaffold per the conformance rules, every heading the template defines is present and in the template's original order; "What to look at first" appears only as an appended section after the template's sections (or filled into an equivalent the template already had) and only when the significant-file threshold is met, never interleaved out of order; the template's checklists are reproduced verbatim with only diff-provable boxes checked and no fabricated attestations; the template's instructional comments and placeholder prompts are stripped from the output.
Fix any issues directly before proceeding to Step 6.
Display the PR description — Show the full result to the user, parsed and formatted for display.
Check for an existing PR on the current branch by running gh pr view --json number,url. If this fails or
returns nothing, the branch has no PR — the task is complete. Stop.
If a PR exists: Use AskUserQuestion to ask whether to update the PR description on GitHub, with options "Yes,
update it" and "No, just the markdown is fine". If the user declines, stop. If accepted, update the PR on GitHub by
running gh pr edit --body {pr_description_content} passing the full PR description as the body argument. Report the
PR URL when done.
© testdouble, MIT. 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 3 other files (scripts, references) in han-github/skills/update-pr-description of testdouble/han.
Open the folder on GitHubat commit abba73a
Update PR Description 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 |
|---|---|---|---|---|---|---|
| Update PR Description this skilltestdouble/han | 279 | — | ~4.7k | Automated safety check: Pass | MIT | |
| PR Review State Fetchprisma/orm | 48k | — | ~767 | Automated safety check: Pass | Apache-2.0 | |
| Greploop Appsmichaelshimeles/skills | 1.3k | 1 repos | ~3.6k | Automated safety check: Pass | MIT | |
| PR Triagertk-ai/rtk | 83k | — | ~2.5k | Automated safety check: Notes | Apache-2.0 | |
| Difit Reviewyoshiko-pg/difit | 3.2k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Address PR Feedback for ruby-gitruby-git/ruby-git | 1.8k | — | ~657 | Automated safety check: Pass | MIT |
prisma/orm
Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.
michaelshimeles/skills
Loops on a large pull request, merge request or Perforce changelist, fixing Greptile findings until it scores 5/5 with no unresolved comments.
rtk-ai/rtk
Audits a repository's open pull requests, deep-reviews chosen ones and drafts review comments that are only posted after you approve them.
yoshiko-pg/difit
Review a specific diff (branch, commit, or GitHub PR) and show the findings as comments inside difit, the local diff viewer.
ruby-git/ruby-git
Addresses unresolved pull request review threads and suppressed (low-confidence) Copilot review comments on the current branch, folds each fix into the…
pytorch/executorch
Reviews ExecuTorch pull requests or local branches for what CI cannot check, using a checklist, with an optional detailed line-by-line mode.
testdouble/han
Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…
testdouble/han
Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.
testdouble/han
Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.
testdouble/han
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…
testdouble/han
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
testdouble/han
Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…
Categories
Generate a PR description from the current branch's changes against a GitHub PR, using the gh CLI. Update PR Description is an agent skill from testdouble/han. Generate a PR description from the current branch's changes against a GitHub PR, using the gh CLI.
Update PR Description fits situations like: updating pull request descriptions; tasks that involve Pull requests; tasks that involve Code review.
Run `npx skills add testdouble/han --skill update-pr-description -a claude-code`. Or copy the skill folder (han-github/skills/update-pr-description in testdouble/han) into .claude/skills/update-pr-description in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill update-pr-description -a codex`. Or copy the skill folder (han-github/skills/update-pr-description in testdouble/han) into .agents/skills/update-pr-description 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 testdouble/han --skill update-pr-description -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-description, .gemini/skills/update-pr-description, .github/skills/update-pr-description and .opencode/skills/update-pr-description in your project.
Going by SKILL.md and its folder, Update PR Description needs a shell for the scripts in its folder and the command-line tools its instructions call (git, gh and bash). Our summary lists: A Bash shell. Its frontmatter pre-approves these tools: Read, Glob, Grep, Agent, Bash(git *), Bash(gh *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md contains no URLs. Its commands use git and 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.
Update PR Description is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Update PR Description: PR Review State Fetch (prisma/orm, 48k stars), Greploop Apps (michaelshimeles/skills, 1.3k stars), PR Triage (rtk-ai/rtk, 83k stars) and Difit Review (yoshiko-pg/difit, 3.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.
Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.