| name | pr-description |
| description | Draft GitHub Pull Request titles and bodies that follow the project's PR convention (sections, checklist, screenshot policy, issue linking). Reads style from `.claude/android-skills.json` and onboards once if missing. Use when the user asks to open a PR, write a PR description, draft PR body, or runs `gh pr create`. Triggers include "PR 설명", "PR 본문", "pull request", "PR 만들어줘", "gh pr create". |
pr-description
Generates a PR title and body tailored to the repo's conventions. The skill drafts the text — the user (or Claude in a follow-up) decides when to actually call gh pr create.
Configuration
Source: .claude/android-skills.json at the git repo root.
{
"git": {
"issueTracker": "github",
"language": "ko",
"prSections": ["summary", "changes", "test-plan", "screenshots", "checklist"],
"prChecklist": [
"lint 통과 (`./gradlew detekt ktlintCheck`)",
"단위 테스트 통과 (`./gradlew test`)",
"Compose 프리뷰 확인",
"다크 모드 확인",
"접근성 라벨 확인"
],
"screenshotPolicy": "required-for-ui",
"titleStyle": "conventional"
}
}
| Field | Values | Notes |
|---|
prSections | ordered list of section ids | Choose from summary, changes, motivation, test-plan, screenshots, checklist, breaking-changes, rollout. |
prChecklist | string[] | Each entry becomes a - [ ] item. |
screenshotPolicy | none, required-for-ui, always | Whether to demand a screenshot/GIF. |
titleStyle | conventional, conventional-ko, plain | Mirrors commitStyle from the commit-message skill but applied to PR title. |
language | ko, en | Body language. |
issueTracker | none, github, linear, jira | Decides linking syntax: Closes #N / Fixes ENG-45. |
Onboarding (run once)
If .claude/android-skills.json has no git.prSections:
- Ask three questions in one message:
- "PR 본문 언어 —
ko 또는 en?"
- "스크린샷 정책 —
none / required-for-ui / always?"
- "사용할 섹션을 골라주세요 (기본:
summary, changes, test-plan, screenshots, checklist)."
- Apply sensible defaults for the rest (
titleStyle = conventional, default prChecklist for Android: lint, tests, Compose previews, dark mode, accessibility).
- Merge into
.claude/android-skills.json (do not overwrite). Create the file if needed.
- Note that the file is committable so reviewers see the same expectations.
Title
Default title: subject of the most recent commit on the branch. If the branch has multiple commits, ask the user which one summarizes the PR — or synthesize one in the configured titleStyle.
conventional: feat(scope): subject
conventional-ko: feat(scope): subject (English prefix, Korean subject)
plain: free-form, sentence case, no trailing period
Cap at 70 chars.
Body sections
Render only the sections listed in prSections, in that order. Each section uses ## Title headings.
summary
2–4 sentences answering: what changed and why does this PR exist. No code blocks. No bulleted lists here — keep prose so reviewers know the goal before diving in.
motivation
(Optional, used when the change is non-obvious.) Explains the underlying problem or constraint that drove the change. Reference issue/incident IDs.
changes
Bulleted list of concrete changes. One bullet per logical change, ordered most → least significant. Reference key files inline:
- Added `BiometricFallbackController` ([auth/BiometricFallbackController.kt](...))
- Replaced `runBlocking` in `LoginViewModel` with structured `viewModelScope.launch`
test-plan
Markdown checklist of how to verify. Should be concrete enough that another engineer can run through it without context.
- [ ] Cold-launch the app on a Pixel 8 → biometric prompt appears
- [ ] Cancel biometric 3× → PIN entry shown
- [ ] Run `./gradlew :auth:test` → all green
screenshots
Behavior depends on screenshotPolicy:
none → omit section.
required-for-ui → include section with a <!-- attach screenshot or GIF --> placeholder. If the diff doesn't touch UI files (Compose, XML, drawables), omit.
always → include section with a placeholder.
Layout for UI changes: a 2-column markdown table (Before / After) so reviewers can diff visually.
checklist
Use prChecklist from config. Append Closes #<issue> line at the bottom if the user provided an issue number or the branch name encodes one.
breaking-changes
Only include if the diff actually breaks public API or runtime behavior. Format:
**Breaking**: `AuthClient.login(String)` removed; use `AuthClient.login(LoginRequest)` instead.
rollout
Only for changes with rollout risk (DB migrations, behavior flags, perf-sensitive paths). State the rollout plan: "feature flag auth_v2_enabled defaulted off; will ramp via Firebase RC."
Operating rules
- Read the diff before writing. Run
git log --oneline <base>..HEAD and git diff <base>...HEAD (where <base> is the merge base with the default branch). Synthesize the body from the diff, not from a verbal description.
- Detect the base branch. Use
git symbolic-ref refs/remotes/origin/HEAD to find the default branch (usually main or master). Do not assume.
- Don't fabricate test results. Mention that tests were added, not that they pass, unless the user has actually run them in this conversation.
- Don't claim screenshots exist. Use a placeholder comment so the user knows to attach.
- Issue linking. Only include
Closes #N / Fixes ENG-45 when the user provided the ID, the branch name encodes one (feature/ENG-45-foo), or recent commits reference it.
- No marketing language. No "blazingly fast", "magnificent". Reviewers want facts.
- Don't run
gh pr create autonomously. Output the title + body in fenced blocks. The user runs the command (or asks Claude to in a follow-up turn). Exception: explicit "open the PR" instruction.
Workflow
git rev-parse --show-toplevel → repo root.
- Read
<root>/.claude/android-skills.json. Onboard if git.prSections is missing.
- Detect base branch:
git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null \
| sed 's@^origin/@@' \
|| echo main
- Diff:
git log --oneline <base>..HEAD and git diff --stat <base>...HEAD.
- Decide title (most recent commit subject if it summarizes the PR; else synthesize).
- For each section in
prSections, render per the rules above. Skip optional sections that don't apply.
- Output as two fenced blocks:
## Title (single-line code block)
## Body (multi-line, copy-paste ready)
- Suggest the
gh pr create command at the end (do not run it).
Anti-patterns
- ❌ "This PR adds a feature" — empty summary
- ❌ Listing every modified file — that's what
git diff is for
- ❌ Marking checklist items
[x] without evidence
- ❌ Pretending screenshots exist
- ❌ Including a
## Test plan section that just says "tested locally"
- ❌ Auto-running
gh pr create after drafting (user reviews first)