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.
Guide for drafting issue closure and decline responses as an open-source package maintainer.
$ npx skills add posit-dev/skills --skill maintainer-decline -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install posit-dev/skills maintainer-decline --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/posit-dev/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/open-source/maintainer-decline .claude/skills/maintainer-decline && 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 "maintainer-decline" agent skill from https://github.com/posit-dev/skills/tree/main/open-source/maintainer-decline into .claude/skills/maintainer-decline/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintainer-decline", 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/posit-dev/skills/tree/main/open-source/maintainer-declineType 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 posit-dev/skills --skill maintainer-decline -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install posit-dev/skills maintainer-decline --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/open-source/maintainer-decline .agents/skills/maintainer-decline && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "maintainer-decline" agent skill from https://github.com/posit-dev/skills/tree/main/open-source/maintainer-decline into .agents/skills/maintainer-decline/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintainer-decline", 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 posit-dev/skills --skill maintainer-decline -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install posit-dev/skills maintainer-decline --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/open-source/maintainer-decline .cursor/skills/maintainer-decline && 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 "maintainer-decline" agent skill from https://github.com/posit-dev/skills/tree/main/open-source/maintainer-decline into .cursor/skills/maintainer-decline/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintainer-decline", 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/posit-dev/skills.git --path open-source/maintainer-decline--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 posit-dev/skills --skill maintainer-decline -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install posit-dev/skills maintainer-decline --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/open-source/maintainer-decline .gemini/skills/maintainer-decline && 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 "maintainer-decline" agent skill from https://github.com/posit-dev/skills/tree/main/open-source/maintainer-decline into .gemini/skills/maintainer-decline/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintainer-decline", 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 posit-dev/skills maintainer-declineInstalls 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 posit-dev/skills --skill maintainer-decline -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/open-source/maintainer-decline .github/skills/maintainer-decline && 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 "maintainer-decline" agent skill from https://github.com/posit-dev/skills/tree/main/open-source/maintainer-decline into .github/skills/maintainer-decline/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintainer-decline", 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 posit-dev/skills --skill maintainer-decline -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install posit-dev/skills maintainer-decline --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/open-source/maintainer-decline .opencode/skills/maintainer-decline && 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 "maintainer-decline" agent skill from https://github.com/posit-dev/skills/tree/main/open-source/maintainer-decline into .opencode/skills/maintainer-decline/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintainer-decline", 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.
maintainer-declineGuide for drafting issue closure and decline responses as an open-source package maintainer.
Maintainer Decline is an agent skill from posit-dev/skills. Guide for drafting issue closure and decline responses as an open-source package maintainer. Use when helping compose a reply that says "no" to a feature request, closes an issue as won't-fix, redirects a user to a different package, explains why a design choice is intentional, or otherwise declines or closes a community contribution. Also use when the maintainer needs to explain a deprecation, point out a user misunderstanding, or communicate an effort/scope tradeoff to a contributor.
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Open source maintenance. The repository describes itself as: A collection of Claude Skills from Posit. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0300946. 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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Maintainer Decline loads about 2.4k tokens when it runs. Until then it costs about 127 tokens; SKILL.md has 1,286 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 posit-dev/skills at commit 0300946, republished under its MIT licence (© posit-dev). 1,286 words, ~2,357 tokens.
.claude/skills/maintainer-decline/SKILL.md (or your agent's skills folder).Help an open-source maintainer compose responses that close, decline, or redirect issues while leaving the contributor informed and respected.
Closure is not dismissal. A well-crafted decline educates, unblocks, or redirects the contributor productively. The goal is that someone reading your response walks away understanding why — even if they didn't get what they asked for.
Explain the why, not the what. Contributors understand they're being told "no." What they need is the reasoning: strategic direction, design philosophy, effort/benefit tradeoff, or the actual technical root cause.
Validate before declining. Acknowledge the contributor's point before the redirect. Phrases like "Yeah," "This is a reasonable idea," or "I think..." signal that you heard them before delivering the decision.
Offer a path forward when possible. Even a "no" can come with "but you could..." or "use X instead." Leave the contributor unblocked or pointed in the right direction.
Use "we" for design decisions. "We believe," "we've decided," "we experimented with..." positions decisions as team choices, not personal gatekeeping.
One decision per response. No hedging, no "maybe later" unless you mean it. Clear closure — even if that closure is "this will happen after X."
Brevity signals respect. Most declines land in 1–3 sentences. Go longer only when the misunderstanding is significant or teaching is genuinely needed.
Acknowledge effort. If the contributor did real work (wrote a reprex, drafted code, did research), name it. "Thanks for the detailed report" costs nothing and signals you value their time.
Choose the pattern that fits the situation. These are not templates — they're structural moves you can adapt.
One line. Link the original issue. No elaboration needed.
Duplicate of #7651
Link the fix. Nothing else required.
Fixed in #1430
Explain the strategic direction, reference the replacement, thank the user.
gather() is no longer under active development because it's been superseded by pivot_longer(). Sorry we can't help more and thanks for using tidyr!
Given that we're moving away from this warning (in favour of using .by), I think unfortunately it's more effort than it's worth.
Structure: [What's happening strategically] + [migration path or replacement] + [brief thanks or acknowledgment]
When something looks like a bug but is working as intended. Frame as a principle, explain the consequence chain.
In general, we believe this liberal type casting is a net negative because it can mean that data quality problems are silently propagated, eventually causing uninformative errors.
We experimented with this in the past but because many tidyr functions produce list columns and the data.frame method for print() doesn't do a great job with them, we've decided to stick with tibbles everywhere.
Structure: [The principle: "we believe..." / "we've decided..."] + [What goes wrong if you allow it] + [Optionally: past exploration that led here]
The request isn't happening, but there's a path forward. Lead with validation, offer the concrete alternative. Position the workaround as the best approach, not a consolation prize.
Yeah, I think you're best off creating the formulas outside of expand_grid().
You could make your code a bit simpler by using coalesce(): [code example]. We don't have many functions that work across columns because of the challenge of what to do if they're incompatible types.
Structure: [Validation: "Yeah," / "I think..."] + [Concrete alternative, possibly with code] + [Optionally: why the feature doesn't exist]
The contributor misunderstands the behavior. Show what's actually happening — with a reprex, a documentation quote, or a one-sentence explanation of the mechanic they missed.
The problem is that your pattern doesn't match, and the expected behaviour in that case is that you get an NA at the output. Unfortunately there's no way for us to fill in the result from some of the match groups, because none of them get populated by the regexp engine.
It's not showing up because instead of one long map() call, you're creating many short ones.
I think this is pretty clearly documented: [quotes docs]. It's pretty hard to change this sort of behaviour without affecting a lot of existing code and given the seeming rarity of it being a problem, I unfortunately don't think it's worth the effort.
Structure: [What's actually happening] + [Why it works this way] + [Optionally: why it can't easily change]
The request is valid but the effort/benefit doesn't justify it. Acknowledge the idea, explain the barrier, optionally leave the door open for external solutions.
This seems like a reasonable optimisation, but it's not clear to me where it should live. Unfortunately I think there are just too many unknowns for us to get traction on this problem, but it would be great to have a tidyverse-wide solution.
Structure: [Acknowledge validity] + [Name the real barrier] + [Optionally: where it could live instead]
The idea has merit but doesn't belong in this package or isn't ready.
Closing this for the above reasons; I think it's an interesting idea, but doesn't feel right for tidyr yet.
Structure: [Acknowledge merit] + [Question fit: "doesn't feel right for X yet" / "is Y the right place?"]
The contributor is looking at the wrong layer or package. Gently suggest a different direction.
This looks more like a stringr issue?
Structure: [Suggest alternative diagnosis, often as a question]
Use these heuristics to identify which pattern fits:
| Signal in the issue | Pattern to use |
|---|---|
| Reporter hit a bug in a deprecated/superseded function | Won't Fix — Superseded |
| Request is reasonable but the function/feature is intentionally designed this way | Design Philosophy |
| Reporter's code has a fixable mistake or there's an existing alternative | Workaround |
| Reporter has a wrong mental model of how the function works | Clarification |
| Request is valid but implementation cost is too high or architecture is unclear | Effort Assessment |
| Idea is interesting but belongs in a different package or isn't ready | Scope |
| The bug or behavior originates in a dependency, not this package | Redirect Diagnosis |
When multiple patterns apply: Lead with the most helpful one. If someone misunderstands behavior AND there's a workaround, teach the root cause first, then offer the alternative. If something is superseded AND there's a migration path, the superseded pattern already includes the path forward.
When the issue is just a duplicate or already fixed: Use the mechanical one-liner. No need for explanation or empathy scaffolding — brevity is the respectful response.
When asked to draft a response:
© posit-dev, 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 open-source/maintainer-decline of posit-dev/skills.
Open the folder on GitHubat commit 0300946
Maintainer Decline 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 |
|---|---|---|---|---|---|---|
| Maintainer Decline this skillposit-dev/skills | 529 | — | ~2.4k | 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 | |
| Chatbox Pro Cherry-Pick Syncchatboxai/chatbox | 42k | — | ~1.2k | 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 |
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.
chatboxai/chatbox
Cherry-picks commits from the chatbox-pro repo into the open chatbox repo, skipping mobile-only files and keeping the open package name.
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.
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.
posit-dev/skills
Build command-line apps in R using the Rapp package. An agent skill from posit-dev/skills.
posit-dev/skills
Guidance for managing R package lifecycle according to tidyverse principles using the lifecycle package.
posit-dev/skills
Creates a pull request from current changes, monitors GitHub CI, and debugs any failures until CI passes.
posit-dev/skills
Build modern Shiny dashboards and applications using bslib (Bootstrap 5).
posit-dev/skills
Advanced theming for Shiny apps using bslib and Bootstrap 5.
posit-dev/skills
Rigorously review code or pull requests for correctness, security, accessibility, maintainability, tests, and edge cases.
Categories
Guide for drafting issue closure and decline responses as an open-source package maintainer. Maintainer Decline is an agent skill from posit-dev/skills. Guide for drafting issue closure and decline responses as an open-source package maintainer.
Maintainer Decline fits situations like: helping compose a reply that says no to a feature request; closes an issue as wont-fix; redirects a user to a different package; explains why a design choice is intentional.
Run `npx skills add posit-dev/skills --skill maintainer-decline -a claude-code`. Or copy the skill folder (open-source/maintainer-decline in posit-dev/skills) into .claude/skills/maintainer-decline in your project. Claude Code loads it when a task matches its description.
Run `npx skills add posit-dev/skills --skill maintainer-decline -a codex`. Or copy the skill folder (open-source/maintainer-decline in posit-dev/skills) into .agents/skills/maintainer-decline 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 posit-dev/skills --skill maintainer-decline -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/maintainer-decline, .gemini/skills/maintainer-decline, .github/skills/maintainer-decline and .opencode/skills/maintainer-decline in your project.
SKILL.md names no scripts, command-line tools or credentials: Maintainer Decline is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Maintainer Decline 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.4k tokens (SKILL.md is roughly 9.4k 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 Maintainer Decline: Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), Mole Release Notes Publisher (tw93/Mole, 69k stars), Chatbox Pro Cherry-Pick Sync (chatboxai/chatbox, 42k stars) and Pre-Release PR Triage (jamiepine/voicebox, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
posit-dev (a GitHub organization) maintains it in posit-dev/skills, which has 529 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 6, 2026.
Source: posit-dev/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.