╭───STACK───╮
dev
└─ #101
└─ #102
└─ #103
╰───────────╯Squash-safe stacked PR/MR repair for coding agents working in GitHub or GitLab repos that squash-merge and delete branches.
stack is agent-first. Humans can run it directly, but the happy path is: let
the agent do normal code work with plain git, then use stack for stack
inspection, repair, merge, and undo workflows.
npm install -g @kitlangton/stackInstall the agent skill too:
npx skills add kitlangton/stack --skill stackInstall and authenticate the matching host CLI:
gh auth login # GitHub
glab auth login # GitLab- Create stacked changes using normal git branches.
- Open the root PR/MR against trunk, for example
mainordev. - Open each child PR/MR against its parent branch.
- Preview the stack:
stack sync- Apply the safe maintenance workflow:
stack sync --apply- Merge from the root when ready:
stack merge
stack merge --applyUse stack merge --auto when the code host should wait for merge requirements,
then repair descendants automatically after the root lands.
stack sync --apply is the common maintenance workflow:
- Infers stack links from PR/MR target branches.
- Records stack intent in
.git/stack/state.json. - Repairs descendants after parent branches move or land.
- Retargets PRs/MRs when needed.
- Refreshes stack blocks in descriptions.
- Saves
.git/stack/undo.jsonbefore mutations.
GitHub stack blocks use compact #101 references. GitLab blocks use !101
references plus titles because bare GitLab MR links only show titles on hover.
If a repair fails, run:
stack history
stack undo
stack undo --applyProvider selection is automatic for public hosts:
github.comusesgh.gitlab.comusesglab.
For enterprise hosts, configure the repo once:
git config stack.codeHost github # or: gitlabUse STACK_CODE_HOST=github|gitlab for a one-off override.
Sync preview
● main
└─ ● stack-a #101
└─ ● stack-b #102
Would update PRs: #101, #102
Apply:
stack sync
→ retarget #102 (stack-b) to main before merge
→ merge #101 (stack-a)
→ rebase stack-b onto main
→ push stack-b
→ update #102 stack block
stack status # inspect the relevant local stack
stack guide # print the agent/human happy path
stack sync # preview inference, repairs, and description updates
stack sync --apply # apply the previewed maintenance workflow
stack sync <branch> # preview only the stack containing branch
stack sync --apply <branch>
# apply only the stack containing branch
stack sync --apply --keep-going
# process independent stacks and report failures
stack doctor # inspect repo, host, metadata, and journal health
stack merge # dry-run the next root merge
stack merge --apply # merge root and repair descendants
stack merge --auto # wait for host requirements, then merge and repair
stack merge --auto --through <branch-or-change>
# auto-merge roots through a bounded target
stack history # show the last saved mutation journal
stack undo # preview undo
stack undo --apply # restore branch tips, request targets, and metadata