Contributor-First PR Merge
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
Turns a React Router RFC discussion on GitHub into an implementation, weighing community feedback and settling open questions with you before coding.
$ npx skills add remix-run/react-router --skill implement-rfc -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install remix-run/react-router implement-rfc --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/remix-run/react-router.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/implement-rfc .claude/skills/implement-rfc && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "implement-rfc" agent skill from https://github.com/remix-run/react-router/tree/main/.agents/skills/implement-rfc into .claude/skills/implement-rfc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-rfc", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/remix-run/react-router/tree/main/.agents/skills/implement-rfcType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add remix-run/react-router --skill implement-rfc -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install remix-run/react-router implement-rfc --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/react-router.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/implement-rfc .agents/skills/implement-rfc && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "implement-rfc" agent skill from https://github.com/remix-run/react-router/tree/main/.agents/skills/implement-rfc into .agents/skills/implement-rfc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-rfc", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add remix-run/react-router --skill implement-rfc -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install remix-run/react-router implement-rfc --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/react-router.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/implement-rfc .cursor/skills/implement-rfc && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "implement-rfc" agent skill from https://github.com/remix-run/react-router/tree/main/.agents/skills/implement-rfc into .cursor/skills/implement-rfc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-rfc", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/remix-run/react-router.git --path .agents/skills/implement-rfc--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add remix-run/react-router --skill implement-rfc -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install remix-run/react-router implement-rfc --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/react-router.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/implement-rfc .gemini/skills/implement-rfc && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "implement-rfc" agent skill from https://github.com/remix-run/react-router/tree/main/.agents/skills/implement-rfc into .gemini/skills/implement-rfc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-rfc", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install remix-run/react-router implement-rfcInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add remix-run/react-router --skill implement-rfc -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/remix-run/react-router.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/implement-rfc .github/skills/implement-rfc && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "implement-rfc" agent skill from https://github.com/remix-run/react-router/tree/main/.agents/skills/implement-rfc into .github/skills/implement-rfc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-rfc", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add remix-run/react-router --skill implement-rfc -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install remix-run/react-router implement-rfc --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/react-router.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/implement-rfc .opencode/skills/implement-rfc && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "implement-rfc" agent skill from https://github.com/remix-run/react-router/tree/main/.agents/skills/implement-rfc into .opencode/skills/implement-rfc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-rfc", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
implement-rfcTurns a React Router RFC discussion on GitHub into an implementation, weighing community feedback and settling open questions with you before coding.
Given a discussion URL or number, the agent first checks for a clean working tree and a branch cut from main, then reads the proposal and extracts the problem, proposed API, affected modes (declarative, data, framework and the RSC variants), breaking changes, open questions and any linked tracking issues. It then reads the whole thread and sorts feedback into points of consensus, points of contention and unanswered questions.
Before writing code it gives you a numbered list of every unresolved question, each with the relevant community input and a recommended answer. Implementation then follows, with tests, future flags when the change breaks existing API, and a changeset.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 266915e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmgitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
React Router RFC Implementer loads about 2.3k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 891 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from remix-run/react-router at commit 266915e, republished under its MIT licence (© remix-run). 891 words, ~2,252 tokens.
.claude/skills/implement-rfc/SKILL.md (or your agent's skills folder).Implement the RFC from the following GitHub discussion: $ARGUMENTS
RFC implementations should start from a clean working tree. If there are uncommitted changes, stop and ask me to resolve them before continuing.
main, use that branch.main using the format {author}/rfc-{semantic-name}:git branch {author}/rfc-{semantic-name} main
git checkout {author}/rfc-{semantic-name}Use WebFetch to read the discussion URL. If a GitHub discussion number is given instead of a URL, construct:
https://github.com/remix-run/react-router/discussions/<number>
Extract:
Problem being solved: what pain point does this RFC address?
Proposed API: exact function signatures, hook names, types, option shapes
Affected modes: Declarative / Data / Framework / RSC Data / RSC Framework
Breaking changes: does this change or remove existing public API?
Open questions: anything explicitly marked as unresolved, "TBD", or asked as a question in the proposal
Status: are there linked tracking issues? Look for links to other github issues and read them to see if there is additional context.
gh issue view <number> --repo remix-run/react-routerFetch all comments from the discussion:
Use WebFetch on https://github.com/remix-run/react-router/discussions/<number> and scroll through the full thread. Look for:
Summarize the community sentiment into:
Before writing any code, present me with a numbered list of every unresolved question — from both the RFC itself and from community feedback. For each question:
Ask me to confirm, override, or skip each question. Do not proceed to implementation until all questions are either answered or explicitly deferred.
Example format:
## Unresolved Questions
1. **Should `useRouterState()` accept a path argument for scoped matching?**
Community feedback: 3 comments in favor, 1 against (concerns about complexity).
Recommendation: Yes — scoped matching improves type safety for nested routes.
→ Your decision: [confirm / override / defer]
2. **What should happen when the path doesn't match the current location?**
Recommendation: Return `null` for active state (consistent with `useMatch()`).
→ Your decision: [confirm / override / defer]Save the resolved decisions to a scratch file at tasks/rfc-decisions.md for reference during implementation.
Before writing code, produce a concise implementation plan covering:
@deprecated JSDoc + console warning in dev)minor for new features, major for breaking changes behind a future flag that is now defaulted on)Present the plan to me and wait for approval before implementing.
If the RFC changes or removes existing public API behavior, it must ship behind a future flag which will start with an unstable_ prefix.
Future flag pattern:
Add the flag to FutureConfig in packages/react-router/lib/router/utils.ts:
export interface FutureConfig {
// existing flags...
unstable_myNewBehavior: boolean;
}Gate the new behavior on the flag:
if (router.future.unstable_myNewBehavior) {
// new behavior
} else {
// legacy behavior
}Document the flag in docs/upgrading/future-flags.md if it exists.
New additive APIs (no behavior change to existing code) do not need a future flag.
| Area | Files |
|---|---|
| Core router logic | packages/react-router/lib/router/router.ts |
| Router types/utils | packages/react-router/lib/router/utils.ts |
| React components | packages/react-router/lib/components.tsx |
| React hooks | packages/react-router/lib/hooks.tsx |
| Public exports | packages/react-router/index.ts |
| DOM utilities | packages/react-router/lib/dom/ |
| Framework/Vite plugin | packages/react-router-dev/vite/plugin.ts |
| RSC runtime | packages/react-router/lib/rsc/ |
| Unit tests | packages/react-router/__tests__/ |
| Integration tests | integration/ |
| Future flags doc | docs/upgrading/future-flags.md |
Confirm existing patterns before writing new code - prefer using the LSP but Grep/Glob also work. Match naming conventions and code style exactly.
Follow the approved plan. For each logical unit of work:
packages/react-router/index.ts)@deprecated JSDoc to any APIs being supersededpnpm typecheckKeep changes minimal and focused. Do not refactor unrelated code. Commit as often as needed.
Unit tests (for hooks, pure router logic, component behavior — no build):
packages/react-router/__tests__/pnpm test packages/react-router/__tests__/<file>Integration tests (for Vite/Framework Mode, SSR, hydration):
integration/pnpm test:integration:run --project chromium integration/<file>Run all tests and confirm they pass:
pnpm test packages/react-router/
pnpm test:integration:run --project chromium # only if integration tests were added/changedpnpm lint
pnpm typecheckFix all errors before proceeding.
Create packages/<package>/.changes/<bump-level>.<descriptive-name>.md. Use the RFC title or tracking issue as the description:
feat: <brief description matching the RFC title>
Implements the `useRouterState()` RFC (#12358). Deprecates `useLocation`,
`useParams`, `useSearchParams`, `useNavigation`, `useMatches`, `useMatch`,
`useNavigationType`, and `useViewTransitionState` in favor of a unified API.
Enable the `unstable_consolidatedRouterState` future flag to opt in.Bump levels:
patch — bug-adjacent fix onlyminor — new additive API (no breaking changes)major — breaking change (should be rare; most breaking changes go behind a future flag as minor first)unstable — new API that is not yet stable (e.g. added in a future flag, or an experimental API that may be removed without a major bump)Summarize:
Ask me to review and iterate before opening a PR.
Once I approve, commit and open a PR to main:
gh pr create --base main --title "feat: <RFC title>" --body "..."PR body should include:
© remix-run, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/implement-rfc of remix-run/react-router.
Open the folder on GitHubat commit 266915e
React Router RFC Implementer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| React Router RFC Implementer this skillremix-run/react-router | 57k | — | ~2.3k | Automated safety check: Pass | MIT | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 69k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Pre-Release PR Triagejamiepine/voicebox | 57k | — | ~3.1k | Automated safety check: Pass | MIT | |
| WinAppSDK Triage Meeting Prepmicrosoft/WindowsAppSDK | 4.7k | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Verdaccio PR Reviewverdaccio/verdaccio | 18k | — | ~1.7k | Automated safety check: Pass | MIT |
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Sorts a backlog of open pull requests into must-merge, candidate, superseded and deferred, writes a triage doc and works the merge loop before a release.
microsoft/WindowsAppSDK
Prepares the triage meeting summary for WinAppSDK Needs-Triage issues, with research-backed area suggestions, draft replies and a diff since the last triage.
verdaccio/verdaccio
Reviews an existing verdaccio/verdaccio pull request end to end, verifies each finding and reports whether it is mergeable, optionally fixing it on the PR branch.
ansible/ansible
Creates backports of a merged Ansible devel pull request onto the right stable branches by cherry-picking its merge commit onto new backport branches.
remix-run/react-router
Guides work on React Router apps by first identifying whether the app uses Framework, Data or Declarative mode, then loading the matching reference and the installed package docs.
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
remix-run/react-router
Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.
remix-run/react-router
Takes a blocked community pull request in React Router and adds the missing tests, change file or docs so it can merge, working on the contributor's branch.
remix-run/react-router
Fixes a React Router bug reported in a GitHub issue end to end: fetching the issue, validating the reproduction, writing a failing test and implementing the fix on a new branch.
Works with
Categories
Turns a React Router RFC discussion on GitHub into an implementation, weighing community feedback and settling open questions with you before coding. Given a discussion URL or number, the agent first checks for a clean working tree and a branch cut from main, then reads the proposal and extracts the problem, proposed API, affected modes (declarative, data, framework and the RSC variants), breaking changes, open questions and any linked tracking issues. It then reads the whole thread and sorts feedback into points of consensus, points of contention and unanswered questions.
React Router RFC Implementer fits situations like: implementing an accepted React Router RFC from its GitHub discussion; summarizing community feedback on a proposal before building it; deciding which open questions in an RFC need an answer first; adding a breaking change behind a future flag with a changeset.
Run `npx skills add remix-run/react-router --skill implement-rfc -a claude-code`. Or copy the skill folder (.agents/skills/implement-rfc in remix-run/react-router) into .claude/skills/implement-rfc in your project. Claude Code loads it when a task matches its description.
Run `npx skills add remix-run/react-router --skill implement-rfc -a codex`. Or copy the skill folder (.agents/skills/implement-rfc in remix-run/react-router) into .agents/skills/implement-rfc in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add remix-run/react-router --skill implement-rfc -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/implement-rfc, .gemini/skills/implement-rfc, .github/skills/implement-rfc and .opencode/skills/implement-rfc in your project.
Going by SKILL.md and its folder, React Router RFC Implementer needs the command-line tools its instructions call (pnpm, git and gh). Our summary lists: A clean git working tree in the react-router repository; The gh CLI for reading linked issues.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
React Router RFC Implementer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with React Router RFC Implementer: Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), Mole Release Notes Publisher (tw93/Mole, 69k stars), Pre-Release PR Triage (jamiepine/voicebox, 57k stars) and WinAppSDK Triage Meeting Prep (microsoft/WindowsAppSDK, 4.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
remix-run (a GitHub organization) maintains it in remix-run/react-router, which has 56,597 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 6, 2026.
Source: remix-run/react-router on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.