diff --git a/CHANGELOG.md b/CHANGELOG.md index 18cfb00..4fbab54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ summary: Timeline of guardrail helper changes mirrored from Sweetistics and rela # Changelog +## 2026-09-23: Opus design and review roles +- Use Opus 5.5 for Interrogate at xhigh and optional Claude Autoreview at high; add it to Arena’s cross-judge pool at high, with Claude CLI routing and a 2.1.280 minimum-version check. +- Replace Architect’s Astra low candidate with Opus 5.5 high through `claude -p`; retain GPT-6 Sol high, Fable 5.1 high, and the three-candidate requirement. + ## 2026-09-22: GPT-6 Sol and Luna role upgrades - Require three distinct Architect designs, one per configured runner, before synthesis; verified Sol high, Astra low, and Fable 5.1 high through a complete design-only dry run. - Set Arena runners to Astra medium, GPT-6 Sol high, GPT-5.6 Sol high, Opus 5.5 high, and Fable 5.1 high; route both Claude candidates through `claude -p` and require Claude Code 2.1.280+ for Opus. diff --git a/skills/architect/SKILL.md b/skills/architect/SKILL.md index d9746b9..7e807bb 100644 --- a/skills/architect/SKILL.md +++ b/skills/architect/SKILL.md @@ -29,7 +29,7 @@ Skip Phase A only when the work is genuinely greenfield with no surrounding syst Run the **arena** skill with the design-sketch task and the Phase A grounding artifacts. Pass `references/runner-prompt.md` as each runner's prompt. Each candidate produces a design package shaped per `references/rationale-template.md`. -Use `architect runners` from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise default to one each on `gpt-6-sol` at `high` reasoning, `gpt-6-astra` at `low` reasoning, `claude-fable-5-1` at `high` reasoning. Pass this panel to Arena as the explicit runner list. +Use `architect runners` from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise default to one each on `gpt-6-sol` at `high` reasoning, `claude-opus-5-5` at `high` reasoning, `claude-fable-5-1` at `high` reasoning. Pass this panel to Arena as the explicit runner list. Design it three times. Require three structurally distinct candidates before synthesis, one from each configured Architect runner, even when the first looks sufficient. This is the **exhaust-the-design-space** principle skill made concrete. Whole-shape alternatives, not point fixes inside one shape. diff --git a/skills/arena/SKILL.md b/skills/arena/SKILL.md index 8f7336a..bd3f783 100644 --- a/skills/arena/SKILL.md +++ b/skills/arena/SKILL.md @@ -37,7 +37,7 @@ If a candidate fails to produce output, proceed with N-1 and note the dropout in ## Phase C: Cross-judge -After all Phase B candidates complete, choose one model from the `arena cross-judge pool` in `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise use `gpt-6-astra` at `medium` reasoning, `gpt-6-sol` at `high` reasoning. Prefer a different model family from the parent's. Spawn one judge agent on that model and instruct it not to edit files or change repository state. It sees the rubric and the candidates by path label, scores each criterion, and recommends a base with rationale. It runs in parallel with the parent's reading in Phase D, not with the candidates themselves. Don't spawn the judge while candidates are still writing. +After all Phase B candidates complete, choose one model from the `arena cross-judge pool` in `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise use `gpt-6-astra` at `medium` reasoning, `gpt-6-sol` at `high` reasoning, `claude-opus-5-5` at `high` reasoning. Prefer a different model family from the parent's. Launch one judge on that model using the Codex or Claude transport from Phase B; instruct it not to edit files or change repository state. It sees the rubric and the candidates by path label, scores each criterion, and recommends a base with rationale. It runs in parallel with the parent's reading in Phase D, not with the candidates themselves. Don't spawn the judge while candidates are still writing. ## Phase D: Pick a base diff --git a/skills/autoreview/SKILL.md b/skills/autoreview/SKILL.md index 3275edd..fb81ddd 100644 --- a/skills/autoreview/SKILL.md +++ b/skills/autoreview/SKILL.md @@ -7,7 +7,7 @@ description: "Pre-commit/ship code review: Codex default; optional Claude or Pi. Run the bundled structured review helper as a closeout check. This is code review, not Guardian `auto_review` approval routing. -Codex review is the default when no engine is set. It uses `gpt-6-astra` with `medium` reasoning. Claude is an optional second reviewer and uses `claude-fable-5-1` with `max` reasoning by default. Use standard mode for Codex reviews (`--codex-speed default`); never use fast mode. +Codex review is the default when no engine is set. It uses `gpt-6-astra` with `medium` reasoning. Opus 5.5 requires Claude Code 2.1.280+. Claude is an optional second reviewer and uses `claude-opus-5-5` with `high` reasoning by default. Use standard mode for Codex reviews (`--codex-speed default`); never use fast mode. For user-visible behavior, pair autoreview with `behavior-validator`. Autoreview is source-aware and judges the change bundle; behavior validation is source-blind and judges the running product or tool against a behavior contract. A clean autoreview is not proof that a UI, CLI, API, or generated artifact works from the user's perspective. @@ -268,13 +268,13 @@ Run multiple reviewers against one frozen bundle: Set reviewer models and thinking/effort explicitly: ```bash -"$AUTOREVIEW" --reviewers codex,claude --model codex=gpt-6-astra --thinking codex=medium --model claude=claude-fable-5-1 --thinking claude=max +"$AUTOREVIEW" --reviewers codex,claude --model codex=gpt-6-astra --thinking codex=medium --model claude=claude-opus-5-5 --thinking claude=high ``` Inline syntax is also supported for simple model IDs: ```bash -"$AUTOREVIEW" --reviewers codex:gpt-6-astra:medium,claude:claude-fable-5-1:max +"$AUTOREVIEW" --reviewers codex:gpt-6-astra:medium,claude:claude-opus-5-5:high ``` For models with slashes or extra colons, prefer keyed form: @@ -295,14 +295,14 @@ Recommended model defaults: | Engine | Default model | Source note | | ------------------- | -------------------------------------------------- | ----------------------------------------------------- | | **codex** (default) | `gpt-6-astra` | Primary review model | -| **claude** | `claude-fable-5-1` | Optional independent second reviewer | +| **claude** | `claude-opus-5-5` | Optional independent second reviewer | CLI flags and environment variables override these defaults. Pi does not get a built-in model default because its provider catalog may vary by installation. Droid, Copilot, Cursor, and OpenCode are currently refused. | Engine | Model flag | Example model IDs | Thinking flag | Accepted levels | | ------------------- | -------------------------- | ---------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------- | | **codex** (default) | `codex --model X exec ...` | `gpt-6-astra` | `-c model_reasoning_effort=Y` | `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` | -| **claude** | `claude --model X` | `claude-fable-5-1`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-haiku-4-5` | `--effort Y` | `low`, `medium`, `high`, `xhigh`, `max` | +| **claude** | `claude --model X` | `claude-opus-5-5`, `claude-fable-5-1`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-haiku-4-5` | `--effort Y` | `low`, `medium`, `high`, `xhigh`, `max` | | **droid** | currently refused | Factory model IDs | `-r, --reasoning-effort Y` | `off`, `none`, `low`, `medium`, `high`, `xhigh`, `max` | | **copilot** | currently refused | Copilot model aliases | not supported | n/a | | **pi** | `pi --model X` | `anthropic/claude-sonnet-4`, `openai/gpt-4o` | `--thinking Y` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` | @@ -326,8 +326,8 @@ Examples matching current `main` behavior: "$AUTOREVIEW" --engine codex --codex-config 'service_tier="default"' # Claude Code aliases or full model names, with optional availability fallback -"$AUTOREVIEW" --engine claude --model claude-fable-5-1 --thinking max -"$AUTOREVIEW" --engine claude --model claude-fable-5-1 --fallback-model claude-opus-4-8,claude-sonnet-4-6 +"$AUTOREVIEW" --engine claude --model claude-opus-5-5 --thinking high +"$AUTOREVIEW" --engine claude --model claude-opus-5-5 --fallback-model claude-opus-4-8,claude-sonnet-4-6 # Pi with explicit model and thinking level "$AUTOREVIEW" --engine pi --model anthropic/claude-sonnet-4 --thinking high --pi-bin pi @@ -423,7 +423,7 @@ The helper: - supports `--dry-run`, `--parallel-tests`, `--parallel-tests-shell`, `--prompt`, repo-relative `--prompt-file`, repo-relative `--dataset`, `--no-tools`, `--no-web-search`, repeatable Codex-only safe model/response tuning with `--codex-config key=value`, Codex-only `--codex-speed fast|flex|default`, and commit refs - supports `--stream-engine-output` or `AUTOREVIEW_STREAM_ENGINE_OUTPUT=1` for live engine text while preserving structured validation; Codex and Claude hide tool/file event details, emit compact activity summaries, and report usage at turn completion - supports opt-in review panels with `--panel` / `--reviewers`, plus per-engine `--model`, `--thinking`, and Claude `--fallback-model` -- uses built-in defaults `codex=gpt-6-astra` with `medium` reasoning and optional second reviewer `claude=claude-fable-5-1` with `max` reasoning; honors `AUTOREVIEW_MODEL`, `AUTOREVIEW_THINKING`, `AUTOREVIEW_FALLBACK_MODEL`, and per-engine `AUTOREVIEW__MODEL` / `AUTOREVIEW__THINKING` environment overrides when CLI flags are omitted +- uses built-in defaults `codex=gpt-6-astra` with `medium` reasoning and optional second reviewer `claude=claude-opus-5-5` with `high` reasoning; honors `AUTOREVIEW_MODEL`, `AUTOREVIEW_THINKING`, `AUTOREVIEW_FALLBACK_MODEL`, and per-engine `AUTOREVIEW__MODEL` / `AUTOREVIEW__THINKING` environment overrides when CLI flags are omitted - gives Codex the bundle in an empty workspace with web search available; Claude receives the bundle plus WebSearch by default and optional domain-constrained WebFetch, and Pi receives the bundle with no tools - runs Claude with `--safe-mode` (`v2.1.169+`), `--setting-sources user`, MCP and auto-memory disabled, no filesystem/shell tools, an empty external workspace, and `--fallback-model` when set - refuses Droid, Copilot, Cursor, and OpenCode reviews until their CLIs expose the required project, filesystem, and network isolation diff --git a/skills/autoreview/scripts/autoreview b/skills/autoreview/scripts/autoreview index 693ed00..1ce026f 100755 --- a/skills/autoreview/scripts/autoreview +++ b/skills/autoreview/scripts/autoreview @@ -782,11 +782,11 @@ TEST_ENV_ALLOWED_EXACT = { TEST_ENV_ALLOWED_PREFIXES = ("AUTOREVIEW_FAKE_", "LC_") DEFAULT_MODEL_BY_ENGINE = { "codex": "gpt-6-astra", - "claude": "claude-fable-5-1", + "claude": "claude-opus-5-5", } DEFAULT_THINKING_BY_ENGINE = { "codex": "medium", - "claude": "max", + "claude": "high", } THINKING_LEVELS_BY_ENGINE = { "codex": {"none", "minimal", "low", "medium", "high", "xhigh", "max"}, @@ -799,6 +799,7 @@ THINKING_LEVELS_BY_ENGINE = { } CLAUDE_SAFE_MODE_MIN_VERSION = (2, 1, 169) CLAUDE_FABLE_MIN_VERSION = (2, 1, 170) +CLAUDE_OPUS_55_MIN_VERSION = (2, 1, 280) # Pi's reviewed-repo trust override first appears in the current # @earendil-works/pi-coding-agent 0.79.0 CLI line. Older legacy binaries can # ignore unknown flags, so the Pi engine must fail closed below this floor. @@ -9052,8 +9053,12 @@ def ensure_claude_isolation_supported(args: argparse.Namespace, repo: Path) -> N result = run([claude_bin, "--version"], temp_root, check=False, env=engine_env) selected_models = [args.model, *(getattr(args, "fallback_model", "") or "").split(",")] uses_fable = any(model in {"claude-fable-5", "claude-fable-5-1", "fable"} for model in selected_models) + uses_opus_55 = any(model in {"claude-opus-5-5", "opus"} for model in selected_models) minimum_version = CLAUDE_FABLE_MIN_VERSION if uses_fable else CLAUDE_SAFE_MODE_MIN_VERSION version_reason = "for Claude Fable" if uses_fable else "for --safe-mode" + if uses_opus_55: + minimum_version = CLAUDE_OPUS_55_MIN_VERSION + version_reason = "for Claude Opus 5.5" if result.returncode != 0: raise SystemExit(f"claude engine requires Claude Code >= {format_version(minimum_version)}; --version failed") version = parse_cli_version(result.stdout or result.stderr) @@ -11042,7 +11047,7 @@ def parse_args() -> argparse.Namespace: parser.add_argument( "--model", action="append", - help="Model for all reviewers or engine=model. Repeatable. Defaults: codex=gpt-6-astra, claude=claude-fable-5-1.", + help="Model for all reviewers or engine=model. Repeatable. Defaults: codex=gpt-6-astra, claude=claude-opus-5-5.", ) parser.add_argument("--thinking", action="append", help="Thinking/effort for all reviewers or engine=level. Repeatable. Codex: none, minimal, low, medium, high, xhigh, max. Claude: low, medium, high, xhigh, max. Droid: off, none, low, medium, high. Pi: off, minimal, low, medium, high, xhigh. OpenCode: minimal, low, medium, high, max. Cursor: none.") parser.add_argument( @@ -11497,9 +11502,9 @@ def self_test_config_defaults() -> None: if max_effort.thinking != "max": raise SystemExit("self-test config defaults failed: Codex max thinking should be accepted") default_claude = reviewer_args(reviewer_test_args(engine="claude"))[0] - if default_claude.model != "claude-fable-5-1": + if default_claude.model != "claude-opus-5-5": raise SystemExit(f"self-test config defaults failed: default claude model={default_claude.model!r}") - if default_claude.thinking != "max": + if default_claude.thinking != "high": raise SystemExit(f"self-test config defaults failed: default claude thinking={default_claude.thinking!r}") os.environ["AUTOREVIEW_MODEL"] = "env-global-model" os.environ["AUTOREVIEW_CODEX_MODEL"] = "env-codex-model" diff --git a/skills/autoreview/tests/test_autoreview_hardening.py b/skills/autoreview/tests/test_autoreview_hardening.py index d0863a5..662d34d 100644 --- a/skills/autoreview/tests/test_autoreview_hardening.py +++ b/skills/autoreview/tests/test_autoreview_hardening.py @@ -5291,6 +5291,26 @@ def test_claude_fable_alias_requires_fable_safe_mode_version(self) -> None: ): self.helper["ensure_claude_isolation_supported"](args, repo) + def test_opus_55_requires_current_cli_for_primary_and_fallback(self) -> None: + for model, fallback in [("claude-opus-5-5", None), ("opus", None), ("fable", "claude-opus-5-5")]: + for version, rejected in [("2.1.279", True), ("2.1.280", False)]: + with self.subTest(model=model, fallback=fallback, version=version), tempfile.TemporaryDirectory() as tempdir: + args = argparse.Namespace(claude_bin="claude", model=model, fallback_model=fallback) + def fake_run(command, *_args, **_kwargs): + output = version if "--version" in command else "--safe-mode --setting-sources --strict-mcp-config --disallowedTools --tools" + return subprocess.CompletedProcess(command, 0, output, "") + with mock.patch.dict(self.helper["ensure_claude_isolation_supported"].__globals__, { + "resolve_command": lambda *_args: "/usr/bin/claude", + "safe_engine_env": lambda *_args, **_kwargs: {}, + "safe_temp_root": lambda _repo: Path(tempdir), + "run": fake_run, + }): + if rejected: + with self.assertRaisesRegex(SystemExit, "2.1.280.*Opus 5.5"): + self.helper["ensure_claude_isolation_supported"](args, Path(tempdir)) + else: + self.helper["ensure_claude_isolation_supported"](args, Path(tempdir)) + def test_claude_runs_outside_repo_with_auto_memory_disabled(self) -> None: args = argparse.Namespace( claude_allowed_tools=None, diff --git a/skills/interrogate/SKILL.md b/skills/interrogate/SKILL.md index 54e8663..d1ab95c 100644 --- a/skills/interrogate/SKILL.md +++ b/skills/interrogate/SKILL.md @@ -32,13 +32,13 @@ Write one clear paragraph. If you're unsure about the intent, ask the user befor ## Step 3, Spawn Reviewers -Launch all reviewers as Codex collaboration agents. Use the `interrogate reviewers` list from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present, one reviewer per entry, extending or shrinking the Reviewer A/B/C/D labels below to the configured entry count. Otherwise use the table defaults. +Launch Codex reviewers as collaboration agents with their model and reasoning effort. Launch Claude reviewers through `claude -p --model --effort `; Opus 5.5 requires Claude Code 2.1.280+. Use the `interrogate reviewers` list from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present, one reviewer per entry, extending or shrinking the Reviewer A/B/C/D labels below to the configured entry count. Otherwise use the table defaults. | Subagent | Default model | |----------|---------------| | Reviewer A | `gpt-6-astra` at `high` reasoning | | Reviewer B | `gpt-6-sol` at `high` reasoning | -| Reviewer C | `claude -p --model claude-fable-5-1 --effort xhigh` | +| Reviewer C | `claude -p --model claude-opus-5-5 --effort xhigh` | For each reviewer: - `model`: the configured `interrogate reviewers` entry, or the table default with no configured line diff --git a/skills/poteto-mode/references/models.md b/skills/poteto-mode/references/models.md index 26eec69..71b5df4 100644 --- a/skills/poteto-mode/references/models.md +++ b/skills/poteto-mode/references/models.md @@ -25,8 +25,8 @@ One line per role. Delete a line to fall back to the skill default. - reflect tooling: `gpt-6-sol` at `high` - reflect judgment, divergent, synthesizer: `gpt-6-astra` at `medium` - arena runners: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `gpt-5.6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high` -- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high` +- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `high` - swarm workers: `gpt-6-luna` at `high` -- architect runners: `gpt-6-sol` at `high`, `gpt-6-astra` at `low`, `claude-fable-5-1` at `high` -- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-fable-5-1` at `xhigh` +- architect runners: `gpt-6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high` +- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `xhigh` - Comment Sicko: `gpt-6-luna` at `high` diff --git a/skills/setup-pstack/SKILL.md b/skills/setup-pstack/SKILL.md index 420259e..972c1d7 100644 --- a/skills/setup-pstack/SKILL.md +++ b/skills/setup-pstack/SKILL.md @@ -68,10 +68,10 @@ One line per role. Delete a line to fall back to the skill default. - reflect tooling: `gpt-6-sol` at `high` - reflect judgment, divergent, synthesizer: `gpt-6-astra` at `medium` - arena runners: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `gpt-5.6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high` -- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high` +- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `high` - swarm workers: `gpt-6-luna` at `high` -- architect runners: `gpt-6-sol` at `high`, `gpt-6-astra` at `low`, `claude-fable-5-1` at `high` -- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-fable-5-1` at `xhigh` +- architect runners: `gpt-6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high` +- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `xhigh` - Comment Sicko: `gpt-6-luna` at `high` ```