
Stack Push
Publish an entire stacked-branch feature to GitHub with one dependent PR per slice after stack-create has commits on every branch.
Overview
Stack Push is an agent skill most often used in Ship (also Build) that pushes every branch in a stacked-diff stack and opens or updates one GitHub PR per slice with parent branches as merge bases.
Install
npx skills add https://github.com/athola/claude-night-market --skill stack-pushWhat is this skill?
- Pushes every branch under a shared stack/<feature>/ prefix in dependency order
- Opens or updates one PR per slice with each PR’s base set to its parent branch
- Runs after stack-create and again whenever any slice gains new commits
- Uses gh CLI with a four-item TodoWrite gate: listed, pushed, PRs opened, summary posted
- Depends on stack-create, pr-prep, and git-workspace-review from the same Sanctum workflow
- 4 TodoWrite progress items before starting stack-push
Adoption & trust: 1 installs on skills.sh; 304 GitHub stars; trending (+100% hot-view momentum).
What problem does it solve?
You have a local stacked-diff branch tree with commits ready, but no reliable way for your agent to push every slice and keep dependent PRs and bases in sync.
Who is it for?
Solo builders on GitHub using gh and Sanctum-style stack-create who need repeatable bulk push and PR creation without manual branch bookkeeping.
Skip if: Repos without stacked branches, teams not using GitHub/gh, or changes where stack-create has not finished or slices lack commits beyond their bases.
When should I use this skill?
After stack-create has initialized branch topology and each slice has at least one commit beyond its base; also after adding commits to any slice to update open PRs.
What do I get? / Deliverables
All stack branches are on the remote with one PR per slice wired to the correct parent base, plus a posted stack summary so reviewers can merge the stack safely.
- All stack branches pushed to remote
- One open or updated PR per slice with parent as base
- Stack summary posted to the workflow tracker
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Stack push is the ship-phase handoff that turns local stacked slices into reviewable PRs on GitHub, which is when solo builders actually expose work for merge. Launch subphase fits because the skill’s outcome is opening or updating PRs and posting a stack summary—not running tests or doing line-by-line review.
Where it fits
After landing commits on upper stack slices, republish so dependent PRs reflect the latest diff without rebasing manually.
First publication pass right after stack-create so each slice has a PR targeting its parent for bottom-up review.
Confirm every slice is pushed and PR links are current before asking teammates or judgment-day style reviews.
How it compares
Use instead of hand-rolling git push and gh pr create per branch when you already standardized on stacked diffs and parent-based PR chains.
Common Questions / FAQ
Who is stack-push for?
Stack Push is for solo and indie builders who work in stacked-diff workflows on GitHub and want their coding agent to publish the full branch stack and dependent PRs in one governed procedure.
When should I use stack-push?
Run it in Ship after stack-create when every slice has commits; run again in Build/Ship whenever you add commits to any slice so open PRs update; use Launch-style publishing when you are ready for review on GitHub.
Is stack-push safe to install?
It drives real git push and gh PR operations against your authenticated account—review the Security Audits panel on this page and confirm gh auth and branch targets before running in production repos.
Workflow Chain
Requires first: stack create, pr prep
SKILL.md
READMESKILL.md - Stack Push
# Stack Push Push all branches in a stack and open (or update) one PR per slice, with each PR targeting its parent branch as base. ## When to Use Run `stack-push` after `stack-create` has initialized the branch topology and at least one commit exists on each slice branch. Also run it after adding commits to any slice to update open PRs. ## Prerequisites - `stack-create` completed: branches exist with commits - `gh` CLI authenticated (`gh auth status`) - Each slice branch has at least one commit beyond its base ## Required Progress Tracking Create `TodoWrite` items before starting: 1. `stack-push:branches-listed` 2. `stack-push:branches-pushed` 3. `stack-push:prs-opened` 4. `stack-push:stack-summary-posted` ## Step 1: List Stack Branches (`branches-listed`) Identify all branches in the stack. By convention they share a `stack/<feature-name>/` prefix: ```bash STACK=stack/my-feature BASE=master git branch --list "${STACK}/*" | sed 's/^[* ]*//' ``` Verify each branch has commits beyond the base: ```bash for branch in $(git branch --list "${STACK}/*" \ | sed 's/^[* ]*//'); do count=$(git rev-list --count \ "$(git merge-base ${BASE} ${branch})..${branch}") echo "${branch}: ${count} commit(s)" done ``` Any branch showing `0 commits` must have work added before pushing. ## Step 2: Push Branches (`branches-pushed`) Push every slice branch to the remote in stack order (base slice first): ```bash for branch in $(git branch --list "${STACK}/*" \ | sed 's/^[* ]*//' | sort); do git push --set-upstream origin "${branch}" echo "pushed: ${branch}" done ``` ### jj Accelerator (if available) ```bash jj git push --all ``` ## Step 3: Open or Update PRs (`prs-opened`) Create one PR per slice, targeting its parent branch. For the first slice the parent is `master`; for subsequent slices the parent is the previous slice's branch. ```bash PREV_BASE=master for branch in $(git branch --list "${STACK}/*" \ | sed 's/^[* ]*//' | sort); do # Check if a PR already exists for this branch existing=$(gh pr list \ --head "${branch}" \ --json number \ --jq '.[0].number' 2>/dev/null) if [ -n "${existing}" ]; then echo "PR #${existing} already open for ${branch} -- skipping" else gh pr create \ --base "${PREV_BASE}" \ --head "${branch}" \ --title "[$(echo ${branch} | sed 's|.*/||')] <title>" \ --body "Part of stack \`${STACK}\`." \ --draft echo "opened PR for ${branch} (base: ${PREV_BASE})" fi PREV_BASE="${branch}" done ``` Fill in the actual PR titles and bodies before removing the `--draft` flag. Run `Skill(sanctum:pr-prep)` on each slice to generate quality-gated descriptions. ## Step 4: Post Stack Summary (`stack-summary-posted`) After all PRs are open, post a summary comment on the first PR (the root of the stack) listing the full chain: ```bash ROOT_PR=$(gh pr list \ --head "${STACK}/$(git branch --list \ "${STACK}/*" | sed 's/^[* ]*//' | sort | head -1 \ | sed 's|.*/||')" \ --json number --jq '.[0].number') # Build the stack table BODY="## Stack\n\n| # | Branch | PR |\n|---|--------|----|\n" N=1 for branch in $(git branch --list "${STACK}/*" \ | sed 's/^[* ]*//' | sort); do pr_num=$(gh pr list --head "${branch}" \ --json number --jq '.[0].number') BODY="${BODY}| ${N} | \`${branch}\` | #${pr_num} |\n" N=$((N+1)) done gh pr comment "${ROOT_PR}" --body "$(printf "${BODY}")" ``` ## Notes - Always push in stack order so GitHub sees the parent branch before the child