Automated PR creation and management tool incorporating linting and documentation cross-referencing.
Install
mkdir -p .claude/skills/pr-jellyrock && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18875" && unzip -o skill.zip -d .claude/skills/pr-jellyrock && rm skill.zipInstalls to .claude/skills/pr-jellyrock
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Create OR update a pull request using the JellyRock template at `.github/pull_request_template.md`. Detects an existing open PR for the current branch and routes to update-mode (diff body, ask, then `gh pr edit`) instead of duplicating; aborts cleanly on merged/closed PRs. Scans branch + commits for related issues, falls back to `gh` issue search, surfaces architecture docs whose related-files were touched, and runs the four-pillar judgment passes (tech-debt scan, decision-shape detect, followup capture) so journal hygiene is part of shipping rather than a separate manual step. Required for all PRs in this repo — supersedes any default PR-creation flow.Key capabilities
- →Create pull requests using a template
- →Update existing pull requests
- →Scan branch and commits for related issues
- →Surface architecture documentation for touched files
- →Run pre-push quality checks for journal hygiene
How it works
The skill renders a PR body from a template, populates sections with branch signal, and runs quality checks before creating or updating a PR, handling existing PRs by diffing and confirming changes.
Inputs & outputs
When to use pr
- →Opening a new pull request
- →Updating an existing PR
- →Validating PR content quality
- →Linking documentation to code changes
About this skill
Create or Update a Pull Request
This repo
- Merge settings fallback (Step 3): squash only;
squash_merge_commit_title=PR_TITLE,squash_merge_commit_message=PR_BODY: the title is the commit subject and the changelog line, the body the permanent commit message, so reviewer detail goes in the notes comment. - Title gate and types (Steps 5, 6, 9): read
scripts/lib/pr-title.js(TITLE_TYPES: each type and the CHANGELOG.md section it lands in; CI checks against it, so read it rather than recall it).scripts/changelog-syncer.jsplaces the change by the title's type. Changes to the product paths (the app a viewer runs:components/,source/,locale/,images/,settings/,manifest) takefeatfor a new capability or setting,fixbehavior that was wrong,updatebehavior changed on purpose,perfsame behavior faster,refactora restructure meant to change nothing (still listed: a refactor can regress),remove,revert. A scope names the PR's one area in its usual name (fix(video):,chore(skills):) and shows in the changelog line as(video) …; CI rejects an empty scope (fix():). Tooling (scripts/,.github/,.claude/,tests/,docs/, dev dependencies) takechore,ci,build,testordocs:fix(skills):once put a/prchange in the users' Fixed section (#998). The changelog reads the PR's current title, so a wrong title can be fixed after merge by editing the PR and re-syncing, until the release is cut; after that the released section is fixed text. A race fixed inside a restructure is user-visible whether or not it was reproduced (ADR 0037); #1010's first title dropped one, and #996 merged with a title that predated a credits row added in review. - Title spelling: the post-merge journal-sync writes the title verbatim into
docs/progress.md, andjournal-sync-precheck.ymlspell-checks it at PR time: a bare identifier fails it, so backtick it (backticks render as code inprogress.md; GitHub shows them literally in the title, the accepted trade-off). - Own journal passes (Step 4):
- Tech debt: spawn
/tech-debt-scanas an Agent sub-agent,subagent_type: general-purpose,model: sonnet, neverRead docs/architecture/tech-debt.mdinline. Prompt:Read .claude/skills/tech-debt-scan/SKILL.md and follow the steps; scope the changed-files set to git diff <lower>..HEAD --name-only so only file areas that became relevant since the last /pr render are considered; surface candidate slugs + ask about new debt but do not apply edits; return the proposed diff for the parent to confirm.Surface its diffs one at a time,apply / skip / edit; apply withEditonly on accept. - Decision shape:
node scripts/lint/decision-shape-nudge.cjs --range=<lower>..HEAD; walk each match with the user (does it close off alternatives?) before/log decision. - Followups follow
AGENTS.md's Followup-discipline rule (/log followup, or/tech-debt-scan's Step 4 for a refactor slug); the rule decides, not preference.
- Tech debt: spawn
- Gather (Step 5):
node scripts/lint/check-touched-related-files.cjs --base mainlists the architecture docs whoserelated-files:were touched; name them in the notes' Docs and journals line. - Sections (Step 8): Overview (required) 1–5 sentences, the problem first: a reader should know from it alone whether this is the commit they want. Changes (required) one bullet per logical change, not per file, naming the symbols a reader would grep. Testing (when something was verified) 1–4 lines: what ran, where, the result (
test:unit 4503/4503 on a Roku Ultra): the durable record of the proof (prove-dont-dismiss); the full matrix goes in the notes. Follow-ups (when something is deferred) each bullet points at its entry: adocs/architecture/tech-debt.mdslug or adocs/progress.mdfollowup; most PRs have none.pr-body-check.jsfails an optional section that is present but empty. - PR checks (Step 9):
node scripts/lint/pr-body-check.js --pr-title "<title>" --body-file <body-file>must exit 0;node scripts/lint/pr-body-check.js --list-refs --pr-title "<title>" < <body-file>(and over the notes) prints each reference's resolved type, state and title for the Step 9 read; a non-zero exit is a shorthand or missing reference, and a?line is not a pass. - Labels (Step 7): also
new-setting(adds a user-facing setting; withnew-featurewhen the setting is how a new capability is reached) andaccessibility(added beside the main label whenever a deliverable changes what screen-reader, audio-guide or caption users get, even in one clause; never a deliverable of its own). Nothing automated reads the category labels: CHANGELOG.md goes by title type, and journal-sync skips only ondependencies,documentation,docs-only,ci,automated,chore-only. Automation's labels, never touched:dependencies(Renovate),release-prep,merge-conflict, and the issue-triage labels. Rulings on real PRs (two blind agents, differences settled): #1033 failed library, recovery, "#" crash, "never narrates or toasts over":bug-fix,accessibility(the dialog-delay consolidation and RTA hooks are Changes bullets only); #1029 a song crash:bug-fix(theapplyItemArtwork()merge was needed by the fix); #1024 a subtitle parser crash:bug-fix,accessibility; #991 "only the first 25 channels" + "loading programs near the focus":bug-fix,general-improvement; #847 reskin, engine rewrite fixing "three known defects", "first functional coverage":general-improvement,bug-fix,dev-improvement(the rewrite is how the defects were fixed, so nocode-cleanup); #987 afix:touching only bsconfig, scripts and tests:dev-improvement. - After (Step 11), create path only and not on a trivial change: say once that
journal-sync.ymladds the PR todocs/progress.md's Recently shipped on merge and clears## Currently runningwhen its text overlaps the title;/done runningis needed only to close it before merge.
Contract
Goal. Be the single, mandatory path for opening or updating a pull request in this repo. The skill reads what a squash merge keeps (the repo's merge settings, read live), titles the PR for the place its title ends up, renders the body from the repo's PR template for whoever reads it (the permanent commit message, or a reviewer only), labels each deliverable, and runs the journal passes (decision and followup, plus any this repo adds) before anything is posted, so journal hygiene lands in the same change set rather than as separate manual chores. It is create-or-update aware: an existing open PR for the branch routes to update-mode (diff the current title, labels, body and notes against a fresh render, confirm, back up, then apply), and merged or closed PRs abort cleanly instead of opening a duplicate. It ships at the Sonnet tier because the work is template-fill and structured signal-gathering with bounded judgment; a pass that walks a large ledger runs as its own sub-agent with an explicit model. Supersede any default PR-creation flow with this skill; never open or edit a pull request outside it, through forge.sh or the forge directly.
Inputs. No arguments: the skill operates on the current branch and its commits. It expects a non-default, non-detached branch with a clean working tree; the pre-flight pushes the branch and any unpushed commits. It reads the repo's PR template, its squash-merge settings, the branch's commit log and diff against the default branch, an existing PR's title, labels, body and notes comment (when one is open) including the render marker, and this skill's ## This repo for the repo's title rules, labels, own journal passes, PR checks and required sections.
Outputs. A created or updated pull request with: a title that passes the repo's title gate, names every user-visible change and backticks code identifiers; one label per kind of deliverable; a body that is the filled template, written for the reader the merge settings give it; when the body becomes the commit message, one notes comment for reviewer-only detail; and a hidden render marker (a full sha and an ISO-8601 UTC timestamp) that lets the next run narrow the journal passes to "since last render". Also: drafted journal entries surfaced per candidate for the user to accept into /log; on the update path, a backup of the prior body and notes inside the git directory; and the PR URL printed. No journal entry is written without a per-candidate accept, and nothing on the PR is overwritten without confirmation.
Success criteria.
- The pre-flight gates hold: not on the default branch, not detached, clean tree, branch and commits pushed. Hard failures stop and report; an obvious push is not gated behind a verbal question.
- Existing-PR routing is correct: an open PR takes the update path (diff, confirm, back up, apply); a merged or closed one aborts with the right recovery instruction; none takes the create path.
- What reaches
git logis read from the repo's settings, not assumed: the body is written as a commit message only when the merge keeps it, and the title gets the most care where the merge keeps it. - The journal passes run against the resolved lower-bound commit (the prior render marker on update, the default branch on create), so the user isn't re-asked about candidates already handled, and each candidate is confirm/skip per item.
- The title passes the repo's title gate, backticks code identifiers and names every user-visible change; on the update path it is re-derived from the whole PR.
- Labels come from the deliverables the title and the body's summary name, each shown to the user beside the phrase that earned it; tooling-only work is `d
Content truncated.
When not to use it
- →When creating a PR on the `main` branch
- →When directly calling `gh pr create` or `gh pr edit` outside this skill
Limitations
- →Operates on the current branch and its commits, no `$ARGUMENTS`
- →Requires a non-`main`, non-detached branch with a clean working tree and an upstream
- →Does not auto-apply journal entries; they are drafts requiring user acceptance
How it compares
This skill enforces a standardized PR creation and update process with automated content filling and pre-push quality checks, unlike generic `gh pr` commands.
Compared to similar skills
pr side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| pr (this skill) | 0 | 4mo | Review | Intermediate |
| resolve-conflicts | 81 | 11mo | Review | Intermediate |
| dependency-upgrade | 26 | 7mo | Review | Intermediate |
| git-commits | 21 | 6mo | No flags | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jellyrock
View all by jellyrock →You might also like
resolve-conflicts
antinomyhq
Use this skill immediately when the user mentions merge conflicts that need to be resolved. Do not attempt to resolve conflicts directly - invoke this skill first. This skill specializes in providing a structured framework for merging imports, tests, lock files (regeneration), configuration files, and handling deleted-but-modified files with backup and analysis.
dependency-upgrade
wshobson
Manage major dependency version upgrades with compatibility analysis, staged rollout, and comprehensive testing. Use when upgrading framework versions, updating major dependencies, or managing breaking changes in libraries.
git-commits
bonny
Create well-structured git commits in logical chunks following best practices
git-advanced-workflows
wshobson
Master advanced Git workflows including rebasing, cherry-picking, bisect, worktrees, and reflog to maintain clean history and recover from any situation. Use when managing complex Git histories, collaborating on feature branches, or troubleshooting repository issues.
github-multi-repo
ruvnet
Multi-repository coordination, synchronization, and architecture management with AI swarm orchestration
git-workflow-enforcer
CrazyDubya
Ensures commits follow conventional commits, branch naming conventions, and PR templates. Use when creating commits, branches, or PRs, or when user mentions git workflow.