--- name: setup-pstack description: Configure which models pstack uses per role and at what reasoning budget. Detects your available models and writes an always-applied rule that overrides the skill defaults. Use for /setup-pstack, "configure pstack models", "pstack budget", or changing pstack's model choices. --- # Setup pstack Write `~/.copilot/instructions/pstack-models.instructions.md` with ` ()` entries for separate task `model` and `reasoning_effort` fields. ## Steps ### 1. Detect available models Enumerate the model slugs you can pass to a `task` subagent in this session. That is the dependable source. If Cursor also exposes a models API or CLI that lists the user's entitled models, prefer it for completeness. If you cannot detect any, ask the user to paste the slugs they have access to. 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. ### 2. Load current state The default role-to-model mapping is the rule shape shown in step 5 below. If `~/.copilot/instructions/pstack-models.instructions.md` already exists, read its `# budget` and split each ` ()` role value into `model` and `reasoning_effort` choices. Otherwise start from those defaults. A line whose role is not in step 5, such as `how critics`, is from a retired role. Drop it. ### 3. Budget, map, and confirm **(a) Ask for a budget.** Prefer ask_user over free text. Offer these four options with these exact labels, and name the current budget when the rule records one. - `unlimited — keep max` - `large — xhigh reasoning` - `medium — high reasoning` - `small — medium reasoning` **(b) Apply it.** Start from the skill defaults. Keep any role changed by family, list, or alias on re-runs. Record real entries as ` ()`. `unlimited` keeps their effort. `large`, `medium`, and `small` set every entry's effort, including panel entries, to `xhigh`, `high`, or `medium`. Cap it at each model's maximum (`xhigh` for `grok-4.7`, `high` for Gemini). If the model is unavailable, choose a detected model in the same family with the highest effort at or below the target. Otherwise mark the role for a choice. Keep `inherit-parent` and `auto` unchanged. For example, `small` uses `claude-opus-5.5 (medium)` and `grok-4.7 (medium)`. **(c) Show the roles and confirm.** Show every role with its model, marking any real slug 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 `inherit-parent` and `auto` (both mean: this role runs on the parent chat model, which is how Auto users stay on Auto) as the options. Prefer ask_user 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. ### 4. Validate Every real slug written must be in the detected set. `inherit-parent` and `auto` always pass. If a chosen real slug is not available, stop and ask again. ### 5. Write the rule Write `~/.copilot/instructions/pstack-models.instructions.md` with `alwaysApply: true` and a `# budget` line with the chosen label and target effort. Use poteto-mode's role labels and ` ()` entries that supply separate `model` and `reasoning_effort` task fields. Overwrite the file so re-runs keep the same output. Shape: ``` --- description: pstack per-role model choices (overrides skill defaults) alwaysApply: true --- # pstack model configuration. One line per role. Delete a line to fall back to the skill default. # Each value is (): pass the model as the task tool's model and the value in parentheses as reasoning_effort. inherit-parent or auto: omit both. # `inherit-parent` or `auto` uses the parent chat model. Omit both `model` and `reasoning_effort`. Alias entries in a panel list still count toward its fan-out. # budget: unlimited (max) feature, refactoring: grok-4.7 (xhigh) bug-fix: grok-4.7 (xhigh) perf-issue: grok-4.7 (xhigh) hillclimb: grok-4.7 (xhigh) judgment and prose: claude-opus-5.5 (max) hardest tasks: claude-opus-5.5 (max) how explorer: grok-4.7 (xhigh) how explainer: claude-opus-5.5 (max) why investigators: grok-4.7 (xhigh) why synthesizer: claude-opus-5.5 (max) reflect tooling: gpt-5.6-sol (max) reflect judgment, divergent, synthesizer: claude-opus-5.5 (max) arena runners: claude-opus-5.5 (max), gpt-5.6-sol (max), grok-4.7 (xhigh) arena cross-judge pool: claude-opus-5.5 (max), gpt-5.6-sol (max), grok-4.7 (xhigh) swarm workers: grok-4.7 (xhigh) architect runners: claude-opus-5.5 (max), gpt-5.6-sol (max), grok-4.7 (xhigh) interrogate reviewers: claude-opus-5.5 (max), gpt-5.6-sol (max), grok-4.7 (xhigh) ``` ### 6. Confirm Tell the user the rule was written and that it applies to new sessions. 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 `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` (resolves wherever pstack is installed: workspace, user, or plugin). On no, move on without pushing.