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.
Manages dependent branch stacks and stacked pull requests using safe Git topology rules.
$ npx skills add Mathews-Tom/armory --skill stacked-prs -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Mathews-Tom/armory stacked-prs --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/Mathews-Tom/armory.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/stacked-prs .claude/skills/stacked-prs && 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 "stacked-prs" agent skill from https://github.com/Mathews-Tom/armory/tree/main/skills/stacked-prs into .claude/skills/stacked-prs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stacked-prs", 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/Mathews-Tom/armory/tree/main/skills/stacked-prsType 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 Mathews-Tom/armory --skill stacked-prs -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Mathews-Tom/armory stacked-prs --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Mathews-Tom/armory.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/stacked-prs .agents/skills/stacked-prs && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "stacked-prs" agent skill from https://github.com/Mathews-Tom/armory/tree/main/skills/stacked-prs into .agents/skills/stacked-prs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stacked-prs", 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 Mathews-Tom/armory --skill stacked-prs -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Mathews-Tom/armory stacked-prs --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Mathews-Tom/armory.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/stacked-prs .cursor/skills/stacked-prs && 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 "stacked-prs" agent skill from https://github.com/Mathews-Tom/armory/tree/main/skills/stacked-prs into .cursor/skills/stacked-prs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stacked-prs", 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/Mathews-Tom/armory.git --path skills/stacked-prs--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 Mathews-Tom/armory --skill stacked-prs -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Mathews-Tom/armory stacked-prs --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Mathews-Tom/armory.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/stacked-prs .gemini/skills/stacked-prs && 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 "stacked-prs" agent skill from https://github.com/Mathews-Tom/armory/tree/main/skills/stacked-prs into .gemini/skills/stacked-prs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stacked-prs", 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 Mathews-Tom/armory stacked-prsInstalls 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 Mathews-Tom/armory --skill stacked-prs -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Mathews-Tom/armory.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/stacked-prs .github/skills/stacked-prs && 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 "stacked-prs" agent skill from https://github.com/Mathews-Tom/armory/tree/main/skills/stacked-prs into .github/skills/stacked-prs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stacked-prs", 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 Mathews-Tom/armory --skill stacked-prs -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Mathews-Tom/armory stacked-prs --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Mathews-Tom/armory.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/stacked-prs .opencode/skills/stacked-prs && 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 "stacked-prs" agent skill from https://github.com/Mathews-Tom/armory/tree/main/skills/stacked-prs into .opencode/skills/stacked-prs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stacked-prs", 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.
stacked-prsManages 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. 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.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4594fb7. 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:
gitghuvFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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 Mathews-Tom/armory at commit 4594fb7, republished under its MIT licence (© Mathews-Tom). 2,107 words, ~4,619 tokens.
.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.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.
| File | Contents | Load When |
|---|---|---|
references/stack-model.md | Stack inference, explicit ordering, and .stack-prs.yaml rules | Inspecting, publishing, validating, or cleaning a stack |
references/provider-adapters.md | Provider adapter contract and GitHub gh commands | Creating, retargeting, checking, merging, or deleting PRs |
references/sync-algorithm.md | Rebase and force-with-lease synchronization workflow | Syncing a stack after a parent or base moves |
references/merge-discipline.md | Bottom-up merge and branch cleanup rules | Merging or closing out a stack |
references/metadata-format.md | Optional metadata schema and validation rules | .stack-prs.yaml exists or inference is ambiguous |
references/provenance.md | Commit-trailer stack identity, stamping, verification, merge-mode coupling | Creating, splitting, syncing, or merging any stack |
references/github-native.md | Eligibility, gh stack operations, preview limits, and manual fallback | A GitHub-native stack is requested or detected |
| Use this skill | Use another package |
|---|---|
| Multiple dependent branches need PRs against parent branches | ship-workflow for one independent release PR |
| A feature branch must be split into reviewable dependent branches | task-decomposer for planning tasks before code exists |
| An existing stack needs rebasing, retargeting, validation, or merge sequencing | pr-review for reviewing one PR diff |
| A stack must be cleaned after merge | General Git commands for unrelated branch cleanup |
git rev-parse --show-toplevel before any workflow.git status --porcelain before rebases, pushes, PR creation, PR retargeting, merge, or cleanup.baseRefName values over inferred ancestry.<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..stack-prs.yaml when parent inference is ambiguous.git push --force; use git push --force-with-lease origin <branch>.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.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.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 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.
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:
gh stack --help succeeds; install github/gh-stack when absent.Stack-Id/Stack-Position
provenance agree. Stop on disagreement.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:
gh stack link --base <base> <branch-or-pr>....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.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.--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.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.
Build a stack model without modifying anything:
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,urlProduce 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:
| Order | Branch | Parent | PR | State | Checks | Native |
|---|---|---|---|---|---|---|
| 1 | feat/parser-core | main | #101 | open | pending | no |
| 2 | feat/parser-cache | feat/parser-core | #102 | open | pending | no |
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.
Create missing PRs and retarget wrong bases:
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:
## 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 yetFor 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.
Rebase each stack branch onto its parent after <base> or any parent branch moves:
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.
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:
uv run python scripts/validate_evals.py
uv run python scripts/generate_manifest.py
uv run python scripts/evaluate_package.py --path skills/stacked-prsBefore 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:
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.
After the stack lands:
git switch <base>
git pull --ff-only origin <base>
git fetch --prune originDelete local branches with merge-mode-appropriate proof. For a --merge
(merge-commit) landing, ancestry survives:
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:
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:
gh pr list --state open --json number,baseRefName,headRefName \
--jq '.[] | select(.baseRefName == "<merged-stack-branch>")'
git push origin --delete <merged-stack-branch>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:
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:
| Mode | Use When | Behavior |
|---|---|---|
| Commit-range split | Contiguous commits map cleanly to slices | Create dependent branches and cherry-pick ranges |
| Commit-list split | Non-contiguous commits map cleanly to slices | Cherry-pick explicit commit lists in stack order |
| Patch-guided split | File or hunk boundaries are clear but commits are mixed | Stop for user-approved split map before mutation |
| Refuse automatic split | Changes are tangled across required boundaries | Report why the split is unsafe |
After creating branches, compare the leaf with the source branch before publishing:
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.
| Condition | Action |
|---|---|
| Dirty worktree before mutation | Stop and report changed paths |
| Ambiguous parent order | Request explicit branch order or .stack-prs.yaml |
| Existing closed unmerged PR | Stop before creating replacements |
| Closed unmerged child after parent branch deletion | Confirm 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 conflict | Stop, report branch and conflicted files, do not continue children |
| Remote branch changed since fetch | Stop; do not retry without a fresh inspect |
| Failed validation | Record the failed command and stop merge or publish |
| Top split branch differs from source | Stop before PR creation and report remaining diff |
Commit in stack range missing Stack-Id trailer | Stop; stamp via provenance backfill before merge |
Trailer Stack-Id differs from .stack-prs.yaml | Stop; resolve canonical ID before mutation |
| PR is a detected native-stack member | Stop the manual merge path; use GitHub-native stack mode merge instead |
Squash repo with PR_BODY/BLANK message policy and trailers not present | Stop; 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 |
Use this only when a provider closed a child PR because its base branch was deleted during stack landing.
origin.<base> or the current merged parent.Report:
© 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
SKILL.md and 8 other files (references) in skills/stacked-prs of Mathews-Tom/armory.
Open the folder on GitHubat commit 4594fb7
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Stacked PRs this skillMathews-Tom/armory | 328 | — | ~4.6k | Automated safety check: Pass | MIT | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Create Pull Requestcline/cline | 70k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Creating Description For Gh PRredis/jedis | 12k | — | ~838 | Automated safety check: Pass | MIT | |
| Create Pull Request with Work Item IDmakeplane/plane | 61k | — | ~824 | Automated safety check: Pass | AGPL-3.0 | |
| React Router Pull Request Creatorremix-run/react-router | 57k | — | ~2.5k | 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.
cline/cline
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.
redis/jedis
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.
makeplane/plane
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.
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.
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.
Mathews-Tom/armory
Architecture reviews across 7 dimensions (structural, scalability, enterprise readiness, performance, security, ops, data) with scored reports.
Mathews-Tom/armory
Turn concepts into static HTML visuals exported as PNG or SVG files via HTML/CSS/SVG.
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…
Mathews-Tom/armory
Deep code simplification and refactoring preserving behavior across Python, Go, TypeScript, Rust.
Mathews-Tom/armory
Turn concepts into animated explainer videos using Manim (Python) with MP4/GIF output, audio overlay, multi-scene composition.
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…
Categories
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.
Stacked PRs fits situations like: : create stacked PRs; publish this stack; sync my PR stack; rebase this stack.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.