Agent skill

Stack Mode

by athola in athola/claude-night-market

Detects shared stack membership and iterates a command across all PRs in base-to-tip order.

MITAuto-check passed

Install Stack Mode

skills CLI
$ npx skills add athola/claude-night-market --skill stack-mode -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install athola/claude-night-market stack-mode --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/athola/claude-night-market.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/sanctum/skills/stack-mode .claude/skills/stack-mode && rm -rf skills-src

Use ~/.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/

Facts

Skill name
stack-mode
GitHub stars
342
Token cost
~2.6k tokens
SKILL.md length
844 words
Files
1
Skills in repo
160
Repo updated
First seen
Licence
MIT

At a glance

Detects shared stack membership and iterates a command across all PRs in base-to-tip order.

  • Works in 4 steps: Resolve Stack Membership… → Confirm With User (if not explicit) → Iterate (iteration-complete) → …
  • A command supports --stack flag for multi-PR iteration
  • SKILL.md covers When To Use, When NOT To Use, Contract and Required Progress Tracking, plus 7 more sections
  • Calls gh, git and glab

What it does

Stack Mode is an agent skill from athola/claude-night-market. Detects shared stack membership and iterates a command across all PRs in base-to-tip order. Use when a command supports --stack flag for multi-PR iteration.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: 23 Claude Code plugins: TDD enforcement hooks, git/PR workflows, spec-driven development, code review, project lifecycle, fix-from-error, maintenance automation, context… The licence is MIT.

When your agent uses it

  • A command supports --stack flag for multi-PR iteration

Example prompts

  • “Use the stack-mode skill to detect shared stack membership and iterates a command across all PRs in base-to-tip order”
  • “/stack-mode”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Resolve Stack Membership (membership-resolved)
  2. Confirm With User (if not explicit)
  3. Iterate (iteration-complete)
  4. Post Stack Summary on Root (root-summary-posted)

What it can do on your machine

Read from SKILL.md and the folder at commit 9f3eb00. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git
    • glab

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh, git and glab, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Stack Mode loads about 2.6k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 844 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~42
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from athola/claude-night-market at commit 9f3eb00, republished under its MIT licence (© athola). 844 words, ~2,577 tokens.

Download SKILL.mdSave it as .claude/skills/stack-mode/SKILL.md (or your agent's skills folder).
name
stack-mode
description
Detects shared stack membership and iterates a command across all PRs in base-to-tip order. Use when a command supports --stack flag for multi-PR iteration.
alwaysApply
false
category
workflow-automation
tags
git, stacked-diffs, pr, review, fix-pr, iteration
complexity
medium
model_hint
standard
estimated_tokens
1100
dependencies
sanctum:stack-create, sanctum:stack-push, sanctum:stack-rebase, leyline:git-platform

Stack Mode

Shared contract for commands that need to operate across a whole stack of dependent PRs in one invocation. Used by /pr-review --stack and /fix-pr --stack.

The goal is one simple thing: when a PR is part of a stack targeting a common base branch, loop the command's normal workflow across every PR in the stack in base-to-tip order and emit one consolidated summary on the stack root.

When To Use

Load this skill when a command accepts a --stack flag (or auto-detects stack membership) and needs to iterate its normal workflow across multiple PRs.

Do NOT load this skill for single-PR workflows. The per-PR workflow stays unchanged; stack mode wraps it.

When NOT To Use

  • Creating the stack (use sanctum:stack-create)
  • Cascading a rebase through it (use sanctum:stack-rebase)

Contract

A calling command MUST:

  1. Accept a --stack boolean flag AND a --base <branch> override (default: master).
  2. Call Step 1 below to resolve stack membership BEFORE running its main workflow.
  3. Run its main workflow per PR in the resolved order.
  4. Emit per-PR outputs unchanged (thread replies, issue links, etc.).
  5. Emit ONE stack-level summary comment on the root PR using the format in Step 4.
  6. Respect per-PR Gate rules (every PR still needs its own thread resolution and issue tracking).

A calling command MAY:

  • Auto-detect stack membership and prompt the user rather than requiring --stack explicitly.
  • Short-circuit iteration when a per-PR failure leaves downstream PRs with stale context.

Required Progress Tracking

The caller creates TodoWrite items:

  1. stack-mode:membership-resolved
  2. stack-mode:iteration-complete
  3. stack-mode:root-summary-posted

Step 1: Resolve Stack Membership (membership-resolved)

Given a starting PR number $PR_NUM and optional base $BASE (default: master), try three strategies in order and stop at the first that yields a stack of size

= 2.

Strategy A: Branch-name convention (cheapest)
bash
START_HEAD=$(gh pr view "$PR_NUM" \
  --json headRefName -q .headRefName)

# stack/<feature-name>/<slice-name>
if [[ "$START_HEAD" =~ ^stack/([^/]+)/.+$ ]]; then
  FEATURE="${BASH_REMATCH[1]}"
  PREFIX="stack/${FEATURE}/"

  # All local branches with the same prefix
  STACK_BRANCHES=$(git branch --list "${PREFIX}*" \
    | sed 's/^[* ]*//' | sort)

  # Map branches -> PR numbers (skip branches with no PR)
  STACK_PRS=()
  for branch in $STACK_BRANCHES; do
    pr=$(gh pr list --head "$branch" \
      --json number --jq '.[0].number')
    [ -n "$pr" ] && STACK_PRS+=("$pr")
  done

  echo "strategy=A prs=${STACK_PRS[*]}"
fi
Strategy B: Stack summary comment (most reliable)

stack-push posts a ## Stack markdown table on the root PR with columns # | Branch | PR. Parse it:

bash
# Find the root PR of the stack containing $PR_NUM
# The current PR may be the root, or may link to it via
# a "Part of stack `stack/<feature>`" phrase in its body
BODY=$(gh pr view "$PR_NUM" --json body -q .body)

# Look for a "## Stack" table in THIS PR's comments
TABLE=$(gh pr view "$PR_NUM" --json comments \
  --jq '.comments[] | select(.body | contains("## Stack"))
        | .body' | head -1)

# If not on this PR, look for the root PR reference
if [ -z "$TABLE" ]; then
  ROOT_REF=$(echo "$BODY" \
    | grep -oE 'stack/[^ `]+' | head -1)
  # ... resolve ROOT_REF -> root PR number and re-fetch
fi

# Parse the table: extract all `#<num>` from the PR column
STACK_PRS=($(echo "$TABLE" \
  | grep -oE '#[0-9]+' | tr -d '#' | sort -un))

echo "strategy=B prs=${STACK_PRS[*]}"
Strategy C: Base-chain walk (fallback)

Walk both directions from $PR_NUM:

  • Up: repeatedly resolve baseRefName until it equals $BASE. Each visited head is a stack member.
  • Down: find open PRs whose baseRefName equals one of the visited heads. Recurse.
bash
# Ascend from $PR_NUM to the root
CUR=$PR_NUM
CHAIN=($CUR)
while true; do
  BASE_REF=$(gh pr view "$CUR" \
    --json baseRefName -q .baseRefName)
  [ "$BASE_REF" = "$BASE" ] && break

  PARENT=$(gh pr list --head "$BASE_REF" \
    --state open --json number --jq '.[0].number')
  [ -z "$PARENT" ] && break

  CHAIN=("$PARENT" "${CHAIN[@]}")
  CUR=$PARENT
done

# Descend from the root collecting children
ROOT=${CHAIN[0]}
FRONTIER=("$ROOT")
while [ ${#FRONTIER[@]} -gt 0 ]; do
  PARENT=${FRONTIER[0]}
  FRONTIER=("${FRONTIER[@]:1}")

  PARENT_HEAD=$(gh pr view "$PARENT" \
    --json headRefName -q .headRefName)

  CHILDREN=($(gh pr list --base "$PARENT_HEAD" \
    --state open --json number --jq '.[].number'))

  for c in "${CHILDREN[@]}"; do
    CHAIN+=("$c")
    FRONTIER+=("$c")
  done
done

STACK_PRS=("${CHAIN[@]}")
echo "strategy=C prs=${STACK_PRS[*]}"
Ordering

Regardless of strategy, order the final list base-to-tip (root PR first, leaf PR last). The root is the PR whose baseRefName equals $BASE.

bash
ROOT_PR=""
for p in "${STACK_PRS[@]}"; do
  base=$(gh pr view "$p" --json baseRefName -q .baseRefName)
  if [ "$base" = "$BASE" ]; then
    ROOT_PR=$p
    break
  fi
done

If the stack size is 1, the command MUST fall back to single-PR mode and emit a warning: stack-mode: only one PR found; --stack has no effect, proceeding as single-PR.

GitLab / Bitbucket

See Skill(leyline:git-platform) for glab / Bitbucket equivalents of the gh calls above. The three strategies translate directly: GitLab MR dependencies replace base-chain walks, and the glab mr view --output json shape matches gh pr view.

Step 2: Confirm With User (if not explicit)

When the caller did NOT pass --stack but Step 1 resolved a stack of size >= 2, print the stack and ask:

Detected stack of N PRs rooted at #<root>:
  1. #<root>   <title>
  2. #<p2>     <title>
  ...

Run the workflow on the full stack? [y/N]

Default to "N" (single-PR mode). With --stack explicit, skip this prompt.

Show full SKILL.md (357 more words)Show less

Step 3: Iterate (iteration-complete)

Run the caller's main workflow once per PR in base-to-tip order:

bash
FAILED_PRS=()
for p in "${STACK_PRS[@]}"; do
  echo "=== stack-mode: PR #$p ($(($idx+1))/${#STACK_PRS[@]}) ==="

  # Caller hook: run the single-PR workflow on $p
  # This includes Gate 1 (thread resolution) and
  # Gate 2 (issue tracking) per the caller's contract.
  if ! run_single_pr_workflow "$p"; then
    FAILED_PRS+=("$p")
    # Stop iteration: downstream PRs may now be stale
    break
  fi
done

If any PR fails, the command MUST stop and report stack-mode: halted at #<pr>; downstream PRs untouched. Downstream PRs are intentionally left alone because their context may have shifted.

Step 4: Post Stack Summary on Root (root-summary-posted)

After successful iteration, post ONE consolidated summary comment on the root PR. This does NOT replace per-PR summaries: it links them together.

markdown
## Stack <Command Name> Summary

**Stack**: N PRs rooted at #<root>, base `<base-branch>`
**Command**: <command> (e.g., /fix-pr, /pr-review)
**Run**: <timestamp>

| # | PR | Branch | Status | Per-PR Summary |
|---|----|--------|--------|----------------|
| 1 | #<root> | `stack/<feat>/<root-slice>` | <done/skipped/failed> | [link to comment] |
| 2 | #<p2>   | `stack/<feat>/<slice-2>`    | <done/skipped/failed> | [link to comment] |
| ... | ... | ... | ... | ... |

### Cross-PR Notes

- <Any observations that spanned multiple PRs>
- <Issues created that reference multiple stack PRs>
- <Base-PR-merged cascade reminders, if any>

### Next Steps

- If root PR merges, run `Skill(sanctum:stack-rebase)` to
  cascade the base update through descendants.
- Reviewers: rebase-triggered stale-review flags on
  descendants are expected after any force-push.

Post via gh pr comment "$ROOT_PR" --body-file <file>.

Failure Modes and Recovery

FailureDetectionRecovery
Stack of size 1Step 1 returns one PREmit warning, fall back to single-PR mode
Base chain loopsVisited set on ascentHalt, report stack-mode: cycle detected
Mid-stack PR failed its GatesCaller raisesHalt iteration, leave downstream untouched
Strategy B table malformedParse failsFall through to Strategy C
Auth scope insufficientgh returns 403Halt with clear error; caller surfaces to user

Notes

  • Stack mode is ADDITIVE: single-PR behavior is unchanged. Only the iteration and root summary are new.
  • Per-PR Gate 1 (thread resolution) and Gate 2 (issue tracking) remain unchanged: each PR still passes its own gates independently.
  • Never merge Gate 1 across the stack. A resolved thread on one PR is not a resolved thread on another.
  • The root summary is idempotent: re-running stack mode should update (not duplicate) the summary comment. Match on ## Stack <Command Name> Summary as the key.
  • stack-mode is a read/orchestration skill; it does NOT push, rebase, or edit branches. Those concerns are in stack-create, stack-push, and stack-rebase.

Exit Criteria

  • Stack membership resolved using at least one of the three strategies (A: branch names, B: stack comment, C: base-chain walk) and PRs ordered base-to-tip before iteration starts
  • The 3 required TodoWrite items (stack-mode:membership-resolved, stack-mode:iteration-complete, stack-mode:root-summary-posted) are created and marked complete in sequence
  • Root PR receives exactly one consolidated ## Stack <Command> Summary comment after all PRs are processed
  • If stack size is 1, warning stack-mode: only one PR found; --stack has no effect is emitted and single-PR mode used
  • If a PR fails its gates, iteration halts and downstream PRs are left untouched with a stack-mode: halted at #<pr> report

© athola, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/sanctum/skills/stack-mode of athola/claude-night-market.

Open the folder on GitHubat commit 9f3eb00

Compare with similar skills

Stack Mode 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.

Stack Mode compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Stack Mode this skillathola/claude-night-market342—~2.6kAutomated safety check: PassMIT
Detect Zero Iteration FailuresHKUDS/OpenSpace7.7k—~1.3kAutomated safety check: PassMIT
Detect Zero Iteration FailureHKUDS/OpenSpace7.7k—~477Automated safety check: PassMIT
Threat Detectionalirezarezvani/claude-skills28k—~3.5kAutomated safety check: PassMIT
Resemble Detectgithub/awesome-copilot40k3 repos~4.1kAutomated safety check: PassApache-2.0
Pii Detectruvnet/ruflo74k1 repos~350Automated safety check: NotesMIT

Similar skills

  • Identify and handle pre-execution agent failures occurring before any iterations or tool usage

    7.7k GitHub stars~1.3k tokensUpdated 1 mo ago
    Auto-check passed
  • Identify and classify agent failures occurring before execution starts

    7.7k GitHub stars~477 tokensUpdated 1 mo ago
    Auto-check passed
  • Threat Detection

    alirezarezvani/claude-skills

    A skill your agent uses when hunting for threats in an environment, analyzing IOCs, or detecting behavioral anomalies in telemetry.

    28k GitHub stars~3.5k tokensUpdated 1 mo ago
    SecurityAuto-check passed
  • Resemble Detect

    github/awesome-copilot

    Official

    Deepfake detection and media safety — detect AI-generated audio, images, video, and text, trace synthesis sources, apply watermarks, verify speaker identity, and analyze media intelligence using…

    40k GitHub starsUsed in 3 repos~4.1k tokens
    Media & CreativeAuto-check passed
  • Pii Detect

    ruvnet/ruflo

    Detect and flag personally identifiable information (PII) in text, code, and configurations.

    74k GitHub starsUsed in 1 repo~350 tokens
    Auto-check: notes
  • Detecting API Enumeration Attacks

    mukul975/Anthropic-Cybersecurity-Skills

    Detect API enumeration attacks (BOLA/IDOR, OWASP API1:2023) by writing SIEM detection rules that flag sequential or UUID identifier iteration, parameter tampering, and mixed 200/401/403 response…

    34k GitHub stars~3.7k tokensUpdated 1 mo ago
    SecurityAuto-check passed

More from athola/claude-night-market

All 160 skills in this repo
  • Night Market Diagnostics Toolkit

    athola/claude-night-market

    Run and interpret repo diagnostic scripts (ratchets, validators, token stats).

    342 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Skills Eval

    athola/claude-night-market

    Evaluate Claude skill quality through auditing. An agent skill from athola/claude-night-market.

    342 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Agent Teams

    athola/claude-night-market

    Coordinates Claude agent teams via filesystem protocol. An agent skill from athola/claude-night-market.

    342 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Delegation Core

    athola/claude-night-market

    Delegates execution to eight CLIs (Gemini, Qwen, MiniMax, GLM, Muse, Codex, OpenCode, Glimmer).

    342 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Elegant Code

    athola/claude-night-market

    Guide minimal code via a decision ladder with full safety, edge, and negative-case coverage.

    342 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Skill Library Mission

    athola/claude-night-market

    Build a project skill library in .claude/skills/ via discovery, parallel authoring, and review.

    342 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed

Questions about Stack Mode

What does Stack Mode do?

Detects shared stack membership and iterates a command across all PRs in base-to-tip order. Stack Mode is an agent skill from athola/claude-night-market. Detects shared stack membership and iterates a command across all PRs in base-to-tip order.

When should I use Stack Mode?

Stack Mode fits situations like: A command supports --stack flag for multi-PR iteration.

How do I install Stack Mode in Claude Code?

Run `npx skills add athola/claude-night-market --skill stack-mode -a claude-code`. Or copy the skill folder (plugins/sanctum/skills/stack-mode in athola/claude-night-market) into .claude/skills/stack-mode in your project. Claude Code loads it when a task matches its description.

How do I install Stack Mode in Codex?

Run `npx skills add athola/claude-night-market --skill stack-mode -a codex`. Or copy the skill folder (plugins/sanctum/skills/stack-mode in athola/claude-night-market) into .agents/skills/stack-mode in your project. Codex loads it when a task matches its description.

Can I use Stack Mode in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add athola/claude-night-market --skill stack-mode -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/stack-mode, .gemini/skills/stack-mode, .github/skills/stack-mode and .opencode/skills/stack-mode in your project.

What does Stack Mode need to run?

Going by SKILL.md and its folder, Stack Mode needs the command-line tools its instructions call (gh, git and glab).

Does Stack Mode access the network?

SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Stack Mode safe to install?

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.

What licence does Stack Mode use?

Stack Mode is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Stack Mode use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Stack Mode?

Skills that share tags, products or a category with Stack Mode: Detect Zero Iteration Failures (HKUDS/OpenSpace, 7.7k stars), Detect Zero Iteration Failure (HKUDS/OpenSpace, 7.7k stars), Threat Detection (alirezarezvani/claude-skills, 28k stars) and Resemble Detect (github/awesome-copilot, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Stack Mode?

athola (a GitHub user) maintains it in athola/claude-night-market, which has 342 GitHub stars. The repository holds 160 skills in this directory. The repository was last updated on October 6, 2026.

Source: athola/claude-night-market on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.