Claude Skill

setup-pstack

Configure which models pstack uses per role. Detects available models and writes the current runtime's override sheet. Use for /setup-pstack, "configure pstack models", changing pstack's model choices, or turning the SessionStart hook on or off.

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download michael-denyer-pstack-claude-plugins_pstack_skills_setup-pstack-4b3933e.zip · 3 KB
Part of michael-denyer/pstack-claude — 51 skills

Install

skills CLI npx skills add https://github.com/michael-denyer/pstack-claude/tree/main/plugins/pstack/skills/setup-pstack
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install michael-denyer-pstack-claude@llmmart
Git git clone https://github.com/michael-denyer/pstack-claude.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole michael-denyer/pstack-claude collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Setup pstack

On Codex, read the platform mapping, including its per-skill notes, before following this skill.

On another runtime, read Other runtimes below for where the sheet lives and how it loads; the steps are the same.

Write the current runtime's per-role model override sheet, using the path in Other runtimes. Each pstack skill names a default model inline; the override sheet adapts those defaults to the models you actually have access to.

Claude Code has no auto-applied "rules" mechanism like Cursor's .mdc. The Claude Code config directory is $CLAUDE_CONFIG_DIR when that variable is set and ~/.claude otherwise. This skill calls it <config>. Inclusion is explicit: the user adds a line to <config>/CLAUDE.md (or their project CLAUDE.md) such as:

@<config>/pstack-models.md

with <config> written as the resolved path, so the file is loaded as context for every session.

The Codex home directory is $CODEX_HOME when that variable is set and ~/.codex otherwise. This skill calls it <codex-home>.

Steps

1. Detect available models

Enumerate the model names the Agent tool's model parameter accepts in this session. That is the dependable source. On Claude Code they are the family names listed in Models below, each running that family's current model, and a full model ID is rejected. The default panel is listed there too. The panel is chosen for cross-family diversity. Ask the user to confirm or paste any additional slugs they want available. Never write a real slug you have not confirmed is available. The aliases inherit-parent and auto are always valid even though they are not detected slugs. Both mean the role runs on the parent session's model, which the Agent call expresses by omitting model.

2. Load current state

The default role-to-model mapping is the rule shape shown in the Write the override sheet step below. If the current runtime's sheet already exists, read it and treat its values as the current choices. Otherwise start from those defaults. A line whose role is not in that shape, such as how critics, is from a retired role. Drop it. An older sheet may name full model IDs that start with claude-, which the Agent tool rejects. Replace each with its family name, the word after claude-.

3. Map and confirm

Show every role with its current model, marking any real slug not in the detected set as needing a choice. Also list each line step 2 dropped or rewrote. Ask whether to accept as-is or change specific roles, offering the detected models plus inherit-parent and auto as the options. Prefer AskUserQuestion over free text. For panel roles (arena runners, architect runners, interrogate reviewers) the value is a list, and one subagent runs per entry, alias entries included, so the list length sets the count. arena cross-judge pool is also a list, but Arena selects one value from it whose model family differs from the parent's when possible. swarm workers is the default model for every worker unless a race or comparison assigns another model per arm.

Then ask for the default reasoning effort, the default effort line. It is session, which keeps the parent session's effort, or one of the levels in Models. Start from the default listed there. Every role value without a suffix runs at it. Then ask whether any role should run at another level. On Claude Code a role value may carry one after its slug, as in <slug> @xhigh; panel entries take their own, as in <slug> @xhigh, <slug> @max. Each level dispatches through the plugin's effort agent of that level, so the choice holds without changing the session. Leave the suffix off for the default effort.

4. Choose whether the session hook routes tasks

On Claude Code and Codex, the plugin's SessionStart hook injects the poteto-mode mandate on startup, resume, clear, and compact. Codex asks the user to trust plugin hooks through /hooks before running them. Ask whether to keep the hook. The default is on. The answer is the session hook line in the current runtime's sheet: on or off. With no sheet or no line, the hook injects. The line is inert on other runtimes.

5. Validate

Every real slug written must be in the detected set. inherit-parent and auto always pass. Validate the slug without any @<level> suffix, and the level against the effort levels in Models. The default effort value is one of those levels or session. On Codex, the levels are the reasoning_effort values your Codex models accept instead. If a chosen real slug or level is not available, stop and ask again.

6. Write the override sheet

Write the current runtime's sheet with the shape below. Overwrite the whole file so re-runs stay idempotent.

# pstack model configuration

Per-role model overrides for pstack skills. Each pstack SKILL.md names its defaults in a Models section; the values here override those defaults. Delete a line to fall back to the skill default. A value of `inherit-parent` or `auto` runs that role on the parent session's model (the `Agent` call omits `model`); an alias entry in a panel list still counts toward that panel's fan-out. A model may carry a reasoning effort, as in `opus @xhigh` (levels: low, medium, high, xhigh, max); the role then runs through the pstack effort agent of that level, each entry of a panel list on its own. `default effort` sets the level for a value without one; `session` keeps the parent session's effort. `session hook: off` stops the Claude Code or Codex SessionStart hook from injecting the poteto-mode mandate; any other value, or no line, leaves it on.

feature, refactoring: opus
bug-fix: fable
perf-issue: fable
hillclimb: fable
judgment and prose: opus
strongest judgment: fable
how explorer: opus
how explainer: opus
why investigators: opus
why synthesizer: opus
reflect tooling: opus
reflect judgment, divergent, synthesizer: opus
arena runners: opus, fable, sonnet
arena cross-judge pool: opus, fable, sonnet
swarm workers: opus
architect runners: opus, fable, sonnet
interrogate reviewers: opus, fable, sonnet

default effort: session
session hook: on

7. Wire it in

On Claude Code, if <config>/CLAUDE.md does not already include <config>/pstack-models.md, append an @ line naming the sheet's resolved path, such as @~/.claude/pstack-models.md, so the model rows load on every session. If the user prefers project scope, add the include to the project's CLAUDE.md instead.

On Codex, paste the model rows and the default effort line into <codex-home>/AGENTS.md; Codex has no @ include. Do not paste the session hook line there: the plugin hook reads it directly from <codex-home>/pstack-models.md.

8. Confirm

Tell the user where the override was written, how its model rows load, and whether the plugin hook is on. Re-running this skill updates the override sheet.

Other runtimes

The role lines are the same everywhere. What differs is the sheet path, how the runtime loads it, and how you list models. Detect models with the runtime's own tool and never write a slug you have not seen listed. A runtime whose subagent call has no model parameter still gets the sheet, as the record of the user's choice, and applies it where it can. The session hook line applies to the Claude Code and Codex plugins.

Runtime Sheet Load List models Status
Claude Code <config>/pstack-models.md @<config>/pstack-models.md in <config>/CLAUDE.md the Agent tool's model parameter verified live
Codex <codex-home>/pstack-models.md model rows: paste into <codex-home>/AGENTS.md; hook setting: read by the plugin your configured Codex models, see codex-tools.md hook contract tested; discovery verified
opencode ~/.config/opencode/pstack-models.md add the path to the instructions array in opencode.json the models slash command in the session from published docs, no live session
Gemini CLI ~/.gemini/pstack-models.md @~/.gemini/pstack-models.md in ~/.gemini/GEMINI.md the model slash command in the session from published docs, no live session
Prime Agent no documented sheet path; Prime's configuration chooses models no live session

Models

Stamped from plugins/pstack/models.json (edit there, rerun tools/generate.mjs).

  • Available Claude models: opus, fable, sonnet, haiku
  • Default panel: opus, fable, sonnet
  • Reasoning effort levels: low, medium, high, xhigh, max
  • Default reasoning effort: session
  • Single-role default: opus
Files (pstack-claude)
  • SKILL.md 8.9 KB
    ---
    name: setup-pstack
    description: Configure which models pstack uses per role. Detects available models and writes the current runtime's override sheet. Use for /setup-pstack, "configure pstack models", changing pstack's model choices, or turning the SessionStart hook on or off.
    ---
    
    # Setup pstack
    
    On Codex, read the [platform mapping](../poteto-mode/references/codex-tools.md), including its per-skill notes, before following this skill.
    
    On another runtime, read [Other runtimes](#other-runtimes) below for where the sheet lives and how it loads; the steps are the same.
    
    Write the current runtime's per-role model override sheet, using the path in [Other runtimes](#other-runtimes). Each pstack skill names a default model inline; the override sheet adapts those defaults to the models you actually have access to.
    
    Claude Code has no auto-applied "rules" mechanism like Cursor's `.mdc`. The Claude Code config directory is `$CLAUDE_CONFIG_DIR` when that variable is set and `~/.claude` otherwise. This skill calls it `<config>`. Inclusion is explicit: the user adds a line to `<config>/CLAUDE.md` (or their project `CLAUDE.md`) such as:
    
    ```text
    @<config>/pstack-models.md
    ```
    
    with `<config>` written as the resolved path, so the file is loaded as context for every session.
    
    The Codex home directory is `$CODEX_HOME` when that variable is set and `~/.codex` otherwise. This skill calls it `<codex-home>`.
    
    ## Steps
    
    ### 1. Detect available models
    
    Enumerate the model names the `Agent` tool's `model` parameter accepts in this session. That is the dependable source. On Claude Code they are the family names listed in [Models](#models) below, each running that family's current model, and a full model ID is rejected. The default panel is listed there too. The panel is chosen for cross-family diversity. Ask the user to confirm or paste any additional slugs they want available. Never write a real slug you have not confirmed is available. The aliases `inherit-parent` and `auto` are always valid even though they are not detected slugs. Both mean the role runs on the parent session's model, which the `Agent` call expresses by omitting `model`.
    
    ### 2. Load current state
    
    The default role-to-model mapping is the rule shape shown in the Write the override sheet step below. If the current runtime's sheet already exists, read it and treat its values as the current choices. Otherwise start from those defaults. A line whose role is not in that shape, such as `how critics`, is from a retired role. Drop it. An older sheet may name full model IDs that start with `claude-`, which the `Agent` tool rejects. Replace each with its family name, the word after `claude-`.
    
    ### 3. Map and confirm
    
    Show every role with its current model, marking any real slug not in the detected set as needing a choice. Also list each line step 2 dropped or rewrote. Ask whether to accept as-is or change specific roles, offering the detected models plus `inherit-parent` and `auto` as the options. Prefer `AskUserQuestion` over free text. For panel roles (arena runners, architect runners, interrogate reviewers) the value is a list, and one subagent runs per entry, alias entries included, so the list length sets the count. `arena cross-judge pool` is also a list, but Arena selects one value from it whose model family differs from the parent's when possible. `swarm workers` is the default model for every worker unless a race or comparison assigns another model per arm.
    
    Then ask for the default reasoning effort, the `default effort` line. It is `session`, which keeps the parent session's effort, or one of the levels in [Models](#models). Start from the default listed there. Every role value without a suffix runs at it. Then ask whether any role should run at another level. On Claude Code a role value may carry one after its slug, as in `<slug> @xhigh`; panel entries take their own, as in `<slug> @xhigh, <slug> @max`. Each level dispatches through the plugin's effort agent of that level, so the choice holds without changing the session. Leave the suffix off for the default effort.
    
    ### 4. Choose whether the session hook routes tasks
    
    On Claude Code and Codex, the plugin's `SessionStart` hook injects the poteto-mode mandate on startup, resume, clear, and compact. Codex asks the user to trust plugin hooks through `/hooks` before running them. Ask whether to keep the hook. The default is on. The answer is the `session hook` line in the current runtime's sheet: `on` or `off`. With no sheet or no line, the hook injects. The line is inert on other runtimes.
    
    ### 5. Validate
    
    Every real slug written must be in the detected set. `inherit-parent` and `auto` always pass. Validate the slug without any `@<level>` suffix, and the level against the effort levels in [Models](#models). The `default effort` value is one of those levels or `session`. On Codex, the levels are the `reasoning_effort` values your Codex models accept instead. If a chosen real slug or level is not available, stop and ask again.
    
    ### 6. Write the override sheet
    
    Write the current runtime's sheet with the shape below. Overwrite the whole file so re-runs stay idempotent.
    
    ```markdown
    # pstack model configuration
    
    Per-role model overrides for pstack skills. Each pstack SKILL.md names its defaults in a Models section; the values here override those defaults. Delete a line to fall back to the skill default. A value of `inherit-parent` or `auto` runs that role on the parent session's model (the `Agent` call omits `model`); an alias entry in a panel list still counts toward that panel's fan-out. A model may carry a reasoning effort, as in `opus @xhigh` (levels: low, medium, high, xhigh, max); the role then runs through the pstack effort agent of that level, each entry of a panel list on its own. `default effort` sets the level for a value without one; `session` keeps the parent session's effort. `session hook: off` stops the Claude Code or Codex SessionStart hook from injecting the poteto-mode mandate; any other value, or no line, leaves it on.
    
    feature, refactoring: opus
    bug-fix: fable
    perf-issue: fable
    hillclimb: fable
    judgment and prose: opus
    strongest judgment: fable
    how explorer: opus
    how explainer: opus
    why investigators: opus
    why synthesizer: opus
    reflect tooling: opus
    reflect judgment, divergent, synthesizer: opus
    arena runners: opus, fable, sonnet
    arena cross-judge pool: opus, fable, sonnet
    swarm workers: opus
    architect runners: opus, fable, sonnet
    interrogate reviewers: opus, fable, sonnet
    
    default effort: session
    session hook: on
    ```
    
    ### 7. Wire it in
    
    On Claude Code, if `<config>/CLAUDE.md` does not already include `<config>/pstack-models.md`, append an `@` line naming the sheet's resolved path, such as `@~/.claude/pstack-models.md`, so the model rows load on every session. If the user prefers project scope, add the include to the project's `CLAUDE.md` instead.
    
    On Codex, paste the model rows and the `default effort` line into `<codex-home>/AGENTS.md`; Codex has no `@` include. Do not paste the `session hook` line there: the plugin hook reads it directly from `<codex-home>/pstack-models.md`.
    
    ### 8. Confirm
    
    Tell the user where the override was written, how its model rows load, and whether the plugin hook is on. Re-running this skill updates the override sheet.
    
    ## Other runtimes
    
    The role lines are the same everywhere. What differs is the sheet path, how the runtime loads it, and how you list models. Detect models with the runtime's own tool and never write a slug you have not seen listed. A runtime whose subagent call has no model parameter still gets the sheet, as the record of the user's choice, and applies it where it can. The `session hook` line applies to the Claude Code and Codex plugins.
    
    | Runtime | Sheet | Load | List models | Status |
    | --- | --- | --- | --- | --- |
    | Claude Code | `<config>/pstack-models.md` | `@<config>/pstack-models.md` in `<config>/CLAUDE.md` | the `Agent` tool's model parameter | verified live |
    | Codex | `<codex-home>/pstack-models.md` | model rows: paste into `<codex-home>/AGENTS.md`; hook setting: read by the plugin | your configured Codex models, see [codex-tools.md](../poteto-mode/references/codex-tools.md#model-names) | hook contract tested; discovery verified |
    | opencode | `~/.config/opencode/pstack-models.md` | add the path to the `instructions` array in `opencode.json` | the `models` slash command in the session | from published docs, no live session |
    | Gemini CLI | `~/.gemini/pstack-models.md` | `@~/.gemini/pstack-models.md` in `~/.gemini/GEMINI.md` | the `model` slash command in the session | from published docs, no live session |
    | Prime Agent | no documented sheet path; Prime's configuration chooses models | | | no live session |
    
    ## Models
    
    Stamped from `plugins/pstack/models.json` (edit there, rerun `tools/generate.mjs`).
    
    - Available Claude models: `opus`, `fable`, `sonnet`, `haiku`
    - Default panel: `opus`, `fable`, `sonnet`
    - Reasoning effort levels: `low`, `medium`, `high`, `xhigh`, `max`
    - Default reasoning effort: `session`
    - Single-role default: `opus`
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related