Agent skill

Stacked PRs

by Mathews-Tom in Mathews-Tom/armory

Manages dependent branch stacks and stacked pull requests using safe Git topology rules.

MITAuto-check passedDevelopment

Install Stacked PRs

skills CLI
$ npx skills add Mathews-Tom/armory --skill stacked-prs -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Mathews-Tom/armory stacked-prs --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Mathews-Tom/armory.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/stacked-prs .claude/skills/stacked-prs && rm -rf skills-src

Use ~/.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/

Facts

Skill name
stacked-prs
GitHub stars
328
Token cost
~4.6k tokens
SKILL.md length
2,107 words
Files
9 (incl. references)
Skills in repo
80
Repo updated
First seen
Licence
MIT

At a glance

Manages dependent branch stacks and stacked pull requests using safe Git topology rules.

  • Works in 6 steps: Inspect → Publish → Sync → …
  • : create stacked PRs
  • SKILL.md covers Reference Files, When To Use, Core Rules and GitHub-native stack mode, plus 5 more sections
  • Calls git, gh and uv

What it does

Stacked PRs is an agent skill from Mathews-Tom/armory. Manages dependent branch stacks and stacked pull requests using safe Git topology rules. Triggers on: "create stacked PRs", "publish this stack", "sync my PR stack", "rebase this stack", "merge the stack", "retarget child PRs", "split this branch into stacked PRs", "validate this stack", "cleanup stacked branches", or "GitHub native stack". Use when local branches or one source branch need a dependency-ordered PR stack with correct parent bases, validation, synchronization, merge order, cleanup, and optional…

Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including reference files (for example `evals/cases.yaml`, `references/github-native.md` and `references/merge-discipline.md`).

It sits in Development, covering Pull requests and Git workflow. It works with GitHub and Git. The repository describes itself as: Curated, production-grade skills for AI coding agents. Battle-tested workflows for developers who use AI seriously. The licence is MIT.

When your agent uses it

  • : create stacked PRs
  • Publish this stack
  • Sync my PR stack
  • Rebase this stack

Example prompts

  • “create stacked PRs”
  • “publish this stack”
  • “sync my PR stack”
  • “/stacked-prs”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Inspect
  2. Publish
  3. Sync
  4. Validate
  5. Merge
  6. Cleanup

What it can do on your machine

Read from SKILL.md and the folder at commit 4594fb7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh
    • uv

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, gh and uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Stacked PRs loads about 4.6k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 139 tokens; SKILL.md has 2,107 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~139
When it runs · the whole SKILL.md, loaded when a task matches
~4.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from Mathews-Tom/armory at commit 4594fb7, republished under its MIT licence (© Mathews-Tom). 2,107 words, ~4,619 tokens.

Download SKILL.mdSave it as .claude/skills/stacked-prs/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.
name
stacked-prs
description
Manages dependent branch stacks and stacked pull requests using safe Git topology rules. Triggers on: "create stacked PRs", "publish this stack", "sync my PR stack", "rebase this stack", "merge the stack", "retarget child PRs", "split this branch into stacked PRs", "validate this stack", "cleanup stacked branches", or "GitHub native stack". Use when local branches or one source branch need a dependency-ordered PR stack with correct parent bases, validation, synchronization, merge order, cleanup, and optional GitHub-native stack support.
metadata.version
0.3.0
metadata.category
development
metadata.tags
git, pull-requests, stacked-prs, github-native, workflow
metadata.difficulty
advanced
metadata.phase
ship

Stacked PRs

Build, publish, synchronize, validate, merge, and clean up stacked pull requests without corrupting branch topology.

The package identity is provider-neutral. Git is the source of truth for branch ancestry; provider PR metadata is the source of truth for review bases. GitHub through gh is the first documented provider adapter.

Reference Files

FileContentsLoad When
references/stack-model.mdStack inference, explicit ordering, and .stack-prs.yaml rulesInspecting, publishing, validating, or cleaning a stack
references/provider-adapters.mdProvider adapter contract and GitHub gh commandsCreating, retargeting, checking, merging, or deleting PRs
references/sync-algorithm.mdRebase and force-with-lease synchronization workflowSyncing a stack after a parent or base moves
references/merge-discipline.mdBottom-up merge and branch cleanup rulesMerging or closing out a stack
references/metadata-format.mdOptional metadata schema and validation rules.stack-prs.yaml exists or inference is ambiguous
references/provenance.mdCommit-trailer stack identity, stamping, verification, merge-mode couplingCreating, splitting, syncing, or merging any stack
references/github-native.mdEligibility, gh stack operations, preview limits, and manual fallbackA GitHub-native stack is requested or detected

When To Use

Use this skillUse another package
Multiple dependent branches need PRs against parent branchesship-workflow for one independent release PR
A feature branch must be split into reviewable dependent branchestask-decomposer for planning tasks before code exists
An existing stack needs rebasing, retargeting, validation, or merge sequencingpr-review for reviewing one PR diff
A stack must be cleaned after mergeGeneral Git commands for unrelated branch cleanup

Core Rules

  • Run git rev-parse --show-toplevel before any workflow.
  • Run git status --porcelain before rebases, pushes, PR creation, PR retargeting, merge, or cleanup.
  • Stop on a dirty worktree unless the user explicitly scopes the operation to inspection only.
  • Prefer existing PR baseRefName values over inferred ancestry.
  • Resolve <base> from the root PR's baseRefName (gh pr view <root-pr> --json baseRefName --jq .baseRefName), not from origin/HEAD; a stack's trunk need not be the repository's default branch.
  • Use explicit branch order or .stack-prs.yaml when parent inference is ambiguous.
  • Never use plain git push --force; use git push --force-with-lease origin <branch>.
  • Merge from root to leaf. Never merge a child before its parent.
  • Do not delete unmerged stack branches without explicit user instruction.
  • Stamp Stack-Id and Stack-Position trailers on every commit the skill creates or splits; copy the ID from .stack-prs.yaml or mint it once when absent.
  • Verify trailers are present and consistent before merge.
  • Probe every open stack PR for native-stack membership during Inspect (references/stack-model.md § Native Stack Detection) before merge planning; a detected native stack makes the manual merge path in §5 unavailable, not merely discouraged.
  • Detect the provider's squash message policy (squash_merge_commit_message) before merging with --squash. Fold trailers into the squash body only when the policy is PR_BODY or BLANK; under COMMIT_MESSAGES (GitHub's default) trailers already survive automatically.

GitHub-native stack mode

GitHub-native stacks are public preview and same-repository-only. They enhance manual Armory stacks; they do not replace provenance trailers, .stack-prs.yaml, or the provider-neutral workflow.

Native-stack membership is a provider-side property of a pull request, not a mode this skill chooses. Detect it for every stack PR during Inspect, before any merge planning, whether or not github-native mode was requested.

Creating native state (opt-in)

Converting a manual stack to native with gh stack link is a mutation with public-preview risk. Use it only after this eligibility probe passes:

  1. GitHub CLI plus gh stack --help succeeds; install github/gh-stack when absent.
  2. Native stack support is enabled for the repository; native exit code 9 falls back to manual mode.
  3. Every proposed head/base branch and pull request belongs to the same GitHub repository; reject forks and cross-repository stacks.
  4. Existing PR bases, local branch order, and Stack-Id/Stack-Position provenance agree. Stop on disagreement.
  5. The user explicitly requests native mode or accepts its public-preview risk.
Operating on an already-native stack (mandatory)

Once Inspect finds a PR already native, native mode is not a choice for any operation that mutates that PR: the provider refuses a plain synchronous merge mutation (gh pr merge, and the underlying mergePullRequest/PUT .../pulls/{n}/merge) for a stack member with "must be merged using the asynchronous merge REST API." There is no manual Armory merge path for an already-native stack; do not present one as an alternative. Conditions 1-4 above still apply as safety checks; condition 5's user consent does not — a stack the provider already registered as native carries no additional preview risk beyond what already exists.

When eligible or already native:

  • Link existing branches or PRs bottom-to-top with gh stack link --base <base> <branch-or-pr>....
  • Inspect both Armory provenance and the GitHub-native stack position.
  • Sync with gh stack sync; re-read gh stack view after every non-interactive sync and use gh stack rebase plus gh stack push for non-linear history.
  • Merge the entire stack only on an explicit user request; invoke gh stack merge --yes --merge-method <merge|squash|rebase> with no positional argument. For a partial prefix, require the exact highest PR number and run gh stack merge <pr-number> --yes --merge-method <merge|squash|rebase>. Outside a merge queue, GitHub merges every lower layer atomically.
  • Before choosing --squash, check gh api repos/{owner}/{repo} --jq '.squash_merge_commit_message'. Trailers survive automatically under COMMIT_MESSAGES (GitHub's default). Under PR_BODY they survive only if every PR body already carries them. Under BLANK they are always lost and gh stack merge has no --subject/--body override to fold them back in — change the repository's policy first or merge with --merge-method merge/rebase instead.
  • gh stack merge exposes no --subject/--body. With squash_merge_commit_title: COMMIT_OR_PR_TITLE (GitHub's default), a PR squashing a single commit takes that commit's headline as the base-branch subject, not the PR title, and this cannot be corrected after merge without rewriting pushed history. When the visible subject matters for a single-commit PR under --merge-method squash, align the commit headline with the PR title first (git commit --amend -m "<pr-title>", then force-with-lease push) before running gh stack merge.
  • For a merge queue, method flags are ignored and stack members may land in separate queue groups; require explicit queue acceptance and verify each group.
  • Re-fetch and verify the remaining stack topology, CI, and provenance after GitHub's cascading rebase/retarget.

Fall back to the manual workflow only when the stack is not yet native: the creation probe fails, the stack spans a fork, the preview surface is unavailable, or provider/trailer topology differs. Never silently switch modes mid-stack, and never attempt the manual merge path once Inspect has found the stack is already native.

Workflow

1. Inspect

Build a stack model without modifying anything:

bash
git rev-parse --show-toplevel
git status --porcelain
git branch --show-current
git for-each-ref --format='%(refname:short)' refs/heads
git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
gh pr list --state open --json number,title,headRefName,baseRefName,state,url

Produce a table with one row per stack branch. Run the native-stack probe (references/stack-model.md § Native Stack Detection) for every PR before recording this table:

OrderBranchParentPRStateChecksNative
1feat/parser-coremain#101openpendingno
2feat/parser-cachefeat/parser-core#102openpendingno

Stop when no provider adapter is available, no local branches match the requested stack, or parent order cannot be inferred from PR bases, explicit order, or metadata.

2. Publish

Create missing PRs and retarget wrong bases:

bash
git status --porcelain
git push -u origin <branch>
gh pr create \
  --base <parent-branch> \
  --head <branch> \
  --title "<title>" \
  --body-file <generated-body-file>
gh pr edit <number> --base <parent-branch>

Generated PR bodies must include the stack order and validation state:

markdown
## Stack

Stack-Id: `auth-refactor-a1b2c3`
Base: `main`
Position: 1/3

1. `feat/parser-core` -> this PR
2. `feat/parser-cache` -> #102
3. `feat/parser-cli` -> #103

Depends on: (none - root)
Upstack: #102

## Validation

- Pending: commands not run yet

For non-root PRs, Depends on: lists the parent PR number. Upstack: lists the immediate child PR number when known.

Stop when a branch has no commits beyond its parent, an existing PR is closed and unmerged, or the provider rejects base retargeting.

3. Sync

Rebase each stack branch onto its parent after <base> or any parent branch moves:

bash
git status --porcelain
git fetch origin --prune
git switch <branch>
git rebase <parent-branch>
git push --force-with-lease origin <branch>

Start at the first branch above the base and continue toward the leaf. Stop on conflicts, remote lease failures, or a parent PR that closed without merge.

4. Validate

Validate the stack as reviewable slices. Run cheap checks on every branch when practical; run expensive full checks on the leaf when branch-by-branch validation is not reasonable. Record exactly what ran in each PR body.

Use the target repository's detected local gate and provider checks. Do not run armory package-evaluation commands when operating on another repository's stack.

For this armory package implementation only, use:

bash
uv run python scripts/validate_evals.py
uv run python scripts/generate_manifest.py
uv run python scripts/evaluate_package.py --path skills/stacked-prs
Show full SKILL.md (813 more words)Show less
5. Merge

Before merging, confirm the Inspect native-stack probe reported null for this PR. A non-null result means the provider already treats this stack as native; gh pr merge will be rejected outright — switch to the GitHub-native stack mode merge path above instead of continuing here.

Merge root to leaf:

bash
git log --format='%H %(trailers:key=Stack-Id,valueonly)' <parent>..<branch>
gh api repos/{owner}/{repo} \
  --jq '{merge: .allow_merge_commit, squash: .allow_squash_merge, rebase: .allow_rebase_merge}'
gh pr list --state open --json number,baseRefName,headRefName \
  --jq '.[] | select(.baseRefName == "<branch-being-merged>")'
gh pr merge <root-pr> --merge
git fetch origin --prune
git switch <child-branch>
git rebase origin/<base>
git push --force-with-lease origin <child-branch>
gh pr edit <child-pr> --base <base>

If merge commits are allowed, use gh pr merge <pr> --merge. If the repository squashes and squash_merge_commit_message is PR_BODY or BLANK (gh api repos/{owner}/{repo} --jq '.squash_merge_commit_message'), use the squash-body path from references/provenance.md so the Stack-Id and Stack-Position trailers land in the squash commit body. Under COMMIT_MESSAGES (GitHub's default), squash already preserves trailers automatically.

On GitHub, do not pass --delete-branch while any open PR still has the branch being merged as its baseRefName. Deleting a parent branch that is still a child PR base can close the child PR unmerged. Repeat for each child. Require trailer verification, parent checks, and provider merge confirmation before moving to the next branch.

6. Cleanup

After the stack lands:

bash
git switch <base>
git pull --ff-only origin <base>
git fetch --prune origin

Delete local branches with merge-mode-appropriate proof. For a --merge (merge-commit) landing, ancestry survives:

bash
git branch --merged <base>
git branch -d <merged-stack-branch>

For a --squash or --rebase landing, the landed commit has no ancestry link to the local branch: git branch --merged <base> never lists it and git branch -d always refuses. Prove content equivalence instead:

bash
git diff --quiet origin/<base> <merged-stack-branch>
git branch -D <merged-stack-branch>

A stale local branch predating a remote rebase can show diffs in files it never touched; read git diff --stat for additions unique to the branch, not merely for nonzero output, before trusting the comparison. When in doubt, use git cherry <base> <merged-stack-branch> instead: no +-prefixed lines means every commit already landed, and -D is safe.

Delete remote stack branches only after every stack PR has landed or been retargeted away from the branch:

bash
gh pr list --state open --json number,baseRefName,headRefName \
  --jq '.[] | select(.baseRefName == "<merged-stack-branch>")'
git push origin --delete <merged-stack-branch>

Splitting One Branch Into A Stack

Use split mode when one source branch contains a feature that needs reviewable dependent PRs. Require the source branch, base branch, and target branch order from the user or from unambiguous commit names.

Inspect first:

bash
git status --porcelain
git fetch origin --prune
git merge-base <base> <source-branch>
git log --oneline --reverse <base>..<source-branch>
git diff --stat <base>...<source-branch>
git diff --name-status <base>...<source-branch>

Select the safest split mode:

ModeUse WhenBehavior
Commit-range splitContiguous commits map cleanly to slicesCreate dependent branches and cherry-pick ranges
Commit-list splitNon-contiguous commits map cleanly to slicesCherry-pick explicit commit lists in stack order
Patch-guided splitFile or hunk boundaries are clear but commits are mixedStop for user-approved split map before mutation
Refuse automatic splitChanges are tangled across required boundariesReport why the split is unsafe

After creating branches, compare the leaf with the source branch before publishing:

bash
git commit --amend --no-edit \
  --trailer "Stack-Id: <stack-id>" \
  --trailer "Stack-Position: <n>/<total>"
git diff --stat <source-branch>...<leaf-branch>
git diff --exit-code <source-branch>...<leaf-branch>

Stamp trailers on each slice's commits per references/provenance.md before publishing. Stamping amends commit messages but does not change tree content, so the leaf-vs-source comparison remains a tree comparison with git diff and must still pass.

Do not publish if the leaf differs from the source branch.

Error Handling

ConditionAction
Dirty worktree before mutationStop and report changed paths
Ambiguous parent orderRequest explicit branch order or .stack-prs.yaml
Existing closed unmerged PRStop before creating replacements
Closed unmerged child after parent branch deletionConfirm the head branch and intended commit still exist, recreate the PR against <base> or the current merged parent, wait for checks, then continue
Rebase or cherry-pick conflictStop, report branch and conflicted files, do not continue children
Remote branch changed since fetchStop; do not retry without a fresh inspect
Failed validationRecord the failed command and stop merge or publish
Top split branch differs from sourceStop before PR creation and report remaining diff
Commit in stack range missing Stack-Id trailerStop; stamp via provenance backfill before merge
Trailer Stack-Id differs from .stack-prs.yamlStop; resolve canonical ID before mutation
PR is a detected native-stack memberStop the manual merge path; use GitHub-native stack mode merge instead
Squash repo with PR_BODY/BLANK message policy and trailers not presentStop; use the squash-body merge path
Local branch fails its merge-mode-appropriate proof (unmerged per git branch --merged <base> under a merge-commit landing, or shows + commits under git cherry <base> <branch> for a squash/rebase landing)Stop; do not force-delete without explicit user instruction

Recovery: Deleted Parent Branch Closed A Child PR

Use this only when a provider closed a child PR because its base branch was deleted during stack landing.

  1. Confirm the closed PR is unmerged.
  2. Confirm the closed PR's base branch was deleted by the parent merge or cleanup command.
  3. Confirm the child head branch still exists on origin.
  4. Confirm the child head commit is the intended stack slice.
  5. Recreate the PR against <base> or the current merged parent.
  6. Wait for required checks on the recreated PR.
  7. Continue the root-to-leaf merge sequence.

Output Format

Report:

  1. Stack order with branch, parent, PR number or URL, and state.
  2. Mutations performed, including PR creation, base edits, rebases, pushes, merges, or branch deletion.
  3. Validation commands and exact pass/fail status.
  4. Next safe action, usually merge root PR, fix validation, resolve conflict, or provide explicit branch order.

© Mathews-Tom, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 8 other files (references) in skills/stacked-prs of Mathews-Tom/armory.

  • SKILL.md
  • evals/cases.yaml
  • references/github-native.md
  • references/merge-discipline.md
  • references/metadata-format.md
  • references/provenance.md
  • references/provider-adapters.md
  • references/stack-model.md
  • references/sync-algorithm.md

Open the folder on GitHubat commit 4594fb7

Compare with similar skills

Stacked PRs 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.

Stacked PRs compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Stacked PRs this skillMathews-Tom/armory328—~4.6kAutomated safety check: PassMIT
Contributor-First PR MergeHKUDS/OpenHarness16k1 repos~847Automated safety check: PassMIT
Create Pull Requestcline/cline70k1 repos~1.6kAutomated safety check: PassApache-2.0
Creating Description For Gh PRredis/jedis12k—~838Automated safety check: PassMIT
Create Pull Request with Work Item IDmakeplane/plane61k—~824Automated safety check: PassAGPL-3.0
React Router Pull Request Creatorremix-run/react-router57k—~2.5kAutomated safety check: PassMIT

Similar skills

  • Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.

    16k GitHub starsUsed in 1 repo~847 tokens
    DevelopmentAuto-check passed
  • Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.

    70k GitHub starsUsed in 1 repo~1.6k tokens
    DevelopmentAuto-check passed
  • Official

    Generate a clear, concise GitHub PR title and description from the diff between two local git branches, and save it to prDescription.md in the repo root.

    12k GitHub stars~838 tokensUpdated today
    DevelopmentAuto-check passed
  • Opens a pull request for the current branch using the repo's template, a work item ID in the title and a description filled in from the actual diff.

    61k GitHub stars~824 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • React Router Pull Request Creator

    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.

    57k GitHub stars~2.5k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Pascal Editor PR Opener

    pascalorg/editor

    Opens or refreshes a pull request on pascalorg/editor from the current branch, describing only what the branch's commits and diff actually contain.

    25k GitHub stars~619 tokensUpdated yesterday
    DevelopmentAuto-check passed

More from Mathews-Tom/armory

All 80 skills in this repo
  • Architecture Reviewer

    Mathews-Tom/armory

    Architecture reviews across 7 dimensions (structural, scalability, enterprise readiness, performance, security, ops, data) with scored reports.

    328 GitHub stars~4.6k tokensUpdated 3 days ago
    Auto-check passed
  • Concept To Image

    Mathews-Tom/armory

    Turn concepts into static HTML visuals exported as PNG or SVG files via HTML/CSS/SVG.

    328 GitHub stars~2.6k tokensUpdated 3 days ago
    Auto-check passed
  • Watch

    Mathews-Tom/armory

    A skill your agent uses when analyzing an existing video URL or local recording: "watch this video", "analyze youtube video", "summarize this video", "youtube transcript", "find this moment", "what…

    328 GitHub stars~2.8k tokensUpdated 3 days ago
    Auto-check passed
  • Code Refiner

    Mathews-Tom/armory

    Deep code simplification and refactoring preserving behavior across Python, Go, TypeScript, Rust.

    328 GitHub stars~3.1k tokensUpdated 3 days ago
    Auto-check passed
  • Concept To Video

    Mathews-Tom/armory

    Turn concepts into animated explainer videos using Manim (Python) with MP4/GIF output, audio overlay, multi-scene composition.

    328 GitHub stars~4.9k tokensUpdated 3 days ago
    Auto-check passed
  • Decision Map

    Mathews-Tom/armory

    Maps the unresolved architecture, policy, and scope decisions that must be answered before planning can start: one durable decision ticket per question on the issue tracker, typed and blocker-linked…

    328 GitHub stars~2.7k tokensUpdated 3 days ago
    Auto-check passed

Works with

Categories

Questions about Stacked PRs

What does Stacked PRs do?

Manages dependent branch stacks and stacked pull requests using safe Git topology rules. Stacked PRs is an agent skill from Mathews-Tom/armory. Manages dependent branch stacks and stacked pull requests using safe Git topology rules.

When should I use Stacked PRs?

Stacked PRs fits situations like: : create stacked PRs; publish this stack; sync my PR stack; rebase this stack.

How do I install Stacked PRs in Claude Code?

Run `npx skills add Mathews-Tom/armory --skill stacked-prs -a claude-code`. Or copy the skill folder (skills/stacked-prs in Mathews-Tom/armory) into .claude/skills/stacked-prs in your project. Claude Code loads it when a task matches its description.

How do I install Stacked PRs in Codex?

Run `npx skills add Mathews-Tom/armory --skill stacked-prs -a codex`. Or copy the skill folder (skills/stacked-prs in Mathews-Tom/armory) into .agents/skills/stacked-prs in your project. Codex loads it when a task matches its description.

Can I use Stacked PRs in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Mathews-Tom/armory --skill stacked-prs -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/stacked-prs, .gemini/skills/stacked-prs, .github/skills/stacked-prs and .opencode/skills/stacked-prs in your project.

What does Stacked PRs need to run?

Going by SKILL.md and its folder, Stacked PRs needs the command-line tools its instructions call (git, gh and uv). Our summary lists: Python 3.

Does Stacked PRs access the network?

SKILL.md contains no URLs. Its commands use git, gh and uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Stacked PRs safe to install?

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.

What licence does Stacked PRs use?

Stacked PRs is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Stacked PRs use?

About 4.6k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7k tokens, read only when the agent opens those files.

What are the alternatives to Stacked PRs?

Skills that share tags, products or a category with Stacked PRs: Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), Create Pull Request (cline/cline, 70k stars), Creating Description For Gh PR (redis/jedis, 12k stars) and Create Pull Request with Work Item ID (makeplane/plane, 61k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Stacked PRs?

Mathews-Tom (a GitHub user) maintains it in Mathews-Tom/armory, which has 328 GitHub stars. The repository holds 80 skills in this directory. The repository was last updated on October 6, 2026.

Source: Mathews-Tom/armory on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.