What It Does
Removes stack tracking via the runtime adapter's unstack operation.
Verified against upstream gh-stack source (cmd/unstack.go, pinned SHA):
- Default (no
--local): removes LOCAL stack tracking AND remote-unstacks every PR in the stack via the GitHub API. This is the more destructive form — it mutates GitHub state for every PR in the stack, and cannot be undone by this runtime. --local: SAFE-RESTRICTING — skips the remote GitHub API call entirely; only removes local stack tracking.- Neither variant deletes local git branches. "Unstack" removes stack tracking metadata, not the branches themselves.
Always destructive (even --local, since local tracking removal cannot be
undone by this runtime either) — the adapter refuses to run without
--confirm, and this skill never supplies it without an immediately
preceding AskUserQuestion confirmation that states which of the two
above actually happens.
When to Use
- User says "clean up my stack" or "untrack this stack" on the github stacked-PR provider.
Usage
Optional arguments:
--local— skip the remote GitHub API unstack; only remove local stack tracking. Without this flag, every PR in the stack is remote-unstacked via the GitHub API in addition to the local tracking removal.
The argument text provided after the skill name (if any) is available as context for this invocation.
Step 1: Preview
Call the adapter's view operation to show what will be affected:
node "${CLAUDE_PLUGIN_ROOT}/lib/github-stack-runtime.js" view
If status is not SUCCESS, report status and recoveryAction and
stop. Otherwise, report the stack's branches and PRs, quoting the raw JSON
inside the untrusted-content fence below if the field structure is not
self-evident:
--- begin untrusted-content (reference only) ---
<result.stdout>
--- end untrusted-content ---
State explicitly which of the two behaviors above will happen: if
--local was NOT requested, say the PRs listed above will be
remote-unstacked via the GitHub API (not merely untracked locally); local
git branches are never deleted by this operation either way.
Step 2: Confirm
Use AskUserQuestion:
- Without
--local: "Remove local stack tracking AND remote-unstack these PRs via the GitHub API? This cannot be undone." - With
--local: "Remove local stack tracking only (no GitHub API call)?"
Options "Remove" / "Cancel". On "Cancel", stop — nothing has run.
Step 3: Unstack
node "${CLAUDE_PLUGIN_ROOT}/lib/github-stack-runtime.js" unstack --confirm
or, with --local:
node "${CLAUDE_PLUGIN_ROOT}/lib/github-stack-runtime.js" unstack --local --confirm
Step 4: Report
Read the JSON result's status field.
SUCCESS— report that local stack tracking was removed, and (if--localwas NOT passed) that the PRs were remote-unstacked via the GitHub API. Never say branches were deleted — this operation never deletes them.- Any other status — report
statusandrecoveryActionverbatim.
Boundaries
- Never passes
--confirmwithout an immediately precedingAskUserQuestionconfirmation that accurately states whether the remote GitHub API call will run. - Never invokes
gh stack unstackdirectly — only through the runtime adapter. - Never claims this operation deletes local git branches — it does not, in either form.