gh-pr-description

A writing guide for GitHub pull request descriptions in the eve repository. It explains what reviewers need to know about the problem, solution, scope, tests, and size of the change.

In plain words
What is it for?
Use it when opening, updating, or reviewing a pull request, including checking the repository template, related issue, documentation, tests, and changed files.
Why use it?
It turns a branch's code and history into a consistent review summary, so reviewers can understand the change without reconstructing it themselves.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/vercel/eve/gh-pr-description
Any agent
npx skills add vercel/eve --skill gh-pr-description
Clone the repo
git clone --depth 1 https://github.com/vercel/eve

Made for: Claude Code, Codex.

Per session 38 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,404 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00038 $0.01404
Opus 5 $0.00019 $0.00702
Sonnet 5 $0.00008 $0.00281
Haiku 4.5 $0.00004 $0.00140

Measured yesterday against content hash 2ee25896acf5, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

gh-pr-description scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.agents/skills/gh-pr-description/SKILL.md · 162 lines

How it starts

The opening of the file, as written. The whole thing — 162 lines — stays where its author put it; the contents beside it link to each section on GitHub.

GitHub PR description

See review notes for the maintainer patterns behind this workflow; they describe what to cover, not how much to write.

Read CONTRIBUTING.md and .github/pull_request_template.md, then inspect the branch diff, commits, related issue, tests, docs, and changesets. If updating a PR, read its current body too.

Fill in the repository template. Write for a reviewer:

  • explain the concrete problem and solution near the top
  • summarize meaningful behavior and decisions, not files or commits
  • mention breaking changes, preserved behavior, scope boundaries, or stacked PRs only when relevant
  • link a prior issue or discussion with Closes #N, Related to #N, or equivalent when one exists; never create an issue solely for the PR
  • scale length with risk, not diff size

Append a ### Diff size section after the template checklist. This must be the last section of every PR description and must account for every changed file in exactly one of these categories:

  • Docs — documentation, research, changesets, and other prose or release metadata
  • Implementation — product code, configuration, dependencies, build files, and generated runtime artifacts
  • Tests — tests, evals, test-only fixtures, and snapshots

Use three full-width category blocks in the order above, including categories with no changes. Do not use a table: the overview and any reviewer-relevant context need the full description width to remain readable on GitHub.

### Diff size

**Docs** — 0 files · `+0 / -0`

Not applicable.

**Implementation** — 1 file · `+12 / -4`

Focused implementation of the behavior above.

**Tests** — 1 file · `+28 / -0`

Regression coverage for success and failure paths.

Keep each category's file count, additions, and deletions visible on its bold heading line. Treat the section as an overview, not a file inventory: do not list every changed path. Mention individual files only when they are critical to understanding or reviewing the change, under a short Key files list. Omit paths entirely when no file needs special attention. The category counts must still include every changed file. Do not collapse the category totals or the entire Diff size section.

Report additions and deletions from the full branch diff against the PR base, and verify that the three categories reconcile with the complete diff. Note binary files separately instead of treating them as zero-line changes. Classify a mixed-purpose file by its primary purpose; mention that ambiguity only when it is useful to the reviewer.

The justification must explain why each category needs that amount of change, not merely restate its line count. Call out a file or category only when its size is genuinely surprising or materially disproportionate to the behavior and review scope, especially for generated files, snapshots, fixtures, or mechanical changes. Being the only changed file, the largest category, or a modest one-file diff does not make something an outlier.

Keep a concise explanation visible. If supporting detail would be lengthy, use a category-local <details> block with a specific, natural summary such as Generated output, Fixture expansion, or Mechanical migration; do not use a prescribed heading or force words such as unusually. Explain why the large portion is necessary and could not reasonably be smaller. If the size is surprising for the stated behavior, flag it for reviewer attention rather than normalizing it. Do not manufacture an outlier explanation for an ordinary diff. The rest of the description should still discuss behavior rather than enumerate files; this section is the required exception.

Generated output accounts for most of the implementation diff.

<details>
<summary>Generated output</summary>

Explain why the generated changes are necessary and could not reasonably be
smaller.

</details>

Default to the shortest body that answers the five questions below. Keep the Summary under 5 sentences for most PRs; exceed 10 lines only for breaking or cross-cutting changes. Prefer plain language. Include implementation detail or jargon only when the reviewer cannot assess behavior or risk without it. Do not restate the issue, template guidance, or checklist. Use bullets only when they improve clarity.

Read the full file on GitHub · 162 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 162 lines · 38 tokens per session scan A 2ee25896acf5

Subscribe to this mod's changes

gh-pr-description is a skill published in the GitHub repository vercel/eve (4,875 stars, last pushed yesterday), licensed Apache-2.0. It adds 38 tokens to every session and 1,404 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.