npx skills add ...
npx skills add remix-run/react-router --skill create-pr
Create and package React Router pull requests. Use when the user asks to create, open, prepare, or finish a PR for this repository, including branch/commit/push handoff, draft PR creation, PR body writing, and applying GitHub labels such as pkg:*, feat:*, docs, github-actions, or dependencies.
npx skills add remix-run/react-router --skill create-pr
Create the pull request handoff for completed React Router work. Default to a draft PR targeting main unless the user explicitly asks for a ready PR or a different base branch.
git status --short --branch and git branch --show-current.HEAD before committing. Use the branch name requested by the user, an existing repository convention, or <author>/<semantic-name> when no stronger convention is available.packages/<package>/.changes/. This is not necessary for docs-only, GitHub Actions/workflow-only, or dependency-maintenance PRs unless the dependency change itself has user-facing impact.git diff --stat plus focused git diff over broad repo archaeology when the change is small.git diff --stat and focused git diff as needed.Save the PR body to a temporary file, then use gh pr create with:
--draft only when the user explicitly asks for a ready PR.--base only when the user explicitly requests a different base branch.Closes #NNNN for bug fixes the PR should close; use Implements #NNNN or a plain link for RFCs/discussions when closing semantics are not appropriate.gh pr create fails, leave the branch pushed when possible and give the user a ready-to-open compare URL plus the prepared title and body.Recommended PR body shape:
Testing
If gh pr edit --add-label fails because the specified label is invalid or missing, run:
Then choose the correct label from the live list and update this skill in place so the stable label guidance stays current. Use real labels only. If the right label does not exist, do not invent one; mention the missing label.
Add every applicable pkg:* label based on touched package paths:
| Touched path | Label |
|---|---|
packages/react-router/ | pkg:react-router |
packages/react-router-dev/ | pkg:@react-router/dev |
packages/create-react-router/ | pkg:create-react-router |
packages/react-router-architect/ | pkg:@react-router/architect |
packages/react-router-cloudflare/ | pkg:@react-router/cloudflare |
packages/react-router-node/ | pkg:@react-router/node |
packages/react-router-serve/ | pkg:@react-router/serve |
packages/react-router-express/ | pkg:@react-router/express |
packages/react-router-fs-routes/ | pkg:@react-router/fs-routes |
packages/react-router-remix-routes-option-adapter/ | pkg:@react-router/remix-routes-option-adapter |
If a package path is unclear, inspect its package.json name and use pkg:<name> when that label exists. If a change touches generated artifacts or integration tests only, infer the package label from the runtime/tooling area being tested. For example, Vite plugin or prerender integration coverage usually maps to pkg:@react-router/dev.
Add applicable feat:* labels for the behavior area being changed. Common labels include:
| Behavior area | Label |
|---|---|
| Core navigation, loaders/actions, fetchers, redirects, matching, and router state | feat:router |
Route config APIs and routes.ts | feat:routes.ts |
| Vite plugin and build pipeline behavior | feat:vite |
| SPA mode | feat:spa-mode |
| Prerendering | feat:prerender |
| Lazy route discovery | feat:lazy-route-discovery |
| Hydration and hydration fallback behavior | feat:hydration |
| View transition APIs | feat:view-transitions |
| Middleware behavior | feat:middleware |
| Split route module behavior | feat:split-route-modules |
| Streaming behavior | feat:streaming |
| CSS handling | feat:css |
| Windows-specific fixes | feat:windows |
| RSC Data or RSC Framework behavior | feat:rsc |
| Path matching semantics | feat:path-matching |
| Single fetch behavior | feat:single-fetch |
| Types, typegen, and TypeScript behavior | feat:typescript |
Multiple feature labels are fine when the diff truly spans multiple areas. Prefer the most specific label that exists.
Some PRs do not need package or feature labels:
docs for documentation-only changes.github-actions for .github/workflows/ or Actions infrastructure changes.dependencies for dependency or lockfile-only maintenance.v6, v7, or v8 only when the PR is intentionally scoped to that release line or the user asks for it.Report:
gh label list --limit 200