Agent skill

PR Writer

by strands-agents in strands-agents/harness-sdk

Generates pull request titles and descriptions. An agent skill from strands-agents/harness-sdk.

Apache-2.0Auto-check passedDevelopment

Install PR Writer

skills CLI
$ npx skills add strands-agents/harness-sdk --skill pr-writer -a claude-code

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

GitHub CLI
$ gh skill install strands-agents/harness-sdk pr-writer --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/strands-agents/harness-sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/pr-writer .claude/skills/pr-writer && 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
pr-writer
GitHub stars
8.7k
Token cost
~2.1k tokens
SKILL.md length
1,260 words
Files
2
Skills in repo
14
Repo updated
First seen
Licence
Apache-2.0

At a glance

Generates pull request titles and descriptions. An agent skill from strands-agents/harness-sdk.

  • Works in 5 steps: Check for Staged Changes → Gather Context → Apply Project Conventions → …
  • The user asks to create
  • SKILL.md covers Persona, Process, Retrieving Information from… and Rules
  • Runs Shell scripts from its folder; calls gh, bash and git

What it does

PR Writer is an agent skill from strands-agents/harness-sdk. Generates pull request titles and descriptions. Use when the user asks to create, open, write, draft, or generate a PR, pull request, or merge request description.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `get-diff.sh`).

It sits in Development, covering Pull requests. It works with GitHub. The repository describes itself as: Build an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python & TypeScript - any model, any cloud. The licence is Apache-2.0.

When your agent uses it

  • The user asks to create
  • Merge request description

Example prompts

  • “Use the pr-writer skill to generate pull request titles and descriptions. An agent skill from strands-agents/harness-sdk”
  • “/pr-writer”

Requirements

  • A Bash shell

Workflow steps

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

  1. Check for Staged Changes
  2. Gather Context
  3. Apply Project Conventions
  4. Write the PR
  5. Self-Review Pass (read it as the reviewer)

What it can do on your machine

Read from SKILL.md and the folder at commit b340edb. 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

    Ships script files (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • gh
    • bash
    • 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

PR Writer loads about 2.1k tokens when it runs. Until then it costs about 43 tokens; SKILL.md has 1,260 words of instructions outside code blocks.

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

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 strands-agents/harness-sdk at commit b340edb, republished under its Apache-2.0 licence (© strands-agents). 1,260 words, ~2,093 tokens.

Download SKILL.mdSave it as .claude/skills/pr-writer/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
pr-writer
description
Generates pull request titles and descriptions. Use when the user asks to create, open, write, draft, or generate a PR, pull request, or merge request description.

PR Writer Skill

Persona

You are a senior engineer with 10+ years of experience. You don't pad PRs with filler. You get straight to why the change exists, what problem it solves, and what the reviewer needs to know. You write like someone who's reviewed thousands of PRs and respects the reviewer's time.

Process

When asked to generate a PR description, follow these steps in order:

1. Check for Staged Changes

Run git diff --cached --stat to check for staged but uncommitted changes.

  • If there are staged changes, stop and ask the user if they'd like to commit them before generating the PR description. Do not proceed until the user confirms.
  • If there are no staged changes, continue.
2. Gather Context

Run the bundled diff script to get the base branch, commits, changed files, and full diff:

bash
bash .agents/skills/pr-writer/get-diff.sh

If the commit messages and diff don't provide enough context to understand the motivation behind the change, look at recent commits on the branch for additional context. Use the base ref from the script output (the === BASE: <ref> === line) to scope the log and avoid surfacing unrelated commits from main.

Use this only to fill in gaps — don't let older commits override what the current diff says.

If commit messages reference a GitHub issue (e.g., #123, fixes #456), use gh issue view <number> to pull in the issue title and description for additional motivation context.

Also consider the current conversation context. If the author made design decisions, trade-offs, or rejected alternatives during their conversation with an agent, incorporate that reasoning into the PR description — especially in the "Why" and "Risks" sections. These decisions are often the most valuable context for reviewers and are easily lost if not captured.

3. Apply Project Conventions

Read these two files — they work together:

  • PR template (.github/PULL_REQUEST_TEMPLATE.md): The structural skeleton. Fill in every section it defines, in order.
  • PR guidelines (team/PR.md): How to craft each section — writing principles, anti-patterns, what to include, what to skip. This is the source of truth for content quality. Always defer to it over general conventions.

When the PR introduces or modifies public API surface, team/PR.md requires a Public API Changes section with code snippets showing the new/changed API. Add this section inside the template's "Description" block (after motivation, before anything else). Omit it entirely for internal refactors, bug fixes, docs-only, or CI changes that don't touch public API.

4. Write the PR

Apply these rules:

  • Title: Must follow Conventional Commits format: <type>(<optional scope>): <subject>. The subject must start with a lowercase letter. Valid types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert, design. Example: feat(agents): add streaming support for tool results.
  • Why: Lead with the motivation. What broke, what was missing, what's the business/user need. This is the most important part, and usually the longest.
  • What: One or two sentences on the approach or design decision a reviewer can't infer at a glance. Not a narration of the diff — do not describe which files, imports, or lines changed, how tests/fixtures/mocks were updated, or which blocks were removed or collapsed. The diff shows all of that.
  • Keep it short — scale length to the diff: The Description is the only prose section; every other section is fixed template boilerplate. Match the Description to the size of the change:
    • A one-to-few-line change (a config toggle, a condition, a version bump) usually needs one or two sentences — just the single fact a reviewer can't recover from the diff (typically why this change, not what it does). Do not expand it to three paragraphs. If you've written more than ~3 sentences for a <10-line diff, you are almost certainly padding — cut back.
    • A routine feature or fix is a few short paragraphs readable in under a minute.
    • Terse fragments beat padded sentences ("Python-only.", "No behavior change."). If a sentence doesn't help the reviewer decide is this correct, and should it merge, cut it.
  • Risks / Callouts: Anything the reviewer should scrutinize. Migration concerns, backwards compatibility, performance implications. Omit this section if there's genuinely nothing to flag.
Show full SKILL.md (589 more words)Show less
5. Self-Review Pass (read it as the reviewer)

Before output, stop and reread only the Description as if you were the senior engineer receiving this PR, with the diff open beside you. Run this pass explicitly:

  1. Name the core fact. In one sentence, what is the single thing this PR's reader cannot recover by reading the diff itself? (Usually the why, or a non-obvious constraint/risk.) That sentence is the spine of the Description.
  2. Delete anything that isn't load-bearing. Go sentence by sentence and cut every one that: restates the diff (file/line/import edits, test/fixture/mock changes, "X collapses to one call"), re-explains what the code plainly shows, or reassures the reviewer of something they can confirm at a glance. If cutting a sentence loses no motivation and no invariant the reviewer needs, it was filler.
  3. Check length against the diff. Reread the length heuristic in step 4. If the diff is a handful of lines and your Description is more than ~2 sentences, delete until it isn't. A senior reviewer is annoyed by a five-paragraph essay attached to a one-line change — brevity is respect for their time, not a missing detail.

The goal: a reviewer finishes the Description faster than they'd finish this sentence, and comes away knowing the one thing the diff couldn't tell them.

Retrieving Information from GitHub

When you need to retrieve information from GitHub (e.g., linked issues, existing PRs, or repo metadata), use the gh CLI rather than web fetching or guessing.

Useful commands:

  • gh issue view <number> — get details of a linked issue for motivation/context
  • gh pr list — check for existing PRs on the current branch
  • gh pr view <number> — view an existing PR's details

Always prefer gh over manual URL construction or web scraping. If gh is not authenticated or unavailable, inform the user and proceed with the context you have.

Rules

  • Never invent changes that aren't in the diff.
  • If you're uncertain about the motivation, scope, or intent of a change, ask the user rather than guessing. A question is always better than a wrong description.
  • Never list every file changed — that's what the diff view is for.
  • Don't narrate test, fixture, or mock changes anywhere in the PR — not the Description, not the Testing section. CI verifies them and the diff shows them. In a Testing section, say what you ran and what it covers ("ran the event-loop unit suite, which exercises all three append paths"), not how a fixture or mock was wired.
  • If the diff is trivial (typo fix, dependency bump), keep the description proportionally short.
  • Follow the writing principles and anti-patterns defined in the PR guidelines file selected in step 3.
  • Don't hard-wrap prose to a fixed column width. Write each paragraph as one continuous line and let it soft-wrap — GitHub renders Markdown that way, and narrow hard wraps are awkward to read in the rendered view and painful to edit later. Hard line breaks are only for actual structure (list items, headings, code blocks, table rows).
  • Fill in ALL sections of .github/PULL_REQUEST_TEMPLATE.md. Don't skip or rearrange them.
  • When a PR template contains checkboxes (- [ ]), pre-check them (- [x]) by default — except for any checkbox related to documentation updates or documentation examples, which should be left unchecked for the user to verify manually.
  • Output the final PR as a single markdown code block so the user can copy it directly.
  • Also write the PR body to .local/pr-body.md (create the .local/ directory if it doesn't exist). If there's an existing PR description for unrelated work in this location, overwrite it.

© strands-agents, 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

Files

SKILL.md and 1 other file in .agents/skills/pr-writer of strands-agents/harness-sdk.

  • SKILL.md
  • get-diff.sh

Open the folder on GitHubat commit b340edb

Compare with similar skills

PR Writer 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.

PR Writer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
PR Writer this skillstrands-agents/harness-sdk8.7k—~2.1kAutomated safety check: PassApache-2.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Check PRonyx-dot-app/onyx32k2 repos~2.3kAutomated safety check: PassMIT
Contributor-First PR MergeHKUDS/OpenHarness16k1 repos~847Automated safety check: PassMIT
Create Pull Requestcline/cline70k1 repos~1.6kAutomated safety check: PassApache-2.0
Pull Request Title and Body Writeropeninterpreter/openinterpreter69k2 repos~1.1kAutomated safety check: PassApache-2.0

Similar skills

  • 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
  • Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.

    70k GitHub starsUsed in 1 repo~1.6k tokens
    DevelopmentAuto-check passed
  • Pull Request Title and Body Writer

    openinterpreter/openinterpreter

    Rewrites the title and body of one or more pull requests with gh, leading with why the change was made, then what changed, and describing only the net result.

    69k GitHub starsUsed in 2 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Official

    Runs a loop on a GitHub pull request: fetch review state, triage comments into actions, implement them and resolve threads, repeating until nothing actionable is left.

    48k GitHub stars~2.2k tokensUpdated today
    DevelopmentAuto-check passed

More from strands-agents/harness-sdk

All 14 skills in this repo
  • Docs Audit

    strands-agents/harness-sdk

    Assess a published or in-progress documentation page for quality, accuracy, and voice compliance.

    8.7k GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Docs Planner

    strands-agents/harness-sdk

    Identify documentation gaps and prioritize the docs backlog.

    8.7k GitHub stars~821 tokensUpdated today
    Auto-check passed
  • Docs Reviewer

    strands-agents/harness-sdk

    Review documentation drafts for voice consistency, structure, and terminology before PR submission.

    8.7k GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Docs Writer

    strands-agents/harness-sdk

    Draft or rewrite Strands Agents documentation pages. An agent skill from strands-agents/harness-sdk.

    8.7k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • PR Create

    strands-agents/harness-sdk

    Creates a GitHub pull request using the gh CLI. An agent skill from strands-agents/harness-sdk.

    8.7k GitHub stars~593 tokensUpdated today
    Auto-check passed
  • PR Feedback

    strands-agents/harness-sdk

    Fetches PR review feedback and inline comments, categorizes them, and presents options to the user.

    8.7k GitHub stars~675 tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about PR Writer

What does PR Writer do?

Generates pull request titles and descriptions. An agent skill from strands-agents/harness-sdk. PR Writer is an agent skill from strands-agents/harness-sdk. Generates pull request titles and descriptions.

When should I use PR Writer?

PR Writer fits situations like: the user asks to create; merge request description.

How do I install PR Writer in Claude Code?

Run `npx skills add strands-agents/harness-sdk --skill pr-writer -a claude-code`. Or copy the skill folder (.agents/skills/pr-writer in strands-agents/harness-sdk) into .claude/skills/pr-writer in your project. Claude Code loads it when a task matches its description.

How do I install PR Writer in Codex?

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

Can I use PR Writer 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 strands-agents/harness-sdk --skill pr-writer -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-writer, .gemini/skills/pr-writer, .github/skills/pr-writer and .opencode/skills/pr-writer in your project.

What does PR Writer need to run?

Going by SKILL.md and its folder, PR Writer needs a shell for the scripts in its folder and the command-line tools its instructions call (gh, bash and git). Our summary lists: A Bash shell.

Does PR Writer 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 PR Writer 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 PR Writer use?

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

How many tokens does PR Writer use?

About 2.1k tokens (SKILL.md is roughly 8.4k 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 PR Writer?

Skills that share tags, products or a category with PR Writer: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Check PR (onyx-dot-app/onyx, 32k stars), Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars) and Create Pull Request (cline/cline, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains PR Writer?

strands-agents (a GitHub organization) maintains it in strands-agents/harness-sdk, which has 8,747 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 8, 2026.

Source: strands-agents/harness-sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.