| 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)