setup-pstack · michael-denyer — скилл для Claude Code: настройка моделей pstack
Скилл выбирает модели для каждой роли pstack, находит доступные в текущей сессии и записывает файл переопределений.
npx skills add michael-denyer/pstack-claude --skill setup-pstack -a claude-codeЧто делает setup-pstack
pstack раздаёт ролям модели по умолчанию, прописанным прямо в SKILL.md. Скилл setup-pstack собирает эти умолчания в один файл переопределений под ваш рантайм: сначала перечисляет имена моделей, которые принимает параметр model инструмента Agent, затем показывает таблицу ролей и спрашивает, что менять.
Дальше вы задаёте общий уровень рассуждений строкой default effort — либо session, чтобы наследовать усилие родительской сессии, либо один из уровней. Отдельной роли можно дописать уровень после слага, например opus @xhigh. Псевдонимы inherit-parent и auto означают запуск на модели родителя: вызов Agent просто не передаёт model. Файл перезаписывается целиком, поэтому повторный запуск ничего не ломает.
Есть и переключатель session hook: на Claude и Codex хук SessionStart вставляет мандат poteto-mode при старте, возобновлении, очистке и сжатии контекста. Включён по умолчанию. На Codex сначала придётся подтвердить доверие хукам плагина через /hooks. В Claude нет авто-подхвата правил вроде .mdc из Cursor, поэтому строку @<config>/pstack-models.md нужно вручную добавить в <config>/CLAUDE.md или в проектный CLAUDE.md. Без неё файл просто не загрузится в контекст.
Старые листы с полными ID вида claude-… инструмент Agent отвергает, скилл меняет их на имя семейства. Роли, которых нет в текущей схеме, он выкидывает.
Какие задачи решает
- развести модели по ролям pstack вместо правки каждого SKILL.md
- узнать, какие имена моделей вообще принимает инструмент
Agentв этой сессии - задать отдельный уровень рассуждений для одной роли, не трогая сессию
- отключить хук
SessionStart, если мандат poteto-mode не нужен - починить старый лист с полными ID моделей, которые
Agentотвергает
Примеры запросов агенту
- Настрой модели pstack под то, что у меня есть
- Поставь роли arena runners три модели: opus, fable, sonnet
- Выключи session hook в листе pstack
Как установить setup-pstack
1Через Skills CLI (Vercel)
npx skills add michael-denyer/pstack-claude --skill setup-pstack -a claude-code2Вручную: положить файлы
~/.claude/skills/setup-pstack/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/setup-pstack/
1Через Skills CLI (Vercel)
npx skills add michael-denyer/pstack-claude --skill setup-pstack -a codex2Вручную: положить файлы
.agents/skills/setup-pstack/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add michael-denyer/pstack-claude --skill setup-pstack -a cursor2Вручную: положить файлы
.cursor/skills/setup-pstack/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install michael-denyer/pstack-claude setup-pstack2Вручную: положить файлы
.github/skills/setup-pstack/SKILL.md1Через Skills CLI (Vercel)
npx skills add michael-denyer/pstack-claude --skill setup-pstack -a gemini-cli2Командой платформы
gemini skills install https://github.com/michael-denyer/pstack-claude --path plugins/pstack/skills/setup-pstackВручную: положить файлы
.devin/skills/setup-pstack/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add michael-denyer/pstack-claude --skill setup-pstack -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора7
Другие версии setup-pstack
Похожие
Рядом в теме «Настройка агента: память, контекст, субагенты»
Все скиллы по теме «Настройка агента: память, контекст, субагенты» →Вопросы о setup-pstack
Как установить setup-pstack в Claude?
Выполните npx skills add michael-denyer/pstack-claude --skill setup-pstack -a claude-code. Скилл окажется в ~/.claude/skills/setup-pstack/SKILL.md.
Что делает setup-pstack?
Определяет доступные модели, показывает роли pstack с текущими значениями и записывает файл переопределений для текущего рантайма. Заодно можно включить или выключить хук SessionStart.
Что нужно сделать в Claude, чтобы лист моделей подхватился?
Добавить строку @<config>/pstack-models.md в <config>/CLAUDE.md или в проектный CLAUDE.md, подставив реальный путь. Автоподхвата правил, как в Cursor, здесь нет.
Исходный текст
SKILL.md · MIT
---
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 GitHub Copilot, read the [platform mapping](../poteto-mode/references/copilot-tools.md), including its per-skill notes, before following this skill.
On Muse, read the [platform mapping](../poteto-mode/references/muse-tools.md), including its per-skill notes, before following this skill.
On GitHub Copilot, follow [the Copilot setup](copilot.md) in place of steps 1, 3, 4, and 7 and step 6's header.
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 is passed as the dispatch's effort, 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. On Pi, the pstack extension adds the same mandate to the system prompt at every agent start. On Muse, the native plugin's `SessionStart` hook injects the mandate once the user approves the plugin's hooks with `muse plugins approve pstack`. 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's subagent then runs at 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, Codex, or Muse SessionStart hook, or the pstack Pi extension, from injecting the poteto-mode mandate; any other value, or no line, leaves it on.
feature, refactoring: sonnet
bug-fix: opus
perf-issue: opus
hillclimb: opus
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, haiku
arena cross-judge pool: opus, fable, sonnet, haiku
swarm workers: opus
architect runners: opus, fable, sonnet, haiku
interrogate reviewers: opus, fable, sonnet, haiku
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`.
On Muse, no include line is needed: the plugin hook reads the sheet directly and injects its role lines at session start. It runs only after the user approves the plugin's hooks, so name `muse plugins approve pstack` when the hook has not run yet.
### 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.
### 9. Offer a verification skill (optional)
Check whether the project has a way to drive the real app for proof (a project `verify` or `verify-*` skill, or an existing harness). If not, offer once: "want a project-local verification skill, so agents can drive the app the way a user does and prove changes work? I can generate one with /create-verification-skill." On yes, invoke [`/create-verification-skill`](../create-verification-skill/SKILL.md). On no, move on without pushing.
### 10. Offer a formal verification skill (optional)
Check whether the project already has a formal verification skill (a project skill that runs a model checker, a proof, or another verifier against the code). If not, offer once: "want a formal verification skill, so agents can prove a key property of your code holds in every case in scope, not only the cases tests reach? I can generate one with /create-formal-verification-skill." On yes, invoke [`/create-formal-verification-skill`](../create-formal-verification-skill/SKILL.md). On no, move on without pushing.
## 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, Codex, and GitHub Copilot plugins and to the pstack Pi extension.
| 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 |
| Pi | `pstack-models.md` in the Pi agent directory, `$PI_CODING_AGENT_DIR` or `~/.pi/agent` | read by the pstack Pi extension, model rows and hook setting both; no include line | `pi --list-models`, see [pi-tools.md](../poteto-mode/references/pi-tools.md#model-names) and its `setup-pstack` note | extension contract tested offline; live results in the repository's `docs/pi-equivalence.md` |
| GitHub Copilot (CLI and app) | `${COPILOT_HOME:-~/.copilot}/pstack-models.md` | the plugin hook checks it and injects its role lines at session start; skills-only installs read it with `view` | the `task` tool's `model` enum, see [copilot-tools.md](../poteto-mode/references/copilot-tools.md#model-names) | hook contract tested; CLI install smoke-tested |
| Muse | `${XDG_CONFIG_HOME:-~/.config}/muse/pstack-models.md` | the plugin hook reads it and injects its role lines at session start, once hooks are approved; no include line | the model catalog (`muse model-profile show <model>` names each one), see [muse-tools.md](../poteto-mode/references/muse-tools.md#model-names) | hook contract tested; plugin install 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`, `haiku`
- Reasoning effort levels: `low`, `medium`, `high`, `xhigh`, `max`
- Default reasoning effort: `session`
- Single-role default: `opus`
© michael-denyer · MIT · michael-denyer/pstack-claude