Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# CHANGES — applied substitutions

## Unreleased: project model sheets and GPT-6.1 Sol

- `setup-pstack` asks on every run whether to configure the global sheet or a project sheet. A project sheet lives at `<project root>/.claude/pstack-models.md` (Claude Code) or `<project root>/.codex/pstack-models.md` (Codex), starts from the global assignments, and is listed in `.git/info/exclude` so it never reaches a commit. It needs no CLAUDE.md include and no AGENTS.md block.
- `provider-dispatch.md` gains a "Sheet scope" section: the parent reads the project path once before dispatch, an existing project sheet replaces the global sheet whole, and a project without one uses the global sheet. The two are never merged per role.
- Add the `sol-6.1` stock family, `codex:gpt-6.1-sol@high`, which Codex CLI 0.160.0 lists as its latest coding model. It takes the first-run `feature, refactoring`, `bug-fix`, `perf-issue`, and `hillclimb` roles. `sol-6` stays selectable; existing sheets keep their rows until setup reassigns them.
- `architect runners` gets its own first-run default, `codex:gpt-6-astra@high, claude:fable@max`, from a new "Default architect panel" line. The other three panel roles keep the four-lane default.
- The matrix test and the static invariant check cover the new row, the architect line, and the scope contract.

## Unreleased: pstack-flex becomes its own distribution

- The marketplace is now `pstack-flex` (was `open-pstack`) in both the Claude Code and Codex marketplace files. Install with `pstack@pstack-flex`. The plugin keeps the name `pstack`, so skill names such as `pstack:poteto-mode` are unchanged. Manifests, package names, and docs point at `thisguymartin/pstack-flex`; attribution to open-pstack, pstack-claude, and Cursor pstack stays in README and NOTICE.
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ Every pstack role (who writes code, who explores, who sits on a review panel) ma
| `fable` | `claude:fable@max` | Claude Code login | judgment, prose, explanation, hardest tasks, panels |
| `opus` | `claude:opus@max` | Claude Code login | panels |
| `astra` | `codex:gpt-6-astra@high` | Codex (ChatGPT) login | panels |
| `sol-6` | `codex:gpt-6-sol@high` | Codex (ChatGPT) login | feature, refactoring, bug-fix, perf-issue, hillclimb |
| `sol-6.1` | `codex:gpt-6.1-sol@high` | Codex (ChatGPT) login | feature, refactoring, bug-fix, perf-issue, hillclimb |
| `sol-6` | `codex:gpt-6-sol@high` | Codex (ChatGPT) login | none; selectable |
| `luna` | `codex:gpt-6-luna@high` | Codex (ChatGPT) login | how explorer, swarm workers |
| `sol` | `codex:gpt-5.6-sol@max` | Codex (ChatGPT) login | none; selectable |
| `grok` | `grok:grok-4.7@xhigh` | Grok CLI login | panels |
Expand All @@ -48,7 +49,7 @@ Every pstack role (who writes code, who explores, who sits on a review panel) ma
| `minimax` | `minimax:MiniMax-M3@high` | `MINIMAX_API_KEY` | none; selectable |
| `minimax-preview` | `minimax:MiniMax-M3.1-Flash-Preview@high` | `MINIMAX_API_KEY` (Token Plan) | none; selectable |

The default review panel is `claude:fable@max, codex:gpt-6-astra@high, grok:grok-4.7@xhigh, claude:opus@max`: four lanes across three providers. Any family can take any role. Panels must span at least two providers, and two models from one provider count as one, because the adversarial signal comes from model diversity.
The default review panel is `claude:fable@max, codex:gpt-6-astra@high, grok:grok-4.7@xhigh, claude:opus@max`: four lanes across three providers. Architect sketches default to `codex:gpt-6-astra@high, claude:fable@max`. Any family can take any role. Panels must span at least two providers, and two models from one provider count as one, because the adversarial signal comes from model diversity.

The DeepSeek and MiniMax lanes run the stock `claude` binary against the lab's Anthropic-compatible endpoint with that lab's key, in an isolated config directory, with inherited Anthropic routing stripped. A lane refuses to start if it finds a claude.ai login in that directory, so a subscription credential can never reach a third-party endpoint. Their receipts keep real token usage but set `costUsd` to null (Claude Code prices at Anthropic rates); the price table is in [docs/LANES.md](docs/LANES.md). Anthropic does not support pointing Claude Code at non-Anthropic endpoints; use synthetic data for gateway testing and keep keys in your local environment.

Expand Down Expand Up @@ -120,7 +121,7 @@ Use pstack:setup-pstack to configure pstack.

Setup is assignment-first. It shows the role map, asks which roles to change, asks one effort per assigned family, probes only those families with a real one-turn run, and writes nothing until every probe passes and you confirm. A fresh run proposes the defaults in the table above. An existing sheet keeps its assignments until you change a named role.

The sheet lives at `~/.claude/pstack-models.md` (Claude Code) or `~/.codex/pstack-models.md` (Codex). It is global, not per project. Change it by rerunning setup rather than editing it by hand, so every choice is probed before it is saved.
Setup first asks which scope to configure. The global sheet lives at `~/.claude/pstack-models.md` (Claude Code) or `~/.codex/pstack-models.md` (Codex). A project sheet lives at `.claude/pstack-models.md` or `.codex/pstack-models.md` in the repository root. It replaces the global sheet for that project, stays out of git through `.git/info/exclude`, and starts from your global assignments. A project without one uses the global sheet; delete the project sheet to go back. Change either sheet by rerunning setup rather than editing it by hand, so every choice is probed before it is saved.

A model sheet from an earlier release keeps its panel. To take the new defaults, delete those role lines and run setup again; setup fills missing roles from the defaults. A `grok:grok-4.6` entry keeps running until the next setup run asks you to replace it.

Expand Down
4 changes: 2 additions & 2 deletions UPSTREAM-FLEX.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ All flex changes are additive and live in port-owned files so upstream merges st

- `plugins/pstack/skills/poteto-mode/scripts/runner/flex-providers.ts` and `flex-providers.test.ts` (new)
- Gateway-provider hooks in `runner/{types,commands,run,parse-output,cli}.ts` and their tests
- The three GPT-6 rows in the stock model matrix, the "Default panel" section, the "Flex model matrix" section, and the route-table columns in `references/provider-dispatch.md`
- The four GPT-6 rows in the stock model matrix, the "Default panel", "Default architect panel", and "Sheet scope" sections, the "Flex model matrix" section, and the route-table columns in `references/provider-dispatch.md`
- The first-run sheet in `skills/setup-pstack/SKILL.md` and the default descriptors named in `arena`, `architect`, `interrogate`, `how`, `swarm`, and the `feature`, `refactoring`, `bug-fix`, `perf-issue`, and `hillclimb` playbooks
- The assignment-first restructure of `skills/setup-pstack/SKILL.md`
- The assignment-first restructure of `skills/setup-pstack/SKILL.md`, and its project-or-global scope question, project sheet paths, and `.git/info/exclude` write
- `docs/LANES.md`, this file, the README fork section, and the NOTICE/LICENSE/CHANGES additions
- `plugins/pstack/hooks/session-start-context.md`, which the fork rewrote from open-pstack's auto-fire mandate into an opt-in gate, and the docs lines that describe it
- The `intake` and `diff-behavior` skills: `plugins/pstack/skills/intake/` and `plugins/pstack/skills/diff-behavior/`. Upstream has no equivalent, so they never conflict.
Expand Down
2 changes: 1 addition & 1 deletion UPSTREAM.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ The table above is the current Cursor sync point. Open Pstack 1.5.0 imports this

- Commits `799151d` and `6fecddb` add and relocate `make-bot-ui`. It depends on Cursor routines, webhook events, and UI primitives that Claude Code and Codex do not share.
- Four `disable-model-invocation: true` lines from `73f8be4` are not applied to `how`, `why`, `unslop`, or `typescript-best-practices`. Poteto-mode invokes those skills by name, and the flag blocks that route on Claude Code.
- The default-model hunks for `bug-fix`, `perf-issue`, and `hillclimb` from `23a56e2`, `889ec4b`, and `70b2dc8` are not applied. Those frequent code-writing roles stay on a Codex model (`codex:gpt-6-sol@high` in pstack-flex).
- The default-model hunks for `bug-fix`, `perf-issue`, and `hillclimb` from `23a56e2`, `889ec4b`, and `70b2dc8` are not applied. Those frequent code-writing roles stay on a Codex model (`codex:gpt-6.1-sol@high` in pstack-flex).
- `5bf2b15`'s setup budget question, its `# budget` line, and its step down to a lower detected effort are not applied. Setup already asks one requested effort per assigned family, and the step-down would silently lower a requested effort.
- `12d587d`'s rule that reruns a rejected configured entry on its family default or the closest valid slug is not applied. An unavailable model stays a named dropout per `provider-dispatch.md`.
- The expected-runtime column in `70b2dc8`'s `children.tsv` and its expected-runtime stuck test are not applied. A lane is stuck only on affirmative failure evidence.
Expand Down
11 changes: 6 additions & 5 deletions docs/LANES.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,23 @@ Prices and endpoints below were verified 2026-09-25 and drift. Re-verify against

| Kind | Lanes | Auth | Billing | Route |
| --- | --- | --- | --- | --- |
| Subscription | `claude:fable`, `claude:opus`, `codex:gpt-6-astra`, `codex:gpt-6-sol`, `codex:gpt-6-luna`, `codex:gpt-5.6-sol`, `grok:grok-4.7` | each CLI's own login | that CLI's plan | native or external per the route table |
| Subscription | `claude:fable`, `claude:opus`, `codex:gpt-6-astra`, `codex:gpt-6.1-sol`, `codex:gpt-6-sol`, `codex:gpt-6-luna`, `codex:gpt-5.6-sol`, `grok:grok-4.7` | each CLI's own login | that CLI's plan | native or external per the route table |
| Gateway (flex) | DeepSeek Flash / V4 Pro; MiniMax M3 / M3.1 Flash Preview | API key in the environment | provider billing; preview requires Token Plan | always the external runner |

A gateway lane is the stock `claude` binary env-pointed at the lab's Anthropic-compatible endpoint. There is no custom agent loop and no separate harness: the same runner that spawns Codex and Grok lanes spawns gateway lanes with injected environment. Both labs document this Claude Code setup themselves (DeepSeek: `deepseek-ai/awesome-deepseek-agent`, `docs/claude_code.md`; MiniMax: platform.minimax.io, Claude Code guide).

## GPT-6 Codex families

Three stock Codex families carry the first-run defaults. They use the same ChatGPT login as `codex:gpt-5.6-sol`:
Three of the four stock GPT-6 Codex families carry the first-run defaults. They use the same ChatGPT login as `codex:gpt-5.6-sol`:

| Family | Descriptor at default requested effort | First-run roles | Codex's own description |
| --- | --- | --- | --- |
| astra | `codex:gpt-6-astra@high` | every panel (`arena runners`, `arena cross-judge pool`, `architect runners`, `interrogate reviewers`) | Frontier tier for the most demanding work |
| sol-6 | `codex:gpt-6-sol@high` | `feature, refactoring`, `bug-fix`, `perf-issue`, `hillclimb` | Coding and everyday workhorse |
| astra | `codex:gpt-6-astra@high` | every panel (`arena runners`, `arena cross-judge pool`, `interrogate reviewers`) and `architect runners`, where it pairs with Fable | Frontier tier for the most demanding work |
| sol-6.1 | `codex:gpt-6.1-sol@high` | `feature, refactoring`, `bug-fix`, `perf-issue`, `hillclimb` | Latest workhorse model for coding and everyday work |
| sol-6 | `codex:gpt-6-sol@high` | none; selectable | Previous generation workhorse model |
| luna | `codex:gpt-6-luna@high` | `how explorer`, `swarm workers` | Fast, low-cost tier for easier tasks |

A fresh `/setup-pstack` run proposes these. An existing sheet keeps its assignments until you change a named role in setup; `codex:gpt-5.6-sol` remains a selectable family for that. The `sol-6` family is separate from the `sol` family, so each keeps its own effort. All Codex families count as one provider for panel diversity, so Astra plus GPT-6 Sol does not satisfy the two-provider rule; the default panel spans Claude, Codex, and Grok. The route matches Sol: native `spawn_agent` in a Codex parent, and the external runner (`codex exec`) in a Claude Code parent. Codex also lists an `ultra` effort for Astra and GPT-6 Sol. It is outside the pstack effort universe and is not selectable. The descriptions and effort lists come from the Codex CLI 0.157.1 model list, checked 2026-09-27.
A fresh `/setup-pstack` run proposes these. An existing sheet keeps its assignments until you change a named role in setup; `codex:gpt-5.6-sol` remains a selectable family for that. The `sol-6.1`, `sol-6`, and `sol` families are separate, so each keeps its own effort. All Codex families count as one provider for panel diversity, so Astra plus GPT-6 Sol does not satisfy the two-provider rule; the default panel spans Claude, Codex, and Grok. The route matches Sol: native `spawn_agent` in a Codex parent, and the external runner (`codex exec`) in a Claude Code parent. Codex also lists an `ultra` effort for Astra, GPT-6.1 Sol, and GPT-6 Sol. It is outside the pstack effort universe and is not selectable. The descriptions and effort lists come from the Codex CLI 0.160.0 model list, checked 2026-10-04.

## Multiple models per provider

Expand Down
8 changes: 4 additions & 4 deletions docs/USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,11 @@ Daily flow: `pstack-keys -> claude -> /pstack:poteto-mode`. Alternatives, the th

Setup is assignment-first: pick which roles run on which families, answer one effort question per **assigned** family, and only assigned families get probed. Unassigned families are skipped, not errors. Every probe is a real one-turn run — a failed probe writes nothing. Three configurations that make sense:

**A. Full frontier** (Claude + ChatGPT + Grok subs) — accept the defaults. GPT-6 Sol writes code, Luna explores and verifies, and the panel spans three providers:
**A. Full frontier** (Claude + ChatGPT + Grok subs) — accept the defaults. GPT-6.1 Sol writes code, Luna explores and verifies, and the panel spans three providers:

```text
feature, refactoring: codex:gpt-6-sol@high
bug-fix: codex:gpt-6-sol@high
feature, refactoring: codex:gpt-6.1-sol@high
bug-fix: codex:gpt-6.1-sol@high
how explorer: codex:gpt-6-luna@high
swarm workers: codex:gpt-6-luna@high
arena runners: claude:fable@max, codex:gpt-6-astra@high, grok:grok-4.7@xhigh, claude:opus@max
Expand Down Expand Up @@ -244,7 +244,7 @@ pstack's side is the lane journal. While `~/.pstack-flex/lanes/` exists, `pstack

## The GPT-6 Codex models

`astra` (`codex:gpt-6-astra@high`), `sol-6` (`codex:gpt-6-sol@high`), and `luna` (`codex:gpt-6-luna@high`) are stock families and the first-run defaults: Astra on every panel, GPT-6 Sol on the solo code-writing roles, Luna on exploration and swarm work. They need only your Codex login. Each gets its own effort question and live probe. See [GPT-6 Codex families](LANES.md#gpt-6-codex-families).
`astra` (`codex:gpt-6-astra@high`), `sol-6.1` (`codex:gpt-6.1-sol@high`), and `luna` (`codex:gpt-6-luna@high`) are stock families and the first-run defaults: Astra on every panel and, with Fable, on architect sketches; GPT-6.1 Sol on the solo code-writing roles; Luna on exploration and swarm work. They need only your Codex login. Each gets its own effort question and live probe. See [GPT-6 Codex families](LANES.md#gpt-6-codex-families).

A sheet written before this release keeps its assignments. To move a role, run `/setup-pstack` and name it; every role you do not change keeps its descriptor, and `codex:gpt-5.6-sol` stays selectable. For example, this row keeps GPT-5.6 Sol on bug fixes while the rest of the sheet takes the new defaults:

Expand Down
Loading
Loading