Setup pstack
Write
~/.config/pstack/pstack-models.md
, the file that sets pstack's model per role. Skills read it when they delegate.
Steps
1. Detect available models
Call
orchestrator_capabilities
and keep the providers whose
is true. Their models are what you can pass to a
subagent in this session. That is the only source. If it returns no eligible model, say so and offer
for every role. An entry is
<providerInstanceId>/<model>
, plus
when the model lists an effort option (
on Claude,
on Codex). Never write an entry it did not return. The aliases
and
are always valid even though they are not detected models.
2. Load current state
The default role-to-model mapping is the rule in step 3(b), over the roles shown in step 5. If
~/.config/pstack/pstack-models.md
already exists, read it and treat its
line and its role values as the current choices. Otherwise start from those defaults. A line whose role is not in step 5, such as
, is from a retired role. Drop it.
3. Budget, map, and confirm
(a) Ask for a budget. Ask plainly in the thread. Offer these four options with these exact labels, and name the current budget when the file records one.
unlimited - max reasoning
(b) Apply it. Build the working table from the skill defaults, and on a re-run keep any role you changed by model, list, or alias (
,
). By default, code roles (
,
,
,
) and the
,
,
, and
roles get the fastest strong coding model detected.
,
,
,
, and
reflect judgment, divergent, synthesizer
get the most capable model detected. Each panel role (
,
,
,
) gets the most capable model of each distinct provider detected, up to three entries.
,
,
, and
set the effort of every real entry, panel entries included, to
,
,
, or
, on the ladder
>
>
>
>
. If the model does not list the target, use the highest ladder option at or below it that the model lists, else mark the role as needing a choice. Never pick an option off the ladder, such as
,
, or
. A model with no effort option gets no
.
and
do not change. So under
, a model that lists
,
,
, and
gets
.
(c) Show the roles and confirm. Show every role with its model, marking any real entry not in the detected set as needing a choice. Also list each line step 2 dropped. Ask whether to accept as-is or change specific roles, offering the detected models plus
and
(both mean: this role runs on the parent thread's model) as the options. Ask plainly in the thread. 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.
is also a list, but Arena selects one value from it whose model family differs from the parent's when possible.
is the default model for every worker unless a race or comparison assigns another model per arm.
4. Validate
Every real entry written must be in the
orchestrator_capabilities
result. Its provider has
true, its model is listed under that provider, and its effort, when it has one, is one of that model's effort options. A model with no effort option has no
.
and
always pass. If a chosen real entry is not available, stop and ask again.
5. Write the file
Write
~/.config/pstack/pstack-models.md
(create
if it is missing) as a plain file with the header comments, a
line with the chosen label and its target effort, and one line per role, using the same labels poteto-mode uses. Overwrite the whole file so re-runs stay idempotent. Shape:
# pstack model configuration. One line per role. Delete a line to fall back to the skill default.
# `inherit-parent` or `auto` as a value: the role runs on the parent thread's model (omit delegate_task `target`). Alias entries in a panel list still count toward its fan-out.
# budget: large (xhigh)
feature, refactoring: <providerInstanceId>/<model> (<effort>)
bug-fix: <entry>
perf-issue: <entry>
hillclimb: <entry>
judgment and prose: <entry>
hardest tasks: <entry>
how explorer: <entry>
how explainer: <entry>
why investigators: <entry>
why synthesizer: <entry>
reflect tooling: <entry>
reflect judgment, divergent, synthesizer: <entry>
arena runners: <entry>, <entry>, <entry>
arena cross-judge pool: <entry>, <entry>, <entry>
swarm workers: <entry>
architect runners: <entry>, <entry>, <entry>
interrogate reviewers: <entry>, <entry>, <entry>
6. Confirm
Tell the user the file was written and that it applies the next time a skill delegates, since skills read it then. Re-running this skill updates it.
7. Offer a verification skill (optional)
Check whether the project has a way to drive the real app for proof (a
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, read
../create-verification-skill/SKILL.md
from this skill's directory (the one your harness gave when it loaded this file, else
~/.claude/skills/setup-pstack/
on Claude Code and
~/.agents/skills/setup-pstack/
on Codex) and follow it. On no, move on without pushing.