stale-pr-revival
Bring an open, stalled pull request back to a mergeable state without rewriting its history — read every review surface, merge the base in, integrate what…
Skill by devseunggwan
Chalk Labs
Need help deploying stale-pr-revival?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/devseunggwan-stale-pr-revival
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/stale-pr-revival
What's inside
- Skill name
stale-pr-revival- Description
- Bring an open, stalled pull request back to a mergeable state without rewriting its history — read every review surface, merge the base in, integrate what landed meanwhile, prove the core change red/green, and update the PR's own body and comments. Covers bot version-bump PRs and base retargeting; the merge itself stays behind the merge briefing.
- License
- MIT
- Instructions
- 240 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- bot-dependency-prs.md · references/
SKILL.md (first lines)
# stale-pr-revival ## Overview An open PR that sat for weeks is rarely blocked by its own diff. It is blocked by everything around it: a base that moved, a review that asked for one more thing in its body rather than in a thread, conventions that changed since it was opened, and a merge gate nobody re-ran. Reviving it is a different job from writing it — the goal is to bring it current, apply its reviews, and ready the merge **without rewriting its history**. This skill is that procedure for any open PR, yours or someone else's, plus two variants: bot dependency PRs ([`references/bot-dependency-prs.md`](references/bot-dependency-prs.md)) and moving a PR to a different base branch (Step 9). **Core principle:** the instruction to revive a PR covers pushing to its branch — it does not cover rewriting that branch's history or deleting it. ## When to Use - The user asks to "fix", finish, or update an existing open PR — often an approved one that is now conflicting and many commits behind its base. - Several old dependabot / renovate version-bump PRs need re-review, revival, or closing as superseded. - A PR has to move to a different base branch (for example `dev` → `main`). For many stale PRs across several repositories, run this procedure once per repository — one delegated worker per repository, each following the steps below — rather than interleaving them in one context. This holds for a cross-repo PR set serving one issue too: give each repo's PR its own worker and keep the cross-repo contract check (names one side writes, the other reads) and the deploy order for the orchestrator. One worker carrying three large revivals runs out of iterations mid-way and leaves an unpushed merge plus uncommitted fixes for someone else to reconstruct. Order a batch by the stale clock: a PR carrying a stale-bot label closes (and on many repos loses its head branch) a fixed number of days after the label, and any push or comment resets it — revive or at least comment on those first. Every status line, briefing, and final report goes out in the user's working language from their rule set — long tool chains (merge, tests, gate retries) are exactly where replies drift into English and the user has to ask again. ## The Iron Law - **Merge the base in; never rebase, never force-push.** The branch may belong to someone else, and its review history anchors on its commits. - **Never delete a branch you did not create.** Merge without `--delete-branch` when the head belongs to another author. - **No merge without the briefing.** Merging goes through [`merge-briefing`](../merge-briefing/SKILL.md), one PR per approval. ## Process ### Step 1: Read every review surface before touching code Requested changes usually live in review **bodies**, not in inline threads. Read all three surfaces: ```bash gh api repos/<owner>/<repo>/pulls/<N>/reviews --paginate # review bodies gh api graphql -f query='<reviewThreads query for PR N>' # inline threads gh pr view <N> --repo <owner>/<repo> --json body,baseRefName,headRefName,isCrossRepository ``` List each finding with its decoration. An approval that still says "update the base first" is a requested change, not a formality. Then resolve where the head branch lives and whether you can write to it — for a fork PR it is not on `origin`: ```bash gh pr view <N> --repo <owner>/<repo> \ --json isCrossRepository,headRepositoryOwner,headRepository,headRefName,maintainerCanModify gh api repos/<head-owner>/<head-repo> --jq .permissions.push ``` The head is writable when `.permissions.push` is `true`, or for a cross-repository PR when `maintainerCanModify` is `true` and you maintain the base. Otherwise stop and report: never push the branch to the base repository instead. Name the local remotes from `git remote -v`: `<head-remote>` is the one whose URL is the head repository (add it with `git remote add` when none is), `<base-remote>` the one for `<owner>/<repo>`; for a same-repository PR both are usually `origin`. Done when: every review body and every thread is listed as a finding with its decoration, the head/base branch names are known, and the head repository, its write access, and `<head-remote>` / `<base-remote>` are recorded — or the revival stopped because the head is not writable. ### Step 2: Check for parallel work on the same defect Before reviving a fix, search for an existing PR or umbrella issue on the same mechanism — `gh search issues` and `gh search prs` with the mechanism's keywords (function name, config key), plus `git worktree list` for a local attempt. A stalled PR is often one of two parallel fixes for the same defect. Include **merged** PRs, not only open ones (`gh pr list --state merged --search "<file or mechanism>"`, `git log <base-remote>/<deploy-branch> -- <files the PR touches>`): the goal often shipped through a different PR while this one waited. Then read the deploy branch's version of the touched files and compare it to the PR's intent line by line — a flag the PR adds may now be the operator's default, so the PR's remaining delta can shrink to a tuning value. Also check whether the base grew a **house-standard mechanism for the whole class of change** while the PR waited (a shared operator, builder, or tier table now used by several siblings: `git grep -l <ClassName> <base-remote>/<base>`). When it did, narrowing the old diff keeps a one-off path whose original justification may now be handled by that mechanism (re-read the PR body's "why not X" against the new code's docstring). Offer the user the choice before Step 3 — narrow the residual, or rewrite the PR onto the standard on the same branch (new commits, retitled body, no force-push) — with the trade-off in one table (path, resource cost per account, precedent count). A rewrite follows the two closest siblings' wiring rather than inventing constants, and the change comment names them with file:line. Re-run the PR's reproduction against the **current** base build and live vendor before porting anything (a control run: the base binary, the same
From devseunggwan/praxis, MIT.
More from devseunggwan/praxis
- 0.588score
codex-review-wrap
devseunggwan
Worktree-aware wrapper for /codex:review.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
upstream-bug-report
devseunggwan
Take a defect in an installed third-party plugin, server, or library from local diagnosis to an issue on its public repository — prove the fix in a fresh…
SkillAFreshness: A★ 1Claude Code +9 - 0.585score
retrospect
devseunggwan
Session retrospect — analyze the current Claude Code session against the rules it ran under (project and global `CLAUDE.md`), identify friction patterns and…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
surface-enumeration
devseunggwan
Pre-implementation input-surface enumeration — before writing a parser/validator/sanitizer/classifier, enumerate every input variant so each becomes a…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
reset-strikes
devseunggwan
Reset the current session's strike counter to 0 and clear the recorded violation list.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
strike
devseunggwan
Declare a rule violation in the current Claude Code session.
SkillAFreshness: A★ 1Claude Code +9 - 0.581score
perf-leak-review
devseunggwan
Point at performance-defect and memory-leak candidates in a diff — a read-only LLM reviewer reads the change plus the repository around it and reports…
SkillAFreshness: A★ 1Claude Code +9 - 0.581score
strikes
devseunggwan
Show the current session's strike count (0-3) and the list of recorded violation reasons.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
tradeoff
devseunggwan
Score the options at a decision fork on four cost axes — reversibility, blast radius, cost-if-wrong, process cost — with a provenance grade on every cell so a…
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
merge-briefing
devseunggwan
On-demand home for the pre-merge approval procedure — the three-surface pre-ask probe, grading every open finding by its blocking decoration, carrying the…
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
worktree-merge-cleanup
devseunggwan
On-demand home for the pre-merge worktree precondition and the unified post-merge cleanup sequence — how to run `gh pr merge --squash --delete-branch` from…
SkillAFreshness: A★ 1Claude Code +9 - 0.579score
cmux-recover-sessions
devseunggwan
Bulk recover Claude Code sessions after a crash, power loss, OOM kill, or reboot by scanning the .jsonl files Claude Code persists automatically.
SkillAFreshness: A★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 16, 2026 (14 days ago)
- Last release
- Oct 24, 2026 (6 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/devseunggwan/praxis
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from devseunggwan
- 0.588score
codex-review-wrap
devseunggwan
Worktree-aware wrapper for /codex:review.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
upstream-bug-report
devseunggwan
Take a defect in an installed third-party plugin, server, or library from local diagnosis to an issue on its public repository — prove the fix in a fresh…
SkillAFreshness: A★ 1Claude Code +9 - 0.585score
retrospect
devseunggwan
Session retrospect — analyze the current Claude Code session against the rules it ran under (project and global `CLAUDE.md`), identify friction patterns and…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
reset-strikes
devseunggwan
Reset the current session's strike counter to 0 and clear the recorded violation list.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
surface-enumeration
devseunggwan
Pre-implementation input-surface enumeration — before writing a parser/validator/sanitizer/classifier, enumerate every input variant so each becomes a…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
strike
devseunggwan
Declare a rule violation in the current Claude Code session.
SkillAFreshness: A★ 1Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get stale-pr-revival running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
stale-pr-revival skill. Agent Mart. https://agentmart.dev/skills/devseunggwan-stale-pr-revival (last updated 2026-10-24)