agentleFS
jellydnjellydn/my-ai-tools/skills/draft-pull-request/SKILL.md

draft-pull-request

Skill127 starsChanged 26 days agoMITView on GitHub

Draft pull requests with structured descriptions using gh CLI

  • Commits and pushes

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 6 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Create a draft pull request, or update the current branch's PR, with a What / Why / How description.

    line 16
  2. Very specific:

    If a title is provided via $ARGUMENTS, use it as the PR title.

    line 26
  3. Distinctive:

    Read the complete diff and enough surrounding code to understand behavior and ownership.

    line 68
  4. Distinctive:

    Read the linked issue, plan, ADR, or handoff when one exists.

    line 69
  5. Very specific:

    Read $SKILL_PATH/references/pr-body-template.md and follow its rules.

    line 74
  6. Very specific:

    If the repository has its own PR template (.github/pull_request_template.md, .github/PULL_REQUEST_TEMPLATE/, or …

    line 75
  7. Very specific:

    When prose alone does not show the shape of the change, read $SKILL_PATH/references/change-outline.md and add one to three small views to …

    line 78
  8. Distinctive:

    Write the body to a temporary file, not to the repository:

    line 80
  9. Very specific:

    Use --body-file instead of --body so that Markdown, backticks, and code fences survive shell quoting.

    line 99
  10. Distinctive:

    Language: Write as one person to another — plain, concise, no jargon or filler.

    line 124
  11. Distinctive:

    if status is 401 and not retried

    line 147

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Draft Pull Request

Create a draft pull request, or update the current branch's PR, with a What / Why / How description. The description must let a reviewer understand why the change exists and the shape of the implementation without reading every line of the diff.

Usage

/draft-pull-request [title]
  • If a title is provided via $ARGUMENTS, use it as the PR title.
  • Otherwise, derive a concise Conventional Commit title from the branch name and commit history.

Bundled References

FileRead when
$SKILL_PATH/references/pr-body-template.mdAlways, before you write the PR body
$SKILL_PATH/references/change-outline.mdThe How section needs a file tree, call tree, or shape

Process

1. Preflight: find or prepare the PR

BASE_BRANCH=$(gh repo view --json defaultBranchRef -q '.defaultBranchRef.name')
git branch --show-current
git status --short --branch

# Reuse an existing PR for this branch instead of opening a duplicate
gh pr view --json number,url,title,state,isDraft,baseRefName,body 2>/dev/null
  • Open PR exists — set BASE_BRANCH to its baseRefName, which may differ from the default branch, and update its body in step 4. Do not create a second PR or change its draft state.
  • On the default branch — create a feature branch named after the change before you continue. Never open a PR from the default branch.
  • Uncommitted task changes — commit them first (use commit-atomic when it is available). Leave unrelated or unfamiliar changes uncommitted and mention them in the final report.
  • No commits ahead of the base — stop and report that there is nothing to open a PR for.

2. Gather only the context you need

git fetch origin "$BASE_BRANCH" --quiet
git log "origin/$BASE_BRANCH"..HEAD --oneline
git diff "origin/$BASE_BRANCH"...HEAD --stat
git diff "origin/$BASE_BRANCH"...HEAD
  • For an existing PR, prefer GitHub's view: gh pr diff <number> and gh pr view <number> --json commits,files. This stays correct when the branch lives in a fork and origin is not the base repository.
  • Read the complete diff and enough surrounding code to understand behavior and ownership.
  • Read the linked issue, plan, ADR, or handoff when one exists. Collect their links for the body.
  • Note the validation you actually ran (tests, lint, typecheck, manual checks) and the results.

3. Write the description

  1. Read $SKILL_PATH/references/pr-body-template.md and follow its rules.
  2. If the repository has its own PR template (.github/pull_request_template.md, .github/PULL_REQUEST_TEMPLATE/, or docs/pull_request_template.md), keep its headings and checklists, and put the What / Why / How content into the matching sections.
  3. When prose alone does not show the shape of the change, read $SKILL_PATH/references/change-outline.md and add one to three small views to How.
  4. Write the body to a temporary file, not to the repository:
BODY_FILE=$(mktemp "${TMPDIR:-/tmp}/pr-body.XXXXXX")

4. Publish

# Never force-push.
git push -u origin HEAD

# New PR
gh pr create --draft --base "$BASE_BRANCH" --title "<PR title>" --body-file "$BODY_FILE"

# Existing PR from step 1
gh pr edit <number> --body-file "$BODY_FILE"

Use --body-file instead of --body so that Markdown, backticks, and code fences survive shell quoting.

gh pr edit --body-file replaces the whole body. Before you edit an existing PR, carry over from its current body anything the diff cannot tell you: links, reviewer notes, and checklist items that someone ticked and that still apply.

5. Confirm and report

gh pr view --json url,title,isDraft -q '"\(.url) draft=\(.isDraft) \(.title)"'
rm -f "$BODY_FILE"

Reply with:

- PR: [#<number> <title>](<url>) (<draft or ready for review, from isDraft>)
- Summary: <2-3 sentences: what the PR does and the key decision>
- Validation: <commands run and their results, or "not run">
- Left out: <uncommitted or unrelated changes, or "none">

Guidelines

  • Title: Short, imperative, max 72 characters (e.g., feat(auth): add JWT refresh token support).
  • Body: Section rules live in references/pr-body-template.md; do not restate them here.
  • Language: Write as one person to another — plain, concise, no jargon or filler.

Example

Closes #142

## What

Add a refresh-token endpoint and automatic token renewal in the API client.

## Why

Users are logged out when the 1-hour access token expires, which interrupts long sessions.

## How

- `POST /auth/refresh` validates the HttpOnly refresh cookie and issues a new access token.
- The API client retries a `401` response once, after a refresh, before it shows an error.

```diff
 request(url)
   send with access token
+  if status is 401 and not retried
+    refreshToken()
+    retry once
   return response
```

## Reviewer notes

- Refresh tokens rotate on each use; a reused token revokes the whole session.

## Validation

- `bun test src/auth` — 24 passed
- Manual: session stays signed in after the access token expires

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.