KingInYellows

github-stack-cleanup

'Remove local stack tracking, and by default also remote-unstack every PR via the GitHub API. Use when user says "clean up my stack" or "untrack this stack" on the github stacked-PR provider.'

KingInYellows 0 Updated 1mo ago
GitHub

Install

npx skillscat add kinginyellows/yellow-plugins/github-stack-cleanup

Install via the SkillsCat registry.

SKILL.md

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
    --local was 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 status and recoveryAction verbatim.

Boundaries

  • Never passes --confirm without an immediately preceding
    AskUserQuestion confirmation that accurately states whether the
    remote GitHub API call will run.
  • Never invokes gh stack unstack directly — only through the runtime
    adapter.
  • Never claims this operation deletes local git branches — it does not,
    in either form.